|
|
@@ -3292,55 +3292,85 @@ public class KwtLogisticsConsignmentService {
|
|
|
return logisticsOrderCirculate;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 物流订单完结处理
|
|
|
+ *
|
|
|
+ * @param req 订单完结请求参数,包含贸易订单ID或物流订单ID
|
|
|
+ * @return 处理结果,true表示成功,false表示无需要更新的订单
|
|
|
+ * @throws BusinessException 当订单不存在或状态不允许完结时抛出异常
|
|
|
+ */
|
|
|
public Boolean logisticOrderFinish(OrderFinishReq req) {
|
|
|
log.info("物流订单-完结订单传递参数信息:{}", JSONObject.toJSONString(req));
|
|
|
+
|
|
|
+ // 查询物流订单:优先使用贸易订单ID查询,否则使用物流订单ID查询
|
|
|
List<KwtLogisticsOrder> logisticsOrder = Lists.newArrayList();
|
|
|
//根据运单号查询物流运单
|
|
|
if (Objects.nonNull(req.getTradeOrderId())) {
|
|
|
+ log.info("根据贸易订单ID查询物流订单,tradeOrderId:{}", req.getTradeOrderId());
|
|
|
logisticsOrder = logisticsOrderRepository.queryByTradeOrderId(req.getTradeOrderId());
|
|
|
} else {
|
|
|
- //查询物流订单
|
|
|
+ log.info("根据物流订单ID查询物流订单,logisticOrderId:{}", req.getLogisticOrderId());
|
|
|
logisticsOrder =
|
|
|
logisticsOrderRepository.queryByLogisticsOrderIds(req.getLogisticOrderId());
|
|
|
}
|
|
|
+
|
|
|
+ // 校验物流订单是否存在
|
|
|
if (CollectionUtils.isEmpty(logisticsOrder)) {
|
|
|
+ log.warn("未找到物流订单信息");
|
|
|
throw new BusinessException("未找到该物流订单信息");
|
|
|
}
|
|
|
List<KwtLogisticsOrder> logisticsOrders = Lists.newArrayList();
|
|
|
List<KwtLogisticsOrder> completedLogisticsOrders = Lists.newArrayList();
|
|
|
Set<Long> tradeIds = Sets.newHashSet();
|
|
|
logisticsOrder.forEach(x -> {
|
|
|
+ log.info("开始处理物流订单,订单编号:{},订单ID:{},当前状态:{}", x.getLOrderNo(), x.getId(), x.getStatus());
|
|
|
+
|
|
|
KwtLogisticsOrder updateLogisticsOrder = new KwtLogisticsOrder();
|
|
|
updateLogisticsOrder.setId(x.getId());
|
|
|
|
|
|
+ // 校验订单状态是否允许完结:只有待发货和运输中状态可以完结
|
|
|
if (!Arrays.asList(LogisticsOrderV1Enum.WAIT_DELIVERY.getCode(), LogisticsOrderV1Enum.IN_TRANSIT.getCode()).contains(x.getStatus())) {
|
|
|
- throw new BusinessException("该物流订单状态不能进行完结,订单编号,{},订单id:{}", x.getLOrderNo(), x.getId());
|
|
|
+ log.error("物流订单状态不允许完结,订单编号:{},订单ID:{},当前状态:{}", x.getLOrderNo(), x.getId(), x.getStatus());
|
|
|
+ throw new BusinessException(String.format("该物流订单状态不能进行完结,订单编号:%s,订单id:%d", x.getLOrderNo(), x.getId()));
|
|
|
}
|
|
|
+
|
|
|
+ // 处理待发货状态的订单:直接完结
|
|
|
if (Objects.equals(x.getStatus(), LogisticsOrderV1Enum.WAIT_DELIVERY.getCode())) {
|
|
|
+ log.info("物流订单为待发货状态,直接完结,订单编号:{}", x.getLOrderNo());
|
|
|
updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.COMPLETED.getCode());
|
|
|
completedLogisticsOrders.add(x);
|
|
|
logisticsOrders.add(updateLogisticsOrder);
|
|
|
tradeIds.add(x.getTOrderId());
|
|
|
return;
|
|
|
- // return logisticsOrderRepository.updateLogisticsOrder(updateLogisticsOrder);
|
|
|
}
|
|
|
|
|
|
//查询物流订单下的所有运单
|
|
|
List<KwtWaybillOrderSubtask> waybillOrderSubtasks = waybillOrderSubtaskRepository.queryByLogId(x.getId());
|
|
|
+ log.info("物流订单{}下查询到{}条运单子任务", x.getLOrderNo(),
|
|
|
+ waybillOrderSubtasks == null ? 0 : waybillOrderSubtasks.size());
|
|
|
+
|
|
|
+ // 如果没有运单子任务,直接完结物流订单
|
|
|
if (org.apache.commons.collections4.CollectionUtils.isEmpty(waybillOrderSubtasks)) {
|
|
|
+ log.info("物流订单无运单子任务,直接完结,订单编号:{}", x.getLOrderNo());
|
|
|
updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.COMPLETED.getCode());
|
|
|
completedLogisticsOrders.add(x);
|
|
|
logisticsOrders.add(updateLogisticsOrder);
|
|
|
tradeIds.add(x.getTOrderId());
|
|
|
}
|
|
|
+
|
|
|
+ // 如果有运单子任务且订单为运输中状态,检查所有运单是否都已完成或取消
|
|
|
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrderSubtasks) && Objects.equals(x.getStatus(), LogisticsOrderV1Enum.IN_TRANSIT.getCode())) {
|
|
|
boolean b = waybillOrderSubtasks.stream()
|
|
|
.anyMatch(y -> !Arrays.asList(CarWaybillV1Enum.COMPLETED.getCode(), CarWaybillV1Enum.CANCELLED.getCode()).contains(y.getStatus()));
|
|
|
|
|
|
if (b) {
|
|
|
+ // 存在未完成的运单,将物流订单状态更新为即将完结
|
|
|
+ log.info("物流订单存在未完成的运单,更新为完结中状态,订单编号:{}", x.getLOrderNo());
|
|
|
updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.NEARING_COMPLETION.getCode());
|
|
|
logisticsOrders.add(updateLogisticsOrder);
|
|
|
} else {
|
|
|
+ // 所有运单都已完成或取消,物流订单完结
|
|
|
+ log.info("物流订单所有运单均已完成或取消,物流订单完结,订单编号:{}", x.getLOrderNo());
|
|
|
updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.COMPLETED.getCode());
|
|
|
completedLogisticsOrders.add(x);
|
|
|
logisticsOrders.add(updateLogisticsOrder);
|
|
|
@@ -3353,12 +3383,16 @@ public class KwtLogisticsConsignmentService {
|
|
|
log.info("没有需要更新的物流订单");
|
|
|
return false;
|
|
|
}
|
|
|
+ log.info("开始批量更新{}条物流订单", logisticsOrders.size());
|
|
|
logisticsOrderRepository.updateBatchById(logisticsOrders);
|
|
|
+ log.info("批量更新物流订单成功");
|
|
|
|
|
|
calculateFreight(completedLogisticsOrders);
|
|
|
|
|
|
//更新贸易订单数据
|
|
|
// updateTradeOrder(tradeIds);
|
|
|
+
|
|
|
+ log.info("物流订单完结处理完成");
|
|
|
return Boolean.TRUE;
|
|
|
}
|
|
|
|