From 1e6775a63c0d3011955fc607c4291de06ff8e0c2 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 25 Apr 2025 10:54:24 +0800
Subject: [PATCH] feat(mall): 添加活动报名列表导出功能

---
 src/main/resources/mapper/modules/HappyActivityOptionMapper.xml                                 |    5 +-
 src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java                    |    6 +++
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java               |   15 +++++++
 src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java                       |    3 +
 src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityCategoryController.java |   49 ++++++++++++++++++++++++
 src/main/resources/templates/febs/views/modules/votesActivity/optionList.html                   |    2 
 src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java                               |    2 
 src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java                               |    3 +
 8 files changed, 81 insertions(+), 4 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityCategoryController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityCategoryController.java
index 825c909..aec3b58 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityCategoryController.java
+++ b/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);
+    }
+
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
index 123c059..112e20a 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
+++ b/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);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java
index 94be14e..037fa1e 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java
+++ b/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);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java
index e1dddd9..af8d1dc 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java
+++ b/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);
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
index f42ac00..13ca39c 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
+++ b/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){
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java
index 3e296ba..b4d59b0 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java
+++ b/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;
 
diff --git a/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml b/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
index 5a464a5..50a1976 100644
--- a/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
+++ b/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}
                     )
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/optionList.html b/src/main/resources/templates/febs/views/modules/votesActivity/optionList.html
index 52783e3..3d9b06e 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/optionList.html
+++ b/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 () {

--
Gitblit v1.9.1