From 8032e6933d3eda1ef701fcb1f70b2a0b2523c8d9 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 24 Apr 2025 11:57:20 +0800
Subject: [PATCH] feat(mall): 添加活动订单相关功能

---
 src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java |   23 ++++
 src/main/resources/mapper/modules/HappyActivityOptionMapper.xml                            |    1 
 src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java               |  103 ++++++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java                        |    5 +
 src/main/java/cc/mrbird/febs/mall/vo/ApiActivityInfoVo.java                                |    3 
 src/main/java/cc/mrbird/febs/mall/vo/activity/ApiActivityOrderListVo.java                  |   50 ++++++++++
 src/main/resources/application-test.yml                                                    |    4 
 src/main/java/cc/mrbird/febs/mall/vo/activity/ApiActivityOrderInfoVo.java                  |   53 ++++++++++
 src/main/java/cc/mrbird/febs/mall/dto/activity/ApiActivityOrderListDto.java                |   20 ++++
 9 files changed, 260 insertions(+), 2 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java
index 57c4265..2483a64 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityOrderController.java
@@ -3,8 +3,11 @@
 import cc.mrbird.febs.common.annotation.Limit;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.*;
+import cc.mrbird.febs.mall.dto.activity.ApiActivityOrderListDto;
 import cc.mrbird.febs.mall.service.HappyActivityService;
 import cc.mrbird.febs.mall.vo.*;
+import cc.mrbird.febs.mall.vo.activity.ApiActivityOrderInfoVo;
+import cc.mrbird.febs.mall.vo.activity.ApiActivityOrderListVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
@@ -82,4 +85,24 @@
         return happyActivityService.payOrder(dto);
     }
 
+    @ApiOperation(value = "我的报名-列表", notes = "我的报名-列表")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = ApiActivityOrderListVo.class)
+    })
+    @PostMapping(value = "/orderList")
+    public FebsResponse orderList(@RequestBody ApiActivityOrderListDto dto) {
+
+        return happyActivityService.orderList(dto);
+    }
+
+    @ApiOperation(value = "我的报名-详情", notes = "我的报名-详情")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = ApiActivityOrderInfoVo.class)
+    })
+    @GetMapping(value = "/orderInfo/{id}")
+    public FebsResponse orderInfo(@PathVariable("id") Long id) {
+
+        return happyActivityService.orderInfo(id);
+    }
+
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/activity/ApiActivityOrderListDto.java b/src/main/java/cc/mrbird/febs/mall/dto/activity/ApiActivityOrderListDto.java
new file mode 100644
index 0000000..2ae08ed
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/activity/ApiActivityOrderListDto.java
@@ -0,0 +1,20 @@
+package cc.mrbird.febs.mall.dto.activity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "ApiActivityOrderListDto", description = "订单列表参数接收类")
+public class ApiActivityOrderListDto {
+
+    @ApiModelProperty(value = "一页数量", example = "10")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "第几页", example = "1")
+    private Integer pageNum;
+
+    @ApiModelProperty(value = "订单状态", example = "订单状态 1-待支付 2-待使用 3-已使用 4-售后")
+    private Integer state;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java b/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
index d7a6612..e6f0cd0 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
@@ -2,6 +2,7 @@
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.*;
+import cc.mrbird.febs.mall.dto.activity.ApiActivityOrderListDto;
 import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionInPageDto;
 import cc.mrbird.febs.mall.entity.HappyActivity;
 import cc.mrbird.febs.mall.dto.ApiOperateDoDto;
@@ -48,4 +49,8 @@
     void addLikeCnt(Long sourceOptionId);
 
     void substructJoinCnt(Long activityId,Integer cnt);
+
+    FebsResponse orderList(ApiActivityOrderListDto dto);
+
+    FebsResponse orderInfo(Long id);
 }
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 05d3b88..6ef0daf 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
@@ -7,6 +7,7 @@
 import cc.mrbird.febs.common.utils.MallUtils;
 import cc.mrbird.febs.common.utils.ShareCodeUtil;
 import cc.mrbird.febs.mall.dto.*;
+import cc.mrbird.febs.mall.dto.activity.ApiActivityOrderListDto;
 import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionInPageDto;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
@@ -14,6 +15,8 @@
 import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
 import cc.mrbird.febs.mall.vo.*;
 import cc.mrbird.febs.mall.dto.ApiOperateDoDto;
+import cc.mrbird.febs.mall.vo.activity.ApiActivityOrderInfoVo;
+import cc.mrbird.febs.mall.vo.activity.ApiActivityOrderListVo;
 import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
 import cc.mrbird.febs.pay.service.IXcxPayService;
 import cn.hutool.core.bean.BeanUtil;
@@ -25,6 +28,7 @@
 import cn.hutool.crypto.SecureUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
@@ -35,6 +39,7 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -51,6 +56,7 @@
     private final HappyActivityOrderItemMapper happyActivityOrderItemMapper;
     private final IXcxPayService iXcxPayService;
     private final IApiMallMemberWalletService iApiMallMemberWalletService;
+    private final HappyActivityCategoryMapper happyActivityCategoryMapper;
 
     @Override
     public FebsResponse activityList(ApiActivityInfoDto dto) {
@@ -492,6 +498,8 @@
         }
     }
 
+
+
     // 处理无需支付订单
     private void processNoPayOrder(HappyActivityOrder order, Long orderId) {
         updateOrderState(order, StateUpDownEnum.PAY_METHOD_NO_PAY.getCode(), StateUpDownEnum.PAY_STATE_PAY_SUCCESS.getCode(),StateUpDownEnum.ORDER_STATE_WAIT_USE.getCode());
@@ -552,6 +560,101 @@
         return happyActivityOrder.getOrderNo();
     }
 
+    @Override
+    public FebsResponse orderList(ApiActivityOrderListDto dto) {
+
+        // 获取当前登录用户的ID
+        Long memberId = LoginUserUtil.getLoginUser().getId();
+
+        ArrayList<ApiActivityOrderListVo> apiActivityOrderListVos = new ArrayList<>();
+
+        LambdaQueryWrapper<HappyActivityOrder> happyActivityOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        happyActivityOrderLambdaQueryWrapper.eq(HappyActivityOrder::getMemberId, memberId);
+        if(ObjectUtil.isNotEmpty(dto.getState())){
+            happyActivityOrderLambdaQueryWrapper.eq(HappyActivityOrder::getState, dto.getState());
+        }
+        happyActivityOrderLambdaQueryWrapper.orderByDesc(HappyActivityOrder::getCreatedTime);
+        Page<HappyActivityOrder> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        Page<HappyActivityOrder> voteActivityPage = happyActivityOrderMapper.selectPage(page, happyActivityOrderLambdaQueryWrapper);
+
+        List<HappyActivityOrder> records = voteActivityPage.getRecords();
+        if(CollUtil.isNotEmpty(records)){
+            Set<Long> activityIds = records.stream().map(HappyActivityOrder::getActivityId).collect(Collectors.toSet());
+            List<HappyActivity> happyActivities = this.baseMapper.selectList(
+                    new LambdaQueryWrapper<HappyActivity>()
+                            .select(
+                                    HappyActivity::getCategoryId,
+                                    HappyActivity::getName,
+                                    HappyActivity::getStartTime,
+                                    HappyActivity::getEndTime,
+                                    HappyActivity::getAddress)
+                            .in(HappyActivity::getId, activityIds)
+            );
+            Map<Long, HappyActivity> activityMap = happyActivities.stream().collect(Collectors.toMap(HappyActivity::getId, Function.identity()));
+
+            Set<Long> categoryIds = happyActivities.stream().map(HappyActivity::getCategoryId).collect(Collectors.toSet());
+            //stream流操作categoryIds得到一个Map<categoryId,HappyActivityCategory>的map对象
+            List<HappyActivityCategory> happyActivityCategories = happyActivityCategoryMapper.selectList(
+                    new LambdaQueryWrapper<HappyActivityCategory>()
+                            .select(
+                                    HappyActivityCategory::getId,
+                                    HappyActivityCategory::getName)
+                            .in(HappyActivityCategory::getId,categoryIds)
+            );
+            Map<Long, HappyActivityCategory> categoryMap = happyActivityCategories.stream().collect(Collectors.toMap(HappyActivityCategory::getId, Function.identity()));
+
+            for(HappyActivityOrder happyActivityOrder : records){
+                ApiActivityOrderListVo apiActivityOrderListVo = new ApiActivityOrderListVo();
+                BeanUtil.copyProperties(happyActivityOrder, apiActivityOrderListVo);
+
+                apiActivityOrderListVo.setActivityName(activityMap.get(happyActivityOrder.getActivityId()).getName());
+                apiActivityOrderListVo.setStartTime(activityMap.get(happyActivityOrder.getActivityId()).getStartTime());
+                apiActivityOrderListVo.setEndTime(activityMap.get(happyActivityOrder.getActivityId()).getEndTime());
+                apiActivityOrderListVo.setAddress(activityMap.get(happyActivityOrder.getActivityId()).getAddress());
+                apiActivityOrderListVo.setCategoryName(categoryMap.get(activityMap.get(happyActivityOrder.getActivityId()).getCategoryId()).getName());
+
+                apiActivityOrderListVos.add(apiActivityOrderListVo);
+            }
+        }
+
+        return new FebsResponse().success().data(apiActivityOrderListVos);
+    }
+
+    @Override
+    public FebsResponse orderInfo(Long id) {
+        // 获取当前登录用户的ID
+        Long memberId = LoginUserUtil.getLoginUser().getId();
+        ArrayList<ApiActivityOrderInfoVo> apiActivityOrderInfoVos = new ArrayList<>();
+
+        HappyActivityOrder happyActivityOrder = happyActivityOrderMapper.selectById(id);
+
+        HappyActivity happyActivity = this.baseMapper.selectById(happyActivityOrder.getActivityId());
+
+        List<HappyActivityOrderItem> happyActivityOrderItems = happyActivityOrderItemMapper.selectList(
+                new LambdaQueryWrapper<HappyActivityOrderItem>()
+                        .eq(HappyActivityOrderItem::getOrderId, happyActivityOrder.getActivityId())
+                .eq(HappyActivityOrderItem::getMemberId, memberId)
+        );
+        if(CollUtil.isNotEmpty(happyActivityOrderItems)){
+            for(HappyActivityOrderItem happyActivityOrderItem : happyActivityOrderItems){
+                ApiActivityOrderInfoVo apiActivityOrderInfoVo = new ApiActivityOrderInfoVo();
+                BeanUtil.copyProperties(happyActivityOrderItem, apiActivityOrderInfoVo);
+
+                apiActivityOrderInfoVo.setOrderState(happyActivityOrder.getState());
+
+                apiActivityOrderInfoVo.setActivityName(happyActivity.getName());
+                apiActivityOrderInfoVo.setActivityStartTime(happyActivity.getStartTime());
+                apiActivityOrderInfoVo.setActivityEndTime(happyActivity.getEndTime());
+                apiActivityOrderInfoVo.setActivityAddress(happyActivity.getAddress());
+
+                apiActivityOrderInfoVos.add(apiActivityOrderInfoVo);
+            }
+        }
+
+
+        return new FebsResponse().success().data(apiActivityOrderInfoVos);
+    }
+
 
     public static void main(String[] args) {
         Date date = new Date();
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityInfoVo.java
index 5ef7ba8..c764364 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityInfoVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityInfoVo.java
@@ -24,6 +24,9 @@
     @ApiModelProperty(value = "名称")
     private String name;
 
+    @ApiModelProperty(value = "地点")
+    private String address;
+
     @ApiModelProperty(value = "状态 0-未开始 1-报名中(进行中) 2-已结束")
     private Integer state;
 
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/activity/ApiActivityOrderInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/activity/ApiActivityOrderInfoVo.java
new file mode 100644
index 0000000..08c1f96
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/activity/ApiActivityOrderInfoVo.java
@@ -0,0 +1,53 @@
+package cc.mrbird.febs.mall.vo.activity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "ApiActivityOrderInfoVo", description = "参数")
+public class ApiActivityOrderInfoVo {
+
+    @ApiModelProperty(value = "活动名称")
+    private String activityName;
+
+    @ApiModelProperty(value = "活动开始时间(有效期)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date activityStartTime;
+
+    @ApiModelProperty(value = "活动结束时间(有效期)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date activityEndTime;
+
+    @ApiModelProperty(value = "活动地点")
+    private String activityAddress;
+
+
+
+    @ApiModelProperty(value = "票号")
+    private String code;
+
+    @ApiModelProperty(value = "报名人姓名")
+    private String name;
+
+    @ApiModelProperty(value = "报名人电话")
+    private String phone;
+
+    @ApiModelProperty(value = "票据状态 0-待使用 1-已使用")
+    private Integer state;
+
+    @ApiModelProperty(value = "实付金额")
+    private BigDecimal price;
+
+
+
+    @ApiModelProperty(value = "订单状态 1-待支付 2-待使用 3-已使用 4-售后")
+    private Integer orderState;
+
+
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/activity/ApiActivityOrderListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/activity/ApiActivityOrderListVo.java
new file mode 100644
index 0000000..d5b3000
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/activity/ApiActivityOrderListVo.java
@@ -0,0 +1,50 @@
+package cc.mrbird.febs.mall.vo.activity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "ApiActivityOrderListVo", description = "参数")
+public class ApiActivityOrderListVo {
+
+    private Long id;
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+    @ApiModelProperty(value = "单价")
+    private BigDecimal price;
+    @ApiModelProperty(value = "数量")
+    private Integer numCnt;
+    @ApiModelProperty(value = "支付总金额")
+    private BigDecimal amount;
+    @ApiModelProperty(value = "支付状态 0-待支付 1-支付成功 2-支付失败")
+    private Integer payState;
+    @ApiModelProperty(value = "支付方式 1-余额支付 2-微信支付 3-积分支付 0-无需支付(免费)")
+    private Integer payType;
+    @ApiModelProperty(value = "支付时间")
+    private Date payTime;
+    @ApiModelProperty(value = "订单状态 1-待支付 2-待使用 3-已使用 4-售后")
+    private Integer state;
+
+
+    @ApiModelProperty(value = "活动名称")
+    private String activityName;
+
+    @ApiModelProperty(value = "活动开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "活动结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty(value = "活动地点")
+    private String address;
+
+    @ApiModelProperty(value = "活动类别")
+    private String categoryName;
+}
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 6f2b51b..1a5a5e1 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -70,8 +70,8 @@
 #  wecharpaySecret: CSxc168888CSxc168888CSxc168888xc
 xcx:
   wechar_login_url: https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code
-  xcx_appid: wxad2fdb2fcad10fb21
-  xcx_secret: 9bb58d655bff419feec3a6d948ca8b8d1
+  xcx_appid: wxe8454293f5c4c143
+  xcx_secret: 33c3ad513344cf6c16904e5d528b70ea
   debug: true
   wecharPaynotifyUrl: http://blnka.csxuncong.com/api/xcxPay/wxpayCallback
   wecharActivityPaynotifyUrl: http://blnka.csxuncong.com/api/xcxPay/wxpayCallback
diff --git a/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml b/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
index af7ebca..be37767 100644
--- a/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
+++ b/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
@@ -5,6 +5,7 @@
     <select id="selectActivityPage" resultType="cc.mrbird.febs.mall.vo.ApiActivityInfoVo">
         select
             a.id,
+            a.address,
             a.index_img,
             a.code,
             a.name,

--
Gitblit v1.9.1