Administrator
8 days ago 1e6775a63c0d3011955fc607c4291de06ff8e0c2
feat(mall): 添加活动报名列表导出功能

- 新增 getVoteOptionListForExport 方法用于获取导出数据
- 实现导出功能的控制器方法 exportOptionList
- 更新前端导出链接
- 优化查询参数处理
8 files modified
85 ■■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityCategoryController.java 49 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java 15 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java 3 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/HappyActivityOptionMapper.xml 5 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/votesActivity/optionList.html 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityCategoryController.java
@@ -5,19 +5,31 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.common.utils.excl.ExcelSheetPO;
import cc.mrbird.febs.common.utils.excl.ExcelUtil;
import cc.mrbird.febs.common.utils.excl.ExcelVersion;
import cc.mrbird.febs.common.utils.excl.ResponseHeadUtil;
import cc.mrbird.febs.mall.dto.AdminHappyActivityCategoryDto;
import cc.mrbird.febs.mall.dto.activity.*;
import cc.mrbird.febs.mall.entity.HappyActivity;
import cc.mrbird.febs.mall.entity.HappyActivityOption;
import cc.mrbird.febs.mall.service.IAdminHappyActivityService;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Slf4j
@@ -243,4 +255,41 @@
        return adminHappyActivityService.activityOrderDel(id);
    }
    @SneakyThrows
    @GetMapping("/exportOptionList")
    public void exportOptionList(@RequestParam Map<String, String> params, HttpServletResponse response) {
        List<ExcelSheetPO> res = new ArrayList<>();
        ExcelSheetPO orderSheet = new ExcelSheetPO();
        String title = "报名列表";
        orderSheet.setTitle(title);
        String[] header = {"序号", "姓名", "联系方式", "兴趣爱好","家庭住址","地区","是否签约mcn机构", "备注"};
        orderSheet.setHeaders(header);
        List<HappyActivityOption> dataList = adminHappyActivityService.getVoteOptionListForExport(params);
        List<List<Object>> list = new ArrayList<>();
        if (dataList.size() > 0) {
            int i = 0;
            for (HappyActivityOption item : dataList) {
                i++;
                List<Object> temp = new ArrayList<>();
                temp.add(i);
                temp.add(item.getOptionName());
                temp.add(item.getMobilePhone());
                temp.add(item.getHobby());
                temp.add(item.getAddress());
                temp.add(item.getProvince()+item.getCity());
                temp.add(item.getMcnState() == 1 ?"是":"否");
                temp.add(item.getDescription());
                list.add(temp);
            }
        }
        orderSheet.setDataList(list);
        res.add(orderSheet);
        response = ResponseHeadUtil.setExcelHead(response);
        response.setHeader("Content-Disposition",
                "attachment;filename=" + URLEncoder.encode(title + DateUtil.format(new Date(), "yyyyMMDDHHmmss") + ".xlsx".trim(), "UTF-8"));
        OutputStream os = null;
        os = response.getOutputStream();
        ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, res, os, false);
    }
}
src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
@@ -26,5 +26,5 @@
    Page<HappyActivityOrder> selectOrderInPage(Page<HappyActivityOrder> page, @Param("record")AdminHappyActivityOrderDto dto);
    Page<ApiActivityOptionListVo> getVoteOptionRecordInPage(Page<ApiActivityOptionListVo> page, ApiVoteOptionRecordInPageDto dto);
    Page<ApiActivityOptionListVo> getVoteOptionRecordInPage(Page<ApiActivityOptionListVo> page, @Param("record")ApiVoteOptionRecordInPageDto dto);
}
src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java
@@ -11,6 +11,7 @@
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
public interface IAdminHappyActivityService extends IService<HappyActivity>{
@@ -56,4 +57,6 @@
    FebsResponse checkOrder(AdminHappyActivityCheckOrderDto dto);
    FebsResponse activityOrderDel(Long id);
    List<HappyActivityOption> getVoteOptionListForExport(Map<String, String> params);
}
src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java
@@ -400,4 +400,19 @@
        return new FebsResponse().success().message("操作成功");
    }
    @Override
    public List<HappyActivityOption> getVoteOptionListForExport(Map<String, String> params) {
        LambdaQueryWrapper<HappyActivityOption> queryWrapper = new LambdaQueryWrapper<>();
        if(ObjectUtil.isNotEmpty(params.get("activityId"))){
            queryWrapper.eq(HappyActivityOption::getActivityId, Long.valueOf(params.get("activityId")));
        }
        if(ObjectUtil.isNotEmpty(params.get("audit"))){
            queryWrapper.eq(HappyActivityOption::getState, Integer.valueOf(params.get("state")));
        }
        if(ObjectUtil.isNotEmpty(params.get("beautyName"))){
            queryWrapper.like(HappyActivityOption::getOptionName, params.get("optionName"));
        }
        return happyActivityOptionMapper.selectList(queryWrapper);
    }
}
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
@@ -426,6 +426,12 @@
        if (ObjectUtil.isEmpty(happyActivity)) {
            throw new FebsException("活动不存在");
        }
        if (StateUpDownEnum.ACTIVITY_STATE_NOT_START.getCode() == happyActivity.getState()) {
            throw new FebsException("活动尚未开始");
        }
        if (StateUpDownEnum.ACTIVITY_STATE_END.getCode() == happyActivity.getState()) {
            throw new FebsException("活动已结束");
        }
        Integer joinCnt = happyActivity.getJoinCnt();
        if(joinCnt < numCnt){
src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java
@@ -11,6 +11,9 @@
    @ApiModelProperty(value = "选项ID")
    private Long id;
    @ApiModelProperty(value = "选项编号")
    private String orderCnt;
    @ApiModelProperty(value = "选项名称")
    private String optionName;
src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
@@ -52,6 +52,7 @@
    <select id="getVoteOptionInPage" resultType="cc.mrbird.febs.mall.vo.ApiActivityOptionListVo">
        select
            a.id as id,
            a.order_cnt as orderCnt,
            a.option_name as optionName,
            a.image as image,
            a.likes_cnt as likesCnt
@@ -63,7 +64,7 @@
            <if test="record != null">
                <if test="record.query != null and record.query != ''">
                    and (
                    a.name like CONCAT('%', CONCAT(#{record.query}, '%'))
                    a.option_name like CONCAT('%', CONCAT(#{record.query}, '%'))
                    or
                    a.order_cnt = #{record.query}
                    )
@@ -114,7 +115,7 @@
            <if test="record != null">
                <if test="record.query != null and record.query != ''">
                    and (
                    a.name like CONCAT('%', CONCAT(#{record.query}, '%'))
                    a.option_name like CONCAT('%', CONCAT(#{record.query}, '%'))
                    or
                    a.order_cnt = #{record.query}
                    )
src/main/resources/templates/febs/views/modules/votesActivity/optionList.html
@@ -222,7 +222,7 @@
            var params = getQueryParams();
            var queryString = Object.keys(params).map(key => `${key}=${encodeURIComponent(params[key])}`).join('&');
            window.location.href = ctx + 'admin/votesOption/exportOptionList?' + queryString;
            window.location.href = ctx + 'admin/happyActivity/exportOptionList?' + queryString;
        });
        // 刷新按钮
        $reset.on('click', function () {