Commit c7b5df930ed137a7919f8e031b79889e205013af

Authored by YunaiV
1 parent c8f1269d

promotion:修复拼团下单时,相关字段记录不正确的情况。

yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/CombinationRecordApi.java
@@ -77,6 +77,7 @@ public interface CombinationRecordApi { @@ -77,6 +77,7 @@ public interface CombinationRecordApi {
77 * @param count 数量 77 * @param count 数量
78 * @return 拼团信息 78 * @return 拼团信息
79 */ 79 */
  80 + // TODO @puhui:userId 放最前面;然后应该还有个 headId 参数;
80 CombinationValidateJoinRespDTO validateJoinCombination(Long activityId, Long userId, Long skuId, Integer count); 81 CombinationValidateJoinRespDTO validateJoinCombination(Long activityId, Long userId, Long skuId, Integer count);
81 82
82 } 83 }
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/convert/combination/CombinationActivityConvert.java
@@ -108,7 +108,7 @@ public interface CombinationActivityConvert { @@ -108,7 +108,7 @@ public interface CombinationActivityConvert {
108 CombinationActivityDO activity, MemberUserRespDTO user, 108 CombinationActivityDO activity, MemberUserRespDTO user,
109 ProductSpuRespDTO spu, ProductSkuRespDTO sku) { 109 ProductSpuRespDTO spu, ProductSkuRespDTO sku) {
110 return convert(reqDTO) 110 return convert(reqDTO)
111 - .setCount(reqDTO.getCount()) 111 + .setCount(reqDTO.getCount()).setUserCount(1)
112 .setVirtualGroup(false) 112 .setVirtualGroup(false)
113 .setExpireTime(activity.getStartTime().plusHours(activity.getLimitDuration())) 113 .setExpireTime(activity.getStartTime().plusHours(activity.getLimitDuration()))
114 .setUserSize(activity.getUserSize()) 114 .setUserSize(activity.getUserSize())
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationRecordServiceImpl.java
@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
5 import cn.iocoder.yudao.framework.common.core.KeyValue; 5 import cn.iocoder.yudao.framework.common.core.KeyValue;
6 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 6 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
7 import cn.iocoder.yudao.framework.common.pojo.PageResult; 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  8 +import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
8 import cn.iocoder.yudao.module.member.api.user.MemberUserApi; 9 import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
9 import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; 10 import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
10 import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; 11 import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
@@ -97,8 +98,8 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -97,8 +98,8 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
97 item.setStatus(CombinationRecordStatusEnum.SUCCESS.getStatus()); 98 item.setStatus(CombinationRecordStatusEnum.SUCCESS.getStatus());
98 } 99 }
99 }); 100 });
  101 + recordMapper.updateBatch(records);
100 } 102 }
101 - recordMapper.updateBatch(records);  
102 } 103 }
103 104
104 private CombinationRecordDO validateCombinationRecord(Long userId, Long orderId) { 105 private CombinationRecordDO validateCombinationRecord(Long userId, Long orderId) {
@@ -179,7 +180,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -179,7 +180,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
179 throw exception(COMBINATION_RECORD_FAILED_HAVE_JOINED); 180 throw exception(COMBINATION_RECORD_FAILED_HAVE_JOINED);
180 } 181 }
181 // 3、校验活动是否开启 182 // 3、校验活动是否开启
182 - if (LocalDateTime.now().isAfter(activity.getStartTime())) { 183 + if (!LocalDateTimeUtils.beforeNow(activity.getStartTime())) {
183 throw exception(COMBINATION_RECORD_FAILED_TIME_NOT_START); 184 throw exception(COMBINATION_RECORD_FAILED_TIME_NOT_START);
184 } 185 }
185 // 4、校验当前活动是否过期 186 // 4、校验当前活动是否过期
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderConvert.java
@@ -207,12 +207,16 @@ public interface TradeOrderConvert { @@ -207,12 +207,16 @@ public interface TradeOrderConvert {
207 default TradePriceCalculateReqBO convert(Long userId, AppTradeOrderSettlementReqVO settlementReqVO, 207 default TradePriceCalculateReqBO convert(Long userId, AppTradeOrderSettlementReqVO settlementReqVO,
208 List<CartDO> cartList) { 208 List<CartDO> cartList) {
209 TradePriceCalculateReqBO reqBO = new TradePriceCalculateReqBO().setUserId(userId) 209 TradePriceCalculateReqBO reqBO = new TradePriceCalculateReqBO().setUserId(userId)
  210 + .setItems(new ArrayList<>(settlementReqVO.getItems().size()))
210 .setCouponId(settlementReqVO.getCouponId()).setPointStatus(settlementReqVO.getPointStatus()) 211 .setCouponId(settlementReqVO.getCouponId()).setPointStatus(settlementReqVO.getPointStatus())
  212 + // 物流信息
211 .setDeliveryType(settlementReqVO.getDeliveryType()).setAddressId(settlementReqVO.getAddressId()) 213 .setDeliveryType(settlementReqVO.getDeliveryType()).setAddressId(settlementReqVO.getAddressId())
212 .setPickUpStoreId(settlementReqVO.getPickUpStoreId()) 214 .setPickUpStoreId(settlementReqVO.getPickUpStoreId())
213 - .setItems(new ArrayList<>(settlementReqVO.getItems().size())) 215 + // 各种活动
214 .setSeckillActivityId(settlementReqVO.getSeckillActivityId()) 216 .setSeckillActivityId(settlementReqVO.getSeckillActivityId())
215 - .setBargainRecordId(settlementReqVO.getBargainRecordId()); 217 + .setBargainRecordId(settlementReqVO.getBargainRecordId())
  218 + .setCombinationActivityId(settlementReqVO.getCombinationActivityId())
  219 + .setCombinationHeadId(settlementReqVO.getCombinationHeadId());
216 // 商品项的构建 220 // 商品项的构建
217 Map<Long, CartDO> cartMap = convertMap(cartList, CartDO::getId); 221 Map<Long, CartDO> cartMap = convertMap(cartList, CartDO::getId);
218 for (AppTradeOrderSettlementReqVO.Item item : settlementReqVO.getItems()) { 222 for (AppTradeOrderSettlementReqVO.Item item : settlementReqVO.getItems()) {
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderDO.java
@@ -318,10 +318,16 @@ public class TradeOrderDO extends BaseDO { @@ -318,10 +318,16 @@ public class TradeOrderDO extends BaseDO {
318 */ 318 */
319 private Long combinationActivityId; 319 private Long combinationActivityId;
320 /** 320 /**
321 - * 团长编号 321 + * 拼团团长编号
322 * 322 *
323 - * 关联 CombinationRecordDO 的 id 字段 323 + * 关联 CombinationRecordDO 的 headId 字段
324 */ 324 */
325 private Long combinationHeadId; 325 private Long combinationHeadId;
  326 + /**
  327 + * 拼团记录编号
  328 + *
  329 + * 关联 CombinationRecordDO 的 id 字段
  330 + */
  331 + private Long combinationRecordId;
326 332
327 } 333 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationHandler.java
@@ -47,7 +47,8 @@ public class TradeCombinationHandler implements TradeOrderHandler { @@ -47,7 +47,8 @@ public class TradeCombinationHandler implements TradeOrderHandler {
47 47
48 // 获取商品信息 48 // 获取商品信息
49 TradeOrderItemDO item = orderItems.get(0); 49 TradeOrderItemDO item = orderItems.get(0);
50 - // 创建砍价记录 50 + // 创建拼团记录
  51 + // TODO puhui:这里应该先不创建;等支付好,才去创建;另外,创建好后,需要更新编号到订单;
51 combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, item)); 52 combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, item));
52 } 53 }
53 54
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeCombinationActivityPriceCalculator.java
@@ -31,7 +31,6 @@ public class TradeCombinationActivityPriceCalculator implements TradePriceCalcul @@ -31,7 +31,6 @@ public class TradeCombinationActivityPriceCalculator implements TradePriceCalcul
31 if (param.getCombinationActivityId() == null) { 31 if (param.getCombinationActivityId() == null) {
32 return; 32 return;
33 } 33 }
34 -  
35 Assert.isTrue(param.getItems().size() == 1, "拼团时,只允许选择一个商品"); 34 Assert.isTrue(param.getItems().size() == 1, "拼团时,只允许选择一个商品");
36 // 2. 校验是否可以参与拼团 35 // 2. 校验是否可以参与拼团
37 TradePriceCalculateRespBO.OrderItem orderItem = result.getItems().get(0); 36 TradePriceCalculateRespBO.OrderItem orderItem = result.getItems().get(0);