Browse Source

运费计算封装

xdd 2 weeks ago
parent
commit
3fe5362a48

+ 39 - 16
fs-service-system/src/main/java/com/fs/store/service/impl/FsStoreOrderServiceImpl.java

@@ -70,6 +70,8 @@ import com.fs.store.service.*;
 import com.fs.store.service.channel.PaymentHandler;
 import com.fs.store.service.channel.PaymentHandlerHolder;
 import com.fs.store.service.channel.param.PayProcessContext;
+import com.fs.store.strategy.ShippingOrder;
+import com.fs.store.strategy.ShippingTemplateManager;
 import com.fs.store.vo.*;
 import com.fs.system.service.ISysConfigService;
 import com.fs.tzBank.TzBankService;
@@ -223,6 +225,11 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
     @Autowired
     private IFsShippingTemplatesService fsShippingTemplatesService;
 
+    @Autowired
+    private ShippingTemplateManager shippingTemplateManager;
+
+    @Autowired
+    private IFsStoreProductAttrValueService fsStoreProductAttrValueService;
     /**
      * 查询订单
      *
@@ -1196,7 +1203,7 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
         if(param.getCouponUserId()!=null){
             FsStoreCouponUser couponUser=couponUserService.selectFsStoreCouponUserById(param.getCouponUserId());
             if(couponUser!=null&&couponUser.getStatus()==0){
-                if(couponUser.getUseMinPrice().compareTo(storeProductPackage.getPayMoney())==-1){
+                if(couponUser.getUseMinPrice().compareTo(storeProductPackage.getPayMoney()) < 0){
                     //
                     totalMoney=totalMoney.subtract(couponUser.getCouponPrice());
                 }
@@ -1210,26 +1217,28 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
 
             // 如果不包邮
             if(ObjectUtil.equal(0,fsShippingTemplates.getAppoint())){
-                // 邮费等于商品总量
                 // 商品总量 重量、件、体积
-                BigDecimal totalSum = BigDecimal.ZERO;
                 Integer type = fsShippingTemplates.getType();
-                // 获取当前套餐的商品列表
-
+                ShippingOrder.ShippingOrderBuilder shippingOrderBuilder = ShippingOrder.builder()
+                        .cityId(address.getCityId());
+                BigDecimal productSum = getProductSum(storeProductPackage, type);
 
                 // 按件数
                 if(ObjectUtil.equal(ShippingTempEnum.TYPE_1,type)){
-
+                    shippingOrderBuilder.itemCount(productSum.intValue());
                 // 按重量
                 } else if(ObjectUtil.equal(ShippingTempEnum.TYPE_2,type)){
-
+                    shippingOrderBuilder.weight(productSum);
                 // 按体积
                 } else if(ObjectUtil.equal(ShippingTempEnum.TYPE_3,type)){
-
+                    shippingOrderBuilder.volume(productSum);
                 }
 
-//                ShippingTempEnum
-                // 计算体积
+                BigDecimal bigDecimal = shippingTemplateManager
+                        .calculateShippingFee(fsShippingTemplates.getId(), shippingOrderBuilder.build());
+                if(ObjectUtil.isNotNull(bigDecimal)){
+                    postMoney = bigDecimal;
+                }
             }
         }
 
@@ -1241,17 +1250,31 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService
                 .put("postMoney",postMoney);
     }
 
-    @Autowired
-    private IFsStoreProductService fsStoreProductService;
-    private List<FsStoreProduct> getProducts(FsStoreProductPackage storeProductPackage){
+    private BigDecimal getProductSum(FsStoreProductPackage storeProductPackage,Integer type){
         String products = storeProductPackage.getProducts();
         com.alibaba.fastjson.JSONArray objects = JSON.parseArray(products);
-
+        BigDecimal sum = BigDecimal.ZERO;
         for(int i=0;i<objects.size();i++){
             JSONObject jsonObject = objects.getJSONObject(i);
-            Long id = jsonObject.getLong("id");
+            Long productId = jsonObject.getLong("id");
+            Long count = jsonObject.getLong("count");
+
+            // 按件数
+            if(ObjectUtil.equal(ShippingTempEnum.TYPE_1,type)){
+                sum = sum.add(BigDecimal.valueOf(count));
+                // 按重量
+            } else if(ObjectUtil.equal(ShippingTempEnum.TYPE_2,type)){
+                List<FsStoreProductAttrValue> fsStoreProductAttrValues
+                        = fsStoreProductAttrValueService.selectFsStoreProductAttrValueByProductId(productId);
+                sum = fsStoreProductAttrValues.stream().map(FsStoreProductAttrValue::getWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
+                // 按体积
+            } else if(ObjectUtil.equal(ShippingTempEnum.TYPE_3,type)){
+                List<FsStoreProductAttrValue> fsStoreProductAttrValues
+                        = fsStoreProductAttrValueService.selectFsStoreProductAttrValueByProductId(productId);
+                sum = fsStoreProductAttrValues.stream().map(FsStoreProductAttrValue::getVolume).reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
         }
-        return null;
+        return sum;
     }
 
     @Override

+ 2 - 0
fs-service-system/src/main/java/com/fs/store/strategy/ShippingOrder.java

@@ -1,5 +1,6 @@
 package com.fs.store.strategy;
 
+import lombok.Builder;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -8,6 +9,7 @@ import java.math.BigDecimal;
  * 订单类
  */
 @Data
+@Builder
 public class ShippingOrder {
     /**
      * 商品数量