Sfoglia il codice sorgente

提交新增日志

chenxiaofei 15 ore fa
parent
commit
68682b9d1c

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

@@ -3563,6 +3563,7 @@ public class KwoTradeOrderService {
         try {
             transportRemoteService.logisticOrderFinish(new OrderFinishParam(tradeOrderSettleParam.getId()));
         } catch (BusinessException e) {
+            log.error("完结订单,通知下游物流订单已完结失败,订单ID:{}, 订单号:{}", kwoTradeOrder.getId(), kwoTradeOrder.getTOrderNo(), e);
             if (StrUtil.equals(e.getMsg(), "未找到该物流订单信息")) {
                 kwoTradeOrder.setUnloadAmount(new BigDecimal("0"));
                 kwoTradeOrder.setLoadAmount(new BigDecimal("0"));

+ 37 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

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