Commit 41d996f7f3d940b3bba2bd63d457a3f4c8fe8c8c

Authored by puhui999
1 parent c5630518

feat:mall promotion CombinationProduct

Showing 28 changed files with 531 additions and 136 deletions
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java
@@ -61,4 +61,5 @@ public interface ErrorCodeConstants { @@ -61,4 +61,5 @@ public interface ErrorCodeConstants {
61 61
62 // ========== 拼团活动 1013010000 ========== 62 // ========== 拼团活动 1013010000 ==========
63 ErrorCode COMBINATION_ACTIVITY_NOT_EXISTS = new ErrorCode(1013010000, "拼团活动不存在"); 63 ErrorCode COMBINATION_ACTIVITY_NOT_EXISTS = new ErrorCode(1013010000, "拼团活动不存在");
  64 + ErrorCode COMBINATION_ACTIVITY_SPU_CONFLICTS = new ErrorCode(1013010000, "存在商品参加了其它拼团活动");
64 } 65 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/CombinationActivityController.java
@@ -4,9 +4,9 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; @@ -4,9 +4,9 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; 5 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
6 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; 6 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
7 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.*; 7 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.*;
8 import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert; 8 import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert;
9 -import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; 9 +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.combinationactivity.CombinationActivityDO;
10 import cn.iocoder.yudao.module.promotion.service.combination.CombinationActivityService; 10 import cn.iocoder.yudao.module.promotion.service.combination.CombinationActivityService;
11 import io.swagger.v3.oas.annotations.Operation; 11 import io.swagger.v3.oas.annotations.Operation;
12 import io.swagger.v3.oas.annotations.Parameter; 12 import io.swagger.v3.oas.annotations.Parameter;
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/CombinationActivityBaseVO.java renamed to yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/activity/CombinationActivityBaseVO.java
1 -package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo; 1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 4 import lombok.Data;
@@ -6,6 +6,7 @@ import org.springframework.format.annotation.DateTimeFormat; @@ -6,6 +6,7 @@ import org.springframework.format.annotation.DateTimeFormat;
6 6
7 import javax.validation.constraints.NotNull; 7 import javax.validation.constraints.NotNull;
8 import java.time.LocalDateTime; 8 import java.time.LocalDateTime;
  9 +import java.util.List;
9 10
10 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;
11 12
@@ -16,12 +17,13 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @@ -16,12 +17,13 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
16 @Data 17 @Data
17 public class CombinationActivityBaseVO { 18 public class CombinationActivityBaseVO {
18 19
19 - @Schema(description = "拼团名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") 20 + @Schema(description = "拼团名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "越拼越省钱")
20 @NotNull(message = "拼团名称不能为空") 21 @NotNull(message = "拼团名称不能为空")
21 private String name; 22 private String name;
22 23
23 - @Schema(description = "商品 SPU 编号关联 ProductSpuDO 的 id", example = "14016")  
24 - private Long spuId; 24 + @Schema(description = "商品 SPU 编号关联 ProductSpuDO 的 id", example = "[1,2,3]")
  25 + @NotNull(message = "拼团商品不能为空")
  26 + private List<Long> spuIds;
25 27
26 @Schema(description = "总限购数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "16218") 28 @Schema(description = "总限购数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "16218")
27 @NotNull(message = "总限购数量不能为空") 29 @NotNull(message = "总限购数量不能为空")
@@ -31,40 +33,15 @@ public class CombinationActivityBaseVO { @@ -31,40 +33,15 @@ public class CombinationActivityBaseVO {
31 @NotNull(message = "单次限购数量不能为空") 33 @NotNull(message = "单次限购数量不能为空")
32 private Integer singleLimitCount; 34 private Integer singleLimitCount;
33 35
34 - @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED)  
35 - @NotNull(message = "开始时间不能为空") 36 + @Schema(description = "活动时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "[2022-07-01 00:00:00,2022-07-01 23:59:59]")
  37 + @NotNull(message = "活动时间不能为空")
36 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) 38 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
37 - private LocalDateTime startTime;  
38 -  
39 - @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED)  
40 - @NotNull(message = "结束时间不能为空")  
41 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)  
42 - private LocalDateTime endTime;  
43 -  
44 - @Schema(description = "购买人数", requiredMode = Schema.RequiredMode.REQUIRED)  
45 - @NotNull(message = "购买人数不能为空")  
46 - private Integer userSize;  
47 -  
48 - @Schema(description = "开团组数", requiredMode = Schema.RequiredMode.REQUIRED)  
49 - @NotNull(message = "开团组数不能为空")  
50 - private Integer totalNum;  
51 -  
52 - @Schema(description = "成团组数", requiredMode = Schema.RequiredMode.REQUIRED)  
53 - @NotNull(message = "成团组数不能为空")  
54 - private Integer successNum; 39 + private LocalDateTime[] activityTime;
55 40
56 @Schema(description = "参与人数", requiredMode = Schema.RequiredMode.REQUIRED, example = "25222") 41 @Schema(description = "参与人数", requiredMode = Schema.RequiredMode.REQUIRED, example = "25222")
57 @NotNull(message = "参与人数不能为空") 42 @NotNull(message = "参与人数不能为空")
58 private Integer orderUserCount; 43 private Integer orderUserCount;
59 44
60 - @Schema(description = "虚拟成团", requiredMode = Schema.RequiredMode.REQUIRED)  
61 - @NotNull(message = "虚拟成团不能为空")  
62 - private Integer virtualGroup;  
63 -  
64 - @Schema(description = "活动状态:0开启 1关闭", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")  
65 - @NotNull(message = "活动状态:0开启 1关闭不能为空")  
66 - private Integer status;  
67 -  
68 @Schema(description = "限制时长(小时)", requiredMode = Schema.RequiredMode.REQUIRED) 45 @Schema(description = "限制时长(小时)", requiredMode = Schema.RequiredMode.REQUIRED)
69 @NotNull(message = "限制时长(小时)不能为空") 46 @NotNull(message = "限制时长(小时)不能为空")
70 private Integer limitDuration; 47 private Integer limitDuration;
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/activity/CombinationActivityCreateReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity;
  2 +
  3 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product.CombinationProductCreateReqVO;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +
  9 +import java.util.List;
  10 +
  11 +@Schema(description = "管理后台 - 拼团活动创建 Request VO")
  12 +@Data
  13 +@EqualsAndHashCode(callSuper = true)
  14 +@ToString(callSuper = true)
  15 +public class CombinationActivityCreateReqVO extends CombinationActivityBaseVO {
  16 +
  17 + @Schema(description = "秒杀商品", requiredMode = Schema.RequiredMode.REQUIRED)
  18 + private List<CombinationProductCreateReqVO> products;
  19 +
  20 +}
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/CombinationActivityExcelVO.java renamed to yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/activity/CombinationActivityExcelVO.java
1 -package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo; 1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity;
2 2
3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; 3 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; 4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/CombinationActivityExportReqVO.java renamed to yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/activity/CombinationActivityExportReqVO.java
1 -package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo; 1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 4 import lombok.Data;
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/CombinationActivityPageReqVO.java renamed to yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/activity/CombinationActivityPageReqVO.java
1 -package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo; 1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageParam; 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 import io.swagger.v3.oas.annotations.media.Schema; 4 import io.swagger.v3.oas.annotations.media.Schema;
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/activity/CombinationActivityRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import lombok.ToString;
  7 +
  8 +import javax.validation.constraints.NotNull;
  9 +import java.time.LocalDateTime;
  10 +
  11 +@Schema(description = "管理后台 - 拼团活动 Response VO")
  12 +@Data
  13 +@EqualsAndHashCode(callSuper = true)
  14 +@ToString(callSuper = true)
  15 +public class CombinationActivityRespVO extends CombinationActivityBaseVO {
  16 +
  17 + @Schema(description = "活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22901")
  18 + private Long id;
  19 +
  20 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  21 + private LocalDateTime createTime;
  22 +
  23 + @Schema(description = "购买人数", requiredMode = Schema.RequiredMode.REQUIRED)
  24 + @NotNull(message = "购买人数不能为空")
  25 + private Integer userSize;
  26 +
  27 + @Schema(description = "开团组数", requiredMode = Schema.RequiredMode.REQUIRED)
  28 + @NotNull(message = "开团组数不能为空")
  29 + private Integer totalNum;
  30 +
  31 + @Schema(description = "成团组数", requiredMode = Schema.RequiredMode.REQUIRED)
  32 + @NotNull(message = "成团组数不能为空")
  33 + private Integer successNum;
  34 +
  35 + @Schema(description = "虚拟成团", requiredMode = Schema.RequiredMode.REQUIRED)
  36 + @NotNull(message = "虚拟成团不能为空")
  37 + private Integer virtualGroup;
  38 +
  39 + @Schema(description = "活动状态:0开启 1关闭", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
  40 + @NotNull(message = "活动状态:0开启 1关闭不能为空")
  41 + private Integer status;
  42 +
  43 +}
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/CombinationActivityUpdateReqVO.java renamed to yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/activity/CombinationActivityUpdateReqVO.java
1 -package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo; 1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 4 import lombok.Data;
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/product/CombinationProductBaseVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import javax.validation.constraints.NotNull;
  7 +
  8 +/**
  9 + * 拼团商品 Base VO,提供给添加、修改、详细的子 VO 使用
  10 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
  11 + */
  12 +@Data
  13 +public class CombinationProductBaseVO {
  14 +
  15 + @Schema(description = "商品 spuId", requiredMode = Schema.RequiredMode.REQUIRED, example = "30563")
  16 + @NotNull(message = "商品 spuId 不能为空")
  17 + private Long spuId;
  18 +
  19 + @Schema(description = "商品 skuId", requiredMode = Schema.RequiredMode.REQUIRED, example = "30563")
  20 + @NotNull(message = "商品 skuId 不能为空")
  21 + private Long skuId;
  22 +
  23 + @Schema(description = "拼团价格,单位分", requiredMode = Schema.RequiredMode.REQUIRED, example = "27682")
  24 + @NotNull(message = "拼团价格,单位分不能为空")
  25 + private Integer activePrice;
  26 +
  27 +}
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/CombinationActivityCreateReqVO.java renamed to yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/product/CombinationProductCreateReqVO.java
1 -package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo; 1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.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.Data; 4 import lombok.Data;
5 import lombok.EqualsAndHashCode; 5 import lombok.EqualsAndHashCode;
6 import lombok.ToString; 6 import lombok.ToString;
7 7
8 -@Schema(description = "管理后台 - 拼团活动创建 Request VO") 8 +@Schema(description = "管理后台 - 拼团商品创建 Request VO")
9 @Data 9 @Data
10 @EqualsAndHashCode(callSuper = true) 10 @EqualsAndHashCode(callSuper = true)
11 @ToString(callSuper = true) 11 @ToString(callSuper = true)
12 -public class CombinationActivityCreateReqVO extends CombinationActivityBaseVO { 12 +public class CombinationProductCreateReqVO extends CombinationProductBaseVO {
13 13
14 } 14 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/product/CombinationProductExcelVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product;
  2 +
  3 +import com.alibaba.excel.annotation.ExcelProperty;
  4 +import lombok.Data;
  5 +
  6 +import java.time.LocalDateTime;
  7 +
  8 +/**
  9 + * 拼团商品 Excel VO
  10 + *
  11 + * @author HUIHUI
  12 + */
  13 +@Data
  14 +public class CombinationProductExcelVO {
  15 +
  16 + @ExcelProperty("编号")
  17 + private Long id;
  18 +
  19 + @ExcelProperty("拼团活动编号")
  20 + private Long activityId;
  21 +
  22 + @ExcelProperty("商品 SPU 编号")
  23 + private Long spuId;
  24 +
  25 + @ExcelProperty("商品 SKU 编号")
  26 + private Long skuId;
  27 +
  28 + @ExcelProperty("拼团商品状态")
  29 + private Integer activityStatus;
  30 +
  31 + @ExcelProperty("活动开始时间点")
  32 + private LocalDateTime activityStartTime;
  33 +
  34 + @ExcelProperty("活动结束时间点")
  35 + private LocalDateTime activityEndTime;
  36 +
  37 + @ExcelProperty("拼团价格,单位分")
  38 + private Integer activePrice;
  39 +
  40 + @ExcelProperty("创建时间")
  41 + private LocalDateTime createTime;
  42 +
  43 +}
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/product/CombinationProductExportReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +import org.springframework.format.annotation.DateTimeFormat;
  6 +
  7 +import java.time.LocalDateTime;
  8 +
  9 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  10 +
  11 +@Schema(description = "管理后台 - 拼团商品 Excel 导出 Request VO,参数和 CombinationProductPageReqVO 是一致的")
  12 +@Data
  13 +public class CombinationProductExportReqVO {
  14 +
  15 + @Schema(description = "拼团活动编号", example = "6829")
  16 + private Long activityId;
  17 +
  18 + @Schema(description = "商品 SPU 编号", example = "18731")
  19 + private Long spuId;
  20 +
  21 + @Schema(description = "商品 SKU 编号", example = "31675")
  22 + private Long skuId;
  23 +
  24 + @Schema(description = "拼团商品状态", example = "2")
  25 + private Integer activityStatus;
  26 +
  27 + @Schema(description = "活动开始时间点")
  28 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  29 + private LocalDateTime[] activityStartTime;
  30 +
  31 + @Schema(description = "活动结束时间点")
  32 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  33 + private LocalDateTime[] activityEndTime;
  34 +
  35 + @Schema(description = "拼团价格,单位分", example = "27682")
  36 + private Integer activePrice;
  37 +
  38 + @Schema(description = "创建时间")
  39 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  40 + private LocalDateTime[] createTime;
  41 +
  42 +}
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/product/CombinationProductPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +import org.springframework.format.annotation.DateTimeFormat;
  9 +
  10 +import java.time.LocalDateTime;
  11 +
  12 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  13 +
  14 +@Schema(description = "管理后台 - 拼团商品分页 Request VO")
  15 +@Data
  16 +@EqualsAndHashCode(callSuper = true)
  17 +@ToString(callSuper = true)
  18 +public class CombinationProductPageReqVO extends PageParam {
  19 +
  20 + @Schema(description = "拼团活动编号", example = "6829")
  21 + private Long activityId;
  22 +
  23 + @Schema(description = "商品 SPU 编号", example = "18731")
  24 + private Long spuId;
  25 +
  26 + @Schema(description = "商品 SKU 编号", example = "31675")
  27 + private Long skuId;
  28 +
  29 + @Schema(description = "拼团商品状态", example = "2")
  30 + private Integer activityStatus;
  31 +
  32 + @Schema(description = "活动开始时间点")
  33 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  34 + private LocalDateTime[] activityStartTime;
  35 +
  36 + @Schema(description = "活动结束时间点")
  37 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  38 + private LocalDateTime[] activityEndTime;
  39 +
  40 + @Schema(description = "拼团价格,单位分", example = "27682")
  41 + private Integer activePrice;
  42 +
  43 + @Schema(description = "创建时间")
  44 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  45 + private LocalDateTime[] createTime;
  46 +
  47 +}
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/CombinationActivityRespVO.java renamed to yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/product/CombinationProductRespVO.java
1 -package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo; 1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.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.Data; 4 import lombok.Data;
@@ -7,13 +7,13 @@ import lombok.ToString; @@ -7,13 +7,13 @@ import lombok.ToString;
7 7
8 import java.time.LocalDateTime; 8 import java.time.LocalDateTime;
9 9
10 -@Schema(description = "管理后台 - 拼团活动 Response VO") 10 +@Schema(description = "管理后台 - 拼团商品 Response VO")
11 @Data 11 @Data
12 @EqualsAndHashCode(callSuper = true) 12 @EqualsAndHashCode(callSuper = true)
13 @ToString(callSuper = true) 13 @ToString(callSuper = true)
14 -public class CombinationActivityRespVO extends CombinationActivityBaseVO { 14 +public class CombinationProductRespVO extends CombinationProductBaseVO {
15 15
16 - @Schema(description = "活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22901") 16 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "28322")
17 private Long id; 17 private Long id;
18 18
19 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) 19 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/combination/vo/product/CombinationProductUpdateReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import lombok.ToString;
  7 +
  8 +import javax.validation.constraints.NotNull;
  9 +
  10 +@Schema(description = "管理后台 - 拼团商品更新 Request VO")
  11 +@Data
  12 +@EqualsAndHashCode(callSuper = true)
  13 +@ToString(callSuper = true)
  14 +public class CombinationProductUpdateReqVO extends CombinationProductBaseVO {
  15 +
  16 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "28322")
  17 + @NotNull(message = "编号不能为空")
  18 + private Long id;
  19 +
  20 +}
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java
1 package cn.iocoder.yudao.module.promotion.convert.combination; 1 package cn.iocoder.yudao.module.promotion.convert.combination;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityCreateReqVO;  
5 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityExcelVO;  
6 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityRespVO;  
7 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityUpdateReqVO;  
8 -import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; 4 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO;
  5 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityExcelVO;
  6 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityRespVO;
  7 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO;
  8 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product.CombinationProductCreateReqVO;
  9 +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.combinationactivity.CombinationActivityDO;
  10 +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.combinationactivity.CombinationProductDO;
9 import org.mapstruct.Mapper; 11 import org.mapstruct.Mapper;
  12 +import org.mapstruct.Mapping;
10 import org.mapstruct.factory.Mappers; 13 import org.mapstruct.factory.Mappers;
11 14
  15 +import java.util.ArrayList;
12 import java.util.List; 16 import java.util.List;
13 17
14 /** 18 /**
@@ -21,6 +25,8 @@ public interface CombinationActivityConvert { @@ -21,6 +25,8 @@ public interface CombinationActivityConvert {
21 25
22 CombinationActivityConvert INSTANCE = Mappers.getMapper(CombinationActivityConvert.class); 26 CombinationActivityConvert INSTANCE = Mappers.getMapper(CombinationActivityConvert.class);
23 27
  28 + @Mapping(target = "startTime", expression = "java(bean.getActivityTime()[0])")
  29 + @Mapping(target = "endTime", expression = "java(bean.getActivityTime()[1])")
24 CombinationActivityDO convert(CombinationActivityCreateReqVO bean); 30 CombinationActivityDO convert(CombinationActivityCreateReqVO bean);
25 31
26 CombinationActivityDO convert(CombinationActivityUpdateReqVO bean); 32 CombinationActivityDO convert(CombinationActivityUpdateReqVO bean);
@@ -33,4 +39,19 @@ public interface CombinationActivityConvert { @@ -33,4 +39,19 @@ public interface CombinationActivityConvert {
33 39
34 List<CombinationActivityExcelVO> convertList02(List<CombinationActivityDO> list); 40 List<CombinationActivityExcelVO> convertList02(List<CombinationActivityDO> list);
35 41
  42 + default List<CombinationProductDO> convertList(CombinationActivityDO activityDO, List<CombinationProductCreateReqVO> products) {
  43 + ArrayList<CombinationProductDO> productDOs = new ArrayList<>();
  44 + products.forEach(item -> {
  45 + CombinationProductDO productDO = new CombinationProductDO();
  46 + productDO.setActivityId(activityDO.getId());
  47 + productDO.setSpuId(item.getSpuId());
  48 + productDO.setSkuId(item.getSkuId());
  49 + productDO.setActivityStatus(0); // TODO 拼团状态枚举未定义不确定有些什么状态
  50 + productDO.setActivityStartTime(activityDO.getStartTime());
  51 + productDO.setActivityEndTime(activityDO.getEndTime());
  52 + productDO.setActivePrice(item.getActivePrice());
  53 + productDOs.add(productDO);
  54 + });
  55 + return productDOs;
  56 + }
36 } 57 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/combination/CombinationActivityDO.java renamed to yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/combination/combinationactivity/CombinationActivityDO.java
1 -package cn.iocoder.yudao.module.promotion.dal.dataobject.combination; 1 +package cn.iocoder.yudao.module.promotion.dal.dataobject.combination.combinationactivity;
2 2
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
3 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;
4 import com.baomidou.mybatisplus.annotation.KeySequence; 6 import com.baomidou.mybatisplus.annotation.KeySequence;
  7 +import com.baomidou.mybatisplus.annotation.TableField;
5 import com.baomidou.mybatisplus.annotation.TableId; 8 import com.baomidou.mybatisplus.annotation.TableId;
6 import com.baomidou.mybatisplus.annotation.TableName; 9 import com.baomidou.mybatisplus.annotation.TableName;
7 -import com.sun.xml.internal.bind.v2.TODO;  
8 import lombok.*; 10 import lombok.*;
9 11
10 import java.time.LocalDateTime; 12 import java.time.LocalDateTime;
  13 +import java.util.List;
11 14
12 /** 15 /**
13 * 拼团活动 DO 16 * 拼团活动 DO
@@ -36,7 +39,8 @@ public class CombinationActivityDO extends BaseDO { @@ -36,7 +39,8 @@ public class CombinationActivityDO extends BaseDO {
36 /** 39 /**
37 * 商品 SPU 编号关联 ProductSpuDO 的 id 40 * 商品 SPU 编号关联 ProductSpuDO 的 id
38 */ 41 */
39 - private Long spuId; 42 + @TableField(typeHandler = LongListTypeHandler.class)
  43 + private List<Long> spuIds;
40 /** 44 /**
41 * 总限购数量 45 * 总限购数量
42 */ 46 */
@@ -76,7 +80,7 @@ public class CombinationActivityDO extends BaseDO { @@ -76,7 +80,7 @@ public class CombinationActivityDO extends BaseDO {
76 /** 80 /**
77 * 活动状态:0开启 1关闭 81 * 活动状态:0开启 1关闭
78 * <p> 82 * <p>
79 - * 枚举 {@link TODO common_status 对应的类} 83 + * 枚举 {@link CommonStatusEnum}
80 */ 84 */
81 private Integer status; 85 private Integer status;
82 /** 86 /**
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/combination/combinationactivity/CombinationProductDO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.dal.dataobject.combination.combinationactivity;
  2 +
  3 +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import com.baomidou.mybatisplus.annotation.KeySequence;
  5 +import com.baomidou.mybatisplus.annotation.TableId;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import lombok.*;
  8 +
  9 +import java.time.LocalDateTime;
  10 +
  11 +/**
  12 + * 拼团商品 DO
  13 + *
  14 + * @author HUIHUI
  15 + */
  16 +@TableName("promotion_combination_product")
  17 +@KeySequence("promotion_combination_product_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
  18 +@Data
  19 +@EqualsAndHashCode(callSuper = true)
  20 +@ToString(callSuper = true)
  21 +@Builder
  22 +@NoArgsConstructor
  23 +@AllArgsConstructor
  24 +public class CombinationProductDO extends BaseDO {
  25 +
  26 + /**
  27 + * 编号
  28 + */
  29 + @TableId
  30 + private Long id;
  31 + /**
  32 + * 拼团活动编号
  33 + */
  34 + private Long activityId;
  35 + /**
  36 + * 商品 SPU 编号
  37 + */
  38 + private Long spuId;
  39 + /**
  40 + * 商品 SKU 编号
  41 + */
  42 + private Long skuId;
  43 + /**
  44 + * 拼团商品状态
  45 + */
  46 + private Integer activityStatus;
  47 + /**
  48 + * 活动开始时间点
  49 + */
  50 + private LocalDateTime activityStartTime;
  51 + /**
  52 + * 活动结束时间点
  53 + */
  54 + private LocalDateTime activityEndTime;
  55 + /**
  56 + * 拼团价格,单位分
  57 + */
  58 + private Integer activePrice;
  59 +
  60 +}
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/combination/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.dal.dataobject.combination;
0 \ No newline at end of file 2 \ No newline at end of file
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationActivityMapper.java renamed to yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/combinationactivity/CombinationActivityMapper.java
1 -package cn.iocoder.yudao.module.promotion.dal.mysql.combination; 1 +package cn.iocoder.yudao.module.promotion.dal.mysql.combination.combinationactivity;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityExportReqVO;  
7 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityPageReqVO;  
8 -import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; 6 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityExportReqVO;
  7 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO;
  8 +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.combinationactivity.CombinationActivityDO;
9 import org.apache.ibatis.annotations.Mapper; 9 import org.apache.ibatis.annotations.Mapper;
10 10
11 import java.util.List; 11 import java.util.List;
@@ -21,39 +21,17 @@ public interface CombinationActivityMapper extends BaseMapperX&lt;CombinationActivi @@ -21,39 +21,17 @@ public interface CombinationActivityMapper extends BaseMapperX&lt;CombinationActivi
21 default PageResult<CombinationActivityDO> selectPage(CombinationActivityPageReqVO reqVO) { 21 default PageResult<CombinationActivityDO> selectPage(CombinationActivityPageReqVO reqVO) {
22 return selectPage(reqVO, new LambdaQueryWrapperX<CombinationActivityDO>() 22 return selectPage(reqVO, new LambdaQueryWrapperX<CombinationActivityDO>()
23 .likeIfPresent(CombinationActivityDO::getName, reqVO.getName()) 23 .likeIfPresent(CombinationActivityDO::getName, reqVO.getName())
24 - .eqIfPresent(CombinationActivityDO::getSpuId, reqVO.getSpuId())  
25 - .eqIfPresent(CombinationActivityDO::getTotalLimitCount, reqVO.getTotalLimitCount())  
26 - .eqIfPresent(CombinationActivityDO::getSingleLimitCount, reqVO.getSingleLimitCount())  
27 - .betweenIfPresent(CombinationActivityDO::getStartTime, reqVO.getStartTime())  
28 - .betweenIfPresent(CombinationActivityDO::getEndTime, reqVO.getEndTime())  
29 - .eqIfPresent(CombinationActivityDO::getUserSize, reqVO.getUserSize())  
30 - .eqIfPresent(CombinationActivityDO::getTotalNum, reqVO.getTotalNum())  
31 - .eqIfPresent(CombinationActivityDO::getSuccessNum, reqVO.getSuccessNum())  
32 - .eqIfPresent(CombinationActivityDO::getOrderUserCount, reqVO.getOrderUserCount())  
33 - .eqIfPresent(CombinationActivityDO::getVirtualGroup, reqVO.getVirtualGroup())  
34 - .eqIfPresent(CombinationActivityDO::getStatus, reqVO.getStatus())  
35 - .eqIfPresent(CombinationActivityDO::getLimitDuration, reqVO.getLimitDuration())  
36 - .betweenIfPresent(CombinationActivityDO::getCreateTime, reqVO.getCreateTime())  
37 .orderByDesc(CombinationActivityDO::getId)); 24 .orderByDesc(CombinationActivityDO::getId));
38 } 25 }
39 26
40 default List<CombinationActivityDO> selectList(CombinationActivityExportReqVO reqVO) { 27 default List<CombinationActivityDO> selectList(CombinationActivityExportReqVO reqVO) {
41 return selectList(new LambdaQueryWrapperX<CombinationActivityDO>() 28 return selectList(new LambdaQueryWrapperX<CombinationActivityDO>()
42 .likeIfPresent(CombinationActivityDO::getName, reqVO.getName()) 29 .likeIfPresent(CombinationActivityDO::getName, reqVO.getName())
43 - .eqIfPresent(CombinationActivityDO::getSpuId, reqVO.getSpuId())  
44 - .eqIfPresent(CombinationActivityDO::getTotalLimitCount, reqVO.getTotalLimitCount())  
45 - .eqIfPresent(CombinationActivityDO::getSingleLimitCount, reqVO.getSingleLimitCount())  
46 - .betweenIfPresent(CombinationActivityDO::getStartTime, reqVO.getStartTime())  
47 - .betweenIfPresent(CombinationActivityDO::getEndTime, reqVO.getEndTime())  
48 - .eqIfPresent(CombinationActivityDO::getUserSize, reqVO.getUserSize())  
49 - .eqIfPresent(CombinationActivityDO::getTotalNum, reqVO.getTotalNum())  
50 - .eqIfPresent(CombinationActivityDO::getSuccessNum, reqVO.getSuccessNum())  
51 - .eqIfPresent(CombinationActivityDO::getOrderUserCount, reqVO.getOrderUserCount())  
52 - .eqIfPresent(CombinationActivityDO::getVirtualGroup, reqVO.getVirtualGroup())  
53 .eqIfPresent(CombinationActivityDO::getStatus, reqVO.getStatus()) 30 .eqIfPresent(CombinationActivityDO::getStatus, reqVO.getStatus())
54 - .eqIfPresent(CombinationActivityDO::getLimitDuration, reqVO.getLimitDuration())  
55 - .betweenIfPresent(CombinationActivityDO::getCreateTime, reqVO.getCreateTime())  
56 .orderByDesc(CombinationActivityDO::getId)); 31 .orderByDesc(CombinationActivityDO::getId));
57 } 32 }
58 33
  34 + default List<CombinationActivityDO> selectListByStatus(Integer status) {
  35 + return selectList(CombinationActivityDO::getStatus, status);
  36 + }
59 } 37 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/combinationactivity/CombinationProductMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.dal.mysql.combination.combinationactivity;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  6 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product.CombinationProductExportReqVO;
  7 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product.CombinationProductPageReqVO;
  8 +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.combinationactivity.CombinationProductDO;
  9 +import org.apache.ibatis.annotations.Mapper;
  10 +
  11 +import java.util.List;
  12 +
  13 +/**
  14 + * 拼团商品 Mapper
  15 + *
  16 + * @author HUIHUI
  17 + */
  18 +@Mapper
  19 +public interface CombinationProductMapper extends BaseMapperX<CombinationProductDO> {
  20 +
  21 + default PageResult<CombinationProductDO> selectPage(CombinationProductPageReqVO reqVO) {
  22 + return selectPage(reqVO, new LambdaQueryWrapperX<CombinationProductDO>()
  23 + .eqIfPresent(CombinationProductDO::getActivityId, reqVO.getActivityId())
  24 + .eqIfPresent(CombinationProductDO::getSpuId, reqVO.getSpuId())
  25 + .eqIfPresent(CombinationProductDO::getSkuId, reqVO.getSkuId())
  26 + .eqIfPresent(CombinationProductDO::getActivityStatus, reqVO.getActivityStatus())
  27 + .betweenIfPresent(CombinationProductDO::getActivityStartTime, reqVO.getActivityStartTime())
  28 + .betweenIfPresent(CombinationProductDO::getActivityEndTime, reqVO.getActivityEndTime())
  29 + .eqIfPresent(CombinationProductDO::getActivePrice, reqVO.getActivePrice())
  30 + .betweenIfPresent(CombinationProductDO::getCreateTime, reqVO.getCreateTime())
  31 + .orderByDesc(CombinationProductDO::getId));
  32 + }
  33 +
  34 + default List<CombinationProductDO> selectList(CombinationProductExportReqVO reqVO) {
  35 + return selectList(new LambdaQueryWrapperX<CombinationProductDO>()
  36 + .eqIfPresent(CombinationProductDO::getActivityId, reqVO.getActivityId())
  37 + .eqIfPresent(CombinationProductDO::getSpuId, reqVO.getSpuId())
  38 + .eqIfPresent(CombinationProductDO::getSkuId, reqVO.getSkuId())
  39 + .eqIfPresent(CombinationProductDO::getActivityStatus, reqVO.getActivityStatus())
  40 + .betweenIfPresent(CombinationProductDO::getActivityStartTime, reqVO.getActivityStartTime())
  41 + .betweenIfPresent(CombinationProductDO::getActivityEndTime, reqVO.getActivityEndTime())
  42 + .eqIfPresent(CombinationProductDO::getActivePrice, reqVO.getActivePrice())
  43 + .betweenIfPresent(CombinationProductDO::getCreateTime, reqVO.getCreateTime())
  44 + .orderByDesc(CombinationProductDO::getId));
  45 + }
  46 +
  47 +}
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.dal.mysql.combination;
0 \ No newline at end of file 2 \ No newline at end of file
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityService.java
1 package cn.iocoder.yudao.module.promotion.service.combination; 1 package cn.iocoder.yudao.module.promotion.service.combination;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityCreateReqVO;  
5 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityExportReqVO;  
6 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityPageReqVO;  
7 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityUpdateReqVO;  
8 -import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO; 4 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO;
  5 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityExportReqVO;
  6 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO;
  7 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO;
  8 +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.combinationactivity.CombinationActivityDO;
9 9
10 import javax.validation.Valid; 10 import javax.validation.Valid;
11 import java.util.Collection; 11 import java.util.Collection;
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImpl.java
1 package cn.iocoder.yudao.module.promotion.service.combination; 1 package cn.iocoder.yudao.module.promotion.service.combination;
2 2
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.util.ObjectUtil;
  5 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityCreateReqVO;  
5 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityExportReqVO;  
6 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityPageReqVO;  
7 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityUpdateReqVO; 7 +import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
  8 +import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
  9 +import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
  10 +import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
  11 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO;
  12 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityExportReqVO;
  13 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO;
  14 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO;
  15 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.product.CombinationProductCreateReqVO;
8 import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert; 16 import cn.iocoder.yudao.module.promotion.convert.combination.CombinationActivityConvert;
9 -import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO;  
10 -import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationActivityMapper; 17 +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.combinationactivity.CombinationActivityDO;
  18 +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.combinationactivity.CombinationProductDO;
  19 +import cn.iocoder.yudao.module.promotion.dal.mysql.combination.combinationactivity.CombinationActivityMapper;
  20 +import cn.iocoder.yudao.module.promotion.dal.mysql.combination.combinationactivity.CombinationProductMapper;
11 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
12 import org.springframework.validation.annotation.Validated; 22 import org.springframework.validation.annotation.Validated;
13 23
14 import javax.annotation.Resource; 24 import javax.annotation.Resource;
  25 +import java.util.ArrayList;
15 import java.util.Collection; 26 import java.util.Collection;
16 import java.util.List; 27 import java.util.List;
  28 +import java.util.stream.Collectors;
17 29
18 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 30 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  31 +import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS;
19 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COMBINATION_ACTIVITY_NOT_EXISTS; 32 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COMBINATION_ACTIVITY_NOT_EXISTS;
  33 +import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COMBINATION_ACTIVITY_SPU_CONFLICTS;
  34 +import static cn.iocoder.yudao.module.promotion.util.PromotionUtils.validateProductSkuExistence;
20 35
21 /** 36 /**
22 * 拼团活动 Service 实现类 37 * 拼团活动 Service 实现类
@@ -29,14 +44,59 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic @@ -29,14 +44,59 @@ public class CombinationActivityServiceImpl implements CombinationActivityServic
29 44
30 @Resource 45 @Resource
31 private CombinationActivityMapper combinationActivityMapper; 46 private CombinationActivityMapper combinationActivityMapper;
  47 + @Resource
  48 + private CombinationProductMapper combinationProductMapper;
  49 + @Resource
  50 + private ProductSpuApi productSpuApi;
  51 + @Resource
  52 + private ProductSkuApi productSkuApi;
32 53
33 @Override 54 @Override
34 public Long createCombinationActivity(CombinationActivityCreateReqVO createReqVO) { 55 public Long createCombinationActivity(CombinationActivityCreateReqVO createReqVO) {
35 - // 插入  
36 - CombinationActivityDO combinationActivity = CombinationActivityConvert.INSTANCE.convert(createReqVO);  
37 - combinationActivityMapper.insert(combinationActivity); 56 + // 校验商品 SPU 是否存在是否参加的别的活动
  57 + validateProductCombinationConflict(createReqVO.getSpuIds());
  58 + // 获取所选 spu下的所有 sku
  59 + List<ProductSkuRespDTO> skus = productSkuApi.getSkuListBySpuId(createReqVO.getSpuIds());
  60 + // 校验商品 sku 是否存在
  61 + validateProductSkuExistence(skus, createReqVO.getProducts(), CombinationProductCreateReqVO::getSkuId);
  62 +
  63 + // TODO 艿艿 有个小问题:现在有活动时间和限制时长,活动时间的结束时间早于设置的限制时间怎么算状态比如:
  64 + // 活动时间 2023-08-05 15:00:00 - 2023-08-05 15:20:00 限制时长 2小时,那么活动时间结束就结束还是加时到满两小时
  65 + // 插入拼团活动
  66 + CombinationActivityDO activityDO = CombinationActivityConvert.INSTANCE.convert(createReqVO);
  67 + // TODO 营销相关属性初始化
  68 + activityDO.setUserSize(0);
  69 + activityDO.setTotalNum(0);
  70 + activityDO.setSuccessNum(0);
  71 + activityDO.setOrderUserCount(0);
  72 + activityDO.setVirtualGroup(0);
  73 + activityDO.setStatus(CommonStatusEnum.ENABLE.getStatus());
  74 + combinationActivityMapper.insert(activityDO);
  75 + // 插入商品
  76 + List<CombinationProductDO> productDOs = CombinationActivityConvert.INSTANCE.convertList(activityDO, createReqVO.getProducts());
  77 + combinationProductMapper.insertBatch(productDOs);
38 // 返回 78 // 返回
39 - return combinationActivity.getId(); 79 + return activityDO.getId();
  80 + }
  81 +
  82 + private void validateProductCombinationConflict(List<Long> spuIds) {
  83 + // 校验商品 spu 是否存在
  84 + List<ProductSpuRespDTO> spuList = productSpuApi.getSpuList(spuIds);
  85 + if (ObjectUtil.notEqual(spuIds.size(), spuList.size())) {
  86 + throw exception(SPU_NOT_EXISTS);
  87 + }
  88 + // 查询所有开启的秒杀活动
  89 + List<CombinationActivityDO> activityDOs = combinationActivityMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus());
  90 + // 过滤出所有 spuIds 有交集的活动
  91 + List<CombinationActivityDO> doList = activityDOs.stream().filter(s -> {
  92 + // 判断 spu 是否有交集
  93 + ArrayList<Long> spuIdsClone = CollUtil.newArrayList(s.getSpuIds());
  94 + spuIdsClone.retainAll(spuIds);
  95 + return CollUtil.isNotEmpty(spuIdsClone);
  96 + }).collect(Collectors.toList());
  97 + if (CollUtil.isNotEmpty(doList)) {
  98 + throw exception(COMBINATION_ACTIVITY_SPU_CONFLICTS);
  99 + }
40 } 100 }
41 101
42 @Override 102 @Override
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/seckill/seckillactivity/SeckillActivityServiceImpl.java
@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.util.ObjectUtil; 4 import cn.hutool.core.util.ObjectUtil;
5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 5 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;  
8 import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; 7 import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
9 import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; 8 import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
10 import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; 9 import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
@@ -12,7 +11,8 @@ import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; @@ -12,7 +11,8 @@ import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
12 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityCreateReqVO; 11 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityCreateReqVO;
13 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityPageReqVO; 12 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityPageReqVO;
14 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityUpdateReqVO; 13 import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.activity.SeckillActivityUpdateReqVO;
15 -import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.product.SeckillProductBaseVO; 14 +import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.product.SeckillProductCreateReqVO;
  15 +import cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.product.SeckillProductUpdateReqVO;
16 import cn.iocoder.yudao.module.promotion.convert.seckill.seckillactivity.SeckillActivityConvert; 16 import cn.iocoder.yudao.module.promotion.convert.seckill.seckillactivity.SeckillActivityConvert;
17 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillActivityDO; 17 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillActivityDO;
18 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillProductDO; 18 import cn.iocoder.yudao.module.promotion.dal.dataobject.seckill.seckillactivity.SeckillProductDO;
@@ -28,13 +28,12 @@ import javax.annotation.Resource; @@ -28,13 +28,12 @@ import javax.annotation.Resource;
28 import java.util.ArrayList; 28 import java.util.ArrayList;
29 import java.util.Collection; 29 import java.util.Collection;
30 import java.util.List; 30 import java.util.List;
31 -import java.util.Set;  
32 import java.util.stream.Collectors; 31 import java.util.stream.Collectors;
33 32
34 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 33 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
35 -import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS;  
36 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS; 34 import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS;
37 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; 35 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
  36 +import static cn.iocoder.yudao.module.promotion.util.PromotionUtils.validateProductSkuExistence;
38 import static java.util.Arrays.asList; 37 import static java.util.Arrays.asList;
39 38
40 /** 39 /**
@@ -61,8 +60,10 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -61,8 +60,10 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
61 public Long createSeckillActivity(SeckillActivityCreateReqVO createReqVO) { 60 public Long createSeckillActivity(SeckillActivityCreateReqVO createReqVO) {
62 // 校验商品秒秒杀时段是否冲突 61 // 校验商品秒秒杀时段是否冲突
63 validateProductSpuSeckillConflict(createReqVO.getConfigIds(), createReqVO.getSpuIds()); 62 validateProductSpuSeckillConflict(createReqVO.getConfigIds(), createReqVO.getSpuIds());
  63 + // 获取所选 spu下的所有 sku
  64 + List<ProductSkuRespDTO> skus = productSkuApi.getSkuListBySpuId(createReqVO.getSpuIds());
64 // 校验商品 sku 是否存在 65 // 校验商品 sku 是否存在
65 - validateProductSkuExistence(createReqVO.getSpuIds(), createReqVO.getProducts()); 66 + validateProductSkuExistence(skus, createReqVO.getProducts(), SeckillProductCreateReqVO::getSkuId);
66 67
67 // 插入秒杀活动 68 // 插入秒杀活动
68 SeckillActivityDO activity = SeckillActivityConvert.INSTANCE.convert(createReqVO) 69 SeckillActivityDO activity = SeckillActivityConvert.INSTANCE.convert(createReqVO)
@@ -74,28 +75,6 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -74,28 +75,6 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
74 return activity.getId(); 75 return activity.getId();
75 } 76 }
76 77
77 - private <T extends SeckillProductBaseVO> void validateProductSkuExistence(List<Long> spuIds, List<T> products) {  
78 - // 校验 spu 个数是否相等  
79 - // TODO @puhui999:不用校验 SPU 哈,只校验 sku 对应的 spuId 是否一致;  
80 - Set<Long> convertedSpuIds = CollectionUtils.convertSet(products, T::getSpuId);  
81 - if (ObjectUtil.notEqual(spuIds.size(), convertedSpuIds.size())) {  
82 - throw exception(SKU_NOT_EXISTS);  
83 - }  
84 - // 获取所选 spu下的所有 sku  
85 - // TODO @puhui999:变量可以简单一点;skus  
86 - List<ProductSkuRespDTO> skuRespDTOs = productSkuApi.getSkuListBySpuId(spuIds);  
87 - // 校验 sku 个数是否一致  
88 - Set<Long> skuIdsSet = CollectionUtils.convertSet(products, T::getSkuId);  
89 - Set<Long> skuIdsSet1 = CollectionUtils.convertSet(skuRespDTOs, ProductSkuRespDTO::getId);  
90 - if (ObjectUtil.notEqual(skuIdsSet.size(), skuIdsSet1.size())) {  
91 - throw exception(SKU_NOT_EXISTS);  
92 - }  
93 - // 校验 skuId 是否存在  
94 - if (!skuIdsSet1.containsAll(skuIdsSet) || !skuIdsSet.containsAll(skuIdsSet1)) {  
95 - throw exception(SKU_NOT_EXISTS);  
96 - }  
97 - }  
98 -  
99 private void validateProductSpuSeckillConflict(List<Long> configIds, List<Long> spuIds) { 78 private void validateProductSpuSeckillConflict(List<Long> configIds, List<Long> spuIds) {
100 // 校验秒杀时段是否存在 79 // 校验秒杀时段是否存在
101 seckillConfigService.validateSeckillConfigExists(configIds); 80 seckillConfigService.validateSeckillConfigExists(configIds);
@@ -133,8 +112,10 @@ public class SeckillActivityServiceImpl implements SeckillActivityService { @@ -133,8 +112,10 @@ public class SeckillActivityServiceImpl implements SeckillActivityService {
133 } 112 }
134 // 校验商品是否冲突 113 // 校验商品是否冲突
135 validateProductSpuSeckillConflict(updateReqVO.getConfigIds(), updateReqVO.getSpuIds()); 114 validateProductSpuSeckillConflict(updateReqVO.getConfigIds(), updateReqVO.getSpuIds());
  115 + // 获取所选 spu下的所有 sku
  116 + List<ProductSkuRespDTO> skus = productSkuApi.getSkuListBySpuId(updateReqVO.getSpuIds());
136 // 校验商品 sku 是否存在 117 // 校验商品 sku 是否存在
137 - validateProductSkuExistence(updateReqVO.getSpuIds(), updateReqVO.getProducts()); 118 + validateProductSkuExistence(skus, updateReqVO.getProducts(), SeckillProductUpdateReqVO::getSkuId);
138 119
139 // 更新活动 120 // 更新活动
140 SeckillActivityDO updateObj = SeckillActivityConvert.INSTANCE.convert(updateReqVO) 121 SeckillActivityDO updateObj = SeckillActivityConvert.INSTANCE.convert(updateReqVO)
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.hutool.core.util.ObjectUtil;
3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 4 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  5 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
4 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils; 6 import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
  7 +import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
5 8
6 import java.time.LocalDateTime; 9 import java.time.LocalDateTime;
  10 +import java.util.List;
  11 +import java.util.Set;
  12 +import java.util.function.Function;
  13 +
  14 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  15 +import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SKU_NOT_EXISTS;
7 16
8 /** 17 /**
9 * 活动工具类 18 * 活动工具类
@@ -22,4 +31,17 @@ public class PromotionUtils { @@ -22,4 +31,17 @@ public class PromotionUtils {
22 return LocalDateTimeUtils.beforeNow(endTime) ? CommonStatusEnum.DISABLE.getStatus() : CommonStatusEnum.ENABLE.getStatus(); 31 return LocalDateTimeUtils.beforeNow(endTime) ? CommonStatusEnum.DISABLE.getStatus() : CommonStatusEnum.ENABLE.getStatus();
23 } 32 }
24 33
  34 + public static <T> void validateProductSkuExistence(List<ProductSkuRespDTO> skus, List<T> products, Function<T, Long> func) {
  35 + // 校验 sku 个数是否一致
  36 + Set<Long> skuIdsSet = CollectionUtils.convertSet(products, func);
  37 + Set<Long> skuIdsSet1 = CollectionUtils.convertSet(skus, ProductSkuRespDTO::getId);
  38 + if (ObjectUtil.notEqual(skuIdsSet.size(), skuIdsSet1.size())) {
  39 + throw exception(SKU_NOT_EXISTS);
  40 + }
  41 + // 校验 skuId 是否存在
  42 + if (!skuIdsSet1.containsAll(skuIdsSet) || !skuIdsSet.containsAll(skuIdsSet1)) {
  43 + throw exception(SKU_NOT_EXISTS);
  44 + }
  45 + }
  46 +
25 } 47 }
yudao-module-mall/yudao-module-promotion-biz/src/test/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationActivityServiceImplTest.java
@@ -2,12 +2,12 @@ package cn.iocoder.yudao.module.promotion.service.combination; @@ -2,12 +2,12 @@ package cn.iocoder.yudao.module.promotion.service.combination;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 4 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
5 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityCreateReqVO;  
6 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityExportReqVO;  
7 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityPageReqVO;  
8 -import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.CombinationActivityUpdateReqVO;  
9 -import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationActivityDO;  
10 -import cn.iocoder.yudao.module.promotion.dal.mysql.combination.CombinationActivityMapper; 5 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO;
  6 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityExportReqVO;
  7 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO;
  8 +import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO;
  9 +import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.combinationactivity.CombinationActivityDO;
  10 +import cn.iocoder.yudao.module.promotion.dal.mysql.combination.combinationactivity.CombinationActivityMapper;
11 import org.junit.jupiter.api.Disabled; 11 import org.junit.jupiter.api.Disabled;
12 import org.junit.jupiter.api.Test; 12 import org.junit.jupiter.api.Test;
13 import org.springframework.context.annotation.Import; 13 import org.springframework.context.annotation.Import;
@@ -107,7 +107,7 @@ public class CombinationActivityServiceImplTest extends BaseDbUnitTest { @@ -107,7 +107,7 @@ public class CombinationActivityServiceImplTest extends BaseDbUnitTest {
107 // mock 数据 107 // mock 数据
108 CombinationActivityDO dbCombinationActivity = randomPojo(CombinationActivityDO.class, o -> { // 等会查询到 108 CombinationActivityDO dbCombinationActivity = randomPojo(CombinationActivityDO.class, o -> { // 等会查询到
109 o.setName(null); 109 o.setName(null);
110 - o.setSpuId(null); 110 + //o.setSpuId(null);
111 o.setTotalLimitCount(null); 111 o.setTotalLimitCount(null);
112 o.setSingleLimitCount(null); 112 o.setSingleLimitCount(null);
113 o.setStartTime(null); 113 o.setStartTime(null);
@@ -125,7 +125,7 @@ public class CombinationActivityServiceImplTest extends BaseDbUnitTest { @@ -125,7 +125,7 @@ public class CombinationActivityServiceImplTest extends BaseDbUnitTest {
125 // 测试 name 不匹配 125 // 测试 name 不匹配
126 combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setName(null))); 126 combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setName(null)));
127 // 测试 spuId 不匹配 127 // 测试 spuId 不匹配
128 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setSpuId(null))); 128 + //combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setSpuId(null)));
129 // 测试 totalLimitCount 不匹配 129 // 测试 totalLimitCount 不匹配
130 combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setTotalLimitCount(null))); 130 combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setTotalLimitCount(null)));
131 // 测试 singleLimitCount 不匹配 131 // 测试 singleLimitCount 不匹配
@@ -181,7 +181,7 @@ public class CombinationActivityServiceImplTest extends BaseDbUnitTest { @@ -181,7 +181,7 @@ public class CombinationActivityServiceImplTest extends BaseDbUnitTest {
181 // mock 数据 181 // mock 数据
182 CombinationActivityDO dbCombinationActivity = randomPojo(CombinationActivityDO.class, o -> { // 等会查询到 182 CombinationActivityDO dbCombinationActivity = randomPojo(CombinationActivityDO.class, o -> { // 等会查询到
183 o.setName(null); 183 o.setName(null);
184 - o.setSpuId(null); 184 + //o.setSpuId(null);
185 o.setTotalLimitCount(null); 185 o.setTotalLimitCount(null);
186 o.setSingleLimitCount(null); 186 o.setSingleLimitCount(null);
187 o.setStartTime(null); 187 o.setStartTime(null);
@@ -199,7 +199,7 @@ public class CombinationActivityServiceImplTest extends BaseDbUnitTest { @@ -199,7 +199,7 @@ public class CombinationActivityServiceImplTest extends BaseDbUnitTest {
199 // 测试 name 不匹配 199 // 测试 name 不匹配
200 combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setName(null))); 200 combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setName(null)));
201 // 测试 spuId 不匹配 201 // 测试 spuId 不匹配
202 - combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setSpuId(null))); 202 + //combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setSpuId(null)));
203 // 测试 totalLimitCount 不匹配 203 // 测试 totalLimitCount 不匹配
204 combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setTotalLimitCount(null))); 204 combinationActivityMapper.insert(cloneIgnoreId(dbCombinationActivity, o -> o.setTotalLimitCount(null)));
205 // 测试 singleLimitCount 不匹配 205 // 测试 singleLimitCount 不匹配