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