|
@@ -34,6 +34,7 @@ import org.springframework.context.event.EventListener;
|
|
|
import org.springframework.core.annotation.Order;
|
|
import org.springframework.core.annotation.Order;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -64,6 +65,7 @@ public class ConfirmOrderListener {
|
|
|
ShopCartOrderDto shopCartOrderDto = event.getShopCartOrderDto();
|
|
ShopCartOrderDto shopCartOrderDto = event.getShopCartOrderDto();
|
|
|
OrderParam orderParam = event.getOrderParam();
|
|
OrderParam orderParam = event.getOrderParam();
|
|
|
String userId = SecurityUtils.getUser().getUserId();
|
|
String userId = SecurityUtils.getUser().getUserId();
|
|
|
|
|
+// String userId = "36726893042d492aba446439c5f00584";
|
|
|
UserAddr userAddr = userAddrService.getUserAddrByUserId(orderParam.getAddrId(), userId);
|
|
UserAddr userAddr = userAddrService.getUserAddrByUserId(orderParam.getAddrId(), userId);
|
|
|
double total = 0.0;
|
|
double total = 0.0;
|
|
|
int totalCount = 0;
|
|
int totalCount = 0;
|
|
@@ -107,21 +109,10 @@ public class ConfirmOrderListener {
|
|
|
orderParam.setDvyType(DvyType.NOT_DELIVERY.value());
|
|
orderParam.setDvyType(DvyType.NOT_DELIVERY.value());
|
|
|
}
|
|
}
|
|
|
//费用按重量计算,数据是g,现在要按kg计算,20是kg单位
|
|
//费用按重量计算,数据是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();
|
|
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;
|
|
break;
|
|
|
case 2: //夫妻店,B端只走物流
|
|
case 2: //夫妻店,B端只走物流
|
|
|
orderParam.setDvyType(DvyType.DELIVERY.value());
|
|
orderParam.setDvyType(DvyType.DELIVERY.value());
|
|
@@ -154,12 +145,13 @@ public class ConfirmOrderListener {
|
|
|
shopCartOrderDto.setActualTotal(Arith.add(total, transfee));
|
|
shopCartOrderDto.setActualTotal(Arith.add(total, transfee));
|
|
|
shopCartOrderDto.setTransfee(transfee);
|
|
shopCartOrderDto.setTransfee(transfee);
|
|
|
shopCartOrderDto.setFreeTransfee(freeTransfee);
|
|
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));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|