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