From 1d2a6ad065a5459a4321a51c13dc316b6ebd8d5f Mon Sep 17 00:00:00 2001 From: puhui999 Date: Wed, 20 Sep 2023 10:09:15 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=8B=BC=E5=9B=A2=E6=B4=BB=E5=8A=A8:=20?= =?UTF-8?q?=E5=AE=8C=E5=96=84=20app=20=E7=AB=AF=E8=8E=B7=E5=8F=96=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E5=88=86=E9=A1=B5=E3=80=81=E5=88=97=E8=A1=A8=E3=80=81?= =?UTF-8?q?=E8=AF=A6=E6=83=85=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../promotion/enums/ErrorCodeConstants.java | 3 +- .../AppCombinationActivityController.java | 127 +++++++----------- .../AppCombinationActivityRespVO.java | 1 - .../seckill/AppSeckillActivityController.java | 17 +-- .../CombinationActivityConvert.java | 43 ++++++ .../CombinationActivityMapper.java | 6 + .../bargain/BargainActivityService.java | 3 +- .../CombinationActivityService.java | 17 +++ .../CombinationActivityServiceImpl.java | 17 +++ 9 files changed, 139 insertions(+), 95 deletions(-) diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java index c39fbb316c..798e59851e 100644 --- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java +++ b/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 { ErrorCode SECKILL_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1013008004, "秒杀活动未关闭或未结束,不能删除"); ErrorCode SECKILL_ACTIVITY_CLOSE_FAIL_STATUS_CLOSED = new ErrorCode(1013008005, "秒杀活动已关闭,不能重复关闭"); ErrorCode SECKILL_ACTIVITY_UPDATE_STOCK_FAIL = new ErrorCode(1013008006, "秒杀失败,原因秒杀库存不足"); - ErrorCode SECKILL_ACTIVITY_FAIL_STATUS_CLOSED = new ErrorCode(1013008007, "秒杀活动已关闭"); + ErrorCode SECKILL_ACTIVITY_APP_STATUS_CLOSED = new ErrorCode(1013008007, "秒杀活动已关闭"); // ========== 秒杀时段 1013009000 ========== ErrorCode SECKILL_CONFIG_NOT_EXISTS = new ErrorCode(1013009000, "秒杀时段不存在"); @@ -69,6 +69,7 @@ public interface ErrorCodeConstants { ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE_NOT_UPDATE = new ErrorCode(1013010002, "拼团活动已关闭不能修改"); ErrorCode COMBINATION_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1013010003, "拼团活动未关闭或未结束,不能删除"); ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE = new ErrorCode(1013010004, "拼团失败,原因:拼团活动已关闭"); + ErrorCode COMBINATION_ACTIVITY_APP_STATUS_DISABLE = new ErrorCode(1013010005, "拼团活动已关闭"); // ========== 拼团记录 1013011000 ========== ErrorCode COMBINATION_RECORD_NOT_EXISTS = new ErrorCode(1013011000, "拼团不存在"); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java index 75693f90b8..e2c8c67bde 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java @@ -1,10 +1,19 @@ package cn.iocoder.yudao.module.promotion.controller.app.combination; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; +import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.activity.AppCombinationActivityDetailRespVO; import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.activity.AppCombinationActivityRespVO; +import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert; +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO; +import cn.iocoder.yudao.module.promotion.service.combination.CombinationActivityService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -14,11 +23,14 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import java.time.LocalDateTime; -import java.util.ArrayList; +import javax.annotation.Resource; +import java.util.Arrays; import java.util.List; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; +import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COMBINATION_ACTIVITY_APP_STATUS_DISABLE; @Tag(name = "用户 APP - 拼团活动") @RestController @@ -26,104 +38,55 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Validated public class AppCombinationActivityController { + @Resource + private CombinationActivityService activityService; + @Resource + private ProductSpuApi spuApi; + + @GetMapping("/list") @Operation(summary = "获得拼团活动列表", description = "用于小程序首页") - // TODO 芋艿:增加 Spring Cache - // TODO 芋艿:缺少 swagger 注解 + @Parameter(name = "count", description = "需要展示的数量", example = "6") public CommonResult> getCombinationActivityList( @RequestParam(name = "count", defaultValue = "6") Integer count) { - List activityList = new ArrayList<>(); - AppCombinationActivityRespVO activity1 = new AppCombinationActivityRespVO(); - activity1.setId(1L); - activity1.setName("618 大拼团"); - activity1.setUserSize(3); - activity1.setSpuId(2048L); - activity1.setPicUrl("https://static.iocoder.cn/mall/a79f5d2ea6bf0c3c11b2127332dfe2df.jpg"); - activity1.setMarketPrice(50); - activity1.setCombinationPrice(100); - activityList.add(activity1); + List list = activityService.getCombinationActivityAppList(count); + if (CollUtil.isEmpty(list)) { + return success(CombinationActivityConvert.INSTANCE.convertAppList(list)); + } - AppCombinationActivityRespVO activity2 = new AppCombinationActivityRespVO(); - activity2.setId(2L); - activity2.setName("双十一拼团"); - activity2.setUserSize(5); - activity2.setSpuId(4096L); - activity2.setPicUrl("https://static.iocoder.cn/mall/132.jpeg"); - activity2.setMarketPrice(100); - activity2.setCombinationPrice(200); - activityList.add(activity2); - - return success(activityList); + List spuList = spuApi.getSpuList(convertList(list, CombinationActivityDO::getSpuId)); + // TODO 芋艿:增加 Spring Cache + return success(CombinationActivityConvert.INSTANCE.convertAppList(list, spuList)); } @GetMapping("/page") @Operation(summary = "获得拼团活动分页") public CommonResult> getCombinationActivityPage(PageParam pageParam) { - List activityList = new ArrayList<>(); - AppCombinationActivityRespVO activity1 = new AppCombinationActivityRespVO(); - activity1.setId(1L); - activity1.setName("618 大拼团"); - activity1.setUserSize(3); - activity1.setSpuId(2048L); - activity1.setPicUrl("商品图片地址"); - activity1.setMarketPrice(50); - activity1.setCombinationPrice(100); - activityList.add(activity1); + PageResult result = activityService.getCombinationActivityAppPage(pageParam); + if (CollUtil.isEmpty(result.getList())) { + return success(PageResult.empty(result.getTotal())); + } - AppCombinationActivityRespVO activity2 = new AppCombinationActivityRespVO(); - activity2.setId(2L); - activity2.setName("双十一拼团"); - activity2.setUserSize(5); - activity2.setSpuId(4096L); - activity2.setPicUrl("商品图片地址"); - activity2.setMarketPrice(100); - activity2.setCombinationPrice(200); - activityList.add(activity2); - - return success(new PageResult<>(activityList, 2L)); + List spuList = spuApi.getSpuList(convertList(result.getList(), CombinationActivityDO::getSpuId)); + return success(CombinationActivityConvert.INSTANCE.convertAppPage(result, spuList)); } @GetMapping("/get-detail") @Operation(summary = "获得拼团活动明细") @Parameter(name = "id", description = "活动编号", required = true, example = "1024") public CommonResult getCombinationActivityDetail(@RequestParam("id") Long id) { - // TODO 芋艿:如果禁用的时候,需要抛出异常; - AppCombinationActivityDetailRespVO obj = new AppCombinationActivityDetailRespVO(); - // 设置其属性的值 - obj.setId(id); - obj.setName("晚九点限时秒杀"); - obj.setStatus(1); - obj.setStartTime(LocalDateTime.of(2023, 6, 15, 0, 0, 0)); - obj.setEndTime(LocalDateTime.of(2023, 6, 20, 23, 59, 0)); - obj.setUserSize(2); - obj.setSuccessCount(100); - obj.setSpuId(633L); - obj.setSingleLimitCount(2); - obj.setTotalLimitCount(3); + // 1、获取活动 + CombinationActivityDO combinationActivity = activityService.getCombinationActivity(id); + if (combinationActivity == null) { + return success(null); + } + if (ObjectUtil.equal(combinationActivity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) { + throw exception(COMBINATION_ACTIVITY_APP_STATUS_DISABLE); + } - // 创建一个Product对象的列表 - List productList = new ArrayList<>(); - // 创建三个新的Product对象并设置其属性的值 - AppCombinationActivityDetailRespVO.Product product1 = new AppCombinationActivityDetailRespVO.Product(); - product1.setSkuId(1L); - product1.setCombinationPrice(100); - // 将第一个Product对象添加到列表中 - productList.add(product1); - // 创建第二个Product对象并设置其属性的值 - AppCombinationActivityDetailRespVO.Product product2 = new AppCombinationActivityDetailRespVO.Product(); - product2.setSkuId(2L); - product2.setCombinationPrice(200); - // 将第二个Product对象添加到列表中 - productList.add(product2); - // 创建第三个Product对象并设置其属性的值 - AppCombinationActivityDetailRespVO.Product product3 = new AppCombinationActivityDetailRespVO.Product(); - product3.setSkuId(3L); - product3.setCombinationPrice(300); - // 将第三个Product对象添加到列表中 - productList.add(product3); - // 将Product列表设置为对象的属性值 - obj.setProducts(productList); - return success(obj); + // 2、获取活动商品 + List products = activityService.getCombinationProductsByActivityIds(Arrays.asList(combinationActivity.getId())); + return success(CombinationActivityConvert.INSTANCE.convert3(combinationActivity, products)); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/vo/activity/AppCombinationActivityRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/vo/activity/AppCombinationActivityRespVO.java index b536e8abe8..64462a3771 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/vo/activity/AppCombinationActivityRespVO.java +++ b/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 { private Integer marketPrice; @Schema(description = "拼团金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") - // 从拼团商品里取最低价 private Integer combinationPrice; } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java index 8037c36cbb..0e047f1a5b 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java +++ b/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; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; import cn.iocoder.yudao.module.promotion.controller.app.seckill.vo.activity.AppSeckillActivityDetailRespVO; @@ -33,10 +32,9 @@ import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.findFirst; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.isBetween; -import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.SECKILL_ACTIVITY_FAIL_STATUS_CLOSED; +import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.SECKILL_ACTIVITY_APP_STATUS_CLOSED; @Tag(name = "用户 App - 秒杀活动") @RestController @@ -53,8 +51,7 @@ public class AppSeckillActivityController { private ProductSpuApi spuApi; @GetMapping("/get-now") - @Operation(summary = "获得当前秒杀活动") // 提供给首页使用 - // TODO 芋艿:需要增加 spring cache + @Operation(summary = "获得当前秒杀活动", description = "获取当前正在进行的活动,提供给首页使用") public CommonResult getNowSeckillActivity() { // 1、获取当前时间处在哪个秒杀阶段 List configList = configService.getSeckillConfigList(); @@ -69,7 +66,8 @@ public class AppSeckillActivityController { List activityList = activityService.getSeckillActivityListByConfigIds(Arrays.asList(filteredConfig.getId())); List filteredList = filterList(activityList, item -> ObjectUtil.equal(item.getStatus(), CommonStatusEnum.ENABLE.getStatus())); // 2、1 获取 spu 信息 - List spuList = spuApi.getSpuList(CollectionUtils.convertList(filteredList, SeckillActivityDO::getSpuId)); + List spuList = spuApi.getSpuList(convertList(filteredList, SeckillActivityDO::getSpuId)); + // TODO 芋艿:需要增加 spring cache return success(SeckillActivityConvert.INSTANCE.convert(filteredConfig, filteredList, spuList)); } @@ -79,7 +77,7 @@ public class AppSeckillActivityController { // 1、查询满足当前阶段的活动 PageResult pageResult = activityService.getSeckillActivityAppPageByConfigId(pageReqVO); // 1、1 获取 spu 信息 - List spuList = spuApi.getSpuList(CollectionUtils.convertList(pageResult.getList(), SeckillActivityDO::getSpuId)); + List spuList = spuApi.getSpuList(convertList(pageResult.getList(), SeckillActivityDO::getSpuId)); return success(SeckillActivityConvert.INSTANCE.convertPage(pageResult, spuList)); } @@ -101,9 +99,8 @@ public class AppSeckillActivityController { if (seckillActivity == null) { return success(null); } - // TODO 芋艿:如果禁用的时候,需要抛出异常; if (ObjectUtil.equal(seckillActivity.getStatus(), CommonStatusEnum.DISABLE.getStatus())) { - throw exception(SECKILL_ACTIVITY_FAIL_STATUS_CLOSED); + throw exception(SECKILL_ACTIVITY_APP_STATUS_CLOSED); } // 3、获取活动商品 diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java index a6e086cc21..67b300c44d 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java +++ b/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 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO; import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product.CombinationProductBaseVO; import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product.CombinationProductRespVO; +import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.activity.AppCombinationActivityDetailRespVO; +import cn.iocoder.yudao.module.promotion.controller.app.combination.vo.activity.AppCombinationActivityRespVO; import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationProductDO; import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationRecordDO; @@ -25,6 +27,7 @@ import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; +import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; /** * 拼团活动 Convert @@ -109,4 +112,44 @@ public interface CombinationActivityConvert { List convert(List bean); + List convertAppList(List list); + + default List convertAppList(List list, List spuList) { + List activityList = convertAppList(list); + Map spuMap = convertMap(spuList, ProductSpuRespDTO::getId); + return CollectionUtils.convertList(activityList, item -> { + findAndThen(spuMap, item.getSpuId(), spu -> { + item.setPicUrl(spu.getPicUrl()); + item.setMarketPrice(spu.getMarketPrice()); + }); + return item; + }); + } + + PageResult convertAppPage(PageResult result); + + default PageResult convertAppPage(PageResult result, List spuList) { + PageResult appPage = convertAppPage(result); + Map spuMap = convertMap(spuList, ProductSpuRespDTO::getId); + List list = CollectionUtils.convertList(appPage.getList(), item -> { + findAndThen(spuMap, item.getSpuId(), spu -> { + item.setPicUrl(spu.getPicUrl()); + item.setMarketPrice(spu.getMarketPrice()); + }); + return item; + }); + appPage.setList(list); + return appPage; + } + + AppCombinationActivityDetailRespVO convert2(CombinationActivityDO combinationActivity); + + List convertList1(List products); + + default AppCombinationActivityDetailRespVO convert3(CombinationActivityDO combinationActivity, List products) { + AppCombinationActivityDetailRespVO detailRespVO = convert2(combinationActivity); + detailRespVO.setProducts(convertList1(products)); + return detailRespVO; + } + } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java index c2868d1911..76e914f3aa 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.promotion.dal.mysql.combination; +import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -28,4 +29,9 @@ public interface CombinationActivityMapper extends BaseMapperX selectAppPage(PageParam pageParam, Integer status) { + return selectPage(pageParam, new LambdaQueryWrapperX() + .eq(CombinationActivityDO::getStatus, status)); + } + } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java index e59e1ce3e5..d560f65495 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java +++ b/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 { * 获取 APP 端活动展示数据 * * @param count 需要的数量 - * @return + * @return 活动列表 */ List getBargainActivityAppList(Integer count); + } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java index c3e0f53133..235bf142ce 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.promotion.service.combination; +import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO; import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO; @@ -82,4 +83,20 @@ public interface CombinationActivityService { */ void validateCombination(Long activityId, Long userId, Long skuId, Integer count); + /** + * 获取 APP 端活动展示数据 + * + * @param count 需要的数量 + * @return 活动列表 + */ + List getCombinationActivityAppList(Integer count); + + /** + * 获取 APP 端活动分页数据 + * + * @param pageParam 分页参数 + * @return 活动分页数据 + */ + PageResult getCombinationActivityAppPage(PageParam pageParam); + } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java index a9f95fa624..e29bc69a88 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java +++ b/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; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; @@ -245,4 +246,20 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic } + @Override + public List getCombinationActivityAppList(Integer count) { + if (count == null) { + count = 6; + } + + PageResult result = combinationActivityMapper.selectAppPage(new PageParam().setPageSize(count), + CommonStatusEnum.ENABLE.getStatus()); + return result.getList(); + } + + @Override + public PageResult getCombinationActivityAppPage(PageParam pageParam) { + return combinationActivityMapper.selectAppPage(pageParam, CommonStatusEnum.ENABLE.getStatus()); + } + } From 6ef94ade6a5d0ea850e67975d43b0c233797b881 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Wed, 20 Sep 2023 16:06:29 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=92=8C=E6=B4=BB=E5=8A=A8=20review=20=E6=8F=90=E5=88=B0?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/util/date/LocalDateTimeUtils.java | 11 ---- .../api/seckill/SeckillActivityApi.java | 5 +- .../api/seckill/SeckillActivityApiImpl.java | 4 +- .../bargain/AppBargainActivityController.java | 5 +- .../AppCombinationActivityController.java | 5 +- .../seckill/AppSeckillActivityController.java | 30 +++------ .../seckill/AppSeckillConfigController.java | 11 +--- .../bargain/BargainActivityConvert.java | 12 +--- .../CombinationActivityConvert.java | 32 ++++------ .../SeckillActivityConvert.java | 28 ++++---- .../mysql/bargain/BargainActivityMapper.java | 25 +++++++- .../CombinationActivityMapper.java | 22 ++++++- .../bargain/BargainActivityService.java | 10 ++- .../bargain/BargainActivityServiceImpl.java | 15 ++--- .../CombinationActivityService.java | 14 ++-- .../CombinationActivityServiceImpl.java | 17 ++--- .../seckill/SeckillActivityService.java | 13 +++- .../seckill/SeckillActivityServiceImpl.java | 19 ++++-- .../service/seckill/SeckillConfigService.java | 9 +++ .../seckill/SeckillConfigServiceImpl.java | 8 +++ .../aftersale/TradeAfterSaleController.java | 6 +- .../aftersale/TradeAfterSaleConvert.java | 10 +-- ...pDTO.java => TradeAfterSaleLogRespVO.java} | 3 +- .../core/service/AfterSaleLogService.java | 4 +- .../aftersale/TradeAfterSaleServiceImpl.java | 4 +- .../order/TradeOrderUpdateServiceImpl.java | 64 +++++++++++-------- .../order/bo/TradeBeforeOrderCreateReqBO.java | 48 ++++++++++++-- 27 files changed, 248 insertions(+), 186 deletions(-) rename yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/dto/{TradeAfterSaleLogRespDTO.java => TradeAfterSaleLogRespVO.java} (95%) diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java index 275e9f5a19..414c0af7d8 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java @@ -43,17 +43,6 @@ public class LocalDateTimeUtils { return LocalDateTime.of(year, mouth, day, 0, 0, 0); } - /** - * 创建指定时间 - * - * @param timeStr 时间字符串 - * @return 指定时间 - */ - public static LocalDateTime buildTime(String timeStr) { - // TODO @puhui999:这个方法的实现,和 LocalDateTimeUtil.parse() 的差异点是啥呀 - return LocalDateTime.of(LocalDate.now(), LocalTime.parse(timeStr)); - } - public static LocalDateTime[] buildBetweenTime(int year1, int mouth1, int day1, int year2, int mouth2, int day2) { return new LocalDateTime[]{buildTime(year1, mouth1, day1), buildTime(year2, mouth2, day2)}; diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApi.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApi.java index ebe4bb0e5e..11cc22864d 100644 --- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApi.java +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApi.java @@ -7,14 +7,13 @@ package cn.iocoder.yudao.module.promotion.api.seckill; */ public interface SeckillActivityApi { - // TODO @puhui999:activityId 改成 id 好点哈; /** * 更新秒杀库存 * - * @param activityId 活动编号 + * @param id 活动编号 * @param skuId sku 编号 * @param count 数量 */ - void updateSeckillStock(Long activityId, Long skuId, Integer count); + void updateSeckillStock(Long id, Long skuId, Integer count); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApiImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApiImpl.java index 624af86c63..9a15a0ca9b 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApiImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApiImpl.java @@ -17,8 +17,8 @@ public class SeckillActivityApiImpl implements SeckillActivityApi { private SeckillActivityService activityService; @Override - public void updateSeckillStock(Long activityId, Long skuId, Integer count) { - activityService.updateSeckillStock(activityId, skuId, count); + public void updateSeckillStock(Long id, Long skuId, Integer count) { + activityService.updateSeckillStock(id, skuId, count); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainActivityController.java index 72facf935f..a996b45215 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainActivityController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainActivityController.java @@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; +import static cn.hutool.core.util.ObjectUtil.defaultIfNull; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; @@ -39,7 +40,7 @@ public class AppBargainActivityController { @GetMapping("/page") @Operation(summary = "获得砍价活动分页") public CommonResult> getBargainActivityPage(PageParam pageReqVO) { - PageResult result = bargainActivityService.getBargainActivityPageForApp(pageReqVO); + PageResult result = bargainActivityService.getBargainActivityPage(pageReqVO); if (CollUtil.isEmpty(result.getList())) { return success(PageResult.empty(result.getTotal())); } @@ -54,7 +55,7 @@ public class AppBargainActivityController { @Parameter(name = "count", description = "需要展示的数量", example = "6") public CommonResult> getBargainActivityList( @RequestParam(name = "count", defaultValue = "6") Integer count) { - List list = bargainActivityService.getBargainActivityListForApp(count); + List list = bargainActivityService.getBargainActivityListByCount(defaultIfNull(count, 6)); if (CollUtil.isEmpty(list)) { return success(BargainActivityConvert.INSTANCE.convertAppList(list)); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java index e2c8c67bde..d09292de90 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/combination/AppCombinationActivityController.java @@ -27,6 +27,7 @@ import javax.annotation.Resource; import java.util.Arrays; import java.util.List; +import static cn.hutool.core.util.ObjectUtil.defaultIfNull; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; @@ -49,7 +50,7 @@ public class AppCombinationActivityController { @Parameter(name = "count", description = "需要展示的数量", example = "6") public CommonResult> getCombinationActivityList( @RequestParam(name = "count", defaultValue = "6") Integer count) { - List list = activityService.getCombinationActivityAppList(count); + List list = activityService.getCombinationActivityListByCount(defaultIfNull(count, 6)); if (CollUtil.isEmpty(list)) { return success(CombinationActivityConvert.INSTANCE.convertAppList(list)); } @@ -62,7 +63,7 @@ public class AppCombinationActivityController { @GetMapping("/page") @Operation(summary = "获得拼团活动分页") public CommonResult> getCombinationActivityPage(PageParam pageParam) { - PageResult result = activityService.getCombinationActivityAppPage(pageParam); + PageResult result = activityService.getCombinationActivityPage(pageParam); if (CollUtil.isEmpty(result.getList())) { return success(PageResult.empty(result.getTotal())); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java index 0bb283db72..7ee0027ed1 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillActivityController.java @@ -27,13 +27,11 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.Arrays; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.isBetween; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.SECKILL_ACTIVITY_APP_STATUS_CLOSED; @Tag(name = "用户 App - 秒杀活动") @@ -54,22 +52,17 @@ public class AppSeckillActivityController { @Operation(summary = "获得当前秒杀活动", description = "获取当前正在进行的活动,提供给首页使用") public CommonResult getNowSeckillActivity() { // 1. 获取当前时间处在哪个秒杀阶段 - // TODO @puhui999:可以考虑在 service 写个方法;这样 controller 不用关注过多逻辑 - List configList = configService.getSeckillConfigList(); - SeckillConfigDO filteredConfig = findFirst(configList, config -> ObjectUtil.equal(config.getStatus(), - CommonStatusEnum.ENABLE.getStatus()) && isBetween(config.getStartTime(), config.getEndTime())); - if (filteredConfig == null) { // 时段不存在直接返回 null + SeckillConfigDO configList = configService.getSeckillConfigListByStatusOnCurrentTime(CommonStatusEnum.ENABLE.getStatus()); + if (configList == null) { // 时段不存在直接返回 null return success(null); } // 2. 查询满足当前阶段的活动 - // TODO @puhui999:最好直接返回开启的;不多查询数据 - List activityList = activityService.getSeckillActivityListByConfigIds(Arrays.asList(filteredConfig.getId())); - List filteredList = filterList(activityList, item -> ObjectUtil.equal(item.getStatus(), CommonStatusEnum.ENABLE.getStatus())); + List activityList = activityService.getSeckillActivityListByConfigIdAndStatus(configList.getId(), CommonStatusEnum.ENABLE.getStatus()); // 3 获取 spu 信息 - List spuList = spuApi.getSpuList(convertList(filteredList, SeckillActivityDO::getSpuId)); + List spuList = spuApi.getSpuList(convertList(activityList, SeckillActivityDO::getSpuId)); // TODO 芋艿:需要增加 spring cache - return success(SeckillActivityConvert.INSTANCE.convert(filteredConfig, filteredList, spuList)); + return success(SeckillActivityConvert.INSTANCE.convert(configList, activityList, spuList)); } @GetMapping("/page") @@ -87,12 +80,9 @@ public class AppSeckillActivityController { @Operation(summary = "获得秒杀活动明细") @Parameter(name = "id", description = "活动编号", required = true, example = "1024") public CommonResult getSeckillActivity(@RequestParam("id") Long id) { - // 1、获取当前时间处在哪个秒杀阶段 - // TODO puhui999:这里,和 58 行是雷同的 - List configList = configService.getSeckillConfigList(); - SeckillConfigDO filteredConfig = findFirst(configList, config -> ObjectUtil.equal(config.getStatus(), - CommonStatusEnum.ENABLE.getStatus()) && isBetween(config.getStartTime(), config.getEndTime())); - if (filteredConfig == null) { // 时段不存在直接返回 null + // 1. 获取当前时间处在哪个秒杀阶段 + SeckillConfigDO configList = configService.getSeckillConfigListByStatusOnCurrentTime(CommonStatusEnum.ENABLE.getStatus()); + if (configList == null) { // 时段不存在直接返回 null return success(null); } @@ -107,7 +97,7 @@ public class AppSeckillActivityController { // 3. 拼接数据 List products = activityService.getSeckillProductListByActivityId(seckillActivity.getId()); - return success(SeckillActivityConvert.INSTANCE.convert3(seckillActivity, products, filteredConfig)); + return success(SeckillActivityConvert.INSTANCE.convert3(seckillActivity, products, configList)); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillConfigController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillConfigController.java index fc30a2f24b..2795ca9a4d 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillConfigController.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/AppSeckillConfigController.java @@ -1,11 +1,9 @@ package cn.iocoder.yudao.module.promotion.controller.app.seckill; -import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.promotion.controller.app.seckill.vo.config.AppSeckillConfigRespVO; import cn.iocoder.yudao.module.promotion.convert.seckill.seckillconfig.SeckillConfigConvert; -import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillconfig.SeckillConfigDO; import cn.iocoder.yudao.module.promotion.service.seckill.SeckillConfigService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -15,7 +13,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.Collections; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -31,13 +28,7 @@ public class AppSeckillConfigController { @GetMapping("/list") @Operation(summary = "获得秒杀时间段列表") public CommonResult> getSeckillConfigList() { - List list = configService.getSeckillConfigListByStatus(CommonStatusEnum.ENABLE.getStatus()); - // TODO @puhui999:如果这种,不用判空也问题不大; - if (CollectionUtil.isEmpty(list)) { - return success(Collections.emptyList()); - } - - return success(SeckillConfigConvert.INSTANCE.convertList2(list)); + return success(SeckillConfigConvert.INSTANCE.convertList2(configService.getSeckillConfigListByStatus(CommonStatusEnum.ENABLE.getStatus()))); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/bargain/BargainActivityConvert.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/bargain/BargainActivityConvert.java index 24297990f4..954558b013 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/bargain/BargainActivityConvert.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/bargain/BargainActivityConvert.java @@ -46,9 +46,7 @@ public interface BargainActivityConvert { Map spuMap = convertMap(spuList, ProductSpuRespDTO::getId); List list = CollectionUtils.convertList(result.getList(), item -> { findAndThen(spuMap, item.getSpuId(), spu -> { - // TODO @puhui999:这里可以使用链式哈 - item.setPicUrl(spu.getPicUrl()); - item.setSpuName(spu.getName()); + item.setPicUrl(spu.getPicUrl()).setSpuName(spu.getName()); }); return item; }); @@ -76,9 +74,7 @@ public interface BargainActivityConvert { Map spuMap = convertMap(spuList, ProductSpuRespDTO::getId); List list = CollectionUtils.convertList(result.getList(), item -> { findAndThen(spuMap, item.getSpuId(), spu -> { - // TODO @puhui999:这里可以使用链式哈 - item.setPicUrl(spu.getPicUrl()); - item.setMarketPrice(spu.getMarketPrice()); + item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()); }); return item; }); @@ -93,9 +89,7 @@ public interface BargainActivityConvert { Map spuMap = convertMap(spuList, ProductSpuRespDTO::getId); return CollectionUtils.convertList(activityList, item -> { findAndThen(spuMap, item.getSpuId(), spu -> { - // TODO @puhui999:这里可以使用链式哈 - item.setPicUrl(spu.getPicUrl()); - item.setMarketPrice(spu.getMarketPrice()); + item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()); }); return item; }); diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java index 69766358b2..07a9c4df37 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java @@ -62,8 +62,7 @@ public interface CombinationActivityConvert { PageResult pageResult = convertPage(page); pageResult.getList().forEach(item -> { MapUtils.findAndThen(spuMap, item.getSpuId(), spu -> { - item.setSpuName(spu.getName()); - item.setPicUrl(spu.getPicUrl()); + item.setSpuName(spu.getName()).setPicUrl(spu.getPicUrl()); }); item.setProducts(convertList2(productList)); }); @@ -100,16 +99,15 @@ public interface CombinationActivityConvert { default CombinationRecordDO convert(CombinationRecordCreateReqDTO reqDTO, CombinationActivityDO activity, MemberUserRespDTO user, ProductSpuRespDTO spu, ProductSkuRespDTO sku) { - // TODO @puhui999:搞成链式的 set;这样会更规整一点; - CombinationRecordDO record = convert(reqDTO); - record.setVirtualGroup(false); - record.setExpireTime(record.getStartTime().plusHours(activity.getLimitDuration())); - record.setUserSize(activity.getUserSize()); - record.setNickname(user.getNickname()); - record.setAvatar(user.getAvatar()); - record.setSpuName(spu.getName()); - record.setPicUrl(sku.getPicUrl()); - return record; + // TODO @puhui999:订单付款后需要设置开始时间和结束时间; + return convert(reqDTO) + .setVirtualGroup(false) + .setExpireTime(activity.getStartTime().plusHours(activity.getLimitDuration())) + .setUserSize(activity.getUserSize()) + .setNickname(user.getNickname()) + .setAvatar(user.getAvatar()) + .setSpuName(spu.getName()) + .setPicUrl(sku.getPicUrl()); } List convert(List bean); @@ -121,8 +119,7 @@ public interface CombinationActivityConvert { Map spuMap = convertMap(spuList, ProductSpuRespDTO::getId); return CollectionUtils.convertList(activityList, item -> { findAndThen(spuMap, item.getSpuId(), spu -> { - item.setPicUrl(spu.getPicUrl()); - item.setMarketPrice(spu.getMarketPrice()); + item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()); }); return item; }); @@ -135,8 +132,7 @@ public interface CombinationActivityConvert { Map spuMap = convertMap(spuList, ProductSpuRespDTO::getId); List list = CollectionUtils.convertList(appPage.getList(), item -> { findAndThen(spuMap, item.getSpuId(), spu -> { - item.setPicUrl(spu.getPicUrl()); - item.setMarketPrice(spu.getMarketPrice()); + item.setPicUrl(spu.getPicUrl()).setMarketPrice(spu.getMarketPrice()); }); return item; }); @@ -149,9 +145,7 @@ public interface CombinationActivityConvert { List convertList1(List products); default AppCombinationActivityDetailRespVO convert3(CombinationActivityDO combinationActivity, List products) { - AppCombinationActivityDetailRespVO detailRespVO = convert2(combinationActivity); - detailRespVO.setProducts(convertList1(products)); - return detailRespVO; + return convert2(combinationActivity).setProducts(convertList1(products)); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/seckill/seckillactivity/SeckillActivityConvert.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/seckill/seckillactivity/SeckillActivityConvert.java index e4c4d5e364..f0da88cbc2 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/seckill/seckillactivity/SeckillActivityConvert.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/seckill/seckillactivity/SeckillActivityConvert.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.promotion.convert.seckill.seckillactivity; +import cn.hutool.core.date.LocalDateTimeUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.collection.MapUtils; @@ -29,7 +30,6 @@ import java.util.Map; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen; -import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; /** * 秒杀活动 Convert @@ -98,10 +98,9 @@ public interface SeckillActivityConvert { Map spuMap = convertMap(spuList, ProductSpuRespDTO::getId); respVO.setActivities(CollectionUtils.convertList(convertList3(activityList), item -> { findAndThen(spuMap, item.getSpuId(), spu -> { - // TODO @puhui999:可以尝试链式 set 哈; - item.setPicUrl(spu.getPicUrl()); - item.setMarketPrice(spu.getMarketPrice()); - item.setUnitName(DictFrameworkUtils.getDictDataLabel(DictTypeConstants.PRODUCT_UNIT, spu.getUnit())); + item.setPicUrl(spu.getPicUrl()) + .setMarketPrice(spu.getMarketPrice()) + .setUnitName(DictFrameworkUtils.getDictDataLabel(DictTypeConstants.PRODUCT_UNIT, spu.getUnit())); }); return item; })); @@ -115,10 +114,9 @@ public interface SeckillActivityConvert { Map spuMap = convertMap(spuList, ProductSpuRespDTO::getId); List list = CollectionUtils.convertList(result.getList(), item -> { findAndThen(spuMap, item.getSpuId(), spu -> { - // TODO @puhui999:可以尝试链式 set 哈; - item.setPicUrl(spu.getPicUrl()); - item.setMarketPrice(spu.getMarketPrice()); - item.setUnitName(DictFrameworkUtils.getDictDataLabel(DictTypeConstants.PRODUCT_UNIT, spu.getUnit())); + item.setPicUrl(spu.getPicUrl()) + .setMarketPrice(spu.getMarketPrice()) + .setUnitName(DictFrameworkUtils.getDictDataLabel(DictTypeConstants.PRODUCT_UNIT, spu.getUnit())); }); return item; }); @@ -131,12 +129,12 @@ public interface SeckillActivityConvert { List convertList1(List products); default AppSeckillActivityDetailRespVO convert3(SeckillActivityDO seckillActivity, List products, SeckillConfigDO filteredConfig) { - AppSeckillActivityDetailRespVO respVO = convert2(seckillActivity); - respVO.setProducts(convertList1(products)); - // TODO @puhui999:可以尝试链式 set 哈; - respVO.setStartTime(buildTime(filteredConfig.getStartTime())); - respVO.setEndTime(buildTime(filteredConfig.getEndTime())); - return respVO; + return convert2(seckillActivity) + .setProducts(convertList1(products)) + .setStartTime(LocalDateTimeUtil.parse(LocalDateTimeUtil.format(seckillActivity.getStartTime(), "yyyy-MM-dd") + " " + filteredConfig.getStartTime(), + "yyyy-MM-dd HH:mm:ss")) // 活动开始日期和时段结合 + .setEndTime(LocalDateTimeUtil.parse(LocalDateTimeUtil.format(seckillActivity.getEndTime(), "yyyy-MM-dd") + " " + filteredConfig.getEndTime(), + "yyyy-MM-dd HH:mm:ss")); // 活动结束日期和时段结合 } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java index f098895d2e..131b8cff9b 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java @@ -45,11 +45,34 @@ public interface BargainActivityMapper extends BaseMapperX { .setSql("stock = stock - " + count)); } - default PageResult selectAppPage(PageParam pageReqVO, Integer status, LocalDateTime now) { + /** + * 查询处在 now 日期时间且是 status 状态的活动分页 + * + * @param pageReqVO 分页参数 + * @param status 状态 + * @param now 当前日期时间 + * @return 活动分页 + */ + default PageResult selectPage(PageParam pageReqVO, Integer status, LocalDateTime now) { return selectPage(pageReqVO, new LambdaQueryWrapperX() .eq(BargainActivityDO::getStatus, status) .le(BargainActivityDO::getStartTime, now) .ge(BargainActivityDO::getEndTime, now)); } + /** + * 查询处在 now 日期时间且是 status 状态的活动分页 + * + * @param status 状态 + * @param now 当前日期时间 + * @return 活动分页 + */ + default List selectList(Integer count, Integer status, LocalDateTime now) { + return selectList(new LambdaQueryWrapperX() + .eq(BargainActivityDO::getStatus, status) + .le(BargainActivityDO::getStartTime, now) + .ge(BargainActivityDO::getEndTime, now) + .apply("LIMIT " + count)); + } + } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java index 76e914f3aa..8efc96abdf 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java @@ -29,9 +29,29 @@ public interface CombinationActivityMapper extends BaseMapperX selectAppPage(PageParam pageParam, Integer status) { + /** + * 查询 status 状态的活动分页 + * + * @param pageParam 分页参数 + * @param status 状态 + * @return 活动分页 + */ + default PageResult selectPage(PageParam pageParam, Integer status) { return selectPage(pageParam, new LambdaQueryWrapperX() .eq(CombinationActivityDO::getStatus, status)); } + /** + * 查询 status 状态的活动分页 + * + * @param status 状态 + * @param count 限制条数 + * @return 活动分页 + */ + default List selectList(Integer status, Integer count) { + return selectList(new LambdaQueryWrapperX() + .eq(CombinationActivityDO::getStatus, status) + .apply("LIMIT " + count)); + } + } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java index 1b3bd35dd1..9a0c17af9e 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java @@ -63,22 +63,20 @@ public interface BargainActivityService { */ PageResult getBargainActivityPage(BargainActivityPageReqVO pageReqVO); - // TODO @puhui999:这里可以改成进行中的活动;尽量避免专门为 app 定制,或者类似的名字哈;mapper 那也是 - /** - * 获取 APP 端活动分页数据 + * 获取正在进行的活动分页数据 * * @param pageReqVO 分页请求 * @return 砍价活动分页 */ - PageResult getBargainActivityPageForApp(PageParam pageReqVO); + PageResult getBargainActivityPage(PageParam pageReqVO); /** - * 获取 APP 端活动展示数据 + * 获取正在进行的活动分页数据 * * @param count 需要的数量 * @return 砍价活动分页 */ - List getBargainActivityListForApp(Integer count); + List getBargainActivityListByCount(Integer count); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java index 5aa075250e..36697c7d4f 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java @@ -142,21 +142,14 @@ public class BargainActivityServiceImpl implements BargainActivityService { } @Override - public PageResult getBargainActivityPageForApp(PageParam pageReqVO) { + public PageResult getBargainActivityPage(PageParam pageReqVO) { // 只查询进行中,且在时间范围内的 - return bargainActivityMapper.selectAppPage(pageReqVO, CommonStatusEnum.ENABLE.getStatus(), LocalDateTime.now()); + return bargainActivityMapper.selectPage(pageReqVO, CommonStatusEnum.ENABLE.getStatus(), LocalDateTime.now()); } @Override - public List getBargainActivityListForApp(Integer count) { - // TODO @puhui999:这种 default count 的逻辑,可以放到 controller 哈;然后可以使用 ObjectUtils.default 方法 - if (count == null) { - count = 6; - } - // TODO @puhui999:这种不要用 page;会浪费一次 count; - PageResult result = bargainActivityMapper.selectAppPage(new PageParam().setPageSize(count), - CommonStatusEnum.ENABLE.getStatus(), LocalDateTime.now()); - return result.getList(); + public List getBargainActivityListByCount(Integer count) { + return bargainActivityMapper.selectList(count, CommonStatusEnum.ENABLE.getStatus(), LocalDateTime.now()); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java index e01d27ec28..c2a090b727 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java @@ -85,19 +85,19 @@ public interface CombinationActivityService { void validateCombination(Long activityId, Long userId, Long skuId, Integer count); /** - * 获取 APP 端活动展示数据 + * 获取正在进行的活动分页数据 * * @param count 需要的数量 - * @return 活动列表 + * @return 拼团活动分页 */ - List getCombinationActivityAppList(Integer count); + List getCombinationActivityListByCount(Integer count); /** - * 获取 APP 端活动分页数据 + * 获取正在进行的活动分页数据 * - * @param pageParam 分页参数 - * @return 活动分页数据 + * @param pageParam 分页请求 + * @return 拼团活动分页 */ - PageResult getCombinationActivityAppPage(PageParam pageParam); + PageResult getCombinationActivityPage(PageParam pageParam); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java index a70a084f72..87a633064a 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java @@ -224,8 +224,7 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic throw exception(COMBINATION_ACTIVITY_STATUS_DISABLE); } // 1.3 校验是否超出单次限购数量 - // TODO puhui999:count > activity.getSingleLimitCount() 会更好理解点; - if (activity.getSingleLimitCount() < count) { + if (count > activity.getSingleLimitCount()) { throw exception(COMBINATION_RECORD_FAILED_SINGLE_LIMIT_COUNT_EXCEED); } @@ -247,19 +246,13 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic } @Override - public List getCombinationActivityAppList(Integer count) { - if (count == null) { - count = 6; - } - - PageResult result = combinationActivityMapper.selectAppPage(new PageParam().setPageSize(count), - CommonStatusEnum.ENABLE.getStatus()); - return result.getList(); + public List getCombinationActivityListByCount(Integer count) { + return combinationActivityMapper.selectList(CommonStatusEnum.ENABLE.getStatus(), count); } @Override - public PageResult getCombinationActivityAppPage(PageParam pageParam) { - return combinationActivityMapper.selectAppPage(pageParam, CommonStatusEnum.ENABLE.getStatus()); + public PageResult getCombinationActivityPage(PageParam pageParam) { + return combinationActivityMapper.selectPage(pageParam, CommonStatusEnum.ENABLE.getStatus()); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java index 2be81ccb98..3cbee81267 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityService.java @@ -37,11 +37,11 @@ public interface SeckillActivityService { /** * 更新秒杀库存 * - * @param activityId 活动编号 + * @param id 活动编号 * @param skuId sku 编号 * @param count 数量 */ - void updateSeckillStock(Long activityId, Long skuId, Integer count); + void updateSeckillStock(Long id, Long skuId, Integer count); /** * 关闭秒杀活动 @@ -97,6 +97,15 @@ public interface SeckillActivityService { */ List getSeckillActivityListByConfigIds(Collection ids); + /** + * 通过活动时段编号获取指定 status 的秒杀活动 + * + * @param configId 时段配置编号 + * @param status 状态 + * @return 秒杀活动列表 + */ + List getSeckillActivityListByConfigIdAndStatus(Long configId, Integer status); + /** * 通过活动时段获取秒杀活动 * diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java index 10891e0717..0092cf1b84 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillActivityServiceImpl.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.promotion.service.seckill; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; @@ -31,6 +30,7 @@ import java.util.Map; import static cn.hutool.core.collection.CollUtil.isNotEmpty; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.isBetween; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS; import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS; import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; @@ -148,16 +148,16 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @Override @Transactional(rollbackFor = Exception.class) - public void updateSeckillStock(Long activityId, Long skuId, Integer count) { + public void updateSeckillStock(Long id, Long skuId, Integer count) { // 1、校验秒杀活动是否存在 - SeckillActivityDO seckillActivity = getSeckillActivity(activityId); + SeckillActivityDO seckillActivity = getSeckillActivity(id); // 1.1、校验库存是否充足 if (seckillActivity.getTotalStock() < count) { throw exception(SECKILL_ACTIVITY_UPDATE_STOCK_FAIL); } // 2、获取活动商品 - List products = getSeckillProductListByActivityId(activityId); + List products = getSeckillProductListByActivityId(id); // 2.1、过滤出购买的商品 SeckillProductDO product = findFirst(products, item -> ObjectUtil.equal(skuId, item.getSkuId())); // 2.2、检查活动商品库存是否充足 @@ -268,8 +268,15 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @Override public List getSeckillActivityListByConfigIds(Collection ids) { - return CollectionUtils.filterList(seckillActivityMapper.selectList(), - item -> CollectionUtils.anyMatch(item.getConfigIds(), ids::contains)); + return filterList(seckillActivityMapper.selectList(), + item -> anyMatch(item.getConfigIds(), ids::contains)); + } + + @Override + public List getSeckillActivityListByConfigIdAndStatus(Long configId, Integer status) { + return filterList(seckillActivityMapper.selectList(SeckillActivityDO::getStatus, status), + item -> anyMatch(item.getConfigIds(), id -> ObjectUtil.equal(id, configId)) // 校验时段 + && isBetween(item.getStartTime(), item.getEndTime())); // 追加当前日期是否处在活动日期之间的校验条件 } @Override diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillConfigService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillConfigService.java index 5cbf4fd320..c8377e6301 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillConfigService.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillConfigService.java @@ -54,6 +54,7 @@ public interface SeckillConfigService { */ List getSeckillConfigList(); + /** * 校验秒杀时段是否存在 * @@ -85,4 +86,12 @@ public interface SeckillConfigService { */ void updateSeckillConfigStatus(Long id, Integer status); + /** + * 获取当前日期时间处于的秒杀时段且状态为 status + * + * @param status 状态 + * @return 时段 + */ + SeckillConfigDO getSeckillConfigListByStatusOnCurrentTime(Integer status); + } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillConfigServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillConfigServiceImpl.java index ce21710791..a5d2309c8c 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillConfigServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/SeckillConfigServiceImpl.java @@ -20,6 +20,8 @@ import java.util.Collection; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.findFirst; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.isBetween; import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; /** @@ -67,6 +69,12 @@ public class SeckillConfigServiceImpl implements SeckillConfigService { seckillConfigMapper.updateById(new SeckillConfigDO().setId(id).setStatus(status)); } + @Override + public SeckillConfigDO getSeckillConfigListByStatusOnCurrentTime(Integer status) { + return findFirst(seckillConfigMapper.selectList(SeckillConfigDO::getStatus, status), + config -> isBetween(config.getStartTime(), config.getEndTime())); + } + @Override public void deleteSeckillConfig(Long id) { // 校验存在 diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.java index 0bf5a9cd94..a3fcfae40b 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/aftersale/TradeAfterSaleController.java @@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.trade.convert.aftersale.TradeAfterSaleConvert; import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespDTO; +import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespVO; import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service.AfterSaleLogService; import cn.iocoder.yudao.module.trade.service.aftersale.TradeAfterSaleService; import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; @@ -87,13 +87,13 @@ public class TradeAfterSaleController { // 拼接数据 MemberUserRespDTO user = memberUserApi.getUser(afterSale.getUserId()); // 获取售后日志 - List logs = afterSaleLogService.getLog(afterSale.getId()); + List logs = afterSaleLogService.getLog(afterSale.getId()); // TODO 方便测试看效果,review 后移除 if (logs == null) { logs = new ArrayList<>(); } for (int i = 1; i <= 6; i++) { - TradeAfterSaleLogRespDTO respVO = new TradeAfterSaleLogRespDTO(); + TradeAfterSaleLogRespVO respVO = new TradeAfterSaleLogRespVO(); respVO.setId((long) i); respVO.setUserId((long) i); respVO.setUserType(i % 2 == 0 ? 2 : 1); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/TradeAfterSaleConvert.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/TradeAfterSaleConvert.java index 0c84c69673..dc220ad31c 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/TradeAfterSaleConvert.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/TradeAfterSaleConvert.java @@ -6,7 +6,6 @@ import cn.iocoder.yudao.module.pay.api.refund.dto.PayRefundCreateReqDTO; import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO; import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleDetailRespVO; import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.TradeAfterSaleRespPageItemVO; -import cn.iocoder.yudao.module.trade.controller.admin.aftersale.vo.log.TradeAfterSaleLogRespVO; import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUserRespVO; import cn.iocoder.yudao.module.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO; import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderBaseVO; @@ -16,7 +15,7 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleDO; import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.TradeAfterSaleLogDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespDTO; +import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespVO; import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -68,10 +67,10 @@ public interface TradeAfterSaleConvert { PageResult convertPage02(PageResult page); - List convertList(List list); + List convertList(List list); default TradeAfterSaleDetailRespVO convert(TradeAfterSaleDO afterSale, TradeOrderDO order, List orderItems, - MemberUserRespDTO user, List logs) { + MemberUserRespDTO user, List logs) { TradeAfterSaleDetailRespVO respVO = convert(afterSale, orderItems); // 处理用户信息 respVO.setUser(convert(user)); @@ -81,7 +80,8 @@ public interface TradeAfterSaleConvert { respVO.setLogs(convertList1(logs)); return respVO; } - List convertList1(List list); + + List convertList1(List list); @Mapping(target = "id", source = "afterSale.id") TradeAfterSaleDetailRespVO convert(TradeAfterSaleDO afterSale, List orderItems); TradeOrderBaseVO convert(TradeOrderDO order); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/dto/TradeAfterSaleLogRespDTO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/dto/TradeAfterSaleLogRespVO.java similarity index 95% rename from yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/dto/TradeAfterSaleLogRespDTO.java rename to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/dto/TradeAfterSaleLogRespVO.java index 69c6bd9394..328aab9444 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/dto/TradeAfterSaleLogRespDTO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/dto/TradeAfterSaleLogRespVO.java @@ -8,7 +8,6 @@ import lombok.NoArgsConstructor; import javax.validation.constraints.NotNull; import java.time.LocalDateTime; -// TODO @puhui999:这个是不是应该搞成 vo 啊? /** * 贸易售后日志详情 DTO * @@ -17,7 +16,7 @@ import java.time.LocalDateTime; @Data @NoArgsConstructor @AllArgsConstructor -public class TradeAfterSaleLogRespDTO { +public class TradeAfterSaleLogRespVO { @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20669") private Long id; diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/service/AfterSaleLogService.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/service/AfterSaleLogService.java index b068afd56a..2f9245c01a 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/service/AfterSaleLogService.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/aftersalelog/core/service/AfterSaleLogService.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service; import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespDTO; +import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespVO; import java.util.List; @@ -29,6 +29,6 @@ public interface AfterSaleLogService { * @param afterSaleId 售后编号 * @return 售后日志 */ - List getLog(Long afterSaleId); + List getLog(Long afterSaleId); } diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/TradeAfterSaleServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/TradeAfterSaleServiceImpl.java index f54563d42d..1b7866da87 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/TradeAfterSaleServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/aftersale/TradeAfterSaleServiceImpl.java @@ -26,7 +26,7 @@ import cn.iocoder.yudao.module.trade.enums.aftersale.TradeAfterSaleWayEnum; import cn.iocoder.yudao.module.trade.enums.order.TradeOrderItemAfterSaleStatusEnum; import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogCreateReqDTO; -import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespDTO; +import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.dto.TradeAfterSaleLogRespVO; import cn.iocoder.yudao.module.trade.framework.aftersalelog.core.service.AfterSaleLogService; import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; @@ -450,7 +450,7 @@ public class TradeAfterSaleServiceImpl implements TradeAfterSaleService, AfterSa } @Override - public List getLog(Long afterSaleId) { + public List getLog(Long afterSaleId) { // TODO 不熟悉流程先这么滴 List saleLogDOs = tradeAfterSaleLogMapper.selectList(TradeAfterSaleLogDO::getAfterSaleId, afterSaleId); return TradeAfterSaleConvert.INSTANCE.convertList(saleLogDOs); diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java index 1024182600..2d879ae2a3 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java @@ -553,41 +553,49 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { tradeOrderMapper.updateById(update); // TODO @芋艿:改价时,赠送的积分,要不要做改动??? - // TODO @puhui999:应该是按照 payPrice 分配;并且要考虑取余问题;payPrice 也要考虑,item 里的 - // TODO:先按 adjustPrice 实现,没明白 payPrice 怎么搞哈哈哈 - // TODO @puhui999:就是对比新老 adjustPrice 的差值,然后计算补充的 adjustPrice 最终值;另外,可以不用区分 items.size 是不是 > 1 哈;应该是一致的逻辑;分摊的逻辑,有点类似 dividePrice 方法噢; // 5、更新 TradeOrderItem - if (items.size() > 1) { - // TradeOrderItemDO 需要做 adjustPrice 的分摊 - int price = reqVO.getAdjustPrice() / items.size(); - int remainderPrice = reqVO.getAdjustPrice() % items.size(); - List orders = new ArrayList<>(); - for (int i = 0; i < items.size(); i++) { - // 把平摊后剩余的金额加到第一个订单项 - if (remainderPrice != 0 && i == 0) { - orders.add(convertOrderItemPrice(items.get(i), price + remainderPrice)); - } - orders.add(convertOrderItemPrice(items.get(i), price)); - } - tradeOrderItemMapper.updateBatch(orders); - } else { - TradeOrderItemDO orderItem = items.get(0); - TradeOrderItemDO updateItem = convertOrderItemPrice(orderItem, reqVO.getAdjustPrice()); - tradeOrderItemMapper.updateById(updateItem); + // TradeOrderItemDO 需要做 adjustPrice 的分摊 + List dividePrices = dividePrice(items, orderPayPrice); + List updateItems = new ArrayList<>(); + for (int i = 0; i < items.size(); i++) { + TradeOrderItemDO item = items.get(i); + Integer adjustPrice = item.getPrice() - dividePrices.get(i); // 计算调整的金额 + updateItems.add(new TradeOrderItemDO().setId(item.getId()).setAdjustPrice(adjustPrice) + .setPayPrice(item.getPayPrice() - adjustPrice)); } + tradeOrderItemMapper.updateBatch(updateItems); + // 6、更新支付订单 payOrderApi.updatePayOrderPrice(order.getPayOrderId(), update.getPayPrice()); } - private TradeOrderItemDO convertOrderItemPrice(TradeOrderItemDO orderItem, Integer price) { - TradeOrderItemDO newOrderItem = new TradeOrderItemDO(); - newOrderItem.setId(orderItem.getId()); - newOrderItem.setAdjustPrice(price); - int payPrice = orderItem.getAdjustPrice() != null ? (orderItem.getPayPrice() - orderItem.getAdjustPrice()) - + price : orderItem.getPayPrice() + price; - newOrderItem.setPayPrice(payPrice); - return newOrderItem; + /** + * 计算订单调价价格分摊 + * + * @param items 订单项 + * @param orderPayPrice 订单支付金额 + * @return 分摊金额数组,和传入的 orderItems 一一对应 + */ + private List dividePrice(List items, Integer orderPayPrice) { + Integer total = getSumValue(items, TradeOrderItemDO::getPrice, Integer::sum); + assert total != null; + // 遍历每一个,进行分摊 + List prices = new ArrayList<>(items.size()); + int remainPrice = orderPayPrice; + for (int i = 0; i < items.size(); i++) { + TradeOrderItemDO orderItem = items.get(i); + int partPrice; + if (i < items.size() - 1) { // 减一的原因,是因为拆分时,如果按照比例,可能会出现.所以最后一个,使用反减 + partPrice = (int) (orderPayPrice * (1.0D * orderItem.getPayPrice() / total)); + remainPrice -= partPrice; + } else { + partPrice = remainPrice; + } + Assert.isTrue(partPrice >= 0, "分摊金额必须大于等于 0"); + prices.add(partPrice); + } + return prices; } @Override diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/bo/TradeBeforeOrderCreateReqBO.java b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/bo/TradeBeforeOrderCreateReqBO.java index 077b5a5ef0..261683d3d1 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/bo/TradeBeforeOrderCreateReqBO.java +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/bo/TradeBeforeOrderCreateReqBO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.trade.service.order.bo; +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -14,36 +15,73 @@ import javax.validation.constraints.NotNull; @Data public class TradeBeforeOrderCreateReqBO { - // TODO @puhui999:注释也写下哈;bo 还是写注释噢 - + /** + * 订单类型 + * + * 枚举 {@link TradeOrderTypeEnum} + */ @NotNull(message = "订单类型不能为空") private Integer orderType; + /** + * 用户编号 + * + * 关联 MemberUserDO 的 id 编号 + */ + @NotNull(message = "用户编号不能为空") + private Long userId; + // ========== 秒杀活动相关字段 ========== + /** + * + */ @Schema(description = "秒杀活动编号", example = "1024") private Long seckillActivityId; // ========== 拼团活动相关字段 ========== + /** + * 拼团活动编号 + */ @Schema(description = "拼团活动编号", example = "1024") private Long combinationActivityId; + /** + * 拼团团长编号 + */ @Schema(description = "拼团团长编号", example = "2048") private Long combinationHeadId; + // ========== 砍价活动相关字段 ========== + + /** + * 砍价活动编号 + */ @Schema(description = "砍价活动编号", example = "123") private Long bargainActivityId; + // ========== 活动购买商品相关字段 ========== + + /** + * 商品 SPU 编号 + * + * 关联 ProductSkuDO 的 spuId 编号 + */ @NotNull(message = "SPU 编号不能为空") private Long spuId; + /** + * 商品 SKU 编号 + * + * 关联 ProductSkuDO 的 id 编号 + */ @NotNull(message = "SKU 编号活动商品不能为空") private Long skuId; - @NotNull(message = "用户编号不能为空") - private Long userId; - + /** + * 购买的商品数量 + */ @NotNull(message = "购买数量不能为空") private Integer count; From 583a0a2dd511b776a69623b4a9a95af0a09af2bb Mon Sep 17 00:00:00 2001 From: puhui999 Date: Wed, 20 Sep 2023 16:28:41 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=A0=8D=E4=BB=B7+=E6=8B=BC=E5=9B=A2:=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20selectList=20limit=20=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../promotion/dal/mysql/bargain/BargainActivityMapper.java | 2 +- .../dal/mysql/combination/CombinationActivityMapper.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java index 131b8cff9b..a7fe3e58d4 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainActivityMapper.java @@ -72,7 +72,7 @@ public interface BargainActivityMapper extends BaseMapperX { .eq(BargainActivityDO::getStatus, status) .le(BargainActivityDO::getStartTime, now) .ge(BargainActivityDO::getEndTime, now) - .apply("LIMIT " + count)); + .last("LIMIT " + count)); } } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java index 8efc96abdf..0dce45a28c 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java @@ -51,7 +51,7 @@ public interface CombinationActivityMapper extends BaseMapperX selectList(Integer status, Integer count) { return selectList(new LambdaQueryWrapperX() .eq(CombinationActivityDO::getStatus, status) - .apply("LIMIT " + count)); + .last("LIMIT " + count)); } } From 8060aeb5e7518e15f226fc7a5c1c8764017e8336 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Thu, 21 Sep 2023 09:07:37 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E7=A7=92=E6=9D=80:=20app=20=E7=AB=AF?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=A2=9E=E5=8A=A0=E7=A7=92=E6=9D=80=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/seckill/vo/activity/AppSeckillActivityRespVO.java | 3 +++ .../promotion/service/bargain/BargainActivityServiceImpl.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/vo/activity/AppSeckillActivityRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/vo/activity/AppSeckillActivityRespVO.java index 42f5a5ff49..278ee04a1d 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/vo/activity/AppSeckillActivityRespVO.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/seckill/vo/activity/AppSeckillActivityRespVO.java @@ -25,6 +25,9 @@ public class AppSeckillActivityRespVO { // 从 SPU 的 marketPrice 读取 private Integer marketPrice; + @Schema(description = "秒杀活动状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; + @Schema(description = "秒杀库存(剩余)", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") private Integer stock; @Schema(description = "秒杀库存(总共)", requiredMode = Schema.RequiredMode.REQUIRED, example = "200") diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java index 36697c7d4f..95e50eff57 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityServiceImpl.java @@ -114,7 +114,7 @@ public class BargainActivityServiceImpl implements BargainActivityService { public void deleteBargainActivity(Long id) { // 校验存在 BargainActivityDO activityDO = validateBargainActivityExists(id); - // 校验状态 + // 校验状态 TODO puhui: 测试完成后需要恢复校验 //if (ObjectUtil.equal(activityDO.getStatus(), CommonStatusEnum.ENABLE.getStatus())) { // throw exception(BARGAIN_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END); //}