spuMap = CollectionUtils.convertMap(list, ProductSpuDO::getId);
+ // 校验
+ ids.forEach(id -> {
+ ProductSpuDO spu = spuMap.get(id);
+ if (spu == null) {
+ throw exception(SPU_NOT_EXISTS);
+ }
+ if (!ProductSpuStatusEnum.isEnable(spu.getStatus())) {
+ throw exception(SPU_NOT_ENABLE, spu.getName());
+ }
+ });
+ return list;
+ }
+
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteSpu(Long id) {
diff --git a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImplTest.java b/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImplTest.java
index 2f55af837..fb6bc3649 100644
--- a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImplTest.java
+++ b/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/comment/ProductCommentServiceImplTest.java
@@ -16,7 +16,6 @@ import cn.iocoder.yudao.module.product.dal.mysql.comment.ProductCommentMapper;
import cn.iocoder.yudao.module.product.enums.comment.ProductCommentScoresEnum;
import cn.iocoder.yudao.module.product.service.sku.ProductSkuService;
import cn.iocoder.yudao.module.product.service.spu.ProductSpuService;
-import cn.iocoder.yudao.module.trade.api.order.TradeOrderApi;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Import;
@@ -48,8 +47,6 @@ public class ProductCommentServiceImplTest extends BaseDbUnitTest {
@Lazy
private ProductCommentServiceImpl productCommentService;
- @MockBean
- private TradeOrderApi tradeOrderApi;
@MockBean
private ProductSpuService productSpuService;
@MockBean
diff --git a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImplTest.java b/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImplTest.java
index e57540292..dcda35550 100755
--- a/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImplTest.java
+++ b/yudao-module-mall/yudao-module-product-biz/src/test/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImplTest.java
@@ -92,8 +92,8 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest {
o.setMarketPrice(generaInt());
o.setStock(generaInt());
o.setWarnStock(10);
- o.setSubCommissionFirstPrice(generaInt());
- o.setSubCommissionSecondPrice(generaInt());
+ o.setFirstBrokeragePrice(generaInt());
+ o.setSecondBrokeragePrice(generaInt());
// 限制分数为两位数
o.setWeight(RandomUtil.randomDouble(10,2, RoundingMode.HALF_UP));
o.setVolume(RandomUtil.randomDouble(10,2, RoundingMode.HALF_UP));
@@ -143,8 +143,8 @@ public class ProductSpuServiceImplTest extends BaseDbUnitTest {
o.setMarketPrice(generaInt());
o.setStock(generaInt());
o.setWarnStock(10);
- o.setSubCommissionFirstPrice(generaInt());
- o.setSubCommissionSecondPrice(generaInt());
+ o.setFirstBrokeragePrice(generaInt());
+ o.setSecondBrokeragePrice(generaInt());
// 限制分数为两位数
o.setWeight(RandomUtil.randomDouble(10,2, RoundingMode.HALF_UP));
o.setVolume(RandomUtil.randomDouble(10,2, RoundingMode.HALF_UP));
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainActivityApi.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainActivityApi.java
index 5e62d6e9e..0f9812629 100644
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainActivityApi.java
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainActivityApi.java
@@ -10,9 +10,9 @@ public interface BargainActivityApi {
/**
* 更新砍价活动库存
*
- * @param activityId 砍价活动编号
- * @param count 购买数量
+ * @param id 砍价活动编号
+ * @param count 购买数量
*/
- void updateBargainActivityStock(Long activityId, Integer count);
+ void updateBargainActivityStock(Long id, Integer count);
}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainRecordApi.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainRecordApi.java
index 397d9cf29..fb0e3f02b 100644
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainRecordApi.java
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainRecordApi.java
@@ -1,10 +1,6 @@
package cn.iocoder.yudao.module.promotion.api.bargain;
-import cn.iocoder.yudao.module.promotion.api.bargain.dto.BargainRecordCreateReqDTO;
-
-import javax.validation.Valid;
-
-// TODO @芋艿:后面也再撸撸这几个接口
+import cn.iocoder.yudao.module.promotion.api.bargain.dto.BargainValidateJoinRespDTO;
/**
* 砍价记录 API 接口
@@ -14,19 +10,25 @@ import javax.validation.Valid;
public interface BargainRecordApi {
/**
- * 创建砍价记录
+ * 【下单前】校验是否参与砍价活动
+ *
+ * 如果校验失败,则抛出业务异常
*
- * @param reqDTO 请求 DTO
+ * @param userId 用户编号
+ * @param bargainRecordId 砍价活动编号
+ * @param skuId SKU 编号
+ * @return 砍价信息
*/
- void createBargainRecord(@Valid BargainRecordCreateReqDTO reqDTO);
+ BargainValidateJoinRespDTO validateJoinBargain(Long userId, Long bargainRecordId, Long skuId);
/**
- * 查询砍价是否成功
+ * 更新砍价记录的订单编号
*
- * @param userId 用户编号
+ * 在砍价成功后,用户发起订单后,会记录该订单编号
+ *
+ * @param id 砍价记录编号
* @param orderId 订单编号
- * @return 砍价是否成功
*/
- boolean isBargainRecordSuccess(Long userId, Long orderId);
+ void updateBargainRecordOrderId(Long id, Long orderId);
}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/dto/BargainRecordCreateReqDTO.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/dto/BargainRecordCreateReqDTO.java
deleted file mode 100644
index d7835b23c..000000000
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/dto/BargainRecordCreateReqDTO.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package cn.iocoder.yudao.module.promotion.api.bargain.dto;
-
-import lombok.Data;
-
-import javax.validation.constraints.NotNull;
-
-// TODO @芋艿:这块要在看看
-
-/**
- * 砍价记录的创建 Request DTO
- *
- * @author HUIHUI
- */
-@Data
-public class BargainRecordCreateReqDTO {
-
- /**
- * 砍价活动编号
- */
- @NotNull(message = "砍价活动编号不能为空")
- private Long activityId;
- /**
- * spu 编号
- */
- @NotNull(message = "spu 编号不能为空")
- private Long spuId;
- /**
- * sku 编号
- */
- @NotNull(message = "sku 编号不能为空")
- private Long skuId;
- /**
- * 用户编号
- */
- @NotNull(message = "用户编号不能为空")
- private Long userId;
- /**
- * 订单编号
- */
- @NotNull(message = "订单编号不能为空")
- private Long orderId;
-
- /**
- * 砍价商品单价
- */
- @NotNull(message = "砍价底价不能为空")
- private Integer bargainPrice;
- /**
- * 商品原价,单位分
- */
- @NotNull(message = "商品原价不能为空")
- private Integer price;
-
- /**
- * 开团状态:进行中 砍价成功 砍价失败
- */
- @NotNull(message = "开团状态不能为空")
- private Integer status;
-
-}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/dto/BargainValidateJoinRespDTO.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/dto/BargainValidateJoinRespDTO.java
new file mode 100644
index 000000000..a64e923f5
--- /dev/null
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/dto/BargainValidateJoinRespDTO.java
@@ -0,0 +1,25 @@
+package cn.iocoder.yudao.module.promotion.api.bargain.dto;
+
+import lombok.Data;
+
+/**
+ * 校验参与砍价 Response DTO
+ */
+@Data
+public class BargainValidateJoinRespDTO {
+
+ /**
+ * 砍价活动编号
+ */
+ private Long activityId;
+ /**
+ * 砍价活动名称
+ */
+ private String name;
+
+ /**
+ * 砍价金额
+ */
+ private Integer bargainPrice;
+
+}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationActivityApi.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationActivityApi.java
new file mode 100644
index 000000000..a5163cdf1
--- /dev/null
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationActivityApi.java
@@ -0,0 +1,10 @@
+package cn.iocoder.yudao.module.promotion.api.combination;
+
+/**
+ * 拼团活动 Api 接口
+ *
+ * @author HUIHUI
+ */
+public interface CombinationActivityApi {
+
+}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationRecordApi.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationRecordApi.java
index 859eb5c7e..4b42aca07 100644
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationRecordApi.java
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationRecordApi.java
@@ -1,13 +1,10 @@
package cn.iocoder.yudao.module.promotion.api.combination;
+import cn.iocoder.yudao.framework.common.core.KeyValue;
import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
-import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordRespDTO;
+import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationValidateJoinRespDTO;
import javax.validation.Valid;
-import java.time.LocalDateTime;
-import java.util.List;
-
-// TODO @芋艿:后面也再撸撸这几个接口
/**
* 拼团记录 API 接口
@@ -16,12 +13,24 @@ import java.util.List;
*/
public interface CombinationRecordApi {
+ /**
+ * 校验是否满足拼团条件
+ *
+ * @param userId 用户编号
+ * @param activityId 活动编号
+ * @param headId 团长编号
+ * @param skuId sku 编号
+ * @param count 数量
+ */
+ void validateCombinationRecord(Long userId, Long activityId, Long headId, Long skuId, Integer count);
+
/**
* 创建开团记录
*
* @param reqDTO 请求 DTO
+ * @return key 开团记录编号、value 团长编号
*/
- void createCombinationRecord(@Valid CombinationRecordCreateReqDTO reqDTO);
+ KeyValue createCombinationRecord(@Valid CombinationRecordCreateReqDTO reqDTO);
/**
* 查询拼团记录是否成功
@@ -33,34 +42,7 @@ public interface CombinationRecordApi {
boolean isCombinationRecordSuccess(Long userId, Long orderId);
/**
- * 获取拼团记录
- *
- * @param userId 用户编号
- * @param activityId 活动编号
- * @return 拼团记录列表
- */
- List getRecordListByUserIdAndActivityId(Long userId, Long activityId);
-
- /**
- * 验证组合限制数
- * 校验是否满足限购要求
- *
- * @param count 本次购买数量
- * @param sumCount 已购买数量合计
- * @param activityId 活动编号
- */
- void validateCombinationLimitCount(Long activityId, Integer count, Integer sumCount);
-
- /**
- * 更新拼团状态为成功
- *
- * @param userId 用户编号
- * @param orderId 订单编号
- */
- void updateRecordStatusToSuccess(Long userId, Long orderId);
-
- /**
- * 更新拼团状态为失败
+ * 更新拼团状态为【失败】
*
* @param userId 用户编号
* @param orderId 订单编号
@@ -68,12 +50,18 @@ public interface CombinationRecordApi {
void updateRecordStatusToFailed(Long userId, Long orderId);
/**
- * 更新拼团状态为 进行中
+ * 【下单前】校验是否满足拼团活动条件
*
- * @param userId 用户编号
- * @param orderId 订单编号
- * @param startTime 开始时间
+ * 如果校验失败,则抛出业务异常
+ *
+ * @param userId 用户编号
+ * @param activityId 活动编号
+ * @param headId 团长编号
+ * @param skuId sku 编号
+ * @param count 数量
+ * @return 拼团信息
*/
- void updateRecordStatusToInProgress(Long userId, Long orderId, LocalDateTime startTime);
+ CombinationValidateJoinRespDTO validateJoinCombination(Long userId, Long activityId, Long headId,
+ Long skuId, Integer count);
}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationRecordCreateReqDTO.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationRecordCreateReqDTO.java
index 4d4c0dafd..ac86c45ea 100644
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationRecordCreateReqDTO.java
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationRecordCreateReqDTO.java
@@ -2,10 +2,8 @@ package cn.iocoder.yudao.module.promotion.api.combination.dto;
import lombok.Data;
-import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
-// TODO @芋艿:这块要在看看
/**
* 拼团记录的创建 Request DTO
*
@@ -30,49 +28,28 @@ public class CombinationRecordCreateReqDTO {
@NotNull(message = "sku 编号不能为空")
private Long skuId;
/**
- * 用户编号
+ * 购买的商品数量
*/
- @NotNull(message = "用户编号不能为空")
- private Long userId;
+ @NotNull(message = "购买数量不能为空")
+ private Integer count;
/**
* 订单编号
*/
@NotNull(message = "订单编号不能为空")
private Long orderId;
+ /**
+ * 用户编号
+ */
+ @NotNull(message = "用户编号不能为空")
+ private Long userId;
/**
* 团长编号
*/
- @NotNull(message = "团长编号不能为空")
private Long headId;
- /**
- * 商品名字
- */
- @NotEmpty(message = "商品名字不能为空")
- private String spuName;
- /**
- * 商品图片
- */
- @NotEmpty(message = "商品图片不能为空")
- private String picUrl;
/**
* 拼团商品单价
*/
@NotNull(message = "拼团商品单价不能为空")
private Integer combinationPrice;
- /**
- * 用户昵称
- */
- @NotEmpty(message = "用户昵称不能为空")
- private String nickname;
- /**
- * 用户头像
- */
- @NotEmpty(message = "用户头像不能为空")
- private String avatar;
- /**
- * 开团状态:正在开团 拼团成功 拼团失败
- */
- @NotNull(message = "开团状态不能为空")
- private Integer status;
}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationRecordRespDTO.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationRecordRespDTO.java
deleted file mode 100644
index 96b54ca1b..000000000
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationRecordRespDTO.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package cn.iocoder.yudao.module.promotion.api.combination.dto;
-
-import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;
-import lombok.Data;
-
-/**
- * 拼团记录 Response DTO
- *
- * @author HUIHUI
- */
-@Data
-public class CombinationRecordRespDTO {
-
- /**
- * 拼团活动编号
- */
- private Long activityId;
- /**
- * SPU 编号
- */
- private Long spuId;
- /**
- * SKU 编号
- */
- private Long skuId;
- /**
- * 用户编号
- */
- private Long userId;
- /**
- * 订单编号
- */
- private Long orderId;
- /**
- * 开团状态
- *
- * 枚举 {@link CombinationRecordStatusEnum}
- */
- private Integer status;
-
-}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationValidateJoinRespDTO.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationValidateJoinRespDTO.java
new file mode 100644
index 000000000..86fe00a5f
--- /dev/null
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationValidateJoinRespDTO.java
@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.promotion.api.combination.dto;
+
+import lombok.Data;
+
+/**
+ * 校验参与拼团 Response DTO
+ *
+ * @author HUIHUI
+ */
+@Data
+public class CombinationValidateJoinRespDTO {
+
+ /**
+ * 砍价活动编号
+ */
+ private Long activityId;
+ /**
+ * 砍价活动名称
+ */
+ private String name;
+
+ /**
+ * 拼团金额
+ */
+ private Integer combinationPrice;
+
+}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/dto/RewardActivityMatchRespDTO.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/dto/RewardActivityMatchRespDTO.java
index 19f46a49a..6ae71a1d9 100644
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/dto/RewardActivityMatchRespDTO.java
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/reward/dto/RewardActivityMatchRespDTO.java
@@ -68,7 +68,7 @@ public class RewardActivityMatchRespDTO {
*/
private List couponIds;
/**
- * 赠送的优惠卷数量的数组
+ * 赠送的优惠券数量的数组
*/
private List couponCounts;
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApi.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApi.java
index 9c5cf1d35..0d65919d1 100644
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApi.java
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/SeckillActivityApi.java
@@ -1,6 +1,6 @@
package cn.iocoder.yudao.module.promotion.api.seckill;
-import cn.iocoder.yudao.module.promotion.api.seckill.dto.SeckillActivityUpdateStockReqDTO;
+import cn.iocoder.yudao.module.promotion.api.seckill.dto.SeckillValidateJoinRespDTO;
/**
* 秒杀活动 API 接口
@@ -10,10 +10,33 @@ import cn.iocoder.yudao.module.promotion.api.seckill.dto.SeckillActivityUpdateSt
public interface SeckillActivityApi {
/**
- * 更新秒杀库存
+ * 更新秒杀库存(减少)
*
- * @param updateStockReqDTO 请求
+ * @param id 活动编号
+ * @param skuId sku 编号
+ * @param count 数量(正数)
*/
- void updateSeckillStock(SeckillActivityUpdateStockReqDTO updateStockReqDTO);
+ void updateSeckillStockDecr(Long id, Long skuId, Integer count);
+
+ /**
+ * 更新秒杀库存(增加)
+ *
+ * @param id 活动编号
+ * @param skuId sku 编号
+ * @param count 数量(正数)
+ */
+ void updateSeckillStockIncr(Long id, Long skuId, Integer count);
+
+ /**
+ * 【下单前】校验是否参与秒杀活动
+ *
+ * 如果校验失败,则抛出业务异常
+ *
+ * @param activityId 活动编号
+ * @param skuId SKU 编号
+ * @param count 数量
+ * @return 秒杀信息
+ */
+ SeckillValidateJoinRespDTO validateJoinSeckill(Long activityId, Long skuId, Integer count);
}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/dto/SeckillActivityUpdateStockReqDTO.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/dto/SeckillActivityUpdateStockReqDTO.java
deleted file mode 100644
index df7c5649c..000000000
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/dto/SeckillActivityUpdateStockReqDTO.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package cn.iocoder.yudao.module.promotion.api.seckill.dto;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * 更新秒杀库存 request DTO
- *
- * @author HUIHUI
- */
-@Data
-public class SeckillActivityUpdateStockReqDTO {
-
- // TODO @puhui999:参数校验
-
- // TODO @puhui999:秒杀的话,一次只能购买一种商品哈;不能多个哈;
-
- /**
- * 活动编号
- */
- private Long activityId;
- /**
- * 总购买数量
- */
- private Integer count;
- /**
- * 活动商品
- */
- private List- items;
-
- @Data
- public static class Item {
-
- /**
- * SPU 编号
- */
- private Long spuId;
- /**
- * SKU 编号
- */
- private Long skuId;
- /**
- * 购买数量
- */
- private Integer count;
-
- }
-
-}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/dto/SeckillValidateJoinRespDTO.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/dto/SeckillValidateJoinRespDTO.java
new file mode 100644
index 000000000..aae89a415
--- /dev/null
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/dto/SeckillValidateJoinRespDTO.java
@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.promotion.api.seckill.dto;
+
+import lombok.Data;
+
+/**
+ * 校验参与秒杀 Response DTO
+ */
+@Data
+public class SeckillValidateJoinRespDTO {
+
+ /**
+ * 秒杀活动名称
+ */
+ private String name;
+ /**
+ * 总限购数量
+ *
+ * 目的:目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用
+ */
+ private Integer totalLimitCount;
+
+ /**
+ * 秒杀金额
+ */
+ private Integer seckillPrice;
+
+}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java
index 4e381293b..dc4f0ee08 100644
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java
@@ -51,11 +51,15 @@ public interface ErrorCodeConstants {
// ========== 秒杀活动 1-013-008-000 ==========
ErrorCode SECKILL_ACTIVITY_NOT_EXISTS = new ErrorCode(1_013_008_000, "秒杀活动不存在");
- ErrorCode SECKILL_ACTIVITY_SPU_CONFLICTS = new ErrorCode(1_013_008_002, "存在商品参加了其它秒杀活动");
+ ErrorCode SECKILL_ACTIVITY_SPU_CONFLICTS = new ErrorCode(1_013_008_002, "存在商品参加了其它秒杀活动,秒杀时段冲突");
ErrorCode SECKILL_ACTIVITY_UPDATE_FAIL_STATUS_CLOSED = new ErrorCode(1_013_008_003, "秒杀活动已关闭,不能修改");
ErrorCode SECKILL_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1_013_008_004, "秒杀活动未关闭或未结束,不能删除");
ErrorCode SECKILL_ACTIVITY_CLOSE_FAIL_STATUS_CLOSED = new ErrorCode(1_013_008_005, "秒杀活动已关闭,不能重复关闭");
- ErrorCode SECKILL_ACTIVITY_UPDATE_STOCK_FAIL = new ErrorCode(1013008006, "更新秒杀活动库存失败,原因秒杀库存不足");
+ ErrorCode SECKILL_ACTIVITY_UPDATE_STOCK_FAIL = new ErrorCode(1_013_008_006, "秒杀失败,原因:秒杀库存不足");
+ ErrorCode SECKILL_JOIN_ACTIVITY_TIME_ERROR = new ErrorCode(1_013_008_007, "秒杀失败,原因:不在活动时间范围内");
+ ErrorCode SECKILL_JOIN_ACTIVITY_STATUS_CLOSED = new ErrorCode(1_013_008_008, "秒杀失败,原因:秒杀活动已关闭");
+ ErrorCode SECKILL_JOIN_ACTIVITY_SINGLE_LIMIT_COUNT_EXCEED = new ErrorCode(1_013_008_009, "秒杀失败,原因:单次限购超出");
+ ErrorCode SECKILL_JOIN_ACTIVITY_PRODUCT_NOT_EXISTS = new ErrorCode(1_013_008_010, "秒杀失败,原因:商品不存在");
// ========== 秒杀时段 1-013-009-000 ==========
ErrorCode SECKILL_CONFIG_NOT_EXISTS = new ErrorCode(1_013_009_000, "秒杀时段不存在");
@@ -65,29 +69,45 @@ public interface ErrorCodeConstants {
// ========== 拼团活动 1-013-010-000 ==========
ErrorCode COMBINATION_ACTIVITY_NOT_EXISTS = new ErrorCode(1_013_010_000, "拼团活动不存在");
ErrorCode COMBINATION_ACTIVITY_SPU_CONFLICTS = new ErrorCode(1_013_010_001, "存在商品参加了其它拼团活动");
- ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE = new ErrorCode(1_013_010_002, "拼团活动已关闭不能修改");
+ ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE_NOT_UPDATE = new ErrorCode(1_013_010_002, "拼团活动已关闭不能修改");
ErrorCode COMBINATION_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1_013_010_003, "拼团活动未关闭或未结束,不能删除");
- ErrorCode COMBINATION_RECORD_NOT_EXISTS = new ErrorCode(1_013_010_004, "拼团不存在");
+ ErrorCode COMBINATION_ACTIVITY_STATUS_DISABLE = new ErrorCode(1_013_010_004, "拼团失败,原因:拼团活动已关闭");
+ ErrorCode COMBINATION_JOIN_ACTIVITY_PRODUCT_NOT_EXISTS = new ErrorCode(1_013_010_005, "拼团失败,原因:拼团活动商品不存在");
+ ErrorCode COMBINATION_ACTIVITY_UPDATE_STOCK_FAIL = new ErrorCode(1_013_010_006, "拼团失败,原因:拼团活动商品库存不足");
// ========== 拼团记录 1-013-011-000 ==========
- ErrorCode COMBINATION_RECORD_EXISTS = new ErrorCode(1_013_011_000, "拼团失败,已参与过该拼团");
- ErrorCode COMBINATION_RECORD_HEAD_NOT_EXISTS = new ErrorCode(1_013_011_001, "拼团失败,父拼团不存在");
- ErrorCode COMBINATION_RECORD_USER_FULL = new ErrorCode(1_013_011_002, "拼团失败,拼团人数已满");
- ErrorCode COMBINATION_RECORD_FAILED_HAVE_JOINED = new ErrorCode(1_013_011_003, "拼团失败,已参与其它拼团");
- ErrorCode COMBINATION_RECORD_FAILED_TIME_END = new ErrorCode(1_013_011_004, "拼团失败,活动已经结束");
- ErrorCode COMBINATION_RECORD_FAILED_SINGLE_LIMIT_COUNT_EXCEED = new ErrorCode(1_013_011_005, "拼团失败,单次限购超出");
- ErrorCode COMBINATION_RECORD_FAILED_TOTAL_LIMIT_COUNT_EXCEED = new ErrorCode(1_013_011_006, "拼团失败,单次限购超出");
+ ErrorCode COMBINATION_RECORD_NOT_EXISTS = new ErrorCode(1_013_011_000, "拼团不存在");
+ ErrorCode COMBINATION_RECORD_EXISTS = new ErrorCode(1_013_011_001, "拼团失败,已参与过该拼团");
+ ErrorCode COMBINATION_RECORD_HEAD_NOT_EXISTS = new ErrorCode(1_013_011_002, "拼团失败,父拼团不存在");
+ ErrorCode COMBINATION_RECORD_USER_FULL = new ErrorCode(1_013_011_003, "拼团失败,拼团人数已满");
+ ErrorCode COMBINATION_RECORD_FAILED_HAVE_JOINED = new ErrorCode(1_013_011_004, "拼团失败,原因:存在该活动正在进行的拼团记录");
+ ErrorCode COMBINATION_RECORD_FAILED_TIME_NOT_START = new ErrorCode(1_013_011_005, "拼团失败,活动未开始");
+ ErrorCode COMBINATION_RECORD_FAILED_TIME_END = new ErrorCode(1_013_011_006, "拼团失败,活动已经结束");
+ ErrorCode COMBINATION_RECORD_FAILED_SINGLE_LIMIT_COUNT_EXCEED = new ErrorCode(1_013_011_007, "拼团失败,原因:单次限购超出");
+ ErrorCode COMBINATION_RECORD_FAILED_TOTAL_LIMIT_COUNT_EXCEED = new ErrorCode(1_013_011_008, "拼团失败,原因:超出总购买次数");
+ ErrorCode COMBINATION_RECORD_FAILED_ORDER_STATUS_UNPAID = new ErrorCode(1_013_011_009, "拼团失败,原因:存在未支付订单,请先支付");
// ========== 砍价活动 1-013-012-000 ==========
ErrorCode BARGAIN_ACTIVITY_NOT_EXISTS = new ErrorCode(1_013_012_000, "砍价活动不存在");
ErrorCode BARGAIN_ACTIVITY_SPU_CONFLICTS = new ErrorCode(1_013_012_001, "存在商品参加了其它砍价活动");
- ErrorCode BARGAIN_ACTIVITY_STATUS_DISABLE = new ErrorCode(1_013_012_002, "砍价活动已关闭不能修改");
+ ErrorCode BARGAIN_ACTIVITY_STATUS_DISABLE = new ErrorCode(1_013_012_002, "砍价活动已关闭,不能修改");
ErrorCode BARGAIN_ACTIVITY_DELETE_FAIL_STATUS_NOT_CLOSED_OR_END = new ErrorCode(1_013_012_003, "砍价活动未关闭或未结束,不能删除");
+ ErrorCode BARGAIN_ACTIVITY_STOCK_NOT_ENOUGH = new ErrorCode(1_013_012_004, "砍价活动库存不足");
+ ErrorCode BARGAIN_ACTIVITY_STATUS_CLOSED = new ErrorCode(1_013_012_005, "砍价活动已关闭");
+ ErrorCode BARGAIN_ACTIVITY_TIME_END = new ErrorCode(1_013_012_006, "砍价活动已经结束");
// ========== 砍价记录 1-013-013-000 ==========
ErrorCode BARGAIN_RECORD_NOT_EXISTS = new ErrorCode(1_013_013_000, "砍价记录不存在");
- ErrorCode BARGAIN_RECORD_EXISTS = new ErrorCode(1_013_013_001, "砍价失败,已参与过该砍价");
- ErrorCode BARGAIN_RECORD_HEAD_NOT_EXISTS = new ErrorCode(1_013_013_002, "砍价失败,父砍价不存在");
- ErrorCode BARGAIN_RECORD_USER_FULL = new ErrorCode(1_013_013_003, "砍价失败,砍价人数已满");
+ ErrorCode BARGAIN_RECORD_CREATE_FAIL_EXISTS = new ErrorCode(1_013_013_001, "参与失败,您已经参与当前砍价活动");
+ ErrorCode BARGAIN_RECORD_CREATE_FAIL_LIMIT = new ErrorCode(1_013_013_002, "参与失败,您已达到当前砍价活动的参与上限");
+ ErrorCode BARGAIN_JOIN_RECORD_NOT_SUCCESS = new ErrorCode(1_013_013_004, "下单失败,砍价未成功");
+ ErrorCode BARGAIN_JOIN_RECORD_ALREADY_ORDER = new ErrorCode(1_013_013_005, "下单失败,该砍价已经下单");
+
+ // ========== 砍价助力 1-013-014-000 ==========
+ ErrorCode BARGAIN_HELP_CREATE_FAIL_RECORD_NOT_IN_PROCESS = new ErrorCode(1_013_014_000, "助力失败,砍价记录不处于进行中");
+ ErrorCode BARGAIN_HELP_CREATE_FAIL_RECORD_SELF = new ErrorCode(1_013_014_001, "助力失败,不能助力自己");
+ ErrorCode BARGAIN_HELP_CREATE_FAIL_LIMIT = new ErrorCode(1_013_014_002, "助力失败,您已达到当前砍价活动的助力上限");
+ ErrorCode BARGAIN_HELP_CREATE_FAIL_CONFLICT = new ErrorCode(1_013_014_003, "助力失败,请重试");
+ ErrorCode BARGAIN_HELP_CREATE_FAIL_HELP_EXISTS = new ErrorCode(1_013_014_004, "助力失败,您已经助力过了");
}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/bargain/BargainRecordStatusEnum.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/bargain/BargainRecordStatusEnum.java
new file mode 100644
index 000000000..d5c22a7c5
--- /dev/null
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/bargain/BargainRecordStatusEnum.java
@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.module.promotion.enums.bargain;
+
+import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Arrays;
+
+/**
+ * 砍价记录的状态枚举
+ *
+ * @author 芋道源码
+ */
+@AllArgsConstructor
+@Getter
+public enum BargainRecordStatusEnum implements IntArrayValuable {
+
+ IN_PROGRESS(1, "砍价中"),
+ SUCCESS(2, "砍价成功"),
+ FAILED(3, "砍价失败"), // 活动到期时,会自动将到期的砍价全部设置为过期
+ ;
+
+ public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(BargainRecordStatusEnum::getStatus).toArray();
+
+ /**
+ * 值
+ */
+ private final Integer status;
+ /**
+ * 名字
+ */
+ private final String name;
+
+ @Override
+ public int[] array() {
+ return ARRAYS;
+ }
+
+}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/combination/CombinationRecordStatusEnum.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/combination/CombinationRecordStatusEnum.java
index d1e6114a1..627e13946 100644
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/combination/CombinationRecordStatusEnum.java
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/combination/CombinationRecordStatusEnum.java
@@ -40,4 +40,12 @@ public enum CombinationRecordStatusEnum implements IntArrayValuable {
return ObjectUtil.equal(status, SUCCESS.getStatus());
}
+ public static boolean isInProgress(Integer status) {
+ return ObjectUtil.equal(status, IN_PROGRESS.getStatus());
+ }
+
+ public static boolean isFailed(Integer status) {
+ return ObjectUtil.equal(status, FAILED.getStatus());
+ }
+
}
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionProductScopeEnum.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionProductScopeEnum.java
index 6ae9f9f46..882dc4aee 100644
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionProductScopeEnum.java
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionProductScopeEnum.java
@@ -15,9 +15,9 @@ import java.util.Arrays;
@AllArgsConstructor
public enum PromotionProductScopeEnum implements IntArrayValuable {
- ALL(1, "通用卷"), // 全部商品
- SPU(2, "商品卷"), // 指定商品
- CATEGORY(3, "品类卷"), // 指定商品
+ ALL(1, "通用券"), // 全部商品
+ SPU(2, "商品券"), // 指定商品
+ CATEGORY(3, "品类券"), // 指定品类
;
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(PromotionProductScopeEnum::getScope).toArray();
diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionTypeEnum.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionTypeEnum.java
index 874651ea3..4524c198d 100644
--- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionTypeEnum.java
+++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionTypeEnum.java
@@ -16,14 +16,15 @@ import java.util.Arrays;
public enum PromotionTypeEnum implements IntArrayValuable {
SECKILL_ACTIVITY(1, "秒杀活动"),
- BARGAIN_ACTIVITY(2, "拼团活动"),
- COMBINATION_ACTIVITY(3, "砍价活动"),
+ BARGAIN_ACTIVITY(2, "砍价活动"),
+ COMBINATION_ACTIVITY(3, "拼团活动"),
DISCOUNT_ACTIVITY(4, "限时折扣"),
REWARD_ACTIVITY(5, "满减送"),
- MEMBER(6, "会员折扣"),
- COUPON(7, "优惠劵")
+ MEMBER_LEVEL(6, "会员折扣"),
+ COUPON(7, "优惠劵"),
+ POINT(8, "积分")
;
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(PromotionTypeEnum::getType).toArray();
diff --git a/yudao-module-mall/yudao-module-promotion-biz/pom.xml b/yudao-module-mall/yudao-module-promotion-biz/pom.xml
index 266cb1511..c9a544c06 100644
--- a/yudao-module-mall/yudao-module-promotion-biz/pom.xml
+++ b/yudao-module-mall/yudao-module-promotion-biz/pom.xml
@@ -29,6 +29,11 @@
yudao-module-product-api
${revision}