|
@@ -295,4 +295,77 @@ public class TransportStatisticsServiceImpl implements TransportRemoteStatistics
|
|
|
private Date toDate(LocalDateTime dateTime) {
|
|
private Date toDate(LocalDateTime dateTime) {
|
|
|
return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
|
|
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;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|