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