|
|
@@ -154,6 +154,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
private final KwtWaybillOrderNodeRepository kwtWaybillOrderNodeRepository;
|
|
|
private final VehicleTraceClient vehicleTraceClient;
|
|
|
private final KwtGatekeeperWaybillOrderRepository gatekeeperWaybillOrderRepository;
|
|
|
+ private final KwtLogisticsOrderContractRepository logisticsOrderContractRepository;
|
|
|
|
|
|
@Resource
|
|
|
private StreamBridge streamBridge;
|
|
|
@@ -4140,8 +4141,8 @@ public class KwtWaybillOrderV1Service {
|
|
|
return endDate;
|
|
|
}
|
|
|
|
|
|
- @NotNull
|
|
|
- private static WaybillOrderResp getWaybillOrderResp(KwtWaybillOrderSubtask record, Map<Long, KwtWaybillOrder> finalWaybillOrderIdAndBillOrderMap,
|
|
|
+
|
|
|
+ private WaybillOrderResp getWaybillOrderResp(KwtWaybillOrderSubtask record, Map<Long, KwtWaybillOrder> finalWaybillOrderIdAndBillOrderMap,
|
|
|
Map<String, KwtLogisticsOrderUnit> finalLogOrderIdUnitTypeKeyAndUnitMap,
|
|
|
Map<Long, KwtLogisticsOrderGoods> finalLogOrderIdAndGoodsIdMap,
|
|
|
Map<Long, KwpGoods> kwpGoodsMap,
|
|
|
@@ -4275,6 +4276,19 @@ public class KwtWaybillOrderV1Service {
|
|
|
}
|
|
|
|
|
|
KwtGatekeeperWaybillOrder gatekeeper = gatekeeperMap.getOrDefault(billOrder.getId(), new KwtGatekeeperWaybillOrder());
|
|
|
+ if (Objects.equals(logOrder.getOrderType(), 1) && Objects.equals(gatekeeper.getType(), 2)){
|
|
|
+ // 装货重量
|
|
|
+ BigDecimal loadAmount = tareAmountTicket.getAmount();
|
|
|
+
|
|
|
+ //卸货净重
|
|
|
+ KwtWaybillOrderTicket unloadTicket = ticketMap.getOrDefault(billOrder.getId() + "-" + 2, new KwtWaybillOrderTicket());
|
|
|
+ BigDecimal unloadAmount = unloadTicket.getAmount();
|
|
|
+
|
|
|
+ //计算货损率
|
|
|
+ BigDecimal lossRate = calculateLossRate2(loadAmount, unloadAmount);
|
|
|
+ waybillOrderResp.setLossRate(lossRate);
|
|
|
+ waybillOrderResp.setIsPassReason(isLossRateExceeded(logOrder, lossRate));
|
|
|
+ }
|
|
|
waybillOrderResp.setGatekeeperId(gatekeeper.getId());
|
|
|
|
|
|
return waybillOrderResp;
|
|
|
@@ -4870,6 +4884,45 @@ public class KwtWaybillOrderV1Service {
|
|
|
return "0.00%";
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 计算货损率
|
|
|
+ */
|
|
|
+ private static BigDecimal calculateLossRate2(BigDecimal loadAmount, BigDecimal unloadAmount) {
|
|
|
+ log.info("[门卫]开始计算货损率,装货净重:{},卸货净重:{}", com.alibaba.fastjson.JSON.toJSONString(loadAmount), com.alibaba.fastjson.JSON.toJSONString(loadAmount));
|
|
|
+ BigDecimal lossRate = BigDecimal.ZERO;
|
|
|
+ if (loadAmount != null && unloadAmount != null && loadAmount.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ lossRate = loadAmount.subtract(unloadAmount)
|
|
|
+ .divide(loadAmount, 4, RoundingMode.HALF_UP)
|
|
|
+ .setScale(2, RoundingMode.HALF_UP);
|
|
|
+ return lossRate;
|
|
|
+ }
|
|
|
+ log.info("[门卫]计算货损率完成,货损率:{}", com.alibaba.fastjson.JSON.toJSONString(lossRate));
|
|
|
+ return lossRate;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验货损率是否超过千分之三
|
|
|
+ */
|
|
|
+ private boolean isLossRateExceeded(KwtLogisticsOrder logOrder, BigDecimal lossRate) {
|
|
|
+ log.info("[门卫]开始计算货损率是否超过配置值,物流订单:{},货损率:{}", com.alibaba.fastjson.JSON.toJSONString(logOrder), com.alibaba.fastjson.JSON.toJSONString(lossRate));
|
|
|
+ KwtLogisticsOrderContract orderContract = logisticsOrderContractRepository.queryByLogOrderId(logOrder.getId());
|
|
|
+ if (orderContract == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_CONTRACT_NOT_FOUND, "物流订单无合同数据!");
|
|
|
+ }
|
|
|
+ KwcContractLogisticsDto contractLogisticsDto = remoteContractService.queryContractByContractId(orderContract.getContractId());
|
|
|
+ if (contractLogisticsDto == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.DATA_NOT_EXIST, "物流合同不存在!");
|
|
|
+ }
|
|
|
+ if (contractLogisticsDto.getAllowedError() == null || contractLogisticsDto.getAllowedError().compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // 查询出来的货损率为5,表示千分之5,需除以1000
|
|
|
+ BigDecimal allowedError = contractLogisticsDto.getAllowedError().divide(new BigDecimal("1000"), 6, RoundingMode.HALF_UP);
|
|
|
+
|
|
|
+ log.info("[门卫]计算货损率是否超过配置值完成,配置的货损率:{}", com.alibaba.fastjson.JSON.toJSONString(allowedError));
|
|
|
+ return lossRate.compareTo(allowedError) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 转换为称重记录
|
|
|
*/
|