Explorar el Código

拼团活动:完善 TradeCombinationHandler

puhui999 hace 1 año
padre
commit
07d6ab5842

+ 3 - 4
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainRecordApiImpl.java

@@ -1,6 +1,5 @@
 package cn.iocoder.yudao.module.promotion.api.bargain;
 
-import cn.iocoder.yudao.module.promotion.api.bargain.dto.BargainRecordCreateReqDTO;
 import cn.iocoder.yudao.module.promotion.api.bargain.dto.BargainValidateJoinRespDTO;
 import cn.iocoder.yudao.module.promotion.service.bargain.BargainRecordService;
 import org.springframework.stereotype.Service;
@@ -18,9 +17,9 @@ public class BargainRecordApiImpl implements BargainRecordApi {
     @Resource
     private BargainRecordService bargainRecordService;
 
-    @Override
-    public void createBargainRecord(BargainRecordCreateReqDTO reqDTO) {
-    }
+    //@Override
+    //public void createBargainRecord(BargainRecordCreateReqDTO reqDTO) {
+    //}
 
     @Override
     public BargainValidateJoinRespDTO validateJoinBargain(Long userId, Long bargainRecordId, Long skuId) {

+ 2 - 2
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/bargain/BargainRecordServiceImpl.java

@@ -77,12 +77,12 @@ public class BargainRecordServiceImpl implements BargainRecordService {
 
     @Override
     public BargainValidateJoinRespDTO validateJoinBargain(Long userId, Long bargainRecordId, Long skuId) {
-        // 1.1 拼团记录不存在
+        // 1.1 砍价记录不存在
         BargainRecordDO record = bargainRecordMapper.selectByIdAndUserId(bargainRecordId, userId);
         if (record == null) {
             throw exception(BARGAIN_RECORD_NOT_EXISTS);
         }
-        // 1.2 拼团记录未在进行中
+        // 1.2 砍价记录未在进行中
         if (ObjUtil.notEqual(record.getStatus(), BargainRecordStatusEnum.IN_PROGRESS)) {
             throw exception(BARGAIN_JOIN_RECORD_NOT_SUCCESS);
         }

+ 13 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderConvert.java

@@ -16,6 +16,7 @@ import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDeta
 import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
 import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuUpdateStockReqDTO;
 import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
+import cn.iocoder.yudao.module.promotion.api.combination.dto.CombinationRecordCreateReqDTO;
 import cn.iocoder.yudao.module.trade.api.order.dto.TradeOrderRespDTO;
 import cn.iocoder.yudao.module.trade.controller.admin.base.member.user.MemberUserRespVO;
 import cn.iocoder.yudao.module.trade.controller.admin.base.product.property.ProductPropertyValueDetailRespVO;
@@ -263,4 +264,16 @@ public interface TradeOrderConvert {
 
     List<TradeOrderRespDTO> convertList04(List<TradeOrderDO> list);
 
+    @Mappings({
+            @Mapping(target = "activityId", source = "order.combinationActivityId"),
+            @Mapping(target = "spuId", source = "item.spuId"),
+            @Mapping(target = "skuId", source = "item.skuId"),
+            @Mapping(target = "count", source = "item.count"),
+            @Mapping(target = "orderId", source = "order.id"),
+            @Mapping(target = "userId", source = "order.userId"),
+            @Mapping(target = "headId", source = "order.combinationRecordHeadId"),
+            @Mapping(target = "combinationPrice", source = "item.payPrice"),
+    })
+    CombinationRecordCreateReqDTO convert(TradeOrderDO order, TradeOrderItemDO item);
+
 }

+ 17 - 1
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderDO.java

@@ -7,7 +7,10 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryPickUpStoreDO;
 import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum;
-import cn.iocoder.yudao.module.trade.enums.order.*;
+import cn.iocoder.yudao.module.trade.enums.order.TradeOrderCancelTypeEnum;
+import cn.iocoder.yudao.module.trade.enums.order.TradeOrderRefundStatusEnum;
+import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
+import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;
 import com.baomidou.mybatisplus.annotation.KeySequence;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
@@ -308,4 +311,17 @@ public class TradeOrderDO extends BaseDO {
      */
     private Long bargainRecordId;
 
+    /**
+     * 拼团活动编号 TODO puhui999:价格计算后设置
+     *
+     * 关联 CombinationActivityDO 的 id 字段
+     */
+    private Long combinationActivityId;
+    /**
+     * 团长编号
+     *
+     * 关联 CombinationRecordDO 的 id 字段
+     */
+    private Long combinationRecordHeadId;
+
 }

+ 45 - 33
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationHandler.java

@@ -1,9 +1,16 @@
 package cn.iocoder.yudao.module.trade.service.order.handler;
 
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
 import cn.iocoder.yudao.module.promotion.api.combination.CombinationRecordApi;
+import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
+import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
+import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
+import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * 拼团订单 handler 接口实现类
@@ -16,38 +23,43 @@ public class TradeCombinationHandler implements TradeOrderHandler {
     @Resource
     private CombinationRecordApi combinationRecordApi;
 
-//    @Override
-//    public void beforeOrderCreate(TradeBeforeOrderCreateReqBO reqBO) {
-//        // 如果不是拼团订单则结束
-//        if (ObjectUtil.notEqual(TradeOrderTypeEnum.COMBINATION.getType(), reqBO.getOrderType())) {
-//            return;
-//        }
-//
-//        // 获取商品信息
-//        TradeBeforeOrderCreateReqBO.Item item = reqBO.getItems().get(0);
-//        // 校验是否满足拼团活动相关限制
-//        combinationRecordApi.validateCombinationRecord(reqBO.getCombinationActivityId(), reqBO.getUserId(), item.getSkuId(), item.getCount());
-//    }
-
-//    @Override
-//    public void afterOrderCreate(TradeAfterOrderCreateReqBO reqBO) {
-//        if (reqBO.getCombinationActivityId() == null) {
-//            return;
-//        }
-//
-//        // 创建砍价记录
-//        combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(reqBO));
-//    }
-
-//    @Override
-//    public void afterPayOrder(TradeAfterPayOrderReqBO reqBO) {
-//        // 如果不是拼团订单则结束
-//        if (ObjectUtil.notEqual(TradeOrderTypeEnum.COMBINATION.getType(), reqBO.getOrderType())) {
-//            return;
-//        }
-//
-//        // 更新拼团状态 TODO puhui999:订单支付失败或订单支付过期删除这条拼团记录
-//        combinationRecordApi.updateRecordStatusToInProgress(reqBO.getUserId(), reqBO.getOrderId(), reqBO.getPayTime());
-//    }
+    @Override
+    public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
+        // 如果不是拼团订单则结束
+        if (ObjectUtil.notEqual(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
+            return;
+        }
+        Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品");
+
+        // 获取商品信息
+        TradeOrderItemDO item = orderItems.get(0);
+        // 校验是否满足拼团活动相关限制
+        combinationRecordApi.validateCombinationRecord(order.getCombinationActivityId(), order.getUserId(), item.getSkuId(), item.getCount());
+    }
+
+    @Override
+    public void afterOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
+        // 如果不是拼团订单则结束
+        if (ObjectUtil.notEqual(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
+            return;
+        }
+        Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品");
+
+        // 获取商品信息
+        TradeOrderItemDO item = orderItems.get(0);
+        // 创建砍价记录
+        combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, item));
+    }
+
+    @Override
+    public void afterPayOrder(TradeOrderDO order) {
+        // 如果不是拼团订单则结束
+        if (ObjectUtil.notEqual(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
+            return;
+        }
+
+        // 更新拼团状态 TODO puhui999:订单支付失败或订单支付过期删除这条拼团记录
+        combinationRecordApi.updateRecordStatusToInProgress(order.getUserId(), order.getId(), order.getPayTime());
+    }
 
 }