wangming 1 dzień temu
rodzic
commit
18f8d5607d

+ 1 - 0
yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderController.java

@@ -77,6 +77,7 @@ public class OrderController {
     @ApiOperation(value = "结算,生成订单信息", notes = "传入下单所需要的参数进行下单")
     public ResponseEntity<ShopCartOrderMergerDto> confirm(@Valid @RequestBody OrderParam orderParam) {
         String userId = SecurityUtils.getUser().getUserId();
+//        String userId = "36726893042d492aba446439c5f00584";
 //        User user = userService.getById(userId);
 //        if (user == null) {
 //            throw new GlobalException("用户信息不存在...");

+ 11 - 19
yami-shop-api/src/main/java/com/yami/shop/api/listener/ConfirmOrderListener.java

@@ -34,6 +34,7 @@ import org.springframework.context.event.EventListener;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -64,6 +65,7 @@ public class ConfirmOrderListener {
         ShopCartOrderDto shopCartOrderDto = event.getShopCartOrderDto();
         OrderParam orderParam = event.getOrderParam();
         String userId = SecurityUtils.getUser().getUserId();
+//        String userId = "36726893042d492aba446439c5f00584";
         UserAddr userAddr = userAddrService.getUserAddrByUserId(orderParam.getAddrId(), userId);
         double total = 0.0;
         int totalCount = 0;
@@ -107,21 +109,10 @@ public class ConfirmOrderListener {
                         orderParam.setDvyType(DvyType.NOT_DELIVERY.value());
                     }
                     //费用按重量计算,数据是g,现在要按kg计算,20是kg单位
-                    double sub = Arith.sub(shopCartOrderDto.getTotalWeight(), Arith.mul(20.0, 1000));
-                    System.out.println("费用按重量计算,数据是g,现在要按kg计算,20是kg单位"+sub);
+                    Double totalWeight = shopCartOrderDto.getTotalWeight();
                     transfee = transport2.getFreightFee().doubleValue();
-                    if (sub > 0) {
-                        //超过重量的安规则计算,累加费用
-                        // 假设5元/20kg
-                        // (20,40]  (40,60]  (60,80]
-                        //   2         3         4
-                        //  5*2+5     5*3+5     5*4+5
-                        int num = 1;
-                        while (sub > (1 << num) * 1000) {//单位g
-                            num++;
-                            transfee = Arith.add(transfee, Arith.mul(transfee, num));
-                        }
-                    }
+                    Double deliveryWeight = Arith.mul(transport2.getWeight(), 1000);
+                    transfee=calcDeliveryFee(totalWeight, deliveryWeight, new BigDecimal(transfee)).doubleValue();
                     break;
                 case 2: //夫妻店,B端只走物流
                     orderParam.setDvyType(DvyType.DELIVERY.value());
@@ -154,12 +145,13 @@ public class ConfirmOrderListener {
         shopCartOrderDto.setActualTotal(Arith.add(total, transfee));
         shopCartOrderDto.setTransfee(transfee);
         shopCartOrderDto.setFreeTransfee(freeTransfee);
-
-        System.out.println("最终结果:"+shopCartOrderDto);
     }
 
-    public static void main(String[] args) {
-        double sub = Arith.sub(10, Arith.mul(20.0, 1000));
-        System.out.println(sub);
+    public static BigDecimal calcDeliveryFee(Double totalWeight,Double deliveryWeight ,BigDecimal unitFare) {
+        if (totalWeight == null || totalWeight <= 0 || unitFare == null || unitFare.signum() <= 0) {
+            return BigDecimal.ZERO;
+        }
+        long units = (long) Math.ceil(totalWeight / deliveryWeight);
+        return unitFare.multiply(BigDecimal.valueOf(units));
     }
 }

+ 2 - 2
yami-shop-api/src/main/resources/application.yml

@@ -2,8 +2,8 @@
 spring:
   # 环境 dev|prod|docker
   profiles:
-    active: dev
-#    active: prod
+#    active: dev
+    active: prod
   #文件上传设置
   servlet:
     multipart: