|
|
@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.google.common.collect.Maps;
|
|
|
import com.sckw.core.common.enums.enums.DictEnum;
|
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
import com.sckw.core.common.enums.enums.ErrorCodeEnum;
|
|
|
@@ -22,6 +23,7 @@ import com.sckw.core.web.response.result.PageDataResult;
|
|
|
import com.sckw.fleet.api.RemoteFleetService;
|
|
|
import com.sckw.fleet.api.model.vo.RTruckVo;
|
|
|
import com.sckw.order.api.dubbo.TradeOrderInfoService;
|
|
|
+import com.sckw.order.api.model.OrderDetailVo;
|
|
|
import com.sckw.order.api.model.OrderUnitInfoDetailVO;
|
|
|
import com.sckw.product.api.dubbo.GoodsInfoService;
|
|
|
import com.sckw.product.api.model.KwpGoods;
|
|
|
@@ -45,6 +47,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
@@ -602,7 +605,20 @@ public class WaybillOrderService {
|
|
|
}
|
|
|
Map<Long, KwtLogisticsOrder> logOrderMap = logOrderList.stream().collect(Collectors.toMap(logOrder -> logOrder.getId(),
|
|
|
Function.identity(), (x, y) -> x));
|
|
|
-
|
|
|
+ Set<Long> tradeIds = logOrderList.stream()
|
|
|
+ .map(KwtLogisticsOrder::getTOrderId)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ //获取贸易订单
|
|
|
+ List<OrderDetailVo> orderDetailVos = tradeOrderInfoService.queryByTradeOrderIds(tradeIds);
|
|
|
+ Map<Long, OrderDetailVo> tradeIdAndOrderDetailVoMap = Maps.newHashMap();
|
|
|
+ if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(orderDetailVos)){
|
|
|
+ tradeIdAndOrderDetailVoMap = orderDetailVos.stream()
|
|
|
+ .collect(Collectors.toMap(OrderDetailVo::getId, Function.identity(), (x, y) -> x));
|
|
|
+ }
|
|
|
+ Map<Long, List<KwtLogisticsOrder>> tradeIdAndLogOrderList = logOrderList.stream()
|
|
|
+ .collect(Collectors.groupingBy(KwtLogisticsOrder::getTOrderId));
|
|
|
+ Map<Long, List<KwtWaybillOrderSubtask>> logisticsOrderIdAndSubtaskList = orderSubtaskList.stream()
|
|
|
+ .collect(Collectors.groupingBy(KwtWaybillOrderSubtask::getLOrderId));
|
|
|
//物流订单商品
|
|
|
List<KwtLogisticsOrderGoods> logOrderGoods = logisticsOrderGoodsRepository.queryByLogOrderIds(logOrderIdList);
|
|
|
if (CollectionUtils.isEmpty(logOrderGoods)) {
|
|
|
@@ -636,10 +652,12 @@ public class WaybillOrderService {
|
|
|
Collectors.toMap(ticket -> ticket.getWOrderId() + "-" + ticket.getType(),
|
|
|
Function.identity(), (x, y) -> x));
|
|
|
|
|
|
+ Map<Long, OrderDetailVo> finalTradeIdAndOrderDetailVoMap = tradeIdAndOrderDetailVoMap;
|
|
|
List<WaybillOrderStatusResp> ordderList = records.stream().map(
|
|
|
billOrder -> {
|
|
|
return getWaybillOrderResp(billOrder, subtaskMap, logOrderMap, logOrderIdAndCirculateMap,
|
|
|
- logOrderIdAndGoodsMap, logOrderIdAndUnitMap, logOrderIdAndAddressMap, ticketMap);
|
|
|
+ logOrderIdAndGoodsMap, logOrderIdAndUnitMap, logOrderIdAndAddressMap, ticketMap,
|
|
|
+ finalTradeIdAndOrderDetailVoMap,tradeIdAndLogOrderList,logisticsOrderIdAndSubtaskList);
|
|
|
}).collect(Collectors.toList());
|
|
|
return ordderList;
|
|
|
}
|
|
|
@@ -659,7 +677,10 @@ public class WaybillOrderService {
|
|
|
Map<Long, KwtLogisticsOrderGoods> logOrderIdAndGoodsMap,
|
|
|
Map<String, KwtLogisticsOrderUnit> logOrderIdAndUnitMap,
|
|
|
Map<String, KwtLogisticsOrderAddress> logOrderIdAndAddressMap,
|
|
|
- Map<String, KwtWaybillOrderTicket> ticketMap) {
|
|
|
+ Map<String, KwtWaybillOrderTicket> ticketMap,
|
|
|
+ Map<Long, OrderDetailVo> tradeIdAndOrderDetailVoMap,
|
|
|
+ Map<Long, List<KwtLogisticsOrder>> tradeIdAndLogOrderList ,
|
|
|
+ Map<Long, List<KwtWaybillOrderSubtask>> logisticsOrderIdAndSubtaskList) {
|
|
|
WaybillOrderStatusResp wbOrderResp = new WaybillOrderStatusResp();
|
|
|
wbOrderResp.setId(wbOrder.getId());
|
|
|
wbOrderResp.setLogisticsOrderId(Optional.ofNullable(wbOrder.getLOrderId()).map(String::valueOf).orElse(null));
|
|
|
@@ -675,7 +696,8 @@ public class WaybillOrderService {
|
|
|
wbOrderResp.setLogisticsOrderNo(logOrder.getLOrderNo());
|
|
|
wbOrderResp.setChargeType(logOrder.getBillingMode());
|
|
|
wbOrderResp.setChargeTypeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), logOrder.getBillingMode()));
|
|
|
-
|
|
|
+ //设置余量
|
|
|
+ setSupAmount(wbOrder, logOrderMap, tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList, logisticsOrderIdAndSubtaskList, wbOrderResp);
|
|
|
//托运企业
|
|
|
KwtLogisticsOrderUnit consignEnt = logOrderIdAndUnitMap.getOrDefault(wbOrder.getLOrderId() + "-" + UnitTypeEnum.CONSIGN.getCode(), new KwtLogisticsOrderUnit());
|
|
|
wbOrderResp.setConsignCompanyId(Optional.ofNullable(consignEnt.getEntId()).map(String::valueOf).orElse(null));
|
|
|
@@ -751,6 +773,35 @@ public class WaybillOrderService {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ private static void setSupAmount(KwtWaybillOrder wbOrder, Map<Long, KwtLogisticsOrder> logOrderMap, Map<Long, OrderDetailVo> tradeIdAndOrderDetailVoMap, Map<Long, List<KwtLogisticsOrder>> tradeIdAndLogOrderList, Map<Long, List<KwtWaybillOrderSubtask>> logisticsOrderIdAndSubtaskList, WaybillOrderStatusResp wbOrderResp) {
|
|
|
+ KwtLogisticsOrder order = logOrderMap.getOrDefault(wbOrder.getLOrderId(), new KwtLogisticsOrder());
|
|
|
+ OrderDetailVo detailVo = tradeIdAndOrderDetailVoMap.getOrDefault(order.getTOrderId(), new OrderDetailVo());
|
|
|
+ BigDecimal tradeAmount = Optional.ofNullable(detailVo).map(OrderDetailVo::getAmount).orElse(BigDecimal.ZERO);
|
|
|
+ List<KwtLogisticsOrder> kwtLogisticsOrders = tradeIdAndLogOrderList.get(order.getTOrderId());
|
|
|
+ BigDecimal logTotatalAmount = BigDecimal.ZERO;
|
|
|
+ if (CollectionUtils.isNotEmpty(kwtLogisticsOrders)){
|
|
|
+ String billingMode = kwtLogisticsOrders.get(0).getBillingMode();
|
|
|
+
|
|
|
+ for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrders) {
|
|
|
+ List<KwtWaybillOrderSubtask> waybillOrderSubtasks = logisticsOrderIdAndSubtaskList.getOrDefault(kwtLogisticsOrder.getId(), new ArrayList<>());
|
|
|
+ if (StringUtils.equals(billingMode, DictEnum.CHARGING_TYPE_1.getValue())) {
|
|
|
+ BigDecimal loadAmountSum = waybillOrderSubtasks.stream()
|
|
|
+ .map(KwtWaybillOrderSubtask::getLoadAmount)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ logTotatalAmount = logTotatalAmount.add(loadAmountSum);
|
|
|
+ } else if (StringUtils.equals(billingMode, DictEnum.CHARGING_TYPE_2.getValue())) {
|
|
|
+ BigDecimal unloadAmountSum = waybillOrderSubtasks.stream()
|
|
|
+ .map(KwtWaybillOrderSubtask::getUnloadAmount)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ logTotatalAmount = logTotatalAmount.add(unloadAmountSum);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ wbOrderResp.setOrderSurplus(tradeAmount.subtract(logTotatalAmount).setScale(2, RoundingMode.HALF_UP).toPlainString());
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 运单统计
|
|
|
* @param param
|