Commit 71d6311bd4aa4a547ac7f882c59044031325c6a1

Authored by YunaiV
1 parent 54fe0174

code review:拼团、秒杀等逻辑

Showing 15 changed files with 46 additions and 124 deletions
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java
@@ -56,7 +56,6 @@ public interface ErrorCodeConstants { @@ -56,7 +56,6 @@ public interface ErrorCodeConstants {
56 ErrorCode SECKILL_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1013008004, "秒杀活动未关闭或未结束,不能删除"); 56 ErrorCode SECKILL_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1013008004, "秒杀活动未关闭或未结束,不能删除");
57 ErrorCode SECKILL_ACTIVITY_CLOSE_FAIL_STATUS_CLOSED = new ErrorCode(1013008005, "秒杀活动已关闭,不能重复关闭"); 57 ErrorCode SECKILL_ACTIVITY_CLOSE_FAIL_STATUS_CLOSED = new ErrorCode(1013008005, "秒杀活动已关闭,不能重复关闭");
58 ErrorCode SECKILL_ACTIVITY_UPDATE_STOCK_FAIL = new ErrorCode(1013008006, "秒杀失败,原因秒杀库存不足"); 58 ErrorCode SECKILL_ACTIVITY_UPDATE_STOCK_FAIL = new ErrorCode(1013008006, "秒杀失败,原因秒杀库存不足");
59 - ErrorCode SECKILL_ACTIVITY_APP_STATUS_CLOSED = new ErrorCode(1013008007, "秒杀活动已关闭");  
60 59
61 // ========== 秒杀时段 1013009000 ========== 60 // ========== 秒杀时段 1013009000 ==========
62 ErrorCode SECKILL_CONFIG_NOT_EXISTS = new ErrorCode(1013009000, "秒杀时段不存在"); 61 ErrorCode SECKILL_CONFIG_NOT_EXISTS = new ErrorCode(1013009000, "秒杀时段不存在");
@@ -69,7 +68,6 @@ public interface ErrorCodeConstants { @@ -69,7 +68,6 @@ public interface ErrorCodeConstants {
69 ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE_NOT_UPDATE = new ErrorCode(1013010002, "拼团活动已关闭不能修改"); 68 ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE_NOT_UPDATE = new ErrorCode(1013010002, "拼团活动已关闭不能修改");
70 ErrorCode COMBINATION_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1013010003, "拼团活动未关闭或未结束,不能删除"); 69 ErrorCode COMBINATION_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1013010003, "拼团活动未关闭或未结束,不能删除");
71 ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE = new ErrorCode(1013010004, "拼团失败,原因:拼团活动已关闭"); 70 ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE = new ErrorCode(1013010004, "拼团失败,原因:拼团活动已关闭");
72 - ErrorCode COMBINATION_ACTIVITY_APP_STATUS_DISABLE = new ErrorCode(1013010005, "拼团活动已关闭");  
73 71
74 // ========== 拼团记录 1013011000 ========== 72 // ========== 拼团记录 1013011000 ==========
75 ErrorCode COMBINATION_RECORD_NOT_EXISTS = new ErrorCode(1013011000, "拼团不存在"); 73 ErrorCode COMBINATION_RECORD_NOT_EXISTS = new ErrorCode(1013011000, "拼团不存在");
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java
@@ -24,14 +24,12 @@ import org.springframework.web.bind.annotation.RequestParam; @@ -24,14 +24,12 @@ import org.springframework.web.bind.annotation.RequestParam;
24 import org.springframework.web.bind.annotation.RestController; 24 import org.springframework.web.bind.annotation.RestController;
25 25
26 import javax.annotation.Resource; 26 import javax.annotation.Resource;
27 -import java.util.Arrays; 27 +import java.util.Collections;
28 import java.util.List; 28 import java.util.List;
29 29
30 import static cn.hutool.core.util.ObjectUtil.defaultIfNull; 30 import static cn.hutool.core.util.ObjectUtil.defaultIfNull;
31 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
32 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 31 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
33 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; 32 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
34 -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COMBINATION_ACTIVITY_APP_STATUS_DISABLE;  
35 33
36 @Tag(name = "用户 APP - 拼团活动") 34 @Tag(name = "用户 APP - 拼团活动")
37 @RestController 35 @RestController
@@ -44,7 +42,7 @@ public class AppCombinationActivityController { @@ -44,7 +42,7 @@ public class AppCombinationActivityController {
44 @Resource 42 @Resource
45 private ProductSpuApi spuApi; 43 private ProductSpuApi spuApi;
46 44
47 - 45 + // TODO 芋艿:增加 Spring Cache
48 @GetMapping("/list") 46 @GetMapping("/list")
49 @Operation(summary = "获得拼团活动列表", description = "用于小程序首页") 47 @Operation(summary = "获得拼团活动列表", description = "用于小程序首页")
50 @Parameter(name = "count", description = "需要展示的数量", example = "6") 48 @Parameter(name = "count", description = "需要展示的数量", example = "6")
@@ -52,11 +50,10 @@ public class AppCombinationActivityController { @@ -52,11 +50,10 @@ public class AppCombinationActivityController {
52 @RequestParam(name = "count", defaultValue = "6") Integer count) { 50 @RequestParam(name = "count", defaultValue = "6") Integer count) {
53 List<CombinationActivityDO> list = activityService.getCombinationActivityListByCount(defaultIfNull(count, 6)); 51 List<CombinationActivityDO> list = activityService.getCombinationActivityListByCount(defaultIfNull(count, 6));
54 if (CollUtil.isEmpty(list)) { 52 if (CollUtil.isEmpty(list)) {
55 - return success(CombinationActivityConvert.INSTANCE.convertAppList(list)); 53 + return success(Collections.emptyList());
56 } 54 }
57 - 55 + // 拼接返回
58 List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(list, CombinationActivityDO::getSpuId)); 56 List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(list, CombinationActivityDO::getSpuId));
59 - // TODO 芋艿:增加 Spring Cache  
60 return success(CombinationActivityConvert.INSTANCE.convertAppList(list, spuList)); 57 return success(CombinationActivityConvert.INSTANCE.convertAppList(list, spuList));
61 } 58 }
62 59
@@ -67,7 +64,7 @@ public class AppCombinationActivityController { @@ -67,7 +64,7 @@ public class AppCombinationActivityController {
67 if (CollUtil.isEmpty(result.getList())) { 64 if (CollUtil.isEmpty(result.getList())) {
68 return success(PageResult.empty(result.getTotal())); 65 return success(PageResult.empty(result.getTotal()));
69 } 66 }
70 - 67 + // 拼接返回
71 List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(result.getList(), CombinationActivityDO::getSpuId)); 68 List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(result.getList(), CombinationActivityDO::getSpuId));
72 return success(CombinationActivityConvert.INSTANCE.convertAppPage(result, spuList)); 69 return success(CombinationActivityConvert.INSTANCE.convertAppPage(result, spuList));
73 } 70 }
@@ -78,15 +75,12 @@ public class AppCombinationActivityController { @@ -78,15 +75,12 @@ public class AppCombinationActivityController {
78 public CommonResult<AppCombinationActivityDetailRespVO> getCombinationActivityDetail(@RequestParam("id") Long id) { 75 public CommonResult<AppCombinationActivityDetailRespVO> getCombinationActivityDetail(@RequestParam("id") Long id) {
79 // 1、获取活动 76 // 1、获取活动
80 CombinationActivityDO combinationActivity = activityService.getCombinationActivity(id); 77 CombinationActivityDO combinationActivity = activityService.getCombinationActivity(id);
81 - if (combinationActivity == null) { 78 + if (combinationActivity == null
  79 + || ObjectUtil.equal(combinationActivity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) {
82 return success(null); 80 return success(null);
83 } 81 }
84 - if (ObjectUtil.equal(combinationActivity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) {  
85 - throw exception(COMBINATION_ACTIVITY_APP_STATUS_DISABLE);  
86 - }  
87 -  
88 // 2、获取活动商品 82 // 2、获取活动商品
89 - List<CombinationProductDO> products = activityService.getCombinationProductsByActivityIds(Arrays.asList(combinationActivity.getId())); 83 + List<CombinationProductDO> products = activityService.getCombinationProductsByActivityId(combinationActivity.getId());
90 return success(CombinationActivityConvert.INSTANCE.convert3(combinationActivity, products)); 84 return success(CombinationActivityConvert.INSTANCE.convert3(combinationActivity, products));
91 } 85 }
92 86
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java
1 package cn.iocoder.yudao.module.promotion.controller.app.seckill; 1 package cn.iocoder.yudao.module.promotion.controller.app.seckill;
2 2
  3 +import cn.hutool.core.collection.CollUtil;
3 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
4 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 6 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
@@ -29,10 +30,8 @@ import org.springframework.web.bind.annotation.RestController; @@ -29,10 +30,8 @@ import org.springframework.web.bind.annotation.RestController;
29 import javax.annotation.Resource; 30 import javax.annotation.Resource;
30 import java.util.List; 31 import java.util.List;
31 32
32 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
33 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 33 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
34 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; 34 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
35 -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.SECKILL_ACTIVITY_APP_STATUS_CLOSED;  
36 35
37 @Tag(name = "用户 App - 秒杀活动") 36 @Tag(name = "用户 App - 秒杀活动")
38 @RestController 37 @RestController
@@ -48,6 +47,7 @@ public class AppSeckillActivityController { @@ -48,6 +47,7 @@ public class AppSeckillActivityController {
48 @Resource 47 @Resource
49 private ProductSpuApi spuApi; 48 private ProductSpuApi spuApi;
50 49
  50 + // TODO 芋艿:需要增加 spring cache
51 @GetMapping("/get-now") 51 @GetMapping("/get-now")
52 @Operation(summary = "获得当前秒杀活动", description = "获取当前正在进行的活动,提供给首页使用") 52 @Operation(summary = "获得当前秒杀活动", description = "获取当前正在进行的活动,提供给首页使用")
53 public CommonResult<AppSeckillActivityNowRespVO> getNowSeckillActivity() { 53 public CommonResult<AppSeckillActivityNowRespVO> getNowSeckillActivity() {
@@ -61,7 +61,6 @@ public class AppSeckillActivityController { @@ -61,7 +61,6 @@ public class AppSeckillActivityController {
61 List<SeckillActivityDO> activityList = activityService.getSeckillActivityListByConfigIdAndStatus(configList.getId(), CommonStatusEnum.ENABLE.getStatus()); 61 List<SeckillActivityDO> activityList = activityService.getSeckillActivityListByConfigIdAndStatus(configList.getId(), CommonStatusEnum.ENABLE.getStatus());
62 // 3 获取 spu 信息 62 // 3 获取 spu 信息
63 List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(activityList, SeckillActivityDO::getSpuId)); 63 List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(activityList, SeckillActivityDO::getSpuId));
64 - // TODO 芋艿:需要增加 spring cache  
65 return success(SeckillActivityConvert.INSTANCE.convert(configList, activityList, spuList)); 64 return success(SeckillActivityConvert.INSTANCE.convert(configList, activityList, spuList));
66 } 65 }
67 66
@@ -70,7 +69,9 @@ public class AppSeckillActivityController { @@ -70,7 +69,9 @@ public class AppSeckillActivityController {
70 public CommonResult<PageResult<AppSeckillActivityRespVO>> getSeckillActivityPage(AppSeckillActivityPageReqVO pageReqVO) { 69 public CommonResult<PageResult<AppSeckillActivityRespVO>> getSeckillActivityPage(AppSeckillActivityPageReqVO pageReqVO) {
71 // 1. 查询满足当前阶段的活动 70 // 1. 查询满足当前阶段的活动
72 PageResult<SeckillActivityDO> pageResult = activityService.getSeckillActivityAppPageByConfigId(pageReqVO); 71 PageResult<SeckillActivityDO> pageResult = activityService.getSeckillActivityAppPageByConfigId(pageReqVO);
73 - 72 + if (CollUtil.isEmpty(pageResult.getList())) {
  73 + return success(PageResult.empty(pageResult.getTotal()));
  74 + }
74 // 2. 拼接数据 75 // 2. 拼接数据
75 List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(pageResult.getList(), SeckillActivityDO::getSpuId)); 76 List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(pageResult.getList(), SeckillActivityDO::getSpuId));
76 return success(SeckillActivityConvert.INSTANCE.convertPage(pageResult, spuList)); 77 return success(SeckillActivityConvert.INSTANCE.convertPage(pageResult, spuList));
@@ -88,16 +89,14 @@ public class AppSeckillActivityController { @@ -88,16 +89,14 @@ public class AppSeckillActivityController {
88 89
89 // 2. 获取活动 90 // 2. 获取活动
90 SeckillActivityDO seckillActivity = activityService.getSeckillActivity(id); 91 SeckillActivityDO seckillActivity = activityService.getSeckillActivity(id);
91 - if (seckillActivity == null) { 92 + if (seckillActivity == null
  93 + || ObjectUtil.equal(seckillActivity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) {
92 return success(null); 94 return success(null);
93 } 95 }
94 - if (ObjectUtil.equal(seckillActivity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) {  
95 - throw exception(SECKILL_ACTIVITY_APP_STATUS_CLOSED);  
96 - }  
97 96
98 // 3. 拼接数据 97 // 3. 拼接数据
99 - List<SeckillProductDO> products = activityService.getSeckillProductListByActivityId(seckillActivity.getId());  
100 - return success(SeckillActivityConvert.INSTANCE.convert3(seckillActivity, products, configList)); 98 + List<SeckillProductDO> productList = activityService.getSeckillProductListByActivityId(seckillActivity.getId());
  99 + return success(SeckillActivityConvert.INSTANCE.convert3(seckillActivity, productList, configList));
101 } 100 }
102 101
103 } 102 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillConfigController.java
@@ -28,7 +28,8 @@ public class AppSeckillConfigController { @@ -28,7 +28,8 @@ public class AppSeckillConfigController {
28 @GetMapping("/list") 28 @GetMapping("/list")
29 @Operation(summary = "获得秒杀时间段列表") 29 @Operation(summary = "获得秒杀时间段列表")
30 public CommonResult<List<AppSeckillConfigRespVO>> getSeckillConfigList() { 30 public CommonResult<List<AppSeckillConfigRespVO>> getSeckillConfigList() {
31 - return success(SeckillConfigConvert.INSTANCE.convertList2(configService.getSeckillConfigListByStatus(CommonStatusEnum.ENABLE.getStatus()))); 31 + return success(SeckillConfigConvert.INSTANCE.convertList2(
  32 + configService.getSeckillConfigListByStatus(CommonStatusEnum.ENABLE.getStatus())));
32 } 33 }
33 34
34 } 35 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/bargain/BargainActivityConvert.java
@@ -73,9 +73,7 @@ public interface BargainActivityConvert { @@ -73,9 +73,7 @@ public interface BargainActivityConvert {
73 // 拼接关联属性 73 // 拼接关联属性
74 Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId); 74 Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
75 List<AppBargainActivityRespVO> list = CollectionUtils.convertList(result.getList(), item -> { 75 List<AppBargainActivityRespVO> list = CollectionUtils.convertList(result.getList(), item -> {
76 - findAndThen(spuMap, item.getSpuId(), spu -> {  
77 - item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice());  
78 - }); 76 + findAndThen(spuMap, item.getSpuId(), spu -> item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()));
79 return item; 77 return item;
80 }); 78 });
81 result.setList(list); 79 result.setList(list);
@@ -88,9 +86,7 @@ public interface BargainActivityConvert { @@ -88,9 +86,7 @@ public interface BargainActivityConvert {
88 List<AppBargainActivityRespVO> activityList = convertAppList(list); 86 List<AppBargainActivityRespVO> activityList = convertAppList(list);
89 Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId); 87 Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
90 return CollectionUtils.convertList(activityList, item -> { 88 return CollectionUtils.convertList(activityList, item -> {
91 - findAndThen(spuMap, item.getSpuId(), spu -> {  
92 - item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice());  
93 - }); 89 + findAndThen(spuMap, item.getSpuId(), spu -> item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()));
94 return item; 90 return item;
95 }); 91 });
96 } 92 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java
@@ -61,9 +61,7 @@ public interface CombinationActivityConvert { @@ -61,9 +61,7 @@ public interface CombinationActivityConvert {
61 Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId); 61 Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
62 PageResult<CombinationActivityRespVO> pageResult = convertPage(page); 62 PageResult<CombinationActivityRespVO> pageResult = convertPage(page);
63 pageResult.getList().forEach(item -> { 63 pageResult.getList().forEach(item -> {
64 - MapUtils.findAndThen(spuMap, item.getSpuId(), spu -> {  
65 - item.setSpuName(spu.getName()).setPicUrl(spu.getPicUrl());  
66 - }); 64 + MapUtils.findAndThen(spuMap, item.getSpuId(), spu -> item.setSpuName(spu.getName()).setPicUrl(spu.getPicUrl()));
67 item.setProducts(convertList2(productList)); 65 item.setProducts(convertList2(productList));
68 }); 66 });
69 return pageResult; 67 return pageResult;
@@ -118,9 +116,7 @@ public interface CombinationActivityConvert { @@ -118,9 +116,7 @@ public interface CombinationActivityConvert {
118 List<AppCombinationActivityRespVO> activityList = convertAppList(list); 116 List<AppCombinationActivityRespVO> activityList = convertAppList(list);
119 Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId); 117 Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
120 return CollectionUtils.convertList(activityList, item -> { 118 return CollectionUtils.convertList(activityList, item -> {
121 - findAndThen(spuMap, item.getSpuId(), spu -> {  
122 - item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice());  
123 - }); 119 + findAndThen(spuMap, item.getSpuId(), spu -> item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()));
124 return item; 120 return item;
125 }); 121 });
126 } 122 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/seckill/seckillactivity/SeckillActivityConvert.java
@@ -113,11 +113,8 @@ public interface SeckillActivityConvert { @@ -113,11 +113,8 @@ public interface SeckillActivityConvert {
113 PageResult<AppSeckillActivityRespVO> result = convertPage1(pageResult); 113 PageResult<AppSeckillActivityRespVO> result = convertPage1(pageResult);
114 Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId); 114 Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
115 List<AppSeckillActivityRespVO> list = CollectionUtils.convertList(result.getList(), item -> { 115 List<AppSeckillActivityRespVO> list = CollectionUtils.convertList(result.getList(), item -> {
116 - findAndThen(spuMap, item.getSpuId(), spu -> {  
117 - item.setPicUrl(spu.getPicUrl())  
118 - .setMarketPrice(spu.getMarketPrice())  
119 - .setUnitName(DictFrameworkUtils.getDictDataLabel(DictTypeConstants.PRODUCT_UNIT, spu.getUnit()));  
120 - }); 116 + findAndThen(spuMap, item.getSpuId(), spu -> item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice())
  117 + .setUnitName(DictFrameworkUtils.getDictDataLabel(DictTypeConstants.PRODUCT_UNIT, spu.getUnit())));
121 return item; 118 return item;
122 }); 119 });
123 result.setList(list); 120 result.setList(list);
@@ -131,6 +128,7 @@ public interface SeckillActivityConvert { @@ -131,6 +128,7 @@ public interface SeckillActivityConvert {
131 default AppSeckillActivityDetailRespVO convert3(SeckillActivityDO seckillActivity, List<SeckillProductDO> products, SeckillConfigDO filteredConfig) { 128 default AppSeckillActivityDetailRespVO convert3(SeckillActivityDO seckillActivity, List<SeckillProductDO> products, SeckillConfigDO filteredConfig) {
132 return convert2(seckillActivity) 129 return convert2(seckillActivity)
133 .setProducts(convertList1(products)) 130 .setProducts(convertList1(products))
  131 + // TODO @puhui999:要不要在里面 default 一个方法,处理这个事件;简洁一点;
134 .setStartTime(LocalDateTimeUtil.parse(LocalDateTimeUtil.format(seckillActivity.getStartTime(), "yyyy-MM-dd") + " " + filteredConfig.getStartTime(), 132 .setStartTime(LocalDateTimeUtil.parse(LocalDateTimeUtil.format(seckillActivity.getStartTime(), "yyyy-MM-dd") + " " + filteredConfig.getStartTime(),
135 "yyyy-MM-dd HH:mm:ss")) // 活动开始日期和时段结合 133 "yyyy-MM-dd HH:mm:ss")) // 活动开始日期和时段结合
136 .setEndTime(LocalDateTimeUtil.parse(LocalDateTimeUtil.format(seckillActivity.getEndTime(), "yyyy-MM-dd") + " " + filteredConfig.getEndTime(), 134 .setEndTime(LocalDateTimeUtil.parse(LocalDateTimeUtil.format(seckillActivity.getEndTime(), "yyyy-MM-dd") + " " + filteredConfig.getEndTime(),
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java
@@ -29,26 +29,12 @@ public interface CombinationActivityMapper extends BaseMapperX&lt;CombinationActivi @@ -29,26 +29,12 @@ public interface CombinationActivityMapper extends BaseMapperX&lt;CombinationActivi
29 return selectList(CombinationActivityDO::getStatus, status); 29 return selectList(CombinationActivityDO::getStatus, status);
30 } 30 }
31 31
32 - /**  
33 - * 查询 status 状态的活动分页  
34 - *  
35 - * @param pageParam 分页参数  
36 - * @param status 状态  
37 - * @return 活动分页  
38 - */  
39 default PageResult<CombinationActivityDO> selectPage(PageParam pageParam, Integer status) { 32 default PageResult<CombinationActivityDO> selectPage(PageParam pageParam, Integer status) {
40 return selectPage(pageParam, new LambdaQueryWrapperX<CombinationActivityDO>() 33 return selectPage(pageParam, new LambdaQueryWrapperX<CombinationActivityDO>()
41 .eq(CombinationActivityDO::getStatus, status)); 34 .eq(CombinationActivityDO::getStatus, status));
42 } 35 }
43 36
44 - /**  
45 - * 查询 status 状态的活动分页  
46 - *  
47 - * @param status 状态  
48 - * @param count 限制条数  
49 - * @return 活动分页  
50 - */  
51 - default List<CombinationActivityDO> selectList(Integer status, Integer count) { 37 + default List<CombinationActivityDO> selectListByStatus(Integer status, Integer count) {
52 return selectList(new LambdaQueryWrapperX<CombinationActivityDO>() 38 return selectList(new LambdaQueryWrapperX<CombinationActivityDO>()
53 .eq(CombinationActivityDO::getStatus, status) 39 .eq(CombinationActivityDO::getStatus, status)
54 .last("LIMIT " + count)); 40 .last("LIMIT " + count));
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java
@@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationP @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationP
10 10
11 import javax.validation.Valid; 11 import javax.validation.Valid;
12 import java.util.Collection; 12 import java.util.Collection;
  13 +import java.util.Collections;
13 import java.util.List; 14 import java.util.List;
14 15
15 /** 16 /**
@@ -68,6 +69,16 @@ public interface CombinationActivityService { @@ -68,6 +69,16 @@ public interface CombinationActivityService {
68 /** 69 /**
69 * 获得拼团活动商品列表 70 * 获得拼团活动商品列表
70 * 71 *
  72 + * @param activityId 拼团活动 id
  73 + * @return 拼团活动的商品列表
  74 + */
  75 + default List<CombinationProductDO> getCombinationProductsByActivityId(Long activityId) {
  76 + return getCombinationProductsByActivityIds(Collections.singletonList(activityId));
  77 + }
  78 +
  79 + /**
  80 + * 获得拼团活动商品列表
  81 + *
71 * @param activityIds 拼团活动 ids 82 * @param activityIds 拼团活动 ids
72 * @return 拼团活动的商品列表 83 * @return 拼团活动的商品列表
73 */ 84 */
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java
@@ -247,7 +247,7 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic @@ -247,7 +247,7 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic
247 247
248 @Override 248 @Override
249 public List<CombinationActivityDO> getCombinationActivityListByCount(Integer count) { 249 public List<CombinationActivityDO> getCombinationActivityListByCount(Integer count) {
250 - return combinationActivityMapper.selectList(CommonStatusEnum.ENABLE.getStatus(), count); 250 + return combinationActivityMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus(), count);
251 } 251 }
252 252
253 @Override 253 @Override
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.java
@@ -8,11 +8,11 @@ import cn.iocoder.yudao.module.member.api.user.MemberUserApi; @@ -8,11 +8,11 @@ import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
8 import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; 8 import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
9 import cn.iocoder.yudao.module.pay.api.notify.dto.PayRefundNotifyReqDTO; 9 import cn.iocoder.yudao.module.pay.api.notify.dto.PayRefundNotifyReqDTO;
10 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.*; 10 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.*;
  11 +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.TradeAfterSaleLogRespVO;
11 import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert; 12 import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert;
12 import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; 13 import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO;
13 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; 14 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
14 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; 15 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
15 -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespVO;  
16 import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service.AfterSaleLogService; 16 import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service.AfterSaleLogService;
17 import cn.iocoder.yudao.module.trade.service.aftersale.TradeAfterSaleService; 17 import cn.iocoder.yudao.module.trade.service.aftersale.TradeAfterSaleService;
18 import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; 18 import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/TradeAfterSaleConvert.java
@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO; @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO;
6 import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO; 6 import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO;
7 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleDetailRespVO; 7 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleDetailRespVO;
8 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespPageItemVO; 8 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespPageItemVO;
  9 +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.TradeAfterSaleLogRespVO;
9 import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUserRespVO; 10 import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUserRespVO;
10 import cn.iocoder.yudao.module.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO; 11 import cn.iocoder.yudao.module.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO;
11 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderBaseVO; 12 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderBaseVO;
@@ -15,7 +16,6 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; @@ -15,7 +16,6 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO;
15 import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleLogDO; 16 import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleLogDO;
16 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; 17 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
17 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; 18 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
18 -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespVO;  
19 import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; 19 import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties;
20 import org.mapstruct.Mapper; 20 import org.mapstruct.Mapper;
21 import org.mapstruct.Mapping; 21 import org.mapstruct.Mapping;
@@ -68,7 +68,7 @@ public interface TradeAfterSaleConvert { @@ -68,7 +68,7 @@ public interface TradeAfterSaleConvert {
68 PageResult<AppTradeAfterSaleRespVO> convertPage02(PageResult<TradeAfterSaleDO> page); 68 PageResult<AppTradeAfterSaleRespVO> convertPage02(PageResult<TradeAfterSaleDO> page);
69 69
70 List<TradeAfterSaleLogRespVO> convertList(List<TradeAfterSaleLogDO> list); 70 List<TradeAfterSaleLogRespVO> convertList(List<TradeAfterSaleLogDO> list);
71 - 71 +
72 default TradeAfterSaleDetailRespVO convert(TradeAfterSaleDO afterSale, TradeOrderDO order, List<TradeOrderItemDO> orderItems, 72 default TradeAfterSaleDetailRespVO convert(TradeAfterSaleDO afterSale, TradeOrderDO order, List<TradeOrderItemDO> orderItems,
73 MemberUserRespDTO user, List<TradeAfterSaleLogRespVO> logs) { 73 MemberUserRespDTO user, List<TradeAfterSaleLogRespVO> logs) {
74 TradeAfterSaleDetailRespVO respVO = convert(afterSale, orderItems); 74 TradeAfterSaleDetailRespVO respVO = convert(afterSale, orderItems);
@@ -81,7 +81,7 @@ public interface TradeAfterSaleConvert { @@ -81,7 +81,7 @@ public interface TradeAfterSaleConvert {
81 return respVO; 81 return respVO;
82 } 82 }
83 83
84 - List<cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.TradeAfterSaleLogRespVO> convertList1(List<TradeAfterSaleLogRespVO> list); 84 + List<TradeAfterSaleLogRespVO> convertList1(List<TradeAfterSaleLogRespVO> list);
85 @Mapping(target = "id", source = "afterSale.id") 85 @Mapping(target = "id", source = "afterSale.id")
86 TradeAfterSaleDetailRespVO convert(TradeAfterSaleDO afterSale, List<TradeOrderItemDO> orderItems); 86 TradeAfterSaleDetailRespVO convert(TradeAfterSaleDO afterSale, List<TradeOrderItemDO> orderItems);
87 TradeOrderBaseVO convert(TradeOrderDO order); 87 TradeOrderBaseVO convert(TradeOrderDO order);
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/dto/TradeAfterSaleLogRespVO.java deleted
1 -package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto;  
2 -  
3 -import io.swagger.v3.oas.annotations.media.Schema;  
4 -import lombok.AllArgsConstructor;  
5 -import lombok.Data;  
6 -import lombok.NoArgsConstructor;  
7 -  
8 -import javax.validation.constraints.NotNull;  
9 -import java.time.LocalDateTime;  
10 -  
11 -/**  
12 - * 贸易售后日志详情 DTO  
13 - *  
14 - * @author HUIHUI  
15 - */  
16 -@Data  
17 -@NoArgsConstructor  
18 -@AllArgsConstructor  
19 -public class TradeAfterSaleLogRespVO {  
20 -  
21 - @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20669")  
22 - private Long id;  
23 -  
24 - @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22634")  
25 - @NotNull(message = "用户编号不能为空")  
26 - private Long userId;  
27 -  
28 - @Schema(description = "用户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")  
29 - @NotNull(message = "用户类型不能为空")  
30 - private Integer userType;  
31 -  
32 - @Schema(description = "售后编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "3023")  
33 - @NotNull(message = "售后编号不能为空")  
34 - private Long afterSaleId;  
35 -  
36 - @Schema(description = "订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "25870")  
37 - @NotNull(message = "订单编号不能为空")  
38 - private Long orderId;  
39 -  
40 - @Schema(description = "订单项编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23154")  
41 - @NotNull(message = "订单项编号不能为空")  
42 - private Long orderItemId;  
43 -  
44 - @Schema(description = "售后状态(之前)", example = "2")  
45 - private Integer beforeStatus;  
46 -  
47 - @Schema(description = "售后状态(之后)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")  
48 - @NotNull(message = "售后状态(之后)不能为空")  
49 - private Integer afterStatus;  
50 -  
51 - @Schema(description = "操作明细", requiredMode = Schema.RequiredMode.REQUIRED, example = "维权完成,退款金额:¥37776.00")  
52 - @NotNull(message = "操作明细不能为空")  
53 - private String content;  
54 -  
55 - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)  
56 - private LocalDateTime createTime;  
57 -  
58 -}  
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/service/AfterSaleLogService.java
1 package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service; 1 package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service;
2 2
3 3
  4 +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.TradeAfterSaleLogRespVO;
4 import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; 5 import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO;
5 -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespVO;  
6 6
7 import java.util.List; 7 import java.util.List;
8 8
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/TradeAfterSaleServiceImpl.java
@@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO; @@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO;
11 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleDisagreeReqVO; 11 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleDisagreeReqVO;
12 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSalePageReqVO; 12 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSalePageReqVO;
13 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRefuseReqVO; 13 import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRefuseReqVO;
  14 +import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.TradeAfterSaleLogRespVO;
14 import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleCreateReqVO; 15 import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleCreateReqVO;
15 import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleDeliveryReqVO; 16 import cn.iocoder.yudao.module.trade.controller.app.aftersale.vo.AppTradeAfterSaleDeliveryReqVO;
16 import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert; 17 import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert;
@@ -26,7 +27,6 @@ import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum; @@ -26,7 +27,6 @@ import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum;
26 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; 27 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum;
27 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; 28 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
28 import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; 29 import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO;
29 -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespVO;  
30 import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service.AfterSaleLogService; 30 import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service.AfterSaleLogService;
31 import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; 31 import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties;
32 import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; 32 import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;
@@ -449,6 +449,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa @@ -449,6 +449,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa
449 } 449 }
450 } 450 }
451 451
  452 + // TODO @puhui999:应该返回 do 哈。
452 @Override 453 @Override
453 public List<TradeAfterSaleLogRespVO> getLog(Long afterSaleId) { 454 public List<TradeAfterSaleLogRespVO> getLog(Long afterSaleId) {
454 // TODO 不熟悉流程先这么滴 455 // TODO 不熟悉流程先这么滴