Bladeren bron

提交修改日志重量小数点

chenxiaofei 1 maand geleden
bovenliggende
commit
f13d986c7c

+ 55 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -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