Commit ab30ff64804ee892cadccaa36ed70fac48abf590

Authored by puhui999
1 parent b44ad3a0

fix:完善 mall seckill 相关 ②

Showing 15 changed files with 166 additions and 119 deletions
yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/sku/ProductSkuApi.java
1 package cn.iocoder.yudao.module.product.api.sku; 1 package cn.iocoder.yudao.module.product.api.sku;
2 2
3 -import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO;  
4 import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; 3 import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
  4 +import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO;
5 5
6 import java.util.Collection; 6 import java.util.Collection;
7 import java.util.List; 7 import java.util.List;
@@ -31,6 +31,14 @@ public interface ProductSkuApi { @@ -31,6 +31,14 @@ public interface ProductSkuApi {
31 List<ProductSkuRespDTO> getSkuList(Collection<Long> ids); 31 List<ProductSkuRespDTO> getSkuList(Collection<Long> ids);
32 32
33 /** 33 /**
  34 + * 批量查询 SKU 数组
  35 + *
  36 + * @param spuIds SPU 编号列表
  37 + * @return SKU 数组
  38 + */
  39 + List<ProductSkuRespDTO> getSkuListBySpuId(List<Long> spuIds);
  40 +
  41 + /**
34 * 更新 SKU 库存 42 * 更新 SKU 库存
35 * 43 *
36 * @param updateStockReqDTO 更新请求 44 * @param updateStockReqDTO 更新请求
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/api/sku/ProductSkuApiImpl.java
@@ -43,6 +43,15 @@ public class ProductSkuApiImpl implements ProductSkuApi { @@ -43,6 +43,15 @@ public class ProductSkuApiImpl implements ProductSkuApi {
43 } 43 }
44 44
45 @Override 45 @Override
  46 + public List<ProductSkuRespDTO> getSkuListBySpuId(List<Long> spuIds) {
  47 + if (CollUtil.isEmpty(spuIds)) {
  48 + return Collections.emptyList();
  49 + }
  50 + List<ProductSkuDO> skus = productSkuService.getSkuListBySpuId(spuIds);
  51 + return ProductSkuConvert.INSTANCE.convertList04(skus);
  52 + }
  53 +
  54 + @Override
46 public void updateSkuStock(ProductSkuUpdateStockReqDTO updateStockReqDTO) { 55 public void updateSkuStock(ProductSkuUpdateStockReqDTO updateStockReqDTO) {
47 productSkuService.updateSkuStock(updateStockReqDTO); 56 productSkuService.updateSkuStock(updateStockReqDTO);
48 } 57 }
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/api/spu/ProductSpuApiImpl.java
1 package cn.iocoder.yudao.module.product.api.spu; 1 package cn.iocoder.yudao.module.product.api.spu;
2 2
3 -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 3 +import cn.hutool.core.collection.CollectionUtil;
4 import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; 4 import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
5 import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert; 5 import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert;
6 import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; 6 import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO;
@@ -14,7 +14,7 @@ import java.util.Collections; @@ -14,7 +14,7 @@ import java.util.Collections;
14 import java.util.List; 14 import java.util.List;
15 15
16 /** 16 /**
17 - * TODO LeeYan9: 类注释; 17 + * 商品 SPU API 接口实现类
18 * 18 *
19 * @author LeeYan9 19 * @author LeeYan9
20 * @since 2022-09-06 20 * @since 2022-09-06
@@ -28,11 +28,12 @@ public class ProductSpuApiImpl implements ProductSpuApi { @@ -28,11 +28,12 @@ public class ProductSpuApiImpl implements ProductSpuApi {
28 28
29 @Override 29 @Override
30 public List<ProductSpuRespDTO> getSpuList(Collection<Long> spuIds) { 30 public List<ProductSpuRespDTO> getSpuList(Collection<Long> spuIds) {
31 - // TODO TODO LeeYan9: AllEmpty?  
32 - if (CollectionUtils.isAnyEmpty(spuIds)) { 31 + // TODO 需不需要判断集合中是否有 null 值
  32 + if (CollectionUtil.isEmpty(spuIds)) {
33 return Collections.emptyList(); 33 return Collections.emptyList();
34 } 34 }
35 List<ProductSpuDO> productSpuDOList = productSpuMapper.selectBatchIds(spuIds); 35 List<ProductSpuDO> productSpuDOList = productSpuMapper.selectBatchIds(spuIds);
36 return ProductSpuConvert.INSTANCE.convertList2(productSpuDOList); 36 return ProductSpuConvert.INSTANCE.convertList2(productSpuDOList);
37 } 37 }
  38 +
38 } 39 }
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/sku/ProductSkuService.java
@@ -55,7 +55,7 @@ public interface ProductSkuService { @@ -55,7 +55,7 @@ public interface ProductSkuService {
55 * 批量创建 SKU 55 * 批量创建 SKU
56 * 56 *
57 * @param spuId 商品 SPU 编号 57 * @param spuId 商品 SPU 编号
58 - * @param list SKU 对象集合 58 + * @param list SKU 对象集合
59 */ 59 */
60 void createSkuList(Long spuId, List<ProductSkuCreateOrUpdateReqVO> list); 60 void createSkuList(Long spuId, List<ProductSkuCreateOrUpdateReqVO> list);
61 61
@@ -63,13 +63,13 @@ public interface ProductSkuService { @@ -63,13 +63,13 @@ public interface ProductSkuService {
63 * 根据 SPU 编号,批量更新它的 SKU 信息 63 * 根据 SPU 编号,批量更新它的 SKU 信息
64 * 64 *
65 * @param spuId SPU 编码 65 * @param spuId SPU 编码
66 - * @param skus SKU 的集合 66 + * @param skus SKU 的集合
67 */ 67 */
68 void updateSkuList(Long spuId, List<ProductSkuCreateOrUpdateReqVO> skus); 68 void updateSkuList(Long spuId, List<ProductSkuCreateOrUpdateReqVO> skus);
69 69
70 /** 70 /**
71 * 更新 SKU 库存(增量) 71 * 更新 SKU 库存(增量)
72 - * 72 + * <p>
73 * 如果更新的库存不足,会抛出异常 73 * 如果更新的库存不足,会抛出异常
74 * 74 *
75 * @param updateStockReqDTO 更行请求 75 * @param updateStockReqDTO 更行请求
@@ -88,7 +88,7 @@ public interface ProductSkuService { @@ -88,7 +88,7 @@ public interface ProductSkuService {
88 * 获得 spu 对应的 SKU 集合 88 * 获得 spu 对应的 SKU 集合
89 * 89 *
90 * @param spuIds spu 编码集合 90 * @param spuIds spu 编码集合
91 - * @return 商品 sku 集合 91 + * @return 商品 sku 集合
92 */ 92 */
93 List<ProductSkuDO> getSkuListBySpuId(List<Long> spuIds); 93 List<ProductSkuDO> getSkuListBySpuId(List<Long> spuIds);
94 94
@@ -123,4 +123,5 @@ public interface ProductSkuService { @@ -123,4 +123,5 @@ public interface ProductSkuService {
123 * @return int 影响的行数 123 * @return int 影响的行数
124 */ 124 */
125 int updateSkuPropertyValue(Long propertyValueId, String propertyValueName); 125 int updateSkuPropertyValue(Long propertyValueId, String propertyValueName);
  126 +
126 } 127 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/vo/activity/SeckillActivityBaseVO.java
1 package cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity; 1 package cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity;
2 2
3 -import com.fasterxml.jackson.annotation.JsonFormat;  
4 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
5 import lombok.Data; 4 import lombok.Data;
6 import org.springframework.format.annotation.DateTimeFormat; 5 import org.springframework.format.annotation.DateTimeFormat;
7 6
8 -import javax.validation.constraints.Min;  
9 import javax.validation.constraints.NotNull; 7 import javax.validation.constraints.NotNull;
10 import java.time.LocalDateTime; 8 import java.time.LocalDateTime;
11 import java.util.List; 9 import java.util.List;
12 10
13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 11 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
14 -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;  
15 12
16 /** 13 /**
17 * 秒杀活动基地签证官 14 * 秒杀活动基地签证官
@@ -23,18 +20,14 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DE @@ -23,18 +20,14 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DE
23 @Data 20 @Data
24 public class SeckillActivityBaseVO { 21 public class SeckillActivityBaseVO {
25 22
26 - @Schema(description = "秒杀活动商品", requiredMode = Schema.RequiredMode.REQUIRED, example = "121") 23 + @Schema(description = "秒杀活动商品id", requiredMode = Schema.RequiredMode.REQUIRED, example = "[121,1212]")
27 @NotNull(message = "秒杀活动商品不能为空") 24 @NotNull(message = "秒杀活动商品不能为空")
28 - private Long spuId; 25 + private List<Long> spuIds;
29 26
30 @Schema(description = "秒杀活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "618大促") 27 @Schema(description = "秒杀活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "618大促")
31 @NotNull(message = "秒杀活动名称不能为空") 28 @NotNull(message = "秒杀活动名称不能为空")
32 private String name; 29 private String name;
33 30
34 - @Schema(description = "活动状态 开启:0 禁用:1", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")  
35 - @NotNull(message = "活动状态 开启:0 禁用:1不能为空")  
36 - private Integer status;  
37 -  
38 @Schema(description = "备注", example = "清仓大甩卖割韭菜") 31 @Schema(description = "备注", example = "清仓大甩卖割韭菜")
39 private String remark; 32 private String remark;
40 33
@@ -52,8 +45,8 @@ public class SeckillActivityBaseVO { @@ -52,8 +45,8 @@ public class SeckillActivityBaseVO {
52 @NotNull(message = "排序不能为空") 45 @NotNull(message = "排序不能为空")
53 private Integer sort; 46 private Integer sort;
54 47
55 - @Schema(description = "秒杀时段id", requiredMode = Schema.RequiredMode.REQUIRED)  
56 - @NotNull(message = "秒杀时段id不能为空") 48 + @Schema(description = "秒杀时段id", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,2,3]")
  49 + @NotNull(message = "秒杀时段不能为空")
57 private List<Long> configIds; 50 private List<Long> configIds;
58 51
59 @Schema(description = "总限购数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "12877") 52 @Schema(description = "总限购数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "12877")
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/vo/activity/SeckillActivityRespVO.java
@@ -6,7 +6,6 @@ import lombok.Data; @@ -6,7 +6,6 @@ import lombok.Data;
6 import lombok.EqualsAndHashCode; 6 import lombok.EqualsAndHashCode;
7 import lombok.ToString; 7 import lombok.ToString;
8 8
9 -import java.time.LocalDateTime;  
10 import java.util.List; 9 import java.util.List;
11 10
12 /** 11 /**
@@ -24,8 +23,10 @@ public class SeckillActivityRespVO extends SeckillActivityBaseVO { @@ -24,8 +23,10 @@ public class SeckillActivityRespVO extends SeckillActivityBaseVO {
24 private Long id; 23 private Long id;
25 24
26 @Schema(description = "秒杀商品", requiredMode = Schema.RequiredMode.REQUIRED) 25 @Schema(description = "秒杀商品", requiredMode = Schema.RequiredMode.REQUIRED)
27 - private List<SeckillProductRespVO> products; 26 + private List<SeckillProductRespVO> products; // TODO puhui: 考虑是否去除
28 27
  28 + @Schema(description = "活动状态 开启:0 禁用:1", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
  29 + private Integer status;
29 30
30 31
31 } 32 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/vo/product/SeckillProductBaseVO.java
1 package cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.product; 1 package cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.product;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 -import lombok.*;  
5 -import java.time.LocalDateTime;  
6 -import javax.validation.constraints.*;  
7 -import org.springframework.format.annotation.DateTimeFormat; 4 +import lombok.Data;
8 5
9 -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 6 +import javax.validation.constraints.NotNull;
10 7
11 /** 8 /**
12 * 秒杀参与商品 Base VO,提供给添加、修改、详细的子 VO 使用 9 * 秒杀参与商品 Base VO,提供给添加、修改、详细的子 VO 使用
@@ -17,15 +14,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @@ -17,15 +14,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
17 @Data 14 @Data
18 public class SeckillProductBaseVO { 15 public class SeckillProductBaseVO {
19 16
20 - @Schema(description = "秒杀活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20173")  
21 - @NotNull(message = "秒杀活动id不能为空")  
22 - private Long activityId;  
23 -  
24 - @Schema(description = "秒杀时段id", requiredMode = Schema.RequiredMode.REQUIRED)  
25 - @NotNull(message = "秒杀时段id不能为空")  
26 - private String configIds;  
27 -  
28 - @Schema(description = "商品spu_id", requiredMode = Schema.RequiredMode.REQUIRED, example = "10290") 17 + @Schema(description = "商品spu_id", requiredMode = Schema.RequiredMode.REQUIRED, example = "30563")
29 @NotNull(message = "商品spu_id不能为空") 18 @NotNull(message = "商品spu_id不能为空")
30 private Long spuId; 19 private Long spuId;
31 20
@@ -41,18 +30,5 @@ public class SeckillProductBaseVO { @@ -41,18 +30,5 @@ public class SeckillProductBaseVO {
41 @NotNull(message = "秒杀库存不能为空") 30 @NotNull(message = "秒杀库存不能为空")
42 private Integer stock; 31 private Integer stock;
43 32
44 - @Schema(description = "秒杀商品状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")  
45 - @NotNull(message = "秒杀商品状态不能为空")  
46 - private Integer activityStatus;  
47 -  
48 - @Schema(description = "活动开始时间点", requiredMode = Schema.RequiredMode.REQUIRED)  
49 - @NotNull(message = "活动开始时间点不能为空")  
50 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)  
51 - private LocalDateTime activityStartTime;  
52 -  
53 - @Schema(description = "活动结束时间点", requiredMode = Schema.RequiredMode.REQUIRED)  
54 - @NotNull(message = "活动结束时间点不能为空")  
55 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)  
56 - private LocalDateTime activityEndTime;  
57 33
58 } 34 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/seckill/seckillactivity/SeckillActivityConvert.java
1 package cn.iocoder.yudao.module.promotion.convert.seckill.seckillactivity; 1 package cn.iocoder.yudao.module.promotion.convert.seckill.seckillactivity;
2 2
3 import cn.hutool.core.util.ObjectUtil; 3 import cn.hutool.core.util.ObjectUtil;
  4 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityCreateReqVO; 6 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityCreateReqVO;
6 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityDetailRespVO; 7 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityDetailRespVO;
@@ -12,6 +13,7 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity. @@ -12,6 +13,7 @@ import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.
12 import org.mapstruct.Mapper; 13 import org.mapstruct.Mapper;
13 import org.mapstruct.factory.Mappers; 14 import org.mapstruct.factory.Mappers;
14 15
  16 +import java.util.ArrayList;
15 import java.util.List; 17 import java.util.List;
16 18
17 /** 19 /**
@@ -47,7 +49,7 @@ public interface SeckillActivityConvert { @@ -47,7 +49,7 @@ public interface SeckillActivityConvert {
47 * @return 是否匹配 49 * @return 是否匹配
48 */ 50 */
49 default boolean isEquals(SeckillProductDO productDO, SeckillProductCreateReqVO productVO) { 51 default boolean isEquals(SeckillProductDO productDO, SeckillProductCreateReqVO productVO) {
50 - return ObjectUtil.equals(productDO.getSpuId(), productVO.getSpuId()) 52 + return ObjectUtil.equals(productDO.getSpuId(), 1) // TODO puhui:再看看
51 && ObjectUtil.equals(productDO.getSkuId(), productVO.getSkuId()) 53 && ObjectUtil.equals(productDO.getSkuId(), productVO.getSkuId())
52 && ObjectUtil.equals(productDO.getSeckillPrice(), productVO.getSeckillPrice()); 54 && ObjectUtil.equals(productDO.getSeckillPrice(), productVO.getSeckillPrice());
53 //&& ObjectUtil.equals(productDO.getQuota(), productVO.getQuota()) 55 //&& ObjectUtil.equals(productDO.getQuota(), productVO.getQuota())
@@ -65,9 +67,25 @@ public interface SeckillActivityConvert { @@ -65,9 +67,25 @@ public interface SeckillActivityConvert {
65 return ObjectUtil.equals(productDO.getSpuId(), productVO.getSpuId()) 67 return ObjectUtil.equals(productDO.getSpuId(), productVO.getSpuId())
66 && ObjectUtil.equals(productDO.getSkuId(), productVO.getSkuId()) 68 && ObjectUtil.equals(productDO.getSkuId(), productVO.getSkuId())
67 && ObjectUtil.equals(productDO.getSeckillPrice(), productVO.getSeckillPrice()); 69 && ObjectUtil.equals(productDO.getSeckillPrice(), productVO.getSeckillPrice());
68 - //&& ObjectUtil.equals(productDO.getQuota(), productVO.getQuota())  
69 - //&& ObjectUtil.equals(productDO.getLimitCount(), productVO.getLimitCount()); 70 + //&& ObjectUtil.equals(productDO.getQuota(), productVO.getQuota())
  71 + //&& ObjectUtil.equals(productDO.getLimitCount(), productVO.getLimitCount());
70 72
71 } 73 }
72 74
  75 + default List<SeckillProductDO> convertList(SeckillActivityDO seckillActivity, List<SeckillProductCreateReqVO> products) {
  76 + List<SeckillProductDO> list = new ArrayList<>();
  77 + products.forEach(sku -> {
  78 + SeckillProductDO productDO = new SeckillProductDO();
  79 + productDO.setActivityId(seckillActivity.getId());
  80 + productDO.setConfigIds(seckillActivity.getConfigIds());
  81 + productDO.setSpuId(sku.getSpuId());
  82 + productDO.setSkuId(sku.getSkuId());
  83 + productDO.setSeckillPrice(sku.getSeckillPrice());
  84 + productDO.setStock(sku.getStock());
  85 + productDO.setActivityStatus(CommonStatusEnum.ENABLE.getStatus());
  86 + productDO.setActivityStartTime(seckillActivity.getStartTime());
  87 + productDO.setActivityEndTime(seckillActivity.getEndTime());
  88 + });
  89 + return list;
  90 + }
73 } 91 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/seckill/seckillactivity/SeckillActivityDO.java
@@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity
3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 4 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
5 import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler; 5 import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler;
6 -import cn.iocoder.yudao.module.promotion.enums.common.PromotionActivityStatusEnum;  
7 import com.baomidou.mybatisplus.annotation.KeySequence; 6 import com.baomidou.mybatisplus.annotation.KeySequence;
8 import com.baomidou.mybatisplus.annotation.TableField; 7 import com.baomidou.mybatisplus.annotation.TableField;
9 import com.baomidou.mybatisplus.annotation.TableId; 8 import com.baomidou.mybatisplus.annotation.TableId;
@@ -35,7 +34,8 @@ public class SeckillActivityDO extends BaseDO { @@ -35,7 +34,8 @@ public class SeckillActivityDO extends BaseDO {
35 /** 34 /**
36 * 秒杀活动商品 35 * 秒杀活动商品
37 */ 36 */
38 - private Long spuId; 37 + @TableField(typeHandler = LongListTypeHandler.class)
  38 + private List<Long> spuIds;
39 /** 39 /**
40 * 秒杀活动名称 40 * 秒杀活动名称
41 */ 41 */
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/seckill/seckillactivity/SeckillProductDO.java
1 package cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity; 1 package cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity;
2 2
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  4 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  5 +import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler;
  6 +import com.baomidou.mybatisplus.annotation.KeySequence;
  7 +import com.baomidou.mybatisplus.annotation.TableField;
  8 +import com.baomidou.mybatisplus.annotation.TableId;
  9 +import com.baomidou.mybatisplus.annotation.TableName;
3 import lombok.*; 10 import lombok.*;
  11 +
4 import java.time.LocalDateTime; 12 import java.time.LocalDateTime;
5 -import com.baomidou.mybatisplus.annotation.*;  
6 -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 13 +import java.util.List;
7 14
8 /** 15 /**
9 * 秒杀参与商品 DO 16 * 秒杀参与商品 DO
@@ -32,7 +39,8 @@ public class SeckillProductDO extends BaseDO { @@ -32,7 +39,8 @@ public class SeckillProductDO extends BaseDO {
32 /** 39 /**
33 * 秒杀时段 id 40 * 秒杀时段 id
34 */ 41 */
35 - private String configIds; 42 + @TableField(typeHandler = LongListTypeHandler.class)
  43 + private List<Long> configIds;
36 /** 44 /**
37 * 商品 spu_id 45 * 商品 spu_id
38 */ 46 */
@@ -51,6 +59,7 @@ public class SeckillProductDO extends BaseDO { @@ -51,6 +59,7 @@ public class SeckillProductDO extends BaseDO {
51 private Integer stock; 59 private Integer stock;
52 /** 60 /**
53 * 秒杀商品状态 61 * 秒杀商品状态
  62 + * 枚举 {@link CommonStatusEnum 对应的类}
54 */ 63 */
55 private Integer activityStatus; 64 private Integer activityStatus;
56 /** 65 /**
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/seckill/seckillactivity/SeckillActivityMapper.java
@@ -8,6 +8,8 @@ import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.Se @@ -8,6 +8,8 @@ import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.Se
8 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillActivityDO; 8 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillActivityDO;
9 import org.apache.ibatis.annotations.Mapper; 9 import org.apache.ibatis.annotations.Mapper;
10 10
  11 +import java.util.List;
  12 +
11 /** 13 /**
12 * 秒杀活动 Mapper 14 * 秒杀活动 Mapper
13 * 15 *
@@ -23,4 +25,9 @@ public interface SeckillActivityMapper extends BaseMapperX&lt;SeckillActivityDO&gt; { @@ -23,4 +25,9 @@ public interface SeckillActivityMapper extends BaseMapperX&lt;SeckillActivityDO&gt; {
23 .apply(ObjectUtil.isNotNull(reqVO.getConfigId()), "FIND_IN_SET(" + reqVO.getConfigId() + ",time_ids) > 0") 25 .apply(ObjectUtil.isNotNull(reqVO.getConfigId()), "FIND_IN_SET(" + reqVO.getConfigId() + ",time_ids) > 0")
24 .orderByDesc(SeckillActivityDO::getId)); 26 .orderByDesc(SeckillActivityDO::getId));
25 } 27 }
  28 +
  29 + default List<SeckillActivityDO> selectListByStatus(Integer status) {
  30 + return selectList(new LambdaQueryWrapperX<SeckillActivityDO>()
  31 + .eqIfPresent(SeckillActivityDO::getStatus, status));
  32 + }
26 } 33 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/discount/DiscountActivityServiceImpl.java
@@ -52,7 +52,7 @@ public class DiscountActivityServiceImpl implements DiscountActivityService { @@ -52,7 +52,7 @@ public class DiscountActivityServiceImpl implements DiscountActivityService {
52 52
53 // 插入活动 53 // 插入活动
54 DiscountActivityDO discountActivity = DiscountActivityConvert.INSTANCE.convert(createReqVO) 54 DiscountActivityDO discountActivity = DiscountActivityConvert.INSTANCE.convert(createReqVO)
55 - .setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getStartTime(), createReqVO.getEndTime())); 55 + .setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getEndTime()));
56 discountActivityMapper.insert(discountActivity); 56 discountActivityMapper.insert(discountActivity);
57 // 插入商品 57 // 插入商品
58 List<DiscountProductDO> discountProducts = convertList(createReqVO.getProducts(), 58 List<DiscountProductDO> discountProducts = convertList(createReqVO.getProducts(),
@@ -74,7 +74,7 @@ public class DiscountActivityServiceImpl implements DiscountActivityService { @@ -74,7 +74,7 @@ public class DiscountActivityServiceImpl implements DiscountActivityService {
74 74
75 // 更新活动 75 // 更新活动
76 DiscountActivityDO updateObj = DiscountActivityConvert.INSTANCE.convert(updateReqVO) 76 DiscountActivityDO updateObj = DiscountActivityConvert.INSTANCE.convert(updateReqVO)
77 - .setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getStartTime(), updateReqVO.getEndTime())); 77 + .setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getEndTime()));
78 discountActivityMapper.updateById(updateObj); 78 discountActivityMapper.updateById(updateObj);
79 // 更新商品 79 // 更新商品
80 updateDiscountProduct(updateReqVO); 80 updateDiscountProduct(updateReqVO);
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/reward/RewardActivityServiceImpl.java
@@ -41,7 +41,7 @@ public class RewardActivityServiceImpl implements RewardActivityService { @@ -41,7 +41,7 @@ public class RewardActivityServiceImpl implements RewardActivityService {
41 41
42 // 插入 42 // 插入
43 RewardActivityDO rewardActivity = RewardActivityConvert.INSTANCE.convert(createReqVO) 43 RewardActivityDO rewardActivity = RewardActivityConvert.INSTANCE.convert(createReqVO)
44 - .setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getStartTime(), createReqVO.getEndTime())); 44 + .setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getEndTime()));
45 rewardActivityMapper.insert(rewardActivity); 45 rewardActivityMapper.insert(rewardActivity);
46 // 返回 46 // 返回
47 return rewardActivity.getId(); 47 return rewardActivity.getId();
@@ -59,7 +59,7 @@ public class RewardActivityServiceImpl implements RewardActivityService { @@ -59,7 +59,7 @@ public class RewardActivityServiceImpl implements RewardActivityService {
59 59
60 // 更新 60 // 更新
61 RewardActivityDO updateObj = RewardActivityConvert.INSTANCE.convert(updateReqVO) 61 RewardActivityDO updateObj = RewardActivityConvert.INSTANCE.convert(updateReqVO)
62 - .setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getStartTime(), updateReqVO.getEndTime())); 62 + .setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getEndTime()));
63 rewardActivityMapper.updateById(updateObj); 63 rewardActivityMapper.updateById(updateObj);
64 } 64 }
65 65
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/seckillactivity/SeckillActivityServiceImpl.java
1 package cn.iocoder.yudao.module.promotion.service.seckill.seckillactivity; 1 package cn.iocoder.yudao.module.promotion.service.seckill.seckillactivity;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.util.ArrayUtil;
4 import cn.hutool.core.util.ObjectUtil; 5 import cn.hutool.core.util.ObjectUtil;
5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 6 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
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.promotion.controller.admin.seckill.vo.activity.SeckillActivityBaseVO; 9 +import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
  10 +import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
  11 +import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
  12 +import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
9 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityCreateReqVO; 13 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityCreateReqVO;
10 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityPageReqVO; 14 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityPageReqVO;
11 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityUpdateReqVO; 15 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityUpdateReqVO;
12 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.product.SeckillProductBaseVO; 16 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.product.SeckillProductBaseVO;
13 -import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.product.SeckillProductCreateReqVO;  
14 import cn.iocoder.yudao.module.promotion.convert.seckill.seckillactivity.SeckillActivityConvert; 17 import cn.iocoder.yudao.module.promotion.convert.seckill.seckillactivity.SeckillActivityConvert;
15 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillActivityDO; 18 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillActivityDO;
16 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillProductDO; 19 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillProductDO;
@@ -25,8 +28,12 @@ import org.springframework.validation.annotation.Validated; @@ -25,8 +28,12 @@ import org.springframework.validation.annotation.Validated;
25 import javax.annotation.Resource; 28 import javax.annotation.Resource;
26 import java.util.Collection; 29 import java.util.Collection;
27 import java.util.List; 30 import java.util.List;
  31 +import java.util.Set;
  32 +import java.util.stream.Collectors;
28 33
29 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 34 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  35 +import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS;
  36 +import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS;
30 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; 37 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
31 import static java.util.Arrays.asList; 38 import static java.util.Arrays.asList;
32 39
@@ -45,40 +52,94 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -45,40 +52,94 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
45 private SeckillProductMapper seckillProductMapper; 52 private SeckillProductMapper seckillProductMapper;
46 @Resource 53 @Resource
47 private SeckillConfigService seckillConfigService; 54 private SeckillConfigService seckillConfigService;
  55 + @Resource
  56 + private ProductSpuApi productSpuApi;
  57 + @Resource
  58 + private ProductSkuApi productSkuApi;
48 59
49 @Override 60 @Override
50 public Long createSeckillActivity(SeckillActivityCreateReqVO createReqVO) { 61 public Long createSeckillActivity(SeckillActivityCreateReqVO createReqVO) {
51 - // 校验商品是否冲突  
52 - validateSeckillActivityProductConflicts(null, createReqVO.getProducts());  
53 - // 校验秒杀时段是否存在  
54 - seckillConfigService.validateSeckillConfigExists(createReqVO.getConfigIds()); 62 + // 校验商品秒秒杀时段是否冲突
  63 + validateProductSpuSeckillConflict(createReqVO.getConfigIds(), createReqVO.getSpuIds());
  64 + // 校验商品 sku 是否存在
  65 + validateProductSkuExistence(createReqVO.getSpuIds(), createReqVO.getProducts());
55 66
56 - // 插入秒杀活动 TODO 活动日期拼接上秒杀时段 -> 2023-06-08 09:00:00 67 + // 插入秒杀活动
57 SeckillActivityDO seckillActivity = SeckillActivityConvert.INSTANCE.convert(createReqVO) 68 SeckillActivityDO seckillActivity = SeckillActivityConvert.INSTANCE.convert(createReqVO)
58 - .setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getStartTime(), createReqVO.getEndTime())); 69 + .setStatus(PromotionUtils.calculateActivityStatus(createReqVO.getEndTime()));
59 seckillActivityMapper.insert(seckillActivity); 70 seckillActivityMapper.insert(seckillActivity);
60 // 插入商品 71 // 插入商品
61 - //List<SeckillProductDO> productDOs = SeckillActivityConvert.INSTANCE.convertList(createReqVO.getProducts(), seckillActivity);  
62 - //seckillProductMapper.insertBatch(productDOs); 72 + List<SeckillProductDO> productDOs = SeckillActivityConvert.INSTANCE.convertList(seckillActivity, createReqVO.getProducts());
  73 + seckillProductMapper.insertBatch(productDOs);
63 return seckillActivity.getId(); 74 return seckillActivity.getId();
64 } 75 }
65 76
  77 + private <T extends SeckillProductBaseVO> void validateProductSkuExistence(List<Long> spuIds, List<T> products) {
  78 + Set<Long> convertedSpuIds = CollectionUtils.convertSet(products, T::getSpuId);
  79 + // 校验 spu 个数是否相等
  80 + if (ObjectUtil.notEqual(spuIds.size(), convertedSpuIds.size())) {
  81 + throw exception(SKU_NOT_EXISTS);
  82 + }
  83 + // 获取所选 spu下的所有 sku
  84 + List<ProductSkuRespDTO> skuRespDTOs = productSkuApi.getSkuListBySpuId(spuIds);
  85 + // 校验 sku 个数是否一致
  86 + Set<Long> skuIdsSet = CollectionUtils.convertSet(products, T::getSkuId);
  87 + Set<Long> skuIdsSet1 = CollectionUtils.convertSet(skuRespDTOs, ProductSkuRespDTO::getId);
  88 + if (ObjectUtil.notEqual(skuIdsSet.size(), skuIdsSet1.size())) {
  89 + throw exception(SKU_NOT_EXISTS);
  90 + }
  91 + // 校验 skuId 是否存在
  92 + if (!skuIdsSet1.containsAll(skuIdsSet) || !skuIdsSet.containsAll(skuIdsSet1)) {
  93 + throw exception(SKU_NOT_EXISTS);
  94 + }
  95 + }
  96 +
  97 + private void validateProductSpuSeckillConflict(List<Long> configIds, List<Long> spuIds) {
  98 + // 校验秒杀时段是否存在
  99 + seckillConfigService.validateSeckillConfigExists(configIds);
  100 + // 校验商品 spu 是否存在
  101 + List<ProductSpuRespDTO> spuList = productSpuApi.getSpuList(spuIds);
  102 + if (ObjectUtil.notEqual(spuIds.size(), spuList.size())) {
  103 + throw exception(SPU_NOT_EXISTS);
  104 + }
  105 + // 查询所有开启的秒杀活动
  106 + List<SeckillActivityDO> activityDOs = seckillActivityMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus());
  107 + // 过滤出所有 spuIds 有交集的活动
  108 + List<SeckillActivityDO> doList = activityDOs.stream().filter(s -> {
  109 + // 判断 spu 是否有交集
  110 + List<Long> spuIdsClone = ArrayUtil.clone(s.getSpuIds());
  111 + spuIdsClone.retainAll(spuIds);
  112 + if (CollUtil.isEmpty(spuIdsClone)) {
  113 + return false;
  114 + }
  115 + // 判断秒杀时段是否有交集
  116 + List<Long> configIdsClone = ArrayUtil.clone(s.getConfigIds());
  117 + configIdsClone.retainAll(configIds);
  118 + return CollUtil.isNotEmpty(configIdsClone);
  119 + }).collect(Collectors.toList());
  120 + if (CollUtil.isNotEmpty(doList)) {
  121 + throw exception(SECKILL_ACTIVITY_SPU_CONFLICTS);
  122 + }
  123 + }
  124 +
66 @Override 125 @Override
67 public void updateSeckillActivity(SeckillActivityUpdateReqVO updateReqVO) { 126 public void updateSeckillActivity(SeckillActivityUpdateReqVO updateReqVO) {
68 // 校验存在 127 // 校验存在
69 SeckillActivityDO seckillActivity = validateSeckillActivityExists(updateReqVO.getId()); 128 SeckillActivityDO seckillActivity = validateSeckillActivityExists(updateReqVO.getId());
70 - if (PromotionActivityStatusEnum.CLOSE.getStatus().equals(seckillActivity.getStatus())) { 129 + if (CommonStatusEnum.ENABLE.getStatus().equals(seckillActivity.getStatus())) {
71 throw exception(SECKILL_ACTIVITY_UPDATE_FAIL_STATUS_CLOSED); 130 throw exception(SECKILL_ACTIVITY_UPDATE_FAIL_STATUS_CLOSED);
72 } 131 }
73 // 校验商品是否冲突 132 // 校验商品是否冲突
74 - validateSeckillActivityProductConflicts(updateReqVO.getId(), updateReqVO.getProducts()); 133 + validateProductSpuSeckillConflict(updateReqVO.getConfigIds(), updateReqVO.getSpuIds());
  134 + // 校验商品 sku 是否存在
  135 + validateProductSkuExistence(updateReqVO.getSpuIds(), updateReqVO.getProducts());
75 136
76 // 更新活动 137 // 更新活动
77 SeckillActivityDO updateObj = SeckillActivityConvert.INSTANCE.convert(updateReqVO) 138 SeckillActivityDO updateObj = SeckillActivityConvert.INSTANCE.convert(updateReqVO)
78 - .setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getStartTime(), updateReqVO.getEndTime())); 139 + .setStatus(PromotionUtils.calculateActivityStatus(updateReqVO.getEndTime()));
79 seckillActivityMapper.updateById(updateObj); 140 seckillActivityMapper.updateById(updateObj);
80 // 更新商品 141 // 更新商品
81 - updateSeckillProduct(updateReqVO); 142 + //updateSeckillProduct(updateReqVO);
82 } 143 }
83 144
84 145
@@ -92,10 +153,11 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -92,10 +153,11 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
92 * @param updateReqVO 更新的请求VO 153 * @param updateReqVO 更新的请求VO
93 */ 154 */
94 private void updateSeckillProduct(SeckillActivityUpdateReqVO updateReqVO) { 155 private void updateSeckillProduct(SeckillActivityUpdateReqVO updateReqVO) {
95 - List<SeckillProductDO> seckillProductDOs = seckillProductMapper.selectListByActivityId(updateReqVO.getId());  
96 - //List<SeckillActivityBaseVO.Product> products = updateReqVO.getProducts(); 156 + // TODO puhui999:后续完善
  157 + //List<SeckillProductDO> seckillProductDOs = seckillProductMapper.selectListByActivityId(updateReqVO.getId());
  158 + //List<SeckillProductUpdateReqVO> products = updateReqVO.getProducts();
97 159
98 - // 计算需要删除的数据 160 + ////计算需要删除的数据
99 //List<Long> deleteIds = CollectionUtils.convertList(seckillProductDOs, SeckillProductDO::getId, 161 //List<Long> deleteIds = CollectionUtils.convertList(seckillProductDOs, SeckillProductDO::getId,
100 // seckillProductDO -> products.stream() 162 // seckillProductDO -> products.stream()
101 // .noneMatch(product -> SeckillActivityConvert.INSTANCE.isEquals(seckillProductDO, product))); 163 // .noneMatch(product -> SeckillActivityConvert.INSTANCE.isEquals(seckillProductDO, product)));
@@ -116,37 +178,6 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -116,37 +178,6 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
116 seckillProductMapper.updateTimeIdsByActivityId(updateReqVO.getId(), updateReqVO.getConfigIds()); 178 seckillProductMapper.updateTimeIdsByActivityId(updateReqVO.getId(), updateReqVO.getConfigIds());
117 } 179 }
118 180
119 - /**  
120 - * 校验商品是否冲突  
121 - *  
122 - * @param id 秒杀活动编号  
123 - * @param products 商品列表  
124 - */  
125 - private <T extends SeckillProductBaseVO> void validateSeckillActivityProductConflicts(Long id, List<T> products) {  
126 - if (CollUtil.isEmpty(products)) {  
127 - return;  
128 - }  
129 - // 校验秒杀商品是否存在  
130 - List<SeckillProductDO> seckillProductDOs = seckillProductMapper  
131 - .selectListBySkuIds(CollectionUtils.convertSet(products, T::getSkuId));  
132 - if (CollUtil.isEmpty(seckillProductDOs)) {  
133 - return;  
134 - }  
135 - // 获取秒杀商品所在活动  
136 - List<SeckillActivityDO> seckillActivityDOs = seckillActivityMapper  
137 - .selectBatchIds(CollectionUtils.convertSet(seckillProductDOs, SeckillProductDO::getActivityId));  
138 - if (id != null) {  
139 - // 排除自己这个活动  
140 - seckillActivityDOs.removeIf(item -> id.equals(item.getId()));  
141 - }  
142 - // 排除关闭了的活动  
143 - seckillActivityDOs.removeIf(item -> ObjectUtil.equal(item.getStatus(), CommonStatusEnum.DISABLE.getStatus()));  
144 - // 如果非空,则说明冲突  
145 - if (CollUtil.isNotEmpty(seckillActivityDOs)) {  
146 - throw exception(SECKILL_ACTIVITY_SPU_CONFLICTS);  
147 - }  
148 - }  
149 -  
150 @Override 181 @Override
151 public void closeSeckillActivity(Long id) { 182 public void closeSeckillActivity(Long id) {
152 // 校验存在 183 // 校验存在
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/util/PromotionUtils.java
1 package cn.iocoder.yudao.module.promotion.util; 1 package cn.iocoder.yudao.module.promotion.util;
2 2
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
3 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils; 4 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
4 -import cn.iocoder.yudao.module.promotion.enums.common.PromotionActivityStatusEnum;  
5 5
6 import java.time.LocalDateTime; 6 import java.time.LocalDateTime;
7 7
@@ -15,18 +15,11 @@ public class PromotionUtils { @@ -15,18 +15,11 @@ public class PromotionUtils {
15 /** 15 /**
16 * 根据时间,计算活动状态 16 * 根据时间,计算活动状态
17 * 17 *
18 - * @param startTime 开始时间  
19 * @param endTime 结束时间 18 * @param endTime 结束时间
20 * @return 活动状态 19 * @return 活动状态
21 */ 20 */
22 - public static Integer calculateActivityStatus(LocalDateTime startTime, LocalDateTime endTime) {  
23 - if (LocalDateTimeUtils.beforeNow(endTime)) {  
24 - return PromotionActivityStatusEnum.END.getStatus();  
25 - }  
26 - if (LocalDateTimeUtils.afterNow(startTime)) {  
27 - return PromotionActivityStatusEnum.WAIT.getStatus();  
28 - }  
29 - return PromotionActivityStatusEnum.RUN.getStatus(); 21 + public static Integer calculateActivityStatus(LocalDateTime endTime) {
  22 + return LocalDateTimeUtils.beforeNow(endTime) ? CommonStatusEnum.DISABLE.getStatus() : CommonStatusEnum.ENABLE.getStatus();
30 } 23 }
31 24
32 } 25 }