Commit 384359c9d4f30e17084ddd83346de7748fd7b331

Authored by puhui999
1 parent 5f918490

fix: 完善拼团、秒杀、砍价活动管理

Showing 26 changed files with 238 additions and 293 deletions
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java
@@ -82,14 +82,20 @@ public class LocalDateTimeUtils { @@ -82,14 +82,20 @@ public class LocalDateTimeUtils {
82 || startTime1.isBefore(endTime2) && endTime1.isAfter(endTime2); 82 || startTime1.isBefore(endTime2) && endTime1.isAfter(endTime2);
83 } 83 }
84 84
  85 + /**
  86 + * 判断时间段是否重叠
  87 + *
  88 + * @param startTime1 开始 time1
  89 + * @param endTime1 结束 time1
  90 + * @param startTime2 开始 time2
  91 + * @param endTime2 结束 time2
  92 + * @return 重叠:true 不重叠:false
  93 + */
85 public static boolean isOverlap(LocalTime startTime1, LocalTime endTime1, LocalTime startTime2, LocalTime endTime2) { 94 public static boolean isOverlap(LocalTime startTime1, LocalTime endTime1, LocalTime startTime2, LocalTime endTime2) {
86 // 日期部分使用了当前日期LocalDate.now() 95 // 日期部分使用了当前日期LocalDate.now()
87 - // TODO @puhui999:LocalDate.now() 抽一个变量,啊哈;然后注释写下;之后 4 个变量不用,直接调方法的时候,直接计算作为入参;  
88 - LocalDateTime startDateTime1 = LocalDateTime.of(LocalDate.now(), startTime1);  
89 - LocalDateTime endDateTime1 = LocalDateTime.of(LocalDate.now(), endTime1);  
90 - LocalDateTime startDateTime2 = LocalDateTime.of(LocalDate.now(), startTime2);  
91 - LocalDateTime endDateTime2 = LocalDateTime.of(LocalDate.now(), endTime2);  
92 - return LocalDateTimeUtil.isOverlap(startDateTime1, endDateTime1, startDateTime2, endDateTime2); 96 + LocalDate nowDate = LocalDate.now();
  97 + return LocalDateTimeUtil.isOverlap(LocalDateTime.of(nowDate, startTime1), LocalDateTime.of(nowDate, endTime1),
  98 + LocalDateTime.of(nowDate, startTime2), LocalDateTime.of(nowDate, endTime2));
93 } 99 }
94 100
95 } 101 }
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainRecordApi.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.api.bargain;
  2 +
  3 +import cn.iocoder.yudao.module.promotion.api.bargain.dto.BargainRecordCreateReqDTO;
  4 +
  5 +import javax.validation.Valid;
  6 +
  7 +// TODO @芋艿:后面也再撸撸这几个接口
  8 +
  9 +/**
  10 + * 砍价记录 API 接口
  11 + *
  12 + * @author HUIHUI
  13 + */
  14 +public interface BargainRecordApi {
  15 +
  16 + /**
  17 + * 创建开团记录
  18 + *
  19 + * @param reqDTO 请求 DTO
  20 + */
  21 + void createRecord(@Valid BargainRecordCreateReqDTO reqDTO);
  22 +
  23 +}
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/dto/BargainRecordCreateReqDTO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.api.bargain.dto;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import javax.validation.constraints.NotEmpty;
  6 +import javax.validation.constraints.NotNull;
  7 +
  8 +// TODO @芋艿:这块要在看看
  9 +
  10 +/**
  11 + * 砍价记录的创建 Request DTO
  12 + *
  13 + * @author HUIHUI
  14 + */
  15 +@Data
  16 +public class BargainRecordCreateReqDTO {
  17 +
  18 + /**
  19 + * 砍价活动编号
  20 + */
  21 + @NotNull(message = "砍价活动编号不能为空")
  22 + private Long activityId;
  23 + /**
  24 + * spu 编号
  25 + */
  26 + @NotNull(message = "spu 编号不能为空")
  27 + private Long spuId;
  28 + /**
  29 + * sku 编号
  30 + */
  31 + @NotNull(message = "sku 编号不能为空")
  32 + private Long skuId;
  33 + /**
  34 + * 用户编号
  35 + */
  36 + @NotNull(message = "用户编号不能为空")
  37 + private Long userId;
  38 + /**
  39 + * 订单编号
  40 + */
  41 + @NotNull(message = "订单编号不能为空")
  42 + private Long orderId;
  43 + /**
  44 + * 商品名字
  45 + */
  46 + @NotEmpty(message = "商品名字不能为空")
  47 + private String spuName;
  48 + /**
  49 + * 商品图片
  50 + */
  51 + @NotEmpty(message = "商品图片不能为空")
  52 + private String picUrl;
  53 + /**
  54 + * 砍价商品单价
  55 + */
  56 + @NotNull(message = "砍价底价不能为空")
  57 + private Integer bargainPrice;
  58 + /**
  59 + * 商品原价,单位分
  60 + */
  61 + @NotNull(message = "商品原价不能为空")
  62 + private Integer price;
  63 + /**
  64 + * 用户昵称
  65 + */
  66 + @NotEmpty(message = "用户昵称不能为空")
  67 + private String nickname;
  68 + /**
  69 + * 用户头像
  70 + */
  71 + @NotEmpty(message = "用户头像不能为空")
  72 + private String avatar;
  73 + /**
  74 + * 开团状态:进行中 砍价成功 砍价失败
  75 + */
  76 + @NotNull(message = "开团状态不能为空")
  77 + private Integer status;
  78 +
  79 +}
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationRecordApi.java
1 package cn.iocoder.yudao.module.promotion.api.combination; 1 package cn.iocoder.yudao.module.promotion.api.combination;
2 2
3 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO; 3 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
  4 +import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordUpdateReqDTO;
4 5
5 import javax.validation.Valid; 6 import javax.validation.Valid;
6 7
@@ -17,7 +18,7 @@ public interface CombinationRecordApi { @@ -17,7 +18,7 @@ public interface CombinationRecordApi {
17 * 18 *
18 * @param reqDTO 请求 DTO 19 * @param reqDTO 请求 DTO
19 */ 20 */
20 - void createCombinationRecord(@Valid CombinationRecordCreateReqDTO reqDTO); 21 + void createRecord(@Valid CombinationRecordCreateReqDTO reqDTO);
21 22
22 /** 23 /**
23 * 查询拼团记录是否成功 24 * 查询拼团记录是否成功
@@ -26,25 +27,13 @@ public interface CombinationRecordApi { @@ -26,25 +27,13 @@ public interface CombinationRecordApi {
26 * @param orderId 订单编号 27 * @param orderId 订单编号
27 * @return 拼团是否成功 28 * @return 拼团是否成功
28 */ 29 */
29 - boolean isCombinationRecordSuccess(Long userId, Long orderId); 30 + boolean isRecordSuccess(Long userId, Long orderId);
30 31
31 - // TODO @puhui999:updateRecordStatus 和 updateRecordStatusAndStartTime 看看后续是不是可以统一掉;  
32 /** 32 /**
33 * 更新开团记录状态 33 * 更新开团记录状态
34 * 34 *
35 - * @param userId 用户编号  
36 - * @param orderId 订单编号  
37 - * @param status 状态值  
38 - */  
39 - void updateCombinationRecordStatus(Long userId, Long orderId, Integer status);  
40 -  
41 - /**  
42 - * 更新开团记录状态和开始时间  
43 - *  
44 - * @param userId 用户编号  
45 - * @param orderId 订单编号  
46 - * @param status 状态值 35 + * @param reqDTO 请求 DTO
47 */ 36 */
48 - void updateCombinationRecordStatusAndStartTime(Long userId, Long orderId, Integer status); 37 + void updateRecordStatus(CombinationRecordUpdateReqDTO reqDTO);
49 38
50 } 39 }
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationRecordCreateReqDTO.java
@@ -70,7 +70,7 @@ public class CombinationRecordCreateReqDTO { @@ -70,7 +70,7 @@ public class CombinationRecordCreateReqDTO {
70 @NotEmpty(message = "用户头像不能为空") 70 @NotEmpty(message = "用户头像不能为空")
71 private String avatar; 71 private String avatar;
72 /** 72 /**
73 - * 开团状态:正在开团 拼团成功 拼团失败 TODO 等待支付 73 + * 开团状态:正在开团 拼团成功 拼团失败
74 */ 74 */
75 @NotNull(message = "开团状态不能为空") 75 @NotNull(message = "开团状态不能为空")
76 private Integer status; 76 private Integer status;
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationRecordUpdateReqDTO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.promotion.api.combination.dto;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import javax.validation.constraints.NotNull;
  6 +import java.time.LocalDateTime;
  7 +
  8 +/**
  9 + * 拼团记录的更新 Request DTO
  10 + *
  11 + * @author HUIHUI
  12 + */
  13 +@Data
  14 +public class CombinationRecordUpdateReqDTO {
  15 +
  16 + /**
  17 + * 用户编号
  18 + */
  19 + @NotNull(message = "用户编号不能为空")
  20 + private Long userId;
  21 +
  22 + /**
  23 + * 订单编号
  24 + */
  25 + @NotNull(message = "订单编号不能为空")
  26 + private Long orderId;
  27 +
  28 + /**
  29 + * 开团状态:正在开团 拼团成功 拼团失败
  30 + */
  31 + @NotNull(message = "开团状态不能为空")
  32 + private Integer status;
  33 +
  34 + /**
  35 + * 团开始时间
  36 + */
  37 + private LocalDateTime startTime;
  38 +
  39 +}
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/combination/CombinationRecordStatusEnum.java
@@ -16,10 +16,9 @@ import java.util.Arrays; @@ -16,10 +16,9 @@ import java.util.Arrays;
16 @Getter 16 @Getter
17 public enum CombinationRecordStatusEnum implements IntArrayValuable { 17 public enum CombinationRecordStatusEnum implements IntArrayValuable {
18 18
19 - WAITING(0, "未付款"),  
20 - IN_PROGRESS(1, "进行中"),  
21 - SUCCESS(2, "拼团成功"),  
22 - FAILED(3, "拼团失败"); 19 + IN_PROGRESS(0, "进行中"),
  20 + SUCCESS(1, "拼团成功"),
  21 + FAILED(2, "拼团失败");
23 22
24 public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CombinationRecordStatusEnum::getStatus).toArray(); 23 public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CombinationRecordStatusEnum::getStatus).toArray();
25 24
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationRecordApiImpl.java
1 package cn.iocoder.yudao.module.promotion.api.combination; 1 package cn.iocoder.yudao.module.promotion.api.combination;
2 2
3 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO; 3 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
  4 +import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordUpdateReqDTO;
4 import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum; 5 import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;
5 import cn.iocoder.yudao.module.promotion.service.combination.CombinationRecordService; 6 import cn.iocoder.yudao.module.promotion.service.combination.CombinationRecordService;
6 import org.springframework.stereotype.Service; 7 import org.springframework.stereotype.Service;
7 8
8 import javax.annotation.Resource; 9 import javax.annotation.Resource;
9 -import java.time.LocalDateTime;  
10 10
11 /** 11 /**
12 * 拼团活动 API 实现类 12 * 拼团活动 API 实现类
@@ -20,23 +20,22 @@ public class CombinationRecordApiImpl implements CombinationRecordApi { @@ -20,23 +20,22 @@ public class CombinationRecordApiImpl implements CombinationRecordApi {
20 private CombinationRecordService recordService; 20 private CombinationRecordService recordService;
21 21
22 @Override 22 @Override
23 - public void createCombinationRecord(CombinationRecordCreateReqDTO reqDTO) { 23 + public void createRecord(CombinationRecordCreateReqDTO reqDTO) {
24 recordService.createCombinationRecord(reqDTO); 24 recordService.createCombinationRecord(reqDTO);
25 } 25 }
26 26
27 @Override 27 @Override
28 - public boolean isCombinationRecordSuccess(Long userId, Long orderId) { 28 + public boolean isRecordSuccess(Long userId, Long orderId) {
29 return CombinationRecordStatusEnum.isSuccess(recordService.getCombinationRecord(userId, orderId).getStatus()); 29 return CombinationRecordStatusEnum.isSuccess(recordService.getCombinationRecord(userId, orderId).getStatus());
30 } 30 }
31 31
32 @Override 32 @Override
33 - public void updateCombinationRecordStatus(Long userId, Long orderId, Integer status) {  
34 - recordService.updateCombinationRecordStatusByUserIdAndOrderId(userId, orderId, status);  
35 - }  
36 -  
37 - @Override  
38 - public void updateCombinationRecordStatusAndStartTime(Long userId, Long orderId, Integer status) {  
39 - recordService.updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(userId, orderId, status, LocalDateTime.now()); 33 + public void updateRecordStatus(CombinationRecordUpdateReqDTO reqDTO) {
  34 + if (null == reqDTO.getStartTime()) {
  35 + recordService.updateCombinationRecordStatusByUserIdAndOrderId(reqDTO);
  36 + } else {
  37 + recordService.updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(reqDTO);
  38 + }
40 } 39 }
41 40
42 } 41 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/bargain/vo/activity/BargainActivityRespVO.java
@@ -29,21 +29,8 @@ public class BargainActivityRespVO extends BargainActivityBaseVO { @@ -29,21 +29,8 @@ public class BargainActivityRespVO extends BargainActivityBaseVO {
29 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) 29 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
30 private LocalDateTime createTime; 30 private LocalDateTime createTime;
31 31
32 - @Schema(description = "开团人数", requiredMode = Schema.RequiredMode.REQUIRED)  
33 - @NotNull(message = "开团人数不能为空")  
34 - private Integer userSize;  
35 -  
36 - @Schema(description = "开团组数", requiredMode = Schema.RequiredMode.REQUIRED)  
37 - @NotNull(message = "开团组数不能为空")  
38 - private Integer totalNum;  
39 -  
40 - @Schema(description = "成团组数", requiredMode = Schema.RequiredMode.REQUIRED)  
41 - @NotNull(message = "成团组数不能为空")  
42 - private Integer successNum;  
43 -  
44 - @Schema(description = "虚拟成团", requiredMode = Schema.RequiredMode.REQUIRED)  
45 - @NotNull(message = "虚拟成团不能为空")  
46 - private Integer virtualGroup; 32 + @Schema(description = "砍价成功数量", requiredMode = Schema.RequiredMode.REQUIRED)
  33 + private Integer successCount;
47 34
48 @Schema(description = "活动状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") 35 @Schema(description = "活动状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
49 @NotNull(message = "活动状态不能为空") 36 @NotNull(message = "活动状态不能为空")
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/bargain/BargainAssistDO.java
@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName; @@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
7 import lombok.*; 7 import lombok.*;
8 8
9 /** 9 /**
10 - * 砍价助力 DO 10 + * 砍价助力 DO TODO
11 * 11 *
12 * @author HUIHUI 12 * @author HUIHUI
13 */ 13 */
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/bargain/BargainRecordDO.java
@@ -9,7 +9,7 @@ import lombok.*; @@ -9,7 +9,7 @@ import lombok.*;
9 import java.time.LocalDateTime; 9 import java.time.LocalDateTime;
10 10
11 /** 11 /**
12 - * 砍价记录 DO 12 + * 砍价记录 DO TODO
13 * 13 *
14 * @author HUIHUI 14 * @author HUIHUI
15 */ 15 */
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/combination/CombinationRecordDO.java
@@ -52,7 +52,7 @@ public class CombinationRecordDO extends BaseDO { @@ -52,7 +52,7 @@ public class CombinationRecordDO extends BaseDO {
52 /** 52 /**
53 * 团长编号 53 * 团长编号
54 * 54 *
55 - * 关联 {@link CombinationRecordDO#getUserId()} 55 + * 关联 {@link CombinationRecordDO#getId()}
56 */ 56 */
57 private Long headId; 57 private Long headId;
58 /** 58 /**
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/bargain/BargainRecordMapper.java
1 package cn.iocoder.yudao.module.promotion.dal.mysql.bargain; 1 package cn.iocoder.yudao.module.promotion.dal.mysql.bargain;
2 2
3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 3 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
4 -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;  
5 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainRecordDO; 4 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainRecordDO;
6 import org.apache.ibatis.annotations.Mapper; 5 import org.apache.ibatis.annotations.Mapper;
7 6
8 -import java.util.List;  
9 -  
10 /** 7 /**
11 * 砍价记录 Mapper 8 * 砍价记录 Mapper
12 * 9 *
@@ -15,34 +12,4 @@ import java.util.List; @@ -15,34 +12,4 @@ import java.util.List;
15 @Mapper 12 @Mapper
16 public interface BargainRecordMapper extends BaseMapperX<BargainRecordDO> { 13 public interface BargainRecordMapper extends BaseMapperX<BargainRecordDO> {
17 14
18 - // TODO @puhui999:selectByUserIdAndOrderId  
19 - default BargainRecordDO selectRecord(Long userId, Long orderId) {  
20 - return selectOne(BargainRecordDO::getUserId, userId,  
21 - BargainRecordDO::getOrderId, orderId);  
22 - }  
23 -  
24 - /**  
25 - * 查询砍价记录  
26 - *  
27 - * @param headId 团长编号  
28 - * @param activityId 活动编号  
29 - * @return 砍价记录  
30 - */  
31 - default BargainRecordDO selectRecordByHeadId(Long headId, Long activityId, Integer status) {  
32 - return selectOne(new LambdaQueryWrapperX<BargainRecordDO>()  
33 - .eq(BargainRecordDO::getUserId, headId)  
34 - .eq(BargainRecordDO::getActivityId, activityId)  
35 - .eq(BargainRecordDO::getStatus, status));  
36 - }  
37 -  
38 - default List<BargainRecordDO> selectListByHeadIdAndStatus(Long headId, Integer status) {  
39 - return selectList(new LambdaQueryWrapperX<BargainRecordDO>()  
40 - //.eq(BargainRecordDO::getHeadId, headId)  
41 - .eq(BargainRecordDO::getStatus, status));  
42 - }  
43 -  
44 - default List<BargainRecordDO> selectListByStatus(Integer status) {  
45 - return selectList(BargainRecordDO::getStatus, status);  
46 - }  
47 -  
48 } 15 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/combination/CombinationRecordMapper.java
@@ -15,8 +15,7 @@ import java.util.List; @@ -15,8 +15,7 @@ import java.util.List;
15 @Mapper 15 @Mapper
16 public interface CombinationRecordMapper extends BaseMapperX<CombinationRecordDO> { 16 public interface CombinationRecordMapper extends BaseMapperX<CombinationRecordDO> {
17 17
18 - // TODO @puhui999:selectByUserIdAndOrderId  
19 - default CombinationRecordDO selectRecord(Long userId, Long orderId) { 18 + default CombinationRecordDO selectByUserIdAndOrderId(Long userId, Long orderId) {
20 return selectOne(CombinationRecordDO::getUserId, userId, 19 return selectOne(CombinationRecordDO::getUserId, userId,
21 CombinationRecordDO::getOrderId, orderId); 20 CombinationRecordDO::getOrderId, orderId);
22 } 21 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainActivityService.java
@@ -49,14 +49,6 @@ public interface BargainActivityService { @@ -49,14 +49,6 @@ public interface BargainActivityService {
49 BargainActivityDO getBargainActivity(Long id); 49 BargainActivityDO getBargainActivity(Long id);
50 50
51 /** 51 /**
52 - * 获得砍价活动列表  
53 - *  
54 - * @param ids 编号  
55 - * @return 砍价活动列表  
56 - */  
57 - List<BargainActivityDO> getBargainActivityList(Collection<Long> ids);  
58 -  
59 - /**  
60 * 获得砍价活动分页 52 * 获得砍价活动分页
61 * 53 *
62 * @param pageReqVO 分页查询 54 * @param pageReqVO 分页查询
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainRecordService.java
1 package cn.iocoder.yudao.module.promotion.service.bargain; 1 package cn.iocoder.yudao.module.promotion.service.bargain;
2 2
3 3
4 -import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainRecordDO;  
5 -  
6 -import java.time.LocalDateTime;  
7 -  
8 /** 4 /**
9 * 商品活动记录 service 5 * 商品活动记录 service
10 * 6 *
@@ -12,40 +8,6 @@ import java.time.LocalDateTime; @@ -12,40 +8,6 @@ import java.time.LocalDateTime;
12 */ 8 */
13 public interface BargainRecordService { 9 public interface BargainRecordService {
14 10
15 - /**  
16 - * 更新砍价状态  
17 - *  
18 - * @param userId 用户编号  
19 - * @param orderId 订单编号  
20 - * @param status 状态  
21 - */  
22 - void updateBargainRecordStatusByUserIdAndOrderId(Long userId, Long orderId, Integer status);  
23 -  
24 - ///**  
25 - // * 创建砍价记录  
26 - // *  
27 - // * @param reqDTO 创建信息  
28 - // */  
29 - //void createBargainRecord(BargainRecordCreateReqDTO reqDTO);  
30 -  
31 - /**  
32 - * 更新砍价状态和开始时间  
33 - *  
34 - * @param userId 用户编号  
35 - * @param orderId 订单编号  
36 - * @param status 状态  
37 - * @param startTime 开始时间  
38 - */  
39 - void updateBargainRecordStatusAndStartTimeByUserIdAndOrderId(Long userId, Long orderId,  
40 - Integer status, LocalDateTime startTime);  
41 -  
42 - /**  
43 - * 获得砍价状态  
44 - *  
45 - * @param userId 用户编号  
46 - * @param orderId 订单编号  
47 - * @return 砍价状态  
48 - */  
49 - BargainRecordDO getBargainRecord(Long userId, Long orderId); 11 +// TODO
50 12
51 } 13 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainServiceImpl.java
@@ -18,7 +18,6 @@ import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.product.Bar @@ -18,7 +18,6 @@ import cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.product.Bar
18 import cn.iocoder.yudao.module.promotion.convert.bargain.BargainActivityConvert; 18 import cn.iocoder.yudao.module.promotion.convert.bargain.BargainActivityConvert;
19 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO; 19 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO;
20 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainProductDO; 20 import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainProductDO;
21 -import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainRecordDO;  
22 import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainActivityMapper; 21 import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainActivityMapper;
23 import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainProductMapper; 22 import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainProductMapper;
24 import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainRecordMapper; 23 import cn.iocoder.yudao.module.promotion.dal.mysql.bargain.BargainRecordMapper;
@@ -27,7 +26,6 @@ import org.springframework.transaction.annotation.Transactional; @@ -27,7 +26,6 @@ import org.springframework.transaction.annotation.Transactional;
27 import org.springframework.validation.annotation.Validated; 26 import org.springframework.validation.annotation.Validated;
28 27
29 import javax.annotation.Resource; 28 import javax.annotation.Resource;
30 -import java.time.LocalDateTime;  
31 import java.util.Collection; 29 import java.util.Collection;
32 import java.util.List; 30 import java.util.List;
33 31
@@ -187,11 +185,6 @@ public class BargainServiceImpl implements BargainActivityService, BargainRecord @@ -187,11 +185,6 @@ public class BargainServiceImpl implements BargainActivityService, BargainRecord
187 } 185 }
188 186
189 @Override 187 @Override
190 - public List<BargainActivityDO> getBargainActivityList(Collection<Long> ids) {  
191 - return bargainActivityMapper.selectBatchIds(ids);  
192 - }  
193 -  
194 - @Override  
195 public PageResult<BargainActivityDO> getBargainActivityPage(BargainActivityPageReqVO pageReqVO) { 188 public PageResult<BargainActivityDO> getBargainActivityPage(BargainActivityPageReqVO pageReqVO) {
196 return bargainActivityMapper.selectPage(pageReqVO); 189 return bargainActivityMapper.selectPage(pageReqVO);
197 } 190 }
@@ -201,93 +194,4 @@ public class BargainServiceImpl implements BargainActivityService, BargainRecord @@ -201,93 +194,4 @@ public class BargainServiceImpl implements BargainActivityService, BargainRecord
201 return bargainProductMapper.selectListByActivityIds(ids); 194 return bargainProductMapper.selectListByActivityIds(ids);
202 } 195 }
203 196
204 - @Override  
205 - public void updateBargainRecordStatusByUserIdAndOrderId(Long userId, Long orderId, Integer status) {  
206 - // 校验砍价是否存在  
207 - // 更新状态  
208 - recordMapper.updateById(validateBargainRecord(userId, orderId).setStatus(status));  
209 - }  
210 -  
211 - @Override  
212 - @Transactional(rollbackFor = Exception.class)  
213 - public void updateBargainRecordStatusAndStartTimeByUserIdAndOrderId(Long userId, Long orderId, Integer status, LocalDateTime startTime) {  
214 - BargainRecordDO recordDO = validateBargainRecord(userId, orderId);  
215 - // 更新状态  
216 - recordDO.setStatus(status);  
217 - // 更新开始时间  
218 - //recordDO.setStartTime(startTime);  
219 - //recordMapper.updateById(recordDO);  
220 - //  
221 - //// 更新砍价参入人数  
222 - //List<BargainRecordDO> recordDOs = recordMapper.selectListByHeadIdAndStatus(recordDO.getHeadId(), status);  
223 - //if (CollUtil.isNotEmpty(recordDOs)) {  
224 - // recordDOs.forEach(item -> {  
225 - // item.setUserCount(recordDOs.size());  
226 - // // 校验砍价是否满足要求  
227 - // if (ObjectUtil.equal(recordDOs.size(), recordDO.getUserSize())) {  
228 - // item.setStatus(BargainRecordStatusEnum.SUCCESS.getStatus());  
229 - // }  
230 - // });  
231 - //}  
232 - //recordMapper.updateBatch(recordDOs);  
233 - }  
234 -  
235 - private BargainRecordDO validateBargainRecord(Long userId, Long orderId) {  
236 - // 校验砍价是否存在  
237 - BargainRecordDO recordDO = recordMapper.selectRecord(userId, orderId);  
238 - if (recordDO == null) {  
239 - throw exception(BARGAIN_RECORD_NOT_EXISTS);  
240 - }  
241 - return recordDO;  
242 - }  
243 -  
244 - //@Override  
245 - //public void createBargainRecord(BargainRecordCreateReqDTO reqDTO) {  
246 - // // 1.1 校验砍价活动  
247 - // BargainActivityDO activity = validateBargainActivityExists(reqDTO.getActivityId());  
248 - // // 1.2 需要校验下,他当前是不是已经参加了该砍价;  
249 - // BargainRecordDO recordDO = recordMapper.selectRecord(reqDTO.getUserId(), reqDTO.getOrderId());  
250 - // if (recordDO != null) {  
251 - // throw exception(BARGAIN_RECORD_EXISTS);  
252 - // }  
253 - // // 1.3 父砍价是否存在,是否已经满了  
254 - // if (reqDTO.getHeadId() != null) {  
255 - // BargainRecordDO recordDO1 = recordMapper.selectRecordByHeadId(reqDTO.getHeadId(), reqDTO.getActivityId(), BargainRecordStatusEnum.IN_PROGRESS.getStatus());  
256 - // if (recordDO1 == null) {  
257 - // throw exception(BARGAIN_RECORD_HEAD_NOT_EXISTS);  
258 - // }  
259 - // // 校验砍价是否满足要求  
260 - // if (ObjectUtil.equal(recordDO1.getUserCount(), recordDO1.getUserSize())) {  
261 - // throw exception(BARGAIN_RECORD_USER_FULL);  
262 - // }  
263 - // }  
264 - // // TODO @puhui999:应该还有一些校验,后续补噶;例如说,一个团,自己已经参与进去了,不能再参与进去;  
265 - //  
266 - // // 2. 创建砍价记录  
267 - // BargainRecordDO record = BargainActivityConvert.INSTANCE.convert(reqDTO);  
268 - // if (reqDTO.getHeadId() == null) {  
269 - // // TODO @puhui999:不是自己呀;headId 是父团长的 BargainRecordDO.id 哈  
270 - // record.setHeadId(reqDTO.getUserId());  
271 - // }  
272 - // record.setVirtualGroup(false);  
273 - // // TODO @puhui999:过期时间,应该是 Date 哈;  
274 - // record.setExpireTime(activity.getLimitDuration());  
275 - // record.setUserSize(activity.getUserSize());  
276 - // recordMapper.insert(record);  
277 - //}  
278 -  
279 - @Override  
280 - public BargainRecordDO getBargainRecord(Long userId, Long orderId) {  
281 - return validateBargainRecord(userId, orderId);  
282 - }  
283 -  
284 - /**  
285 - * APP 端获取开团记录  
286 - *  
287 - * @return 开团记录  
288 - */  
289 - public List<BargainRecordDO> getRecordListByStatus(Integer status) {  
290 - return recordMapper.selectListByStatus(status);  
291 - }  
292 -  
293 } 197 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationRecordService.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.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO; 3 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
  4 +import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordUpdateReqDTO;
4 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationRecordDO; 5 import cn.iocoder.yudao.module.promotion.dal.dataobject.combination.CombinationRecordDO;
5 6
6 -import java.time.LocalDateTime;  
7 -  
8 /** 7 /**
9 * 商品活动记录 service 8 * 商品活动记录 service
10 * 9 *
@@ -15,11 +14,9 @@ public interface CombinationRecordService { @@ -15,11 +14,9 @@ public interface CombinationRecordService {
15 /** 14 /**
16 * 更新拼团状态 15 * 更新拼团状态
17 * 16 *
18 - * @param userId 用户编号  
19 - * @param orderId 订单编号  
20 - * @param status 状态 17 + * @param reqDTO 请求 DTO
21 */ 18 */
22 - void updateCombinationRecordStatusByUserIdAndOrderId(Long userId, Long orderId, Integer status); 19 + void updateCombinationRecordStatusByUserIdAndOrderId(CombinationRecordUpdateReqDTO reqDTO);
23 20
24 /** 21 /**
25 * 创建拼团记录 22 * 创建拼团记录
@@ -31,13 +28,9 @@ public interface CombinationRecordService { @@ -31,13 +28,9 @@ public interface CombinationRecordService {
31 /** 28 /**
32 * 更新拼团状态和开始时间 29 * 更新拼团状态和开始时间
33 * 30 *
34 - * @param userId 用户编号  
35 - * @param orderId 订单编号  
36 - * @param status 状态  
37 - * @param startTime 开始时间 31 + * @param reqDTO 请求 DTO
38 */ 32 */
39 - void updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(Long userId, Long orderId,  
40 - Integer status, LocalDateTime startTime); 33 + void updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(CombinationRecordUpdateReqDTO reqDTO);
41 34
42 /** 35 /**
43 * 获得拼团状态 36 * 获得拼团状态
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationServiceImpl.java
@@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; @@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
11 import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; 11 import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
12 import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; 12 import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
13 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO; 13 import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
  14 +import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordUpdateReqDTO;
14 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO; 15 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityCreateReqVO;
15 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO; 16 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityPageReqVO;
16 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO; 17 import cn.iocoder.yudao.module.promotion.controller.admin.combination.vo.activity.CombinationActivityUpdateReqVO;
@@ -29,7 +30,6 @@ import org.springframework.transaction.annotation.Transactional; @@ -29,7 +30,6 @@ import org.springframework.transaction.annotation.Transactional;
29 import org.springframework.validation.annotation.Validated; 30 import org.springframework.validation.annotation.Validated;
30 31
31 import javax.annotation.Resource; 32 import javax.annotation.Resource;
32 -import java.time.LocalDateTime;  
33 import java.util.Collection; 33 import java.util.Collection;
34 import java.util.List; 34 import java.util.List;
35 35
@@ -204,27 +204,27 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi @@ -204,27 +204,27 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
204 } 204 }
205 205
206 @Override 206 @Override
207 - public void updateCombinationRecordStatusByUserIdAndOrderId(Long userId, Long orderId, Integer status) { 207 + public void updateCombinationRecordStatusByUserIdAndOrderId(CombinationRecordUpdateReqDTO reqDTO) {
208 // 校验拼团是否存在 208 // 校验拼团是否存在
209 - CombinationRecordDO recordDO = validateCombinationRecord(userId, orderId); 209 + CombinationRecordDO recordDO = validateCombinationRecord(reqDTO.getUserId(), reqDTO.getOrderId());
210 210
211 // 更新状态 211 // 更新状态
212 - recordDO.setStatus(status); 212 + recordDO.setStatus(reqDTO.getStatus());
213 recordMapper.updateById(recordDO); 213 recordMapper.updateById(recordDO);
214 } 214 }
215 215
216 @Override 216 @Override
217 @Transactional(rollbackFor = Exception.class) 217 @Transactional(rollbackFor = Exception.class)
218 - public void updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(Long userId, Long orderId, Integer status, LocalDateTime startTime) {  
219 - CombinationRecordDO recordDO = validateCombinationRecord(userId, orderId); 218 + public void updateCombinationRecordStatusAndStartTimeByUserIdAndOrderId(CombinationRecordUpdateReqDTO reqDTO) {
  219 + CombinationRecordDO recordDO = validateCombinationRecord(reqDTO.getUserId(), reqDTO.getOrderId());
220 // 更新状态 220 // 更新状态
221 - recordDO.setStatus(status); 221 + recordDO.setStatus(reqDTO.getStatus());
222 // 更新开始时间 222 // 更新开始时间
223 - recordDO.setStartTime(startTime); 223 + recordDO.setStartTime(reqDTO.getStartTime());
224 recordMapper.updateById(recordDO); 224 recordMapper.updateById(recordDO);
225 225
226 // 更新拼团参入人数 226 // 更新拼团参入人数
227 - List<CombinationRecordDO> recordDOs = recordMapper.selectListByHeadIdAndStatus(recordDO.getHeadId(), status); 227 + List<CombinationRecordDO> recordDOs = recordMapper.selectListByHeadIdAndStatus(recordDO.getHeadId(), reqDTO.getStatus());
228 if (CollUtil.isNotEmpty(recordDOs)) { 228 if (CollUtil.isNotEmpty(recordDOs)) {
229 recordDOs.forEach(item -> { 229 recordDOs.forEach(item -> {
230 item.setUserCount(recordDOs.size()); 230 item.setUserCount(recordDOs.size());
@@ -239,7 +239,7 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi @@ -239,7 +239,7 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
239 239
240 private CombinationRecordDO validateCombinationRecord(Long userId, Long orderId) { 240 private CombinationRecordDO validateCombinationRecord(Long userId, Long orderId) {
241 // 校验拼团是否存在 241 // 校验拼团是否存在
242 - CombinationRecordDO recordDO = recordMapper.selectRecord(userId, orderId); 242 + CombinationRecordDO recordDO = recordMapper.selectByUserIdAndOrderId(userId, orderId);
243 if (recordDO == null) { 243 if (recordDO == null) {
244 throw exception(COMBINATION_RECORD_NOT_EXISTS); 244 throw exception(COMBINATION_RECORD_NOT_EXISTS);
245 } 245 }
@@ -251,7 +251,7 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi @@ -251,7 +251,7 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
251 // 1.1 校验拼团活动 251 // 1.1 校验拼团活动
252 CombinationActivityDO activity = validateCombinationActivityExists(reqDTO.getActivityId()); 252 CombinationActivityDO activity = validateCombinationActivityExists(reqDTO.getActivityId());
253 // 1.2 需要校验下,他当前是不是已经参加了该拼团; 253 // 1.2 需要校验下,他当前是不是已经参加了该拼团;
254 - CombinationRecordDO recordDO = recordMapper.selectRecord(reqDTO.getUserId(), reqDTO.getOrderId()); 254 + CombinationRecordDO recordDO = recordMapper.selectByUserIdAndOrderId(reqDTO.getUserId(), reqDTO.getOrderId());
255 if (recordDO != null) { 255 if (recordDO != null) {
256 throw exception(COMBINATION_RECORD_EXISTS); 256 throw exception(COMBINATION_RECORD_EXISTS);
257 } 257 }
@@ -270,10 +270,6 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi @@ -270,10 +270,6 @@ public class CombinationServiceImpl implements CombinationActivityService, Combi
270 270
271 // 2. 创建拼团记录 271 // 2. 创建拼团记录
272 CombinationRecordDO record = CombinationActivityConvert.INSTANCE.convert(reqDTO); 272 CombinationRecordDO record = CombinationActivityConvert.INSTANCE.convert(reqDTO);
273 - if (reqDTO.getHeadId() == null) {  
274 - // TODO @puhui999:不是自己呀;headId 是父团长的 CombinationRecordDO.id 哈  
275 - record.setHeadId(reqDTO.getUserId());  
276 - }  
277 record.setVirtualGroup(false); 273 record.setVirtualGroup(false);
278 // TODO @puhui999:过期时间,应该是 Date 哈; 274 // TODO @puhui999:过期时间,应该是 Date 哈;
279 record.setExpireTime(activity.getLimitDuration()); 275 record.setExpireTime(activity.getLimitDuration());
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java
@@ -62,6 +62,7 @@ public interface ErrorCodeConstants { @@ -62,6 +62,7 @@ public interface ErrorCodeConstants {
62 ErrorCode EXPRESS_NOT_EXISTS = new ErrorCode(1011004000, "快递公司不存在"); 62 ErrorCode EXPRESS_NOT_EXISTS = new ErrorCode(1011004000, "快递公司不存在");
63 ErrorCode EXPRESS_CODE_DUPLICATE = new ErrorCode(1011004001, "已经存在该编码的快递公司"); 63 ErrorCode EXPRESS_CODE_DUPLICATE = new ErrorCode(1011004001, "已经存在该编码的快递公司");
64 ErrorCode EXPRESS_CLIENT_NOT_PROVIDE = new ErrorCode(1011004002, "需要接入快递服务商,比如【快递100】"); 64 ErrorCode EXPRESS_CLIENT_NOT_PROVIDE = new ErrorCode(1011004002, "需要接入快递服务商,比如【快递100】");
  65 + ErrorCode EXPRESS_STATUS_NOT_ENABLE = new ErrorCode(1011004003, "快递公司未启用");
65 66
66 ErrorCode EXPRESS_API_QUERY_ERROR = new ErrorCode(1011004101, "快递查询接口异常"); 67 ErrorCode EXPRESS_API_QUERY_ERROR = new ErrorCode(1011004101, "快递查询接口异常");
67 ErrorCode EXPRESS_API_QUERY_FAILED = new ErrorCode(1011004102, "快递查询返回失败,原因:{}"); 68 ErrorCode EXPRESS_API_QUERY_FAILED = new ErrorCode(1011004102, "快递查询返回失败,原因:{}");
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationActivityApi.java renamed to yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/MessageTemplateConstants.java
1 -package cn.iocoder.yudao.module.promotion.api.combination; 1 +package cn.iocoder.yudao.module.trade.enums;
2 2
3 /** 3 /**
4 - * 拼团活动 API 接口 4 + * 通知模板枚举类
5 * 5 *
6 * @author HUIHUI 6 * @author HUIHUI
7 */ 7 */
8 -public interface CombinationActivityApi { 8 +public interface MessageTemplateConstants {
  9 +
  10 + String ORDER_DELIVERY = "order_delivery"; // 短信模版编号
9 11
10 } 12 }
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/notify/TradeNotifyEnums.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.enums.notify;
  2 +
  3 +public interface TradeNotifyEnums {
  4 +}
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/message/TradeMessageService.java
1 package cn.iocoder.yudao.module.trade.service.message; 1 package cn.iocoder.yudao.module.trade.service.message;
2 2
3 -import cn.iocoder.yudao.module.trade.service.message.dto.TradeOrderMessageWhenDeliveryOrderReqDTO; 3 +import cn.iocoder.yudao.module.trade.service.message.bo.TradeOrderMessageWhenDeliveryOrderReqBO;
4 4
5 /** 5 /**
6 * Trade 消息 service 接口 6 * Trade 消息 service 接口
@@ -10,10 +10,10 @@ import cn.iocoder.yudao.module.trade.service.message.dto.TradeOrderMessageWhenDe @@ -10,10 +10,10 @@ import cn.iocoder.yudao.module.trade.service.message.dto.TradeOrderMessageWhenDe
10 public interface TradeMessageService { 10 public interface TradeMessageService {
11 11
12 /** 12 /**
13 - * 订单发货时发送消息 13 + * 订单发货时发送通知
14 * 14 *
15 - * @param reqDTO 发送消息 15 + * @param reqBO 发送消息
16 */ 16 */
17 - void sendMessageWhenDeliveryOrder(TradeOrderMessageWhenDeliveryOrderReqDTO reqDTO); 17 + void sendMessageWhenDeliveryOrder(TradeOrderMessageWhenDeliveryOrderReqBO reqBO);
18 18
19 } 19 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/message/TradeMessageServiceImpl.java
@@ -2,7 +2,8 @@ package cn.iocoder.yudao.module.trade.service.message; @@ -2,7 +2,8 @@ package cn.iocoder.yudao.module.trade.service.message;
2 2
3 import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi; 3 import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
4 import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO; 4 import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
5 -import cn.iocoder.yudao.module.trade.service.message.dto.TradeOrderMessageWhenDeliveryOrderReqDTO; 5 +import cn.iocoder.yudao.module.trade.enums.MessageTemplateConstants;
  6 +import cn.iocoder.yudao.module.trade.service.message.bo.TradeOrderMessageWhenDeliveryOrderReqBO;
6 import org.springframework.stereotype.Service; 7 import org.springframework.stereotype.Service;
7 import org.springframework.validation.annotation.Validated; 8 import org.springframework.validation.annotation.Validated;
8 9
@@ -23,18 +24,16 @@ public class TradeMessageServiceImpl implements TradeMessageService { @@ -23,18 +24,16 @@ public class TradeMessageServiceImpl implements TradeMessageService {
23 private NotifyMessageSendApi notifyMessageSendApi; 24 private NotifyMessageSendApi notifyMessageSendApi;
24 25
25 @Override 26 @Override
26 - public void sendMessageWhenDeliveryOrder(TradeOrderMessageWhenDeliveryOrderReqDTO reqDTO) { 27 + public void sendMessageWhenDeliveryOrder(TradeOrderMessageWhenDeliveryOrderReqBO reqBO) {
27 // 1、构造消息 28 // 1、构造消息
28 - Map<String, Object> msgMap = new HashMap<>();  
29 - msgMap.put("orderId", reqDTO.getOrderId());  
30 - // TODO puhui999:应该不是 msg 哇,应该是涉及到的模版参数哈;msg 太大了  
31 - msgMap.put("msg", reqDTO.getMessage()); 29 + Map<String, Object> msgMap = new HashMap<>(2);
  30 + msgMap.put("orderId", reqBO.getOrderId());
  31 + msgMap.put("deliveryMessage", reqBO.getMessage());
32 // 2、发送站内信 32 // 2、发送站内信
33 notifyMessageSendApi.sendSingleMessageToMember( 33 notifyMessageSendApi.sendSingleMessageToMember(
34 new NotifySendSingleToUserReqDTO() 34 new NotifySendSingleToUserReqDTO()
35 - .setUserId(reqDTO.getUserId())  
36 - // TODO puhui999:短信模版编号,枚举起来;  
37 - .setTemplateCode("order_delivery") 35 + .setUserId(reqBO.getUserId())
  36 + .setTemplateCode(MessageTemplateConstants.ORDER_DELIVERY)
38 .setTemplateParams(msgMap)); 37 .setTemplateParams(msgMap));
39 } 38 }
40 39
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/message/dto/TradeOrderMessageWhenDeliveryOrderReqDTO.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/message/bo/TradeOrderMessageWhenDeliveryOrderReqBO.java
1 -package cn.iocoder.yudao.module.trade.service.message.dto; 1 +package cn.iocoder.yudao.module.trade.service.message.bo;
2 2
3 import lombok.Data; 3 import lombok.Data;
4 4
5 import javax.validation.constraints.NotEmpty; 5 import javax.validation.constraints.NotEmpty;
6 import javax.validation.constraints.NotNull; 6 import javax.validation.constraints.NotNull;
7 7
8 -// TODO @puhui999:改成 ReqBO 哈;包名也换了;service 我们还是同一用 bo 对象  
9 /** 8 /**
10 - * 订单发货时 Req DTO 9 + * 订单发货时通知创建 Req BO
11 * 10 *
12 * @author HUIHUI 11 * @author HUIHUI
13 */ 12 */
14 @Data 13 @Data
15 -public class TradeOrderMessageWhenDeliveryOrderReqDTO { 14 +public class TradeOrderMessageWhenDeliveryOrderReqBO {
16 15
17 /** 16 /**
18 * 订单编号 17 * 订单编号
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderServiceImpl.java
@@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert; @@ -5,6 +5,7 @@ import cn.hutool.core.lang.Assert;
5 import cn.hutool.core.util.IdUtil; 5 import cn.hutool.core.util.IdUtil;
6 import cn.hutool.core.util.StrUtil; 6 import cn.hutool.core.util.StrUtil;
7 import cn.iocoder.yudao.framework.common.core.KeyValue; 7 import cn.iocoder.yudao.framework.common.core.KeyValue;
  8 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
8 import cn.iocoder.yudao.framework.common.enums.TerminalEnum; 9 import cn.iocoder.yudao.framework.common.enums.TerminalEnum;
9 import cn.iocoder.yudao.framework.common.pojo.PageResult; 10 import cn.iocoder.yudao.framework.common.pojo.PageResult;
10 import cn.iocoder.yudao.framework.common.util.json.JsonUtils; 11 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
@@ -21,6 +22,7 @@ import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDT @@ -21,6 +22,7 @@ import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDT
21 import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; 22 import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
22 import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO; 23 import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO;
23 import cn.iocoder.yudao.module.promotion.api.combination.CombinationRecordApi; 24 import cn.iocoder.yudao.module.promotion.api.combination.CombinationRecordApi;
  25 +import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordUpdateReqDTO;
24 import cn.iocoder.yudao.module.promotion.api.coupon.CouponApi; 26 import cn.iocoder.yudao.module.promotion.api.coupon.CouponApi;
25 import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponUseReqDTO; 27 import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponUseReqDTO;
26 import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum; 28 import cn.iocoder.yudao.module.promotion.enums.combination.CombinationRecordStatusEnum;
@@ -45,7 +47,7 @@ import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties @@ -45,7 +47,7 @@ import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties
45 import cn.iocoder.yudao.module.trade.service.cart.TradeCartService; 47 import cn.iocoder.yudao.module.trade.service.cart.TradeCartService;
46 import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; 48 import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService;
47 import cn.iocoder.yudao.module.trade.service.message.TradeMessageService; 49 import cn.iocoder.yudao.module.trade.service.message.TradeMessageService;
48 -import cn.iocoder.yudao.module.trade.service.message.dto.TradeOrderMessageWhenDeliveryOrderReqDTO; 50 +import cn.iocoder.yudao.module.trade.service.message.bo.TradeOrderMessageWhenDeliveryOrderReqBO;
49 import cn.iocoder.yudao.module.trade.service.price.TradePriceService; 51 import cn.iocoder.yudao.module.trade.service.price.TradePriceService;
50 import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; 52 import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;
51 import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; 53 import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;
@@ -173,9 +175,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { @@ -173,9 +175,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
173 if (equal(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) { 175 if (equal(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
174 MemberUserRespDTO user = memberUserApi.getUser(userId); 176 MemberUserRespDTO user = memberUserApi.getUser(userId);
175 // TODO 拼团一次应该只能选择一种规格的商品 177 // TODO 拼团一次应该只能选择一种规格的商品
176 - // TODO @puhui999:应该是前置校验哈;然后不应该设置状态,而是交给拼团记录那处理;  
177 - combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, orderItems.get(0), createReqVO, user)  
178 - .setStatus(CombinationRecordStatusEnum.WAITING.getStatus())); 178 + combinationRecordApi.createRecord(TradeOrderConvert.INSTANCE.convert(order, orderItems.get(0), createReqVO, user));
179 } 179 }
180 // TODO 秒杀扣减库存是下单就扣除还是等待订单支付成功再扣除 180 // TODO 秒杀扣减库存是下单就扣除还是等待订单支付成功再扣除
181 if (equal(TradeOrderTypeEnum.SECKILL.getType(), order.getType())) { 181 if (equal(TradeOrderTypeEnum.SECKILL.getType(), order.getType())) {
@@ -311,7 +311,8 @@ public class TradeOrderServiceImpl implements TradeOrderService { @@ -311,7 +311,8 @@ public class TradeOrderServiceImpl implements TradeOrderService {
311 // 1、拼团活动 311 // 1、拼团活动
312 if (equal(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) { 312 if (equal(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
313 // 更新拼团状态 TODO puhui999:订单支付失败或订单支付过期删除这条拼团记录 313 // 更新拼团状态 TODO puhui999:订单支付失败或订单支付过期删除这条拼团记录
314 - combinationRecordApi.updateCombinationRecordStatusAndStartTime(order.getUserId(), order.getId(), CombinationRecordStatusEnum.IN_PROGRESS.getStatus()); 314 + combinationRecordApi.updateRecordStatus(new CombinationRecordUpdateReqDTO().setUserId(order.getUserId())
  315 + .setOrderId(order.getId()).setStatus(CombinationRecordStatusEnum.IN_PROGRESS.getStatus()).setStartTime(LocalDateTime.now()));
315 } 316 }
316 // TODO 芋艿:发送订单变化的消息 317 // TODO 芋艿:发送订单变化的消息
317 318
@@ -394,11 +395,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { @@ -394,11 +395,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
394 // 2.1 快递发货 395 // 2.1 快递发货
395 if (equal(deliveryReqVO.getType(), DeliveryTypeEnum.EXPRESS.getMode())) { 396 if (equal(deliveryReqVO.getType(), DeliveryTypeEnum.EXPRESS.getMode())) {
396 // 校验快递公司 397 // 校验快递公司
397 - // TODO @puhui999:getDeliveryExpress 直接封装一个校验的,会不会好点;因为还有开启关闭啥的;  
398 - DeliveryExpressDO deliveryExpress = deliveryExpressService.getDeliveryExpress(deliveryReqVO.getLogisticsId());  
399 - if (deliveryExpress == null) {  
400 - throw exception(EXPRESS_NOT_EXISTS);  
401 - } 398 + validateDeliveryExpress(deliveryReqVO);
402 updateOrderObj.setLogisticsId(deliveryReqVO.getLogisticsId()).setLogisticsNo(deliveryReqVO.getLogisticsNo()); 399 updateOrderObj.setLogisticsId(deliveryReqVO.getLogisticsId()).setLogisticsNo(deliveryReqVO.getLogisticsNo());
403 } 400 }
404 // 2.2 用户自提 401 // 2.2 用户自提
@@ -425,13 +422,23 @@ public class TradeOrderServiceImpl implements TradeOrderService { @@ -425,13 +422,23 @@ public class TradeOrderServiceImpl implements TradeOrderService {
425 // TODO 芋艿:发送订单变化的消息 422 // TODO 芋艿:发送订单变化的消息
426 423
427 // 发送站内信 424 // 发送站内信
428 - tradeMessageService.sendMessageWhenDeliveryOrder(new TradeOrderMessageWhenDeliveryOrderReqDTO().setOrderId(order.getId()) 425 + tradeMessageService.sendMessageWhenDeliveryOrder(new TradeOrderMessageWhenDeliveryOrderReqBO().setOrderId(order.getId())
429 .setUserId(userId).setMessage(TradeOrderDeliveryStatusEnum.DELIVERED.getName())); 426 .setUserId(userId).setMessage(TradeOrderDeliveryStatusEnum.DELIVERED.getName()));
430 427
431 // TODO 芋艿:OrderLog 428 // TODO 芋艿:OrderLog
432 // TODO 设计:lili:是不是发货后,才支持售后? 429 // TODO 设计:lili:是不是发货后,才支持售后?
433 } 430 }
434 431
  432 + private void validateDeliveryExpress(TradeOrderDeliveryReqVO deliveryReqVO) {
  433 + DeliveryExpressDO deliveryExpress = deliveryExpressService.getDeliveryExpress(deliveryReqVO.getLogisticsId());
  434 + if (deliveryExpress == null) {
  435 + throw exception(EXPRESS_NOT_EXISTS);
  436 + }
  437 + if (deliveryExpress.getStatus().equals(CommonStatusEnum.DISABLE.getStatus())) {
  438 + throw exception(EXPRESS_STATUS_NOT_ENABLE);
  439 + }
  440 + }
  441 +
435 /** 442 /**
436 * 校验交易订单满足被发货的条件 443 * 校验交易订单满足被发货的条件
437 * 444 *
@@ -458,8 +465,7 @@ public class TradeOrderServiceImpl implements TradeOrderService { @@ -458,8 +465,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
458 // 订单类型:拼团 465 // 订单类型:拼团
459 if (equal(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) { 466 if (equal(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
460 // 校验订单拼团是否成功 467 // 校验订单拼团是否成功
461 - // TODO 用户 ID 使用当前登录用户的还是订单保存的?  
462 - if (combinationRecordApi.isCombinationRecordSuccess(order.getUserId(), order.getId())) { 468 + if (combinationRecordApi.isRecordSuccess(order.getUserId(), order.getId())) {
463 throw exception(ORDER_DELIVERY_FAIL_COMBINATION_RECORD_STATUS_NOT_SUCCESS); 469 throw exception(ORDER_DELIVERY_FAIL_COMBINATION_RECORD_STATUS_NOT_SUCCESS);
464 } 470 }
465 } 471 }