Quellcode durchsuchen

新增服务费结算接口

donglang vor 6 Stunden
Ursprung
Commit
ece38cef6c

+ 10 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteStatisticsService.java

@@ -65,4 +65,14 @@ public interface TransportRemoteStatisticsService {
     BigDecimal sumCompletedWaybillVolumeByTimeRange(Long tradeOrderId, Integer chargeType,
                                                     LocalDateTime startTime, LocalDateTime endTime);
 
+
+    /**
+     * 按时间范围汇总贸易订单已完成运单的完成量。
+     *
+     * @param tradeOrderId 贸易订单ID
+     * @param chargeTyp 计费方式:1-装货量,2-卸货量
+     * @return 完成量
+     */
+    BigDecimal sumCompletedWaybillVolumeByTimeRange(Long tradeOrderId, Integer chargeTyp);
+
 }

+ 1 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -3225,8 +3225,7 @@ public class KwoTradeOrderService {
      */
     private BigDecimal queryTransportNetWeight(KwoTradeOrder order) {
         try {
-            return Optional.ofNullable(transportRemoteStatisticsService.sumCompletedWaybillVolumeByTimeRange(
-                            order.getId(), order.getChargeType(), null, null))
+            return Optional.ofNullable(transportRemoteStatisticsService.sumCompletedWaybillVolumeByTimeRange(order.getId(), order.getChargeType()))
                     .orElse(BigDecimal.ZERO);
         } catch (Exception e) {
             log.error("查询贸易订单运输净重量失败,订单ID:{}, 订单号:{}, 计费方式:{}",

+ 73 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportStatisticsServiceImpl.java

@@ -295,4 +295,77 @@ public class TransportStatisticsServiceImpl implements TransportRemoteStatistics
     private Date toDate(LocalDateTime dateTime) {
         return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
     }
+
+
+    @Override
+    public BigDecimal sumCompletedWaybillVolumeByTimeRange(Long tradeOrderId, Integer chargeType) {
+        log.info("汇总贸易订单已完成运单运输净重量开始,贸易订单ID:{}, 计费方式:{}",
+                tradeOrderId, chargeType);
+
+        if (Objects.isNull(tradeOrderId)) {
+            log.warn("汇总运输净重量失败,贸易订单ID为空");
+            throw new BusinessException("贸易订单ID不能为空");
+        }
+        if (Objects.isNull(chargeType)) {
+            log.warn("汇总运输净重量失败,计费方式为空,贸易订单ID:{}", tradeOrderId);
+            throw new BusinessException("计费方式不能为空");
+        }
+        if (!Objects.equals(chargeType, NumberConstant.ONE) && !Objects.equals(chargeType, NumberConstant.TWO)) {
+            log.warn("汇总运输净重量跳过,计费方式不支持,贸易订单ID:{}, 计费方式:{}", tradeOrderId, chargeType);
+            return BigDecimal.ZERO;
+        }
+
+        // 第一步:查询贸易订单关联的有效物流订单
+        List<Long> logisticsOrderIds = listLogisticsOrderIdsByTradeOrderId(tradeOrderId);
+        if (CollectionUtils.isEmpty(logisticsOrderIds)) {
+            log.info("汇总运输净重量结束,未找到关联物流订单,贸易订单ID:{}, 合计净重量:0", tradeOrderId);
+            return BigDecimal.ZERO;
+        }
+        log.info("查询到关联物流订单,贸易订单ID:{}, 物流订单数量:{}", tradeOrderId, logisticsOrderIds.size());
+
+        // 第二步:筛选已完成运单,可选按完成时间过滤
+        QueryWrapper<KwtWaybillOrder> waybillWrapper = new QueryWrapper<KwtWaybillOrder>()
+                .select("id")
+                .eq("del_flag", Global.NO)
+                .in("l_order_id", logisticsOrderIds)
+                .eq("status", CarWaybillV1Enum.COMPLETED.getCode());
+
+        List<Long> waybillOrderIds = Optional.ofNullable(waybillOrderMapper.selectList(waybillWrapper))
+                .orElse(Collections.emptyList())
+                .stream()
+                .map(KwtWaybillOrder::getId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(waybillOrderIds)) {
+            log.info("汇总运输净重量结束,未找到已完成运单,贸易订单ID:{}, 计费方式:{}, 合计净重量:0",
+                    tradeOrderId, chargeType);
+            return BigDecimal.ZERO;
+        }
+        log.info("查询到已完成运单,贸易订单ID:{}, 已完成运单数量:{}", tradeOrderId, waybillOrderIds.size());
+
+        // 第三步:汇总运单子任务装/卸货净重
+        QueryWrapper<KwtWaybillOrderSubtask> subtaskWrapper = new QueryWrapper<KwtWaybillOrderSubtask>()
+                .eq("del_flag", Global.NO)
+                .in("w_order_id", waybillOrderIds);
+        if (Objects.equals(chargeType, NumberConstant.ONE)) {
+            subtaskWrapper.select("load_amount")
+                    .isNotNull("load_amount");
+        } else {
+            subtaskWrapper.select("unload_amount")
+                    .isNotNull("unload_amount");
+        }
+
+        BigDecimal totalVolume = Optional.ofNullable(waybillOrderSubtaskMapper.selectList(subtaskWrapper))
+                .orElse(Collections.emptyList())
+                .stream()
+                .map(item -> Objects.equals(chargeType, NumberConstant.ONE) ? item.getLoadAmount() : item.getUnloadAmount())
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        String volumeType = Objects.equals(chargeType, NumberConstant.ONE) ? "装货净重" : "卸货净重";
+        log.info("汇总贸易订单已完成运单运输净重量完成,贸易订单ID:{}, 计费方式:{}, 净重类型:{}, 合计净重量:{}",
+                tradeOrderId, chargeType, volumeType, totalVolume);
+        return totalVolume;
+    }
 }