|
@@ -2541,15 +2541,27 @@ public class KwtLogisticsConsignmentService {
|
|
|
//根据物流订单号查询运单信息
|
|
//根据物流订单号查询运单信息
|
|
|
List<KwtWaybillOrderSubtask> waybillOrderSubtasks = waybillOrderSubtaskRepository.queryByLogId(logisticsOrder.getId());
|
|
List<KwtWaybillOrderSubtask> waybillOrderSubtasks = waybillOrderSubtaskRepository.queryByLogId(logisticsOrder.getId());
|
|
|
|
|
|
|
|
|
|
+ //根据贸易订单号查询物流订单
|
|
|
|
|
+ List<KwtLogisticsOrder> logOrderList = logisticsOrderRepository.queryByTradeOrderId(logisticsOrder.getTOrderId());
|
|
|
|
|
+ //查询贸易订单
|
|
|
|
|
+ OrderDetailVo orderDetailVo = tradeOrderInfoService.queryByTradeOrderId(logisticsOrder.getTOrderId());
|
|
|
|
|
+
|
|
|
//获取返回信息
|
|
//获取返回信息
|
|
|
return getLogisticsOrderDetailResp(orderContract,tradeContractResDto, logOrderIdUnitTypeKeyAndUnitMap, logisticsOrder, kwpGoods,
|
|
return getLogisticsOrderDetailResp(orderContract,tradeContractResDto, logOrderIdUnitTypeKeyAndUnitMap, logisticsOrder, kwpGoods,
|
|
|
- logOrderIdAndUnitTypeKeyAndAddressMap, waybillOrderSubtasks);
|
|
|
|
|
|
|
+ logOrderIdAndUnitTypeKeyAndAddressMap, waybillOrderSubtasks, logOrderList,orderDetailVo);
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@NotNull
|
|
@NotNull
|
|
|
- private static LogisticsOrderDetailResp getLogisticsOrderDetailResp(KwtLogisticsOrderContract orderContract,KwcContractLogisticsDto tradeContractResDto, Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap, KwtLogisticsOrder logisticsOrder,
|
|
|
|
|
- KwpGoods kwpGoods, Map<String, KwtLogisticsOrderAddress> logOrderIdAndUnitTypeKeyAndAddressMap, List<KwtWaybillOrderSubtask> waybillOrderSubtasks) {
|
|
|
|
|
|
|
+ private LogisticsOrderDetailResp getLogisticsOrderDetailResp(KwtLogisticsOrderContract orderContract,
|
|
|
|
|
+ KwcContractLogisticsDto tradeContractResDto,
|
|
|
|
|
+ Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap,
|
|
|
|
|
+ KwtLogisticsOrder logisticsOrder,
|
|
|
|
|
+ KwpGoods kwpGoods,
|
|
|
|
|
+ Map<String, KwtLogisticsOrderAddress> logOrderIdAndUnitTypeKeyAndAddressMap,
|
|
|
|
|
+ List<KwtWaybillOrderSubtask> waybillOrderSubtasks,
|
|
|
|
|
+ List<KwtLogisticsOrder> logOrderList,
|
|
|
|
|
+ OrderDetailVo orderDetailVo ) {
|
|
|
LogisticsOrderDetailResp logisticsOrderDetailResp = new LogisticsOrderDetailResp();
|
|
LogisticsOrderDetailResp logisticsOrderDetailResp = new LogisticsOrderDetailResp();
|
|
|
//设置合同信息
|
|
//设置合同信息
|
|
|
setContractInfo(orderContract, tradeContractResDto,logisticsOrderDetailResp);
|
|
setContractInfo(orderContract, tradeContractResDto,logisticsOrderDetailResp);
|
|
@@ -2563,7 +2575,7 @@ public class KwtLogisticsConsignmentService {
|
|
|
setAddressInfo(logOrderIdAndUnitTypeKeyAndAddressMap, logisticsOrder, logisticsOrderDetailResp);
|
|
setAddressInfo(logOrderIdAndUnitTypeKeyAndAddressMap, logisticsOrder, logisticsOrderDetailResp);
|
|
|
|
|
|
|
|
//设置履约信息
|
|
//设置履约信息
|
|
|
- setPerformInfo(logisticsOrder, waybillOrderSubtasks, logisticsOrderDetailResp);
|
|
|
|
|
|
|
+ setPerformInfo(logisticsOrder, waybillOrderSubtasks, logisticsOrderDetailResp,logOrderList, orderDetailVo);
|
|
|
|
|
|
|
|
//设置物流信息
|
|
//设置物流信息
|
|
|
setLogisticInfo(logisticsOrder,logisticsOrderDetailResp);
|
|
setLogisticInfo(logisticsOrder,logisticsOrderDetailResp);
|
|
@@ -2580,7 +2592,11 @@ public class KwtLogisticsConsignmentService {
|
|
|
logisticsOrderDetailResp.setLogisticOrderInfo(logisticOrderInfo);
|
|
logisticsOrderDetailResp.setLogisticOrderInfo(logisticOrderInfo);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private static void setPerformInfo(KwtLogisticsOrder logisticsOrder, List<KwtWaybillOrderSubtask> waybillOrderSubtasks, LogisticsOrderDetailResp logisticsOrderDetailResp) {
|
|
|
|
|
|
|
+ private void setPerformInfo(KwtLogisticsOrder logisticsOrder,
|
|
|
|
|
+ List<KwtWaybillOrderSubtask> waybillOrderSubtasks,
|
|
|
|
|
+ LogisticsOrderDetailResp logisticsOrderDetailResp,
|
|
|
|
|
+ List<KwtLogisticsOrder> logOrderList,
|
|
|
|
|
+ OrderDetailVo orderDetailVo) {
|
|
|
LogisticsOrderDetailResp.PerformanceInfoVO performanceInfoVO = new LogisticsOrderDetailResp.PerformanceInfoVO();
|
|
LogisticsOrderDetailResp.PerformanceInfoVO performanceInfoVO = new LogisticsOrderDetailResp.PerformanceInfoVO();
|
|
|
performanceInfoVO.setBillingMode(logisticsOrder.getBillingMode());
|
|
performanceInfoVO.setBillingMode(logisticsOrder.getBillingMode());
|
|
|
performanceInfoVO.setBillingModeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
|
|
performanceInfoVO.setBillingModeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
|
|
@@ -2613,12 +2629,57 @@ public class KwtLogisticsConsignmentService {
|
|
|
BigDecimal.ZERO;
|
|
BigDecimal.ZERO;
|
|
|
}
|
|
}
|
|
|
performanceInfoVO.setTotalCarriageCost(totalCarriageCost.setScale(2,RoundingMode.HALF_UP).toPlainString());
|
|
performanceInfoVO.setTotalCarriageCost(totalCarriageCost.setScale(2,RoundingMode.HALF_UP).toPlainString());
|
|
|
- performanceInfoVO.setSurplusAmount(Objects.nonNull(logisticsOrder.getAmount()) ?
|
|
|
|
|
- logisticsOrder.getAmount().subtract(loadAmount).setScale(2,RoundingMode.HALF_UP).toPlainString() : "0.00");
|
|
|
|
|
|
|
+ BigDecimal tradeAmount = Optional.ofNullable(orderDetailVo).map(OrderDetailVo::getAmount).orElse(BigDecimal.ZERO);
|
|
|
|
|
+ BigDecimal totalAmount = getTotalAmount(logOrderList);
|
|
|
|
|
+ BigDecimal surplusAmount = tradeAmount.subtract(totalAmount);
|
|
|
|
|
+ performanceInfoVO.setSurplusAmount(surplusAmount.setScale(2,RoundingMode.HALF_UP).toPlainString());
|
|
|
|
|
|
|
|
logisticsOrderDetailResp.setPerformanceInfoVO(performanceInfoVO);
|
|
logisticsOrderDetailResp.setPerformanceInfoVO(performanceInfoVO);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @NotNull
|
|
|
|
|
+ private BigDecimal getTotalAmount(List<KwtLogisticsOrder> logOrderList) {
|
|
|
|
|
+ BigDecimal totalAmount = BigDecimal.ZERO;
|
|
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isEmpty(logOrderList)) {
|
|
|
|
|
+ return totalAmount;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 计费方式
|
|
|
|
|
+ String billingMode = logOrderList.get(0).getBillingMode();
|
|
|
|
|
+ // 物流订单ID列表
|
|
|
|
|
+ List<Long> logOrderIds = logOrderList.stream()
|
|
|
|
|
+ .map(KwtLogisticsOrder::getId)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ // 根据物流订单查询子运单
|
|
|
|
|
+ List<KwtWaybillOrderSubtask> waybillOrderSubtasks = waybillOrderSubtaskRepository.queryByLogIds(logOrderIds);
|
|
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isEmpty(waybillOrderSubtasks)) {
|
|
|
|
|
+ return totalAmount;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 筛选出状态为已完成的子运单
|
|
|
|
|
+ List<KwtWaybillOrderSubtask> pendingUnloadSubtasks = waybillOrderSubtasks.stream()
|
|
|
|
|
+ .filter(subtask -> Objects.equals(subtask.getStatus(), CarWaybillV1Enum.WAIT_UNLOADING.getCode()))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isEmpty(pendingUnloadSubtasks)) {
|
|
|
|
|
+ return totalAmount;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 按装货量计费
|
|
|
|
|
+ if (org.apache.commons.lang3.StringUtils.equals(billingMode, DictEnum.CHARGING_TYPE_1.getValue())) {
|
|
|
|
|
+ totalAmount = pendingUnloadSubtasks.stream()
|
|
|
|
|
+ .filter(subtask -> Objects.nonNull(subtask.getLoadAmount()))
|
|
|
|
|
+ .map(KwtWaybillOrderSubtask::getLoadAmount)
|
|
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 按卸货量计费
|
|
|
|
|
+ else if (org.apache.commons.lang3.StringUtils.equals(billingMode, DictEnum.CHARGING_TYPE_2.getValue())) {
|
|
|
|
|
+ totalAmount = pendingUnloadSubtasks.stream()
|
|
|
|
|
+ .filter(subtask -> Objects.nonNull(subtask.getUnloadAmount()))
|
|
|
|
|
+ .map(KwtWaybillOrderSubtask::getUnloadAmount)
|
|
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
+ }
|
|
|
|
|
+ return totalAmount;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
private static void setAddressInfo(Map<String, KwtLogisticsOrderAddress> logOrderIdAndUnitTypeKeyAndAddressMap, KwtLogisticsOrder logisticsOrder, LogisticsOrderDetailResp logisticsOrderDetailResp) {
|
|
private static void setAddressInfo(Map<String, KwtLogisticsOrderAddress> logOrderIdAndUnitTypeKeyAndAddressMap, KwtLogisticsOrder logisticsOrder, LogisticsOrderDetailResp logisticsOrderDetailResp) {
|
|
|
LogisticsOrderDetailResp.LoadingInfoVO loadingInfoVO = new LogisticsOrderDetailResp.LoadingInfoVO();
|
|
LogisticsOrderDetailResp.LoadingInfoVO loadingInfoVO = new LogisticsOrderDetailResp.LoadingInfoVO();
|
|
|
KwtLogisticsOrderAddress loadAdd = logOrderIdAndUnitTypeKeyAndAddressMap.getOrDefault(logisticsOrder.getId() + "-" + AddressTypeEnum.SHIPMENT.getCode(),
|
|
KwtLogisticsOrderAddress loadAdd = logOrderIdAndUnitTypeKeyAndAddressMap.getOrDefault(logisticsOrder.getId() + "-" + AddressTypeEnum.SHIPMENT.getCode(),
|