From 03bd93bf72ea24c2134c08bff69a3671202759ff Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 15 Sep 2025 13:48:44 +0800
Subject: [PATCH] feat(mall): 优化活动订单列表接口和导出功能

---
 src/main/java/cc/mrbird/febs/mall/vo/activity/AdminHappyActivityOrderItemVo.java                |   36 +++++++++
 src/main/resources/mapper/modules/HappyActivityOptionMapper.xml                                 |   30 +++++++
 src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java                    |    1 
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java               |   86 +++++++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java                       |    5 +
 src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityCategoryController.java |   24 +++++-
 src/main/resources/templates/febs/views/modules/votesActivity/orderList.html                    |    7 +
 src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java                               |    4 +
 8 files changed, 187 insertions(+), 6 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 cc6d996..d0276ef 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
@@ -18,6 +18,7 @@
 import cc.mrbird.febs.mall.entity.HappyActivityOrder;
 import cc.mrbird.febs.mall.service.IAdminHappyActivityService;
 import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderCheckVo;
+import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderItemVo;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -242,6 +243,17 @@
     }
 
     /**
+     * 订单
+     * @return
+     */
+    @GetMapping("activityOrderListV2")
+    public FebsResponse activityOrderListV2(AdminHappyActivityOrderDto dto, QueryRequest request) {
+
+        Map<String, Object> data = getDataTable(adminHappyActivityService.activityOrderListV2(dto, request));
+        return new FebsResponse().success().data(data);
+    }
+
+    /**
      * 订单-手动核销
      */
     @PostMapping("checkOrder")
@@ -334,18 +346,22 @@
         String title = happyActivity.getName() + "的订单";
         orderSheet.setTitle(title);
 
-        String[] header = {"序号","用户", "编号", "单价", "数量","总价","使用状态", "支付方式"};
+        String[] header = {"序号","用户", "报名人", "报名电话", "报名地址", "编号", "单价", "数量","总价","使用状态", "支付方式"};
         orderSheet.setHeaders(header);
 
-        List<HappyActivityOrder> orderListForExport = adminHappyActivityService.getOrderListForExport(params);
+//        List<HappyActivityOrder> orderListForExport = adminHappyActivityService.getOrderListForExport(params);
+        List<AdminHappyActivityOrderItemVo> orderListForExport = adminHappyActivityService.getOrderListForExportV2(params);
         List<List<Object>> list = new ArrayList<>();
         if (orderListForExport.size() > 0) {
             int i = 0;
-            for (HappyActivityOrder item : orderListForExport) {
+            for (AdminHappyActivityOrderItemVo item : orderListForExport) {
                 i++;
                 List<Object> temp = new ArrayList<>();
                 temp.add(i);
-                temp.add(item.getName());
+                temp.add(item.getMemberName());
+                temp.add(item.getConnectName());
+                temp.add(item.getConnectPhone());
+                temp.add(item.getConnectAddress());
                 temp.add(item.getOrderNo());
                 temp.add(item.getPrice());
                 temp.add(item.getNumCnt());
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 49564c7..ab882d5 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
@@ -4,12 +4,14 @@
 import cc.mrbird.febs.mall.entity.HappyActivity;
 import cc.mrbird.febs.mall.dto.ApiActivityInfoDto;
 import cc.mrbird.febs.mall.entity.HappyActivityOrder;
+import cc.mrbird.febs.mall.entity.HappyActivityOrderItem;
 import cc.mrbird.febs.mall.vo.ApiActivityInfoVo;
 import cc.mrbird.febs.mall.dto.ApiVoteRecordInPageDto;
 import cc.mrbird.febs.mall.vo.ApiActivityOptionListVo;
 import cc.mrbird.febs.mall.vo.ApiVoteRecordInPageVo;
 import cc.mrbird.febs.mall.vo.activity.AdminActivityCommentVo;
 import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderCheckVo;
+import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderItemVo;
 import cc.mrbird.febs.mall.vo.activity.ApiActivityCommentVo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -32,6 +34,8 @@
 
     Page<HappyActivityOrder> selectOrderInPage(Page<HappyActivityOrder> page, @Param("record")AdminHappyActivityOrderDto dto);
 
+    Page<AdminHappyActivityOrderItemVo> selectOrderItemInPage(Page<AdminHappyActivityOrderItemVo> page, @Param("record")AdminHappyActivityOrderDto dto);
+
     Page<ApiActivityOptionListVo> getVoteOptionRecordInPage(Page<ApiActivityOptionListVo> page, @Param("record")ApiVoteOptionRecordInPageDto dto);
 
     List<ApiActivityCommentVo> selectActivityCommentPage(Page<ApiActivityCommentVo> page, @Param("record")ApiActivityCommentDto 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 3b4041c..ca16cd4 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java
@@ -7,6 +7,7 @@
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.vo.activity.AdminActivityCommentVo;
 import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderCheckVo;
+import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderItemVo;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -56,6 +57,8 @@
 
     IPage<HappyActivityOrder> activityOrderList(AdminHappyActivityOrderDto dto, QueryRequest request);
 
+    IPage<AdminHappyActivityOrderItemVo> activityOrderListV2(AdminHappyActivityOrderDto dto, QueryRequest request);
+
     FebsResponse checkOrder(List<Long> dto);
 
     FebsResponse activityOrderDel(Long id);
@@ -68,6 +71,8 @@
 
     List<HappyActivityOrder> getOrderListForExport(Map<String, String> params);
 
+    List<AdminHappyActivityOrderItemVo> getOrderListForExportV2(Map<String, String> params);
+
     IPage<AdminHappyActivityOrderCheckVo> activityOrderCheckList(AdminHappyActivityOrderCheckDto dto, QueryRequest request);
 
     FebsResponse checkOrderItem(List<Long> dto);
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 45e798e..eba557d 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
@@ -13,6 +13,7 @@
 import cc.mrbird.febs.mall.vo.AdminMallGoodsCommentVo;
 import cc.mrbird.febs.mall.vo.activity.AdminActivityCommentVo;
 import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderCheckVo;
+import cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderItemVo;
 import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
@@ -42,6 +43,7 @@
     private final HappyActivityOrderMapper happyActivityOrderMapper;
     private final HappyActivityCommentMapper happyActivityCommentMapper;
     private final HappyActivityOrderItemMapper happyActivityOrderItemMapper;
+    private final HappyActivityConnectMapper happyActivityConnectMapper;
     private final HappyFollowMapper happyFollowMapper;
     private final MallMemberMapper mallMemberMapper;
     private final AgentProducer agentProducer;
@@ -378,6 +380,13 @@
     }
 
     @Override
+    public IPage<AdminHappyActivityOrderItemVo> activityOrderListV2(AdminHappyActivityOrderDto dto, QueryRequest request) {
+        Page<AdminHappyActivityOrderItemVo> page = new Page<>(request.getPageNum(), request.getPageSize());
+        Page<AdminHappyActivityOrderItemVo> adminOptionVoIPage = this.baseMapper.selectOrderItemInPage(page, dto);
+        return adminOptionVoIPage;
+    }
+
+    @Override
     public FebsResponse checkOrder(List<Long> ids) {
 
         if (CollUtil.isEmpty(ids)){
@@ -489,6 +498,83 @@
     }
 
     @Override
+    public List<AdminHappyActivityOrderItemVo> getOrderListForExportV2(Map<String, String> params) {
+        List<AdminHappyActivityOrderItemVo> list = new ArrayList<>();
+
+        LambdaQueryWrapper<HappyActivityOrder> queryWrapper = new LambdaQueryWrapper<>();
+        if(ObjectUtil.isNotEmpty(params.get("activityId"))){
+            queryWrapper.eq(HappyActivityOrder::getActivityId, Long.valueOf(params.get("activityId")));
+        }
+        List<Integer> stateList = Arrays.asList(StateUpDownEnum.ORDER_STATE_WAIT_USE.getCode(), StateUpDownEnum.ORDER_STATE_USED.getCode());
+        queryWrapper.in(HappyActivityOrder::getState, stateList);
+        queryWrapper.eq(HappyActivityOrder::getDeleteFlag, StateUpDownEnum.DOWN.getCode());
+        queryWrapper.orderByDesc(HappyActivityOrder::getState);
+        queryWrapper.orderByDesc(HappyActivityOrder::getId);
+        List<HappyActivityOrder> happyActivityOrders = happyActivityOrderMapper.selectList(queryWrapper);
+
+        if(CollUtil.isNotEmpty(happyActivityOrders)){
+
+            Map<Long, HappyActivityOrder> happyActivityOrderMap = happyActivityOrders.stream().collect(Collectors.toMap(HappyActivityOrder::getId, order -> order));
+
+            Set<Long> orderIds = happyActivityOrders.stream().map(HappyActivityOrder::getId).collect(Collectors.toSet());
+            List<HappyActivityOrderItem> happyActivityOrderItems = happyActivityOrderItemMapper.selectList(
+                    new LambdaQueryWrapper<HappyActivityOrderItem>()
+                            .select(HappyActivityOrderItem::getConnectId)
+                            .in(HappyActivityOrderItem::getOrderId, orderIds)
+            );
+            Set<Long> connectIds = happyActivityOrderItems.stream().map(HappyActivityOrderItem::getConnectId).collect(Collectors.toSet());
+            List<HappyActivityConnect> happyActivityConnects = happyActivityConnectMapper.selectList(
+                    new LambdaQueryWrapper<HappyActivityConnect>()
+                            .select(HappyActivityConnect::getId,HappyActivityConnect::getName,HappyActivityConnect::getPhone,HappyActivityConnect::getAddress)
+                            .in(HappyActivityConnect::getId, connectIds)
+            );
+            Map<Long, HappyActivityConnect> happyActivityConnectMap = happyActivityConnects.stream().collect(Collectors.toMap(HappyActivityConnect::getId, happyActivityConnect -> happyActivityConnect));
+
+
+            Set<Long> collect = happyActivityOrders.stream().map(HappyActivityOrder::getMemberId).collect(Collectors.toSet());
+            List<MallMember> mallMembers = mallMemberMapper.selectList(
+                    new LambdaQueryWrapper<MallMember>()
+                            .select(MallMember::getId,MallMember::getName)
+                            .in(MallMember::getId, collect)
+            );
+            Map<Long, MallMember> mallMemberMap = mallMembers.stream().collect(Collectors.toMap(MallMember::getId, mallMember -> mallMember));
+
+            happyActivityOrderItems.forEach(happyActivityOrderItem -> {
+                AdminHappyActivityOrderItemVo vo = new AdminHappyActivityOrderItemVo();
+                HappyActivityConnect happyActivityConnect = happyActivityConnectMap.get(happyActivityOrderItem.getConnectId());
+                vo.setConnectName(happyActivityConnect.getName());
+                vo.setConnectPhone(happyActivityConnect.getPhone());
+                vo.setConnectAddress(happyActivityConnect.getAddress());
+
+                HappyActivityOrder happyActivityOrder = happyActivityOrderMap.get(happyActivityOrderItem.getOrderId());
+                vo.setId(happyActivityOrder.getId());
+                vo.setCreatedTime(happyActivityOrder.getCreatedTime());
+                vo.setMemberId(happyActivityOrder.getMemberId());
+                vo.setActivityId(happyActivityOrder.getActivityId());
+                vo.setPrice(happyActivityOrder.getPrice());
+                vo.setNumCnt(happyActivityOrder.getNumCnt());
+                vo.setAmount(happyActivityOrder.getAmount());
+                vo.setPayState(happyActivityOrder.getPayState());
+                vo.setPayType(happyActivityOrder.getPayType());
+                vo.setPayTime(happyActivityOrder.getPayTime());
+                vo.setDeleteFlag(happyActivityOrder.getDeleteFlag());
+                vo.setOrderNo(happyActivityOrder.getOrderNo());
+                vo.setPayOrderNo(happyActivityOrder.getPayOrderNo());
+                vo.setWxOrderNo(happyActivityOrder.getWxOrderNo());
+                vo.setState(happyActivityOrder.getState());
+                vo.setFailTime(happyActivityOrder.getFailTime());
+                MallMember mallMember = mallMemberMap.get(happyActivityOrderItem.getMemberId());
+                if (ObjectUtil.isNotEmpty(mallMember)){
+                    vo.setMemberName(mallMember.getName());
+                }else{
+                    vo.setMemberName("");
+                }
+            });
+        }
+        return list;
+    }
+
+    @Override
     public IPage<AdminHappyActivityOrderCheckVo> activityOrderCheckList(AdminHappyActivityOrderCheckDto dto, QueryRequest request) {
 
         Page<AdminHappyActivityOrderCheckVo> page = new Page<>(request.getPageNum(), request.getPageSize());
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 90d7ab9..b358c71 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
@@ -508,6 +508,7 @@
     }
 
     @Override
+    @Transactional
     public FebsResponse createOrder(ApiCreateOrderDto dto) {
         Long memberId = LoginUserUtil.getLoginUser().getId();
         if(CollUtil.isEmpty(dto.getConnectIds())){
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/activity/AdminHappyActivityOrderItemVo.java b/src/main/java/cc/mrbird/febs/mall/vo/activity/AdminHappyActivityOrderItemVo.java
new file mode 100644
index 0000000..0f49309
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/activity/AdminHappyActivityOrderItemVo.java
@@ -0,0 +1,36 @@
+package cc.mrbird.febs.mall.vo.activity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+@Data
+public class AdminHappyActivityOrderItemVo {
+
+    private Long id;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+    private Long memberId;
+    private Long activityId;
+    private BigDecimal price;
+    private Integer numCnt;
+    private BigDecimal amount;
+    private Integer payState;
+    private Integer payType;
+    private Date payTime;
+    private Integer deleteFlag;
+    private String orderNo;
+    private String payOrderNo;
+    private String wxOrderNo;
+    private Integer state;
+    private Date failTime;
+
+    private String connectName;
+    private String connectPhone;
+    private String connectAddress;
+
+    private String memberName;//
+    private String activityName;//
+}
diff --git a/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml b/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
index 05101e2..277af56 100644
--- a/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
+++ b/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
@@ -110,6 +110,36 @@
         order by a.id desc
     </select>
 
+    <select id="selectOrderItemInPage" resultType="cc.mrbird.febs.mall.vo.activity.AdminHappyActivityOrderItemVo">
+        select
+                a.*,
+               e.name as connectName,
+               e.phone as connectPhone,
+               e.address as connectAddress,
+               b.name as memberName,
+               c.name as activityName
+        from happy_activity_order_item d
+        left join happy_activity_connect e on e.id = d.connect_id
+        left join happy_activity_order a on a.id = d.order_id
+        left join mall_member b on a.member_id = b.id
+        left join happy_activity c on a.activity_id = c.id
+        <where>
+            and a.DELETE_FLAG = 0
+            <if test="record != null">
+                <if test="record.name != null and record.name != ''">
+                    and b.name like CONCAT('%', CONCAT(#{record.name}, '%'))
+                </if>
+                <if test="record.state != null">
+                    and a.state=#{record.state}
+                </if>
+                <if test="record.activityId != null">
+                    and a.activity_id=#{record.activityId}
+                </if>
+            </if>
+        </where>
+        order by a.id desc
+    </select>
+
 
 
     <select id="getVoteOptionRecordInPage" resultType="cc.mrbird.febs.mall.vo.ApiActivityOptionListVo">
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/orderList.html b/src/main/resources/templates/febs/views/modules/votesActivity/orderList.html
index 48408fe..0c4505b 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/orderList.html
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/orderList.html
@@ -257,16 +257,19 @@
             tableIns = febs.table.init({
                 elem: $view.find('table'),
                 id: 'orderActivityTable',
-                url: ctx + 'admin/happyActivity/activityOrderList',
+                url: ctx + 'admin/happyActivity/activityOrderListV2',
                 toolbar:"#orderActivityToolbar",
                 defaultToolbar:[],
                 cols: [[
                     {type: 'checkbox'},
                     {type: 'numbers', title: '', width: 80},
                     {title: '操作', toolbar: '#orderActivityOption', minWidth: 200, align: 'center'},
-                    {field: 'name', title: '名称', minWidth: 100,align:'center'},
+                    {field: 'memberName', title: '名称', minWidth: 100,align:'center'},
                     {field: 'orderNo', title: '订单编号', minWidth: 100,align:'center'},
                     {field: 'activityName', title: '活动名称', minWidth: 100,align:'center'},
+                    {field: 'connectName', title: '报名人', minWidth: 100,align:'center'},
+                    {field: 'connectPhone', title: '报名电话', minWidth: 100,align:'center'},
+                    {field: 'connectAddress', title: '报名地址', minWidth: 100,align:'center'},
                     {field: 'price', title: '单价', minWidth: 100,align:'center'},
                     {field: 'numCnt', title: '数量', minWidth: 100,align:'center'},
                     {field: 'amount', title: '总价', minWidth: 100,align:'center'},

--
Gitblit v1.9.1