|
|
@@ -273,8 +273,6 @@ public class WaybillOrderService {
|
|
|
}
|
|
|
Map<Long, List<KwtWaybillOrderSubtask>> logOrderIdAndSubtaskMap = orderSubtaskList.stream()
|
|
|
.collect(Collectors.groupingBy(KwtWaybillOrderSubtask::getLOrderId));
|
|
|
- // 预加载运单磅单信息,避免在余量计算中出现 N+1 查询
|
|
|
- Map<Long, List<KwtWaybillOrderTicket>> waybillOrderIdAndTicketList = getWaybillOrderIdAndTicketList(orderSubtaskList);
|
|
|
|
|
|
//获取贸易订单
|
|
|
List<OrderDetailVo> orderDetailVos = tradeOrderInfoService.queryByTradeOrderIds(tradeOrderIds);
|
|
|
@@ -294,7 +292,7 @@ public class WaybillOrderService {
|
|
|
.map(order -> {
|
|
|
return getLogisticsOrderResp(order, logOrderIdAndGoodsMap, goodsIdAndGoodsMap, logOrderIdAndUnitMap,
|
|
|
tOrderIdAndUnitMap, logOrderIdAndAddressMap, logOrderIdAndCirculateMap, tradeIdAndOrderDetailVoMap,
|
|
|
- tradeIdAndLogOrderList, logOrderIdAndSubtaskMap, waybillOrderIdAndTicketList, dictValueAndDictResDtoMap);
|
|
|
+ tradeIdAndLogOrderList, logOrderIdAndSubtaskMap, dictValueAndDictResDtoMap);
|
|
|
})
|
|
|
.filter(logisticsOrderResp -> {
|
|
|
// 校验是否满足车辆任务量,满足才保留
|
|
|
@@ -406,7 +404,6 @@ public class WaybillOrderService {
|
|
|
Map<Long, OrderDetailVo> tradeIdAndOrderDetailVoMap,
|
|
|
Map<Long, List<KwtLogisticsOrder>> tradeIdAndLogOrderList ,
|
|
|
Map<Long, List<KwtWaybillOrderSubtask>> logisticsOrderIdAndSubtaskList,
|
|
|
- Map<Long, List<KwtWaybillOrderTicket>> waybillOrderIdAndTicketList,
|
|
|
Map<String, Map<String, String>> dictValueAndDictResDtoMap) {
|
|
|
LogisticsOrderResp orderResp = new LogisticsOrderResp();
|
|
|
orderResp.setLogisticsOrderId(Optional.ofNullable(order.getId()).map(String::valueOf).orElse(null));
|
|
|
@@ -457,7 +454,7 @@ public class WaybillOrderService {
|
|
|
orderResp.setStatusDesc(LogisticsOrderV1Enum.IN_TRANSIT.getCode().equals(order.getStatus()) ? "待接单" : "未知状态");
|
|
|
//设置余量
|
|
|
BigDecimal orderSurplus = getSupAmount(order.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList,
|
|
|
- logisticsOrderIdAndSubtaskList, waybillOrderIdAndTicketList);
|
|
|
+ logisticsOrderIdAndSubtaskList);
|
|
|
orderResp.setOrderSurplus(orderSurplus.toPlainString());
|
|
|
orderResp.setRemainingAmount(orderSurplus);
|
|
|
|
|
|
@@ -762,8 +759,7 @@ public class WaybillOrderService {
|
|
|
.collect(Collectors.groupingBy(KwtLogisticsOrder::getTOrderId));
|
|
|
Map<Long, List<KwtWaybillOrderSubtask>> logisticsOrderIdAndSubtaskList = orderSubtaskList.stream()
|
|
|
.collect(Collectors.groupingBy(KwtWaybillOrderSubtask::getLOrderId));
|
|
|
- // 预加载运单磅单信息,避免在余量计算中出现 N+1 查询
|
|
|
- Map<Long, List<KwtWaybillOrderTicket>> waybillOrderIdAndTicketList = getWaybillOrderIdAndTicketList(orderSubtaskList);
|
|
|
+
|
|
|
//物流订单商品
|
|
|
List<KwtLogisticsOrderGoods> logOrderGoods = logisticsOrderGoodsRepository.queryByLogOrderIds(logOrderIdList);
|
|
|
if (CollectionUtils.isEmpty(logOrderGoods)) {
|
|
|
@@ -814,7 +810,7 @@ public class WaybillOrderService {
|
|
|
return getWaybillOrderResp(billOrder, subtaskMap, logOrderMap, logOrderIdAndCirculateMap,
|
|
|
logOrderIdAndGoodsMap, logOrderIdAndUnitMap, logOrderIdAndAddressMap, ticketMap,
|
|
|
tradeIdAndOrderDetailVoMap,tradeIdAndLogOrderList,logisticsOrderIdAndSubtaskList,
|
|
|
- waybillOrderIdAndTicketList,dictValueAndDictResDtoMap, goodsIdAndGoodsMap);
|
|
|
+ dictValueAndDictResDtoMap, goodsIdAndGoodsMap);
|
|
|
}).collect(Collectors.toList());
|
|
|
return ordderList;
|
|
|
}
|
|
|
@@ -838,7 +834,6 @@ public class WaybillOrderService {
|
|
|
Map<Long, OrderDetailVo> tradeIdAndOrderDetailVoMap,
|
|
|
Map<Long, List<KwtLogisticsOrder>> tradeIdAndLogOrderList ,
|
|
|
Map<Long, List<KwtWaybillOrderSubtask>> logisticsOrderIdAndSubtaskList,
|
|
|
- Map<Long, List<KwtWaybillOrderTicket>> waybillOrderIdAndTicketList,
|
|
|
Map<String, Map<String, String>> dictValueAndDictResDtoMap,
|
|
|
Map<Long, KwpGoods> goodsIdAndGoodsMap) {
|
|
|
WaybillOrderStatusResp wbOrderResp = new WaybillOrderStatusResp();
|
|
|
@@ -859,7 +854,7 @@ public class WaybillOrderService {
|
|
|
//设置余量
|
|
|
KwtLogisticsOrder order = logOrderMap.getOrDefault(wbOrder.getLOrderId(), new KwtLogisticsOrder());
|
|
|
BigDecimal supAmount = getSupAmount(order.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList,
|
|
|
- logisticsOrderIdAndSubtaskList, waybillOrderIdAndTicketList);
|
|
|
+ logisticsOrderIdAndSubtaskList);
|
|
|
wbOrderResp.setOrderSurplus(supAmount);
|
|
|
//托运企业
|
|
|
KwtLogisticsOrderUnit consignEnt = logOrderIdAndUnitMap.getOrDefault(wbOrder.getLOrderId() + "-" + UnitTypeEnum.CONSIGN.getCode(), new KwtLogisticsOrderUnit());
|
|
|
@@ -948,8 +943,7 @@ public class WaybillOrderService {
|
|
|
private BigDecimal getSupAmount(Long tradeOrderId,
|
|
|
Map<Long, OrderDetailVo> tradeIdAndOrderDetailVoMap,
|
|
|
Map<Long, List<KwtLogisticsOrder>> tradeIdAndLogOrderList,
|
|
|
- Map<Long, List<KwtWaybillOrderSubtask>> logisticsOrderIdAndSubtaskList,
|
|
|
- Map<Long, List<KwtWaybillOrderTicket>> waybillOrderIdAndTicketList) {
|
|
|
+ Map<Long, List<KwtWaybillOrderSubtask>> logisticsOrderIdAndSubtaskList) {
|
|
|
log.debug("开始计算贸易订单余量,tradeOrderId: {}", tradeOrderId);
|
|
|
|
|
|
// 1. 获取贸易订单总货物量
|
|
|
@@ -982,7 +976,7 @@ public class WaybillOrderService {
|
|
|
List<Integer> excludeStatusList = Arrays.asList(CarWaybillV1Enum.CANCELLED.getCode(), CarWaybillV1Enum.COMPLETED.getCode()
|
|
|
, CarWaybillV1Enum.EMPTY_WAIT_LEAVE.getCode());
|
|
|
|
|
|
- // 4. 计算子运单委托量合计(仅统计未取消/未完成的有效子运单)
|
|
|
+ // 4. 计算子运单委托量合计(仅统计未取消/未完成/空载的有效子运单)
|
|
|
BigDecimal entrustAmount = waybillOrderSubtasks.stream()
|
|
|
.filter(Objects::nonNull)
|
|
|
.filter(subtask -> !excludeStatusList.contains(subtask.getStatus()))
|
|
|
@@ -992,26 +986,16 @@ public class WaybillOrderService {
|
|
|
|
|
|
log.debug("物流订单[{}]子运单委托量合计: {}", logOrderId, entrustAmount);
|
|
|
|
|
|
- // 5. 计算磅单量合计
|
|
|
- // 逻辑:通过子运单找到关联的运单ID,再找到对应的磅单,过滤出指定类型(装/卸)的磅单量
|
|
|
- BigDecimal ticketAmount = waybillOrderSubtasks.stream()
|
|
|
- .filter(Objects::nonNull)
|
|
|
- .filter(subtask -> !Objects.equals(subtask.getStatus(), CarWaybillV1Enum.CANCELLED.getCode()))
|
|
|
- .map(KwtWaybillOrderSubtask::getWOrderId)
|
|
|
- .filter(Objects::nonNull)
|
|
|
- // 展开每个运单ID对应的磅单列表
|
|
|
- .flatMap(wOrderId -> waybillOrderIdAndTicketList.getOrDefault(wOrderId, Collections.emptyList()).stream())
|
|
|
- .filter(Objects::nonNull)
|
|
|
- // 只保留符合计费模式的磅单类型
|
|
|
- .filter(ticket -> Objects.equals(ticket.getType(), AddressTypeEnum.SHIPMENT.getCode()))
|
|
|
- .map(KwtWaybillOrderTicket::getAmount)
|
|
|
+ // 5. 计算运单已完成的合计量
|
|
|
+ BigDecimal totalLoadAmount = kwtLogisticsOrders.stream().filter(Objects::nonNull)
|
|
|
+ .map(KwtLogisticsOrder::getTotalLoadAmount)
|
|
|
.filter(Objects::nonNull)
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
|
- log.debug("物流订单[{}]进行中状态的实际装货量合计: {}", logOrderId, ticketAmount);
|
|
|
+ log.debug("物流订单[{}]有完成的运单实际装货量合计: {}", logOrderId, totalLoadAmount);
|
|
|
|
|
|
// 累加到总占用量
|
|
|
- usedAmount = usedAmount.add(entrustAmount).add(ticketAmount);
|
|
|
+ usedAmount = usedAmount.add(entrustAmount).add(totalLoadAmount);
|
|
|
}
|
|
|
}
|
|
|
|