Commit 1d2a6ad065a5459a4321a51c13dc316b6ebd8d5f

Authored by puhui999
1 parent 04a391cd

拼团活动: 完善 app 端获取活动分页、列表、详情接口

yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java
@@ -56,7 +56,7 @@ public interface ErrorCodeConstants { @@ -56,7 +56,7 @@ 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_FAIL_STATUS_CLOSED = new ErrorCode(1013008007, "秒杀活动已关闭"); 59 + ErrorCode SECKILL_ACTIVITY_APP_STATUS_CLOSED = new ErrorCode(1013008007, "秒杀活动已关闭");
60 60
61 // ========== 秒杀时段 1013009000 ========== 61 // ========== 秒杀时段 1013009000 ==========
62 ErrorCode SECKILL_CONFIG_NOT_EXISTS = new ErrorCode(1013009000, "秒杀时段不存在"); 62 ErrorCode SECKILL_CONFIG_NOT_EXISTS = new ErrorCode(1013009000, "秒杀时段不存在");
@@ -69,6 +69,7 @@ public interface ErrorCodeConstants { @@ -69,6 +69,7 @@ public interface ErrorCodeConstants {
69 ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE_NOT_UPDATE = new ErrorCode(1013010002, "拼团活动已关闭不能修改"); 69 ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE_NOT_UPDATE = new ErrorCode(1013010002, "拼团活动已关闭不能修改");
70 ErrorCode COMBINATION_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1013010003, "拼团活动未关闭或未结束,不能删除"); 70 ErrorCode COMBINATION_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1013010003, "拼团活动未关闭或未结束,不能删除");
71 ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE = new ErrorCode(1013010004, "拼团失败,原因:拼团活动已关闭"); 71 ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE = new ErrorCode(1013010004, "拼团失败,原因:拼团活动已关闭");
  72 + ErrorCode COMBINATION_ACTIVITY_APP_STATUS_DISABLE = new ErrorCode(1013010005, "拼团活动已关闭");
72 73
73 // ========== 拼团记录 1013011000 ========== 74 // ========== 拼团记录 1013011000 ==========
74 ErrorCode COMBINATION_RECORD_NOT_EXISTS = new ErrorCode(1013011000, "拼团不存在"); 75 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
1 package cn.iocoder.yudao.module.promotion.controller.app.combination; 1 package cn.iocoder.yudao.module.promotion.controller.app.combination;
2 2
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.util.ObjectUtil;
  5 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
3 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 6 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 import cn.iocoder.yudao.framework.common.pojo.PageParam; 7 import cn.iocoder.yudao.framework.common.pojo.PageParam;
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  9 +import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
  10 +import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
6 import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.activity.AppCombinationActivityDetailRespVO; 11 import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.activity.AppCombinationActivityDetailRespVO;
7 import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.activity.AppCombinationActivityRespVO; 12 import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.activity.AppCombinationActivityRespVO;
  13 +import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert;
  14 +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO;
  15 +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO;
  16 +import cn.iocoder.yudao.module.promotion.service.combination.CombinationActivityService;
8 import io.swagger.v3.oas.annotations.Operation; 17 import io.swagger.v3.oas.annotations.Operation;
9 import io.swagger.v3.oas.annotations.Parameter; 18 import io.swagger.v3.oas.annotations.Parameter;
10 import io.swagger.v3.oas.annotations.tags.Tag; 19 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -14,11 +23,14 @@ import org.springframework.web.bind.annotation.RequestMapping; @@ -14,11 +23,14 @@ import org.springframework.web.bind.annotation.RequestMapping;
14 import org.springframework.web.bind.annotation.RequestParam; 23 import org.springframework.web.bind.annotation.RequestParam;
15 import org.springframework.web.bind.annotation.RestController; 24 import org.springframework.web.bind.annotation.RestController;
16 25
17 -import java.time.LocalDateTime;  
18 -import java.util.ArrayList; 26 +import javax.annotation.Resource;
  27 +import java.util.Arrays;
19 import java.util.List; 28 import java.util.List;
20 29
  30 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
21 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 31 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  32 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
  33 +import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COMBINATION_ACTIVITY_APP_STATUS_DISABLE;
22 34
23 @Tag(name = "用户 APP - 拼团活动") 35 @Tag(name = "用户 APP - 拼团活动")
24 @RestController 36 @RestController
@@ -26,104 +38,55 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -26,104 +38,55 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
26 @Validated 38 @Validated
27 public class AppCombinationActivityController { 39 public class AppCombinationActivityController {
28 40
  41 + @Resource
  42 + private CombinationActivityService activityService;
  43 + @Resource
  44 + private ProductSpuApi spuApi;
  45 +
  46 +
29 @GetMapping("/list") 47 @GetMapping("/list")
30 @Operation(summary = "获得拼团活动列表", description = "用于小程序首页") 48 @Operation(summary = "获得拼团活动列表", description = "用于小程序首页")
31 - // TODO 芋艿:增加 Spring Cache  
32 - // TODO 芋艿:缺少 swagger 注解 49 + @Parameter(name = "count", description = "需要展示的数量", example = "6")
33 public CommonResult<List<AppCombinationActivityRespVO>> getCombinationActivityList( 50 public CommonResult<List<AppCombinationActivityRespVO>> getCombinationActivityList(
34 @RequestParam(name = "count", defaultValue = "6") Integer count) { 51 @RequestParam(name = "count", defaultValue = "6") Integer count) {
35 - List<AppCombinationActivityRespVO> activityList = new ArrayList<>();  
36 - AppCombinationActivityRespVO activity1 = new AppCombinationActivityRespVO();  
37 - activity1.setId(1L);  
38 - activity1.setName("618 大拼团");  
39 - activity1.setUserSize(3);  
40 - activity1.setSpuId(2048L);  
41 - activity1.setPicUrl("https://static.iocoder.cn/mall/a79f5d2ea6bf0c3c11b2127332dfe2df.jpg");  
42 - activity1.setMarketPrice(50);  
43 - activity1.setCombinationPrice(100);  
44 - activityList.add(activity1); 52 + List<CombinationActivityDO> list = activityService.getCombinationActivityAppList(count);
  53 + if (CollUtil.isEmpty(list)) {
  54 + return success(CombinationActivityConvert.INSTANCE.convertAppList(list));
  55 + }
45 56
46 - AppCombinationActivityRespVO activity2 = new AppCombinationActivityRespVO();  
47 - activity2.setId(2L);  
48 - activity2.setName("双十一拼团");  
49 - activity2.setUserSize(5);  
50 - activity2.setSpuId(4096L);  
51 - activity2.setPicUrl("https://static.iocoder.cn/mall/132.jpeg");  
52 - activity2.setMarketPrice(100);  
53 - activity2.setCombinationPrice(200);  
54 - activityList.add(activity2);  
55 -  
56 - return success(activityList); 57 + List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(list, CombinationActivityDO::getSpuId));
  58 + // TODO 芋艿:增加 Spring Cache
  59 + return success(CombinationActivityConvert.INSTANCE.convertAppList(list, spuList));
57 } 60 }
58 61
59 @GetMapping("/page") 62 @GetMapping("/page")
60 @Operation(summary = "获得拼团活动分页") 63 @Operation(summary = "获得拼团活动分页")
61 public CommonResult<PageResult<AppCombinationActivityRespVO>> getCombinationActivityPage(PageParam pageParam) { 64 public CommonResult<PageResult<AppCombinationActivityRespVO>> getCombinationActivityPage(PageParam pageParam) {
62 - List<AppCombinationActivityRespVO> activityList = new ArrayList<>();  
63 - AppCombinationActivityRespVO activity1 = new AppCombinationActivityRespVO();  
64 - activity1.setId(1L);  
65 - activity1.setName("618 大拼团");  
66 - activity1.setUserSize(3);  
67 - activity1.setSpuId(2048L);  
68 - activity1.setPicUrl("商品图片地址");  
69 - activity1.setMarketPrice(50);  
70 - activity1.setCombinationPrice(100);  
71 - activityList.add(activity1);  
72 -  
73 - AppCombinationActivityRespVO activity2 = new AppCombinationActivityRespVO();  
74 - activity2.setId(2L);  
75 - activity2.setName("双十一拼团");  
76 - activity2.setUserSize(5);  
77 - activity2.setSpuId(4096L);  
78 - activity2.setPicUrl("商品图片地址");  
79 - activity2.setMarketPrice(100);  
80 - activity2.setCombinationPrice(200);  
81 - activityList.add(activity2); 65 + PageResult<CombinationActivityDO> result = activityService.getCombinationActivityAppPage(pageParam);
  66 + if (CollUtil.isEmpty(result.getList())) {
  67 + return success(PageResult.empty(result.getTotal()));
  68 + }
82 69
83 - return success(new PageResult<>(activityList, 2L)); 70 + List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(result.getList(), CombinationActivityDO::getSpuId));
  71 + return success(CombinationActivityConvert.INSTANCE.convertAppPage(result, spuList));
84 } 72 }
85 73
86 @GetMapping("/get-detail") 74 @GetMapping("/get-detail")
87 @Operation(summary = "获得拼团活动明细") 75 @Operation(summary = "获得拼团活动明细")
88 @Parameter(name = "id", description = "活动编号", required = true, example = "1024") 76 @Parameter(name = "id", description = "活动编号", required = true, example = "1024")
89 public CommonResult<AppCombinationActivityDetailRespVO> getCombinationActivityDetail(@RequestParam("id") Long id) { 77 public CommonResult<AppCombinationActivityDetailRespVO> getCombinationActivityDetail(@RequestParam("id") Long id) {
90 - // TODO 芋艿:如果禁用的时候,需要抛出异常;  
91 - AppCombinationActivityDetailRespVO obj = new AppCombinationActivityDetailRespVO();  
92 - // 设置其属性的值  
93 - obj.setId(id);  
94 - obj.setName("晚九点限时秒杀");  
95 - obj.setStatus(1);  
96 - obj.setStartTime(LocalDateTime.of(2023, 6, 15, 0, 0, 0));  
97 - obj.setEndTime(LocalDateTime.of(2023, 6, 20, 23, 59, 0));  
98 - obj.setUserSize(2);  
99 - obj.setSuccessCount(100);  
100 - obj.setSpuId(633L);  
101 - obj.setSingleLimitCount(2);  
102 - obj.setTotalLimitCount(3); 78 + // 1、获取活动
  79 + CombinationActivityDO combinationActivity = activityService.getCombinationActivity(id);
  80 + if (combinationActivity == null) {
  81 + return success(null);
  82 + }
  83 + if (ObjectUtil.equal(combinationActivity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) {
  84 + throw exception(COMBINATION_ACTIVITY_APP_STATUS_DISABLE);
  85 + }
103 86
104 - // 创建一个Product对象的列表  
105 - List<AppCombinationActivityDetailRespVO.Product> productList = new ArrayList<>();  
106 - // 创建三个新的Product对象并设置其属性的值  
107 - AppCombinationActivityDetailRespVO.Product product1 = new AppCombinationActivityDetailRespVO.Product();  
108 - product1.setSkuId(1L);  
109 - product1.setCombinationPrice(100);  
110 - // 将第一个Product对象添加到列表中  
111 - productList.add(product1);  
112 - // 创建第二个Product对象并设置其属性的值  
113 - AppCombinationActivityDetailRespVO.Product product2 = new AppCombinationActivityDetailRespVO.Product();  
114 - product2.setSkuId(2L);  
115 - product2.setCombinationPrice(200);  
116 - // 将第二个Product对象添加到列表中  
117 - productList.add(product2);  
118 - // 创建第三个Product对象并设置其属性的值  
119 - AppCombinationActivityDetailRespVO.Product product3 = new AppCombinationActivityDetailRespVO.Product();  
120 - product3.setSkuId(3L);  
121 - product3.setCombinationPrice(300);  
122 - // 将第三个Product对象添加到列表中  
123 - productList.add(product3);  
124 - // 将Product列表设置为对象的属性值  
125 - obj.setProducts(productList);  
126 - return success(obj); 87 + // 2、获取活动商品
  88 + List<CombinationProductDO> products = activityService.getCombinationProductsByActivityIds(Arrays.asList(combinationActivity.getId()));
  89 + return success(CombinationActivityConvert.INSTANCE.convert3(combinationActivity, products));
127 } 90 }
128 91
129 } 92 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/vo/activity/AppCombinationActivityRespVO.java
@@ -28,7 +28,6 @@ public class AppCombinationActivityRespVO { @@ -28,7 +28,6 @@ public class AppCombinationActivityRespVO {
28 private Integer marketPrice; 28 private Integer marketPrice;
29 29
30 @Schema(description = "拼团金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") 30 @Schema(description = "拼团金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
31 - // 从拼团商品里取最低价  
32 private Integer combinationPrice; 31 private Integer combinationPrice;
33 32
34 } 33 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java
@@ -4,7 +4,6 @@ import cn.hutool.core.util.ObjectUtil; @@ -4,7 +4,6 @@ import cn.hutool.core.util.ObjectUtil;
4 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 4 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 5 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;  
8 import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; 7 import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
9 import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; 8 import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
10 import cn.iocoder.yudao.module.promotion.controller.app.seckill.vo.activity.AppSeckillActivityDetailRespVO; 9 import cn.iocoder.yudao.module.promotion.controller.app.seckill.vo.activity.AppSeckillActivityDetailRespVO;
@@ -33,10 +32,9 @@ import java.util.List; @@ -33,10 +32,9 @@ import java.util.List;
33 32
34 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 33 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
35 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 34 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
36 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList;  
37 -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.findFirst; 35 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
38 import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.isBetween; 36 import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.isBetween;
39 -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.SECKILL_ACTIVITY_FAIL_STATUS_CLOSED; 37 +import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.SECKILL_ACTIVITY_APP_STATUS_CLOSED;
40 38
41 @Tag(name = "用户 App - 秒杀活动") 39 @Tag(name = "用户 App - 秒杀活动")
42 @RestController 40 @RestController
@@ -53,8 +51,7 @@ public class AppSeckillActivityController { @@ -53,8 +51,7 @@ public class AppSeckillActivityController {
53 private ProductSpuApi spuApi; 51 private ProductSpuApi spuApi;
54 52
55 @GetMapping("/get-now") 53 @GetMapping("/get-now")
56 - @Operation(summary = "获得当前秒杀活动") // 提供给首页使用  
57 - // TODO 芋艿:需要增加 spring cache 54 + @Operation(summary = "获得当前秒杀活动", description = "获取当前正在进行的活动,提供给首页使用")
58 public CommonResult<AppSeckillActivityNowRespVO> getNowSeckillActivity() { 55 public CommonResult<AppSeckillActivityNowRespVO> getNowSeckillActivity() {
59 // 1、获取当前时间处在哪个秒杀阶段 56 // 1、获取当前时间处在哪个秒杀阶段
60 List<SeckillConfigDO> configList = configService.getSeckillConfigList(); 57 List<SeckillConfigDO> configList = configService.getSeckillConfigList();
@@ -69,7 +66,8 @@ public class AppSeckillActivityController { @@ -69,7 +66,8 @@ public class AppSeckillActivityController {
69 List<SeckillActivityDO> activityList = activityService.getSeckillActivityListByConfigIds(Arrays.asList(filteredConfig.getId())); 66 List<SeckillActivityDO> activityList = activityService.getSeckillActivityListByConfigIds(Arrays.asList(filteredConfig.getId()));
70 List<SeckillActivityDO> filteredList = filterList(activityList, item -> ObjectUtil.equal(item.getStatus(), CommonStatusEnum.ENABLE.getStatus())); 67 List<SeckillActivityDO> filteredList = filterList(activityList, item -> ObjectUtil.equal(item.getStatus(), CommonStatusEnum.ENABLE.getStatus()));
71 // 2、1 获取 spu 信息 68 // 2、1 获取 spu 信息
72 - List<ProductSpuRespDTO> spuList = spuApi.getSpuList(CollectionUtils.convertList(filteredList, SeckillActivityDO::getSpuId)); 69 + List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(filteredList, SeckillActivityDO::getSpuId));
  70 + // TODO 芋艿:需要增加 spring cache
73 return success(SeckillActivityConvert.INSTANCE.convert(filteredConfig, filteredList, spuList)); 71 return success(SeckillActivityConvert.INSTANCE.convert(filteredConfig, filteredList, spuList));
74 } 72 }
75 73
@@ -79,7 +77,7 @@ public class AppSeckillActivityController { @@ -79,7 +77,7 @@ public class AppSeckillActivityController {
79 // 1、查询满足当前阶段的活动 77 // 1、查询满足当前阶段的活动
80 PageResult<SeckillActivityDO> pageResult = activityService.getSeckillActivityAppPageByConfigId(pageReqVO); 78 PageResult<SeckillActivityDO> pageResult = activityService.getSeckillActivityAppPageByConfigId(pageReqVO);
81 // 1、1 获取 spu 信息 79 // 1、1 获取 spu 信息
82 - List<ProductSpuRespDTO> spuList = spuApi.getSpuList(CollectionUtils.convertList(pageResult.getList(), SeckillActivityDO::getSpuId)); 80 + List<ProductSpuRespDTO> spuList = spuApi.getSpuList(convertList(pageResult.getList(), SeckillActivityDO::getSpuId));
83 return success(SeckillActivityConvert.INSTANCE.convertPage(pageResult, spuList)); 81 return success(SeckillActivityConvert.INSTANCE.convertPage(pageResult, spuList));
84 } 82 }
85 83
@@ -101,9 +99,8 @@ public class AppSeckillActivityController { @@ -101,9 +99,8 @@ public class AppSeckillActivityController {
101 if (seckillActivity == null) { 99 if (seckillActivity == null) {
102 return success(null); 100 return success(null);
103 } 101 }
104 - // TODO 芋艿:如果禁用的时候,需要抛出异常;  
105 if (ObjectUtil.equal(seckillActivity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) { 102 if (ObjectUtil.equal(seckillActivity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) {
106 - throw exception(SECKILL_ACTIVITY_FAIL_STATUS_CLOSED); 103 + throw exception(SECKILL_ACTIVITY_APP_STATUS_CLOSED);
107 } 104 }
108 105
109 // 3、获取活动商品 106 // 3、获取活动商品
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java
@@ -13,6 +13,8 @@ import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activit @@ -13,6 +13,8 @@ import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activit
13 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO; 13 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO;
14 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product.CombinationProductBaseVO; 14 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product.CombinationProductBaseVO;
15 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product.CombinationProductRespVO; 15 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product.CombinationProductRespVO;
  16 +import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.activity.AppCombinationActivityDetailRespVO;
  17 +import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.activity.AppCombinationActivityRespVO;
16 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; 18 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO;
17 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO; 19 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO;
18 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationRecordDO; 20 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationRecordDO;
@@ -25,6 +27,7 @@ import java.util.List; @@ -25,6 +27,7 @@ import java.util.List;
25 import java.util.Map; 27 import java.util.Map;
26 28
27 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; 29 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
  30 +import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
28 31
29 /** 32 /**
30 * 拼团活动 Convert 33 * 拼团活动 Convert
@@ -109,4 +112,44 @@ public interface CombinationActivityConvert { @@ -109,4 +112,44 @@ public interface CombinationActivityConvert {
109 112
110 List<CombinationRecordRespDTO> convert(List<CombinationRecordDO> bean); 113 List<CombinationRecordRespDTO> convert(List<CombinationRecordDO> bean);
111 114
  115 + List<AppCombinationActivityRespVO> convertAppList(List<CombinationActivityDO> list);
  116 +
  117 + default List<AppCombinationActivityRespVO> convertAppList(List<CombinationActivityDO> list, List<ProductSpuRespDTO> spuList) {
  118 + List<AppCombinationActivityRespVO> activityList = convertAppList(list);
  119 + Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
  120 + return CollectionUtils.convertList(activityList, item -> {
  121 + findAndThen(spuMap, item.getSpuId(), spu -> {
  122 + item.setPicUrl(spu.getPicUrl());
  123 + item.setMarketPrice(spu.getMarketPrice());
  124 + });
  125 + return item;
  126 + });
  127 + }
  128 +
  129 + PageResult<AppCombinationActivityRespVO> convertAppPage(PageResult<CombinationActivityDO> result);
  130 +
  131 + default PageResult<AppCombinationActivityRespVO> convertAppPage(PageResult<CombinationActivityDO> result, List<ProductSpuRespDTO> spuList) {
  132 + PageResult<AppCombinationActivityRespVO> appPage = convertAppPage(result);
  133 + Map<Long, ProductSpuRespDTO> spuMap = convertMap(spuList, ProductSpuRespDTO::getId);
  134 + List<AppCombinationActivityRespVO> list = CollectionUtils.convertList(appPage.getList(), item -> {
  135 + findAndThen(spuMap, item.getSpuId(), spu -> {
  136 + item.setPicUrl(spu.getPicUrl());
  137 + item.setMarketPrice(spu.getMarketPrice());
  138 + });
  139 + return item;
  140 + });
  141 + appPage.setList(list);
  142 + return appPage;
  143 + }
  144 +
  145 + AppCombinationActivityDetailRespVO convert2(CombinationActivityDO combinationActivity);
  146 +
  147 + List<AppCombinationActivityDetailRespVO.Product> convertList1(List<CombinationProductDO> products);
  148 +
  149 + default AppCombinationActivityDetailRespVO convert3(CombinationActivityDO combinationActivity, List<CombinationProductDO> products) {
  150 + AppCombinationActivityDetailRespVO detailRespVO = convert2(combinationActivity);
  151 + detailRespVO.setProducts(convertList1(products));
  152 + return detailRespVO;
  153 + }
  154 +
112 } 155 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java
1 package cn.iocoder.yudao.module.promotion.dal.mysql.combination; 1 package cn.iocoder.yudao.module.promotion.dal.mysql.combination;
2 2
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 5 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 6 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -28,4 +29,9 @@ public interface CombinationActivityMapper extends BaseMapperX&lt;CombinationActivi @@ -28,4 +29,9 @@ public interface CombinationActivityMapper extends BaseMapperX&lt;CombinationActivi
28 return selectList(CombinationActivityDO::getStatus, status); 29 return selectList(CombinationActivityDO::getStatus, status);
29 } 30 }
30 31
  32 + default PageResult<CombinationActivityDO> selectAppPage(PageParam pageParam, Integer status) {
  33 + return selectPage(pageParam, new LambdaQueryWrapperX<CombinationActivityDO>()
  34 + .eq(CombinationActivityDO::getStatus, status));
  35 + }
  36 +
31 } 37 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java
@@ -75,7 +75,8 @@ public interface BargainActivityService { @@ -75,7 +75,8 @@ public interface BargainActivityService {
75 * 获取 APP 端活动展示数据 75 * 获取 APP 端活动展示数据
76 * 76 *
77 * @param count 需要的数量 77 * @param count 需要的数量
78 - * @return 78 + * @return 活动列表
79 */ 79 */
80 List<BargainActivityDO> getBargainActivityAppList(Integer count); 80 List<BargainActivityDO> getBargainActivityAppList(Integer count);
  81 +
81 } 82 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java
1 package cn.iocoder.yudao.module.promotion.service.combination; 1 package cn.iocoder.yudao.module.promotion.service.combination;
2 2
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO; 5 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO;
5 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO; 6 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO;
@@ -82,4 +83,20 @@ public interface CombinationActivityService { @@ -82,4 +83,20 @@ public interface CombinationActivityService {
82 */ 83 */
83 void validateCombination(Long activityId, Long userId, Long skuId, Integer count); 84 void validateCombination(Long activityId, Long userId, Long skuId, Integer count);
84 85
  86 + /**
  87 + * 获取 APP 端活动展示数据
  88 + *
  89 + * @param count 需要的数量
  90 + * @return 活动列表
  91 + */
  92 + List<CombinationActivityDO> getCombinationActivityAppList(Integer count);
  93 +
  94 + /**
  95 + * 获取 APP 端活动分页数据
  96 + *
  97 + * @param pageParam 分页参数
  98 + * @return 活动分页数据
  99 + */
  100 + PageResult<CombinationActivityDO> getCombinationActivityAppPage(PageParam pageParam);
  101 +
85 } 102 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.promotion.service.combination; @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.promotion.service.combination;
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  6 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 8 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
8 import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; 9 import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
@@ -245,4 +246,20 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic @@ -245,4 +246,20 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic
245 246
246 } 247 }
247 248
  249 + @Override
  250 + public List<CombinationActivityDO> getCombinationActivityAppList(Integer count) {
  251 + if (count == null) {
  252 + count = 6;
  253 + }
  254 +
  255 + PageResult<CombinationActivityDO> result = combinationActivityMapper.selectAppPage(new PageParam().setPageSize(count),
  256 + CommonStatusEnum.ENABLE.getStatus());
  257 + return result.getList();
  258 + }
  259 +
  260 + @Override
  261 + public PageResult<CombinationActivityDO> getCombinationActivityAppPage(PageParam pageParam) {
  262 + return combinationActivityMapper.selectAppPage(pageParam, CommonStatusEnum.ENABLE.getStatus());
  263 + }
  264 +
248 } 265 }