Selaa lähdekoodia

mall + trade:review 运费价格计算

YunaiV 2 vuotta sitten
vanhempi
commit
36ce968893

+ 1 - 1
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/spu/ProductSpuDO.java

@@ -141,7 +141,7 @@ public class ProductSpuDO extends BaseDO {
     /**
      * 物流配置模板编号
      *
-     * 对应 { TradeDeliveryExpressTemplateDO 的 id 编号}
+     * 对应 TradeDeliveryExpressTemplateDO 的 id 编号
      */
     private Long deliveryTemplateId;
 

+ 4 - 1
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/delivery/DeliveryExpressTemplateService.java

@@ -66,8 +66,11 @@ public interface DeliveryExpressTemplateService {
 
     /**
      * 校验快递运费模板
+     *
+     * 如果校验不通过,抛出 {@link cn.iocoder.yudao.framework.common.exception.ServiceException} 异常
+     *
      * @param templateId 模板编号
-     * @return DeliveryExpressTemplateDO 非空
+     * @return 快递运费模板
      */
     DeliveryExpressTemplateDO validateDeliveryExpressTemplate(Long templateId);
 }

+ 1 - 0
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateReqBO.java

@@ -58,6 +58,7 @@ public class TradePriceCalculateReqBO {
      *
      * 关联 {@link DeliveryExpressTemplateDO#getId()}
      */
+    // TODO @jason:运费模版,是不是每个 SKU 传入哈
     private Long templateId;
 
     /**

+ 11 - 5
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculator.java

@@ -34,12 +34,15 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
 @Component
 @Order(TradePriceCalculator.ORDER_DELIVERY)
 public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
+
     @Resource
     private AddressApi addressApi;
     @Resource
     private ProductSkuApi productSkuApi;
+
     @Resource
     private DeliveryExpressTemplateService deliveryExpressTemplateService;
+    // TODO @jason:走 Service 哈。Mapper 只允许自己的 Service 调用,保护好数据结构;
     @Resource
     private DeliveryExpressTemplateChargeMapper templateChargeMapper;
     @Resource
@@ -106,20 +109,22 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
         // 得到SKU 详情。得到 重量体积
         Map<Long, ProductSkuRespDTO> skuRespMap = convertMap(productSkuApi.getSkuList(skuIds), ProductSkuRespDTO::getId);
         // 一个 spuId 可能对应多条订单商品 SKU
+        // TODO @jason:得确认下,按照 sku 算,还是 spu 算;
         Map<Long, List<OrderItem>> spuIdItemMap = convertMultiMap(selectedItem, OrderItem::getSpuId);
         // 依次计算每个 SPU 的快递运费
         for (Map.Entry<Long, List<OrderItem>> entry : spuIdItemMap.entrySet()) {
             List<OrderItem> orderItems = entry.getValue();
             // 总件数, 总金额, 总重量, 总体积
-            int totalCount = 0, totalPrice = 0;
+            int totalCount = 0;
+            int totalPrice = 0;
             double totalWeight = 0;
             double totalVolume = 0;
             for (OrderItem orderItem : orderItems) {
                 totalCount += orderItem.getCount();
-                totalPrice += orderItem.getPrice();
+                totalPrice += orderItem.getPrice(); // TODO jason:应该按照 payPrice?
                 ProductSkuRespDTO skuResp = skuRespMap.get(orderItem.getSkuId());
                 if (skuResp != null) {
-                    totalWeight = totalWeight + skuResp.getWeight();
+                    totalWeight = totalWeight + skuResp.getWeight(); // TODO @jason:* 数量
                     totalVolume = totalVolume + skuResp.getVolume();
                 }
             }
@@ -130,6 +135,7 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
                 continue;
             }
             // 计算快递运费
+            // TODO @jason:貌似也可以抽成 checkExpressFree 类似方法
             if (areaTemplateChargeMap.containsKey(receiverAreaId)) {
                 DeliveryExpressTemplateChargeDO templateCharge = areaTemplateChargeMap.get(receiverAreaId);
                 DeliveryExpressChargeModeEnum chargeModeEnum = DeliveryExpressChargeModeEnum.valueOf(chargeMode);
@@ -170,8 +176,8 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator {
             int extraPrice = templateCharge.getExtraPrice() * extraNum;
             deliveryPrice = templateCharge.getStartPrice() + extraPrice;
         }
-        //
-        // TODO @芋艿 分摊快递费用到 SKU. 是不是搞复杂了
+        // TODO @芋艿 分摊快递费用到 SKU. 是不是搞复杂了;
+        // TODO @jason:因为退费的时候,可能按照 SKU 考虑退费金额
         divideDeliveryPrice(deliveryPrice, orderItems);
     }
 

+ 6 - 4
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculator.java

@@ -11,12 +11,14 @@ import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;
 public interface TradePriceCalculator {
 
     int ORDER_DISCOUNT_ACTIVITY = 10;
-    /**
-     * TODO @芋艿 快递运费的计算在满减之前。 例如有满多少包邮
-     */
-    int ORDER_DELIVERY = 15;
     int ORDER_REWARD_ACTIVITY = 20;
     int ORDER_COUPON = 30;
+    /**
+     * 快递运费的计算
+     *
+     * 放在各种营销活动、优惠劵后面 TODO
+     */
+    int ORDER_DELIVERY = 40;
 
     void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result);