Kaynağa Gözat

提交修改日志重量小数点

chenxiaofei 6 ay önce
ebeveyn
işleme
69446c91ed

+ 3 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/repository/KwsEntTypeRepository.java

@@ -21,6 +21,7 @@ public class KwsEntTypeRepository extends ServiceImpl<KwsEntTypeDao, KwsEntType>
     public List<KwsEntType> queryByEntIdsAndType(Set<Long> entIds, List<String> entTypes) {
         return list(Wrappers.<KwsEntType>lambdaQuery()
                 .eq(BaseModel::getDelFlag,0)
+                .eq(BaseModel::getStatus,0)
                 .in(KwsEntType::getEntId, entIds)
                 .in(KwsEntType::getType, entTypes));
     }
@@ -28,6 +29,7 @@ public class KwsEntTypeRepository extends ServiceImpl<KwsEntTypeDao, KwsEntType>
     public List<KwsEntType> queryByType(List<String> entTypes) {
         return list(Wrappers.<KwsEntType>lambdaQuery()
                 .eq(BaseModel::getDelFlag,0)
+                .eq(BaseModel::getStatus,0)
                 .in(KwsEntType::getType, entTypes));
     }
 
@@ -40,6 +42,7 @@ public class KwsEntTypeRepository extends ServiceImpl<KwsEntTypeDao, KwsEntType>
     public List<KwsEntType> queryByEntIds(Set<Long> entIds) {
         return list(Wrappers.<KwsEntType>lambdaQuery()
                 .eq(BaseModel::getDelFlag,0)
+                .eq(BaseModel::getStatus,0)
                 .in(KwsEntType::getEntId, entIds));
     }
 }

+ 68 - 7
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -2541,15 +2541,27 @@ public class KwtLogisticsConsignmentService {
         //根据物流订单号查询运单信息
         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,
-                logOrderIdAndUnitTypeKeyAndAddressMap, waybillOrderSubtasks);
+                logOrderIdAndUnitTypeKeyAndAddressMap, waybillOrderSubtasks, logOrderList,orderDetailVo);
 
     }
 
     @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();
         //设置合同信息
         setContractInfo(orderContract, tradeContractResDto,logisticsOrderDetailResp);
@@ -2563,7 +2575,7 @@ public class KwtLogisticsConsignmentService {
         setAddressInfo(logOrderIdAndUnitTypeKeyAndAddressMap, logisticsOrder, logisticsOrderDetailResp);
 
         //设置履约信息
-        setPerformInfo(logisticsOrder, waybillOrderSubtasks, logisticsOrderDetailResp);
+        setPerformInfo(logisticsOrder, waybillOrderSubtasks, logisticsOrderDetailResp,logOrderList, orderDetailVo);
 
         //设置物流信息
         setLogisticInfo(logisticsOrder,logisticsOrderDetailResp);
@@ -2580,7 +2592,11 @@ public class KwtLogisticsConsignmentService {
         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();
         performanceInfoVO.setBillingMode(logisticsOrder.getBillingMode());
         performanceInfoVO.setBillingModeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
@@ -2613,12 +2629,57 @@ public class KwtLogisticsConsignmentService {
                     BigDecimal.ZERO;
         }
         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);
     }
 
+    @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) {
         LogisticsOrderDetailResp.LoadingInfoVO loadingInfoVO = new LogisticsOrderDetailResp.LoadingInfoVO();
         KwtLogisticsOrderAddress loadAdd = logOrderIdAndUnitTypeKeyAndAddressMap.getOrDefault(logisticsOrder.getId() + "-" + AddressTypeEnum.SHIPMENT.getCode(),