Jelajahi Sumber

Merge remote-tracking branch 'origin/dev_20260131' into dev_20260131_youshen430

# Conflicts:
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/ComeIntoHandler.java
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderStatusResp.java
donglang 1 bulan lalu
induk
melakukan
7604549269

+ 100 - 40
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/ComeIntoHandler.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.exception.BusinessPlatfromException;
+import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.*;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.DateUtils;
@@ -290,55 +291,97 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
         if (waybillSubtask.getEntrustAmount() == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.SYSTEM_ERROR, "[称重过磅]子运单任务量信息缺失!");
         }
+        //任务量
+        BigDecimal entrustAmount = waybillSubtask.getEntrustAmount();
+        //法定载重
+        BigDecimal truckStandardLoad = getTruckStandardLoad(param.getTruckNo());
 
+        // 校验铲车司机
         KwtForkliftWaybillOrder forklift = forkliftWaybillOrderRepository.queryForkliftWaybillOrderByWOrderId(waybillOrder.getId());
+
+        //1. 铲车司机已接单,运单什么都不展示
         if (Objects.equals(forklift.getStatus(), ForkliftStatusEnum.ORDER_TAKING.getCode())) {
             //如果铲车司机已接单,则二次过磅的时候,直接返回,不走其它流程
             return;
         }
 
-        BigDecimal entrustAmount = waybillSubtask.getEntrustAmount();
-        //场景一:净重<-0.5
-        if (loadAmount.compareTo(BigDecimal.valueOf(-0.5)) < 0) {
-            //什么不展示
-            return;
-        }
-        //场景二:空载离场,-0.5<=净重<=0.5
-        if (loadAmount.compareTo(BigDecimal.valueOf(0.5)) <= 0) {
-            waybillOrder.setTargetStatus(1);
-            return;
+        //2. 铲车司机待接单,只分为“空载离场”和“其它情况”(什么不展示)
+        if (Objects.equals(forklift.getStatus(), ForkliftStatusEnum.PENDING_ORDERS.getCode())) {
+            //场景一. 空载离场,-0.5<=净重<=0.5
+            if (loadAmount.compareTo(BigDecimal.valueOf(-0.5)) >= 0 && loadAmount.compareTo(BigDecimal.valueOf(0.5)) <= 0) {
+                waybillOrder.setTargetStatus(1);
+                return;
+            } else {
+                //场景二.非空载离场,什么都不展示
+                return;
+            }
         }
 
-        if (Objects.equals(forklift.getStatus(), ForkliftStatusEnum.PENDING_ORDERS.getCode())) {
-            //如果铲车司机未接单,则二次过磅的时候,非空载情况,必须校验是否完成装载
-            if (!Objects.equals(CarWaybillV1Enum.EXIT_COMPLETED.getCode(), waybillOrder.getStatus())
-                    && !Objects.equals(CarWaybillV1Enum.REPLENISH_FINISH.getCode(), waybillOrder.getStatus())
-                    && !Objects.equals(CarWaybillV1Enum.WAIT_LEAVE.getCode(), waybillOrder.getStatus())
-                    && !Objects.equals(CarWaybillV1Enum.UNLOADING.getCode(), waybillOrder.getStatus())) {
-                //什么不展示
+        //3.铲车司机完成装载,是什么流程就是什么流程,按照最新一次过磅为准
+        if (Objects.equals(forklift.getStatus(), ForkliftStatusEnum.COMPLETED.getCode())) {
+            //场景一:净重<-0.5,什么不展示
+            if (loadAmount.compareTo(BigDecimal.valueOf(-0.5)) < 0) {
                 return;
             }
-        } else {
-            //如果铲车司机完成装载,则二次过磅的时候,已最新的一次称重为准
-            if (!Objects.equals(CarWaybillV1Enum.EXIT_COMPLETED.getCode(), waybillOrder.getStatus())
-                    && !Objects.equals(CarWaybillV1Enum.EMPTY_WAIT_LEAVE.getCode(), waybillOrder.getStatus())
-                    && !Objects.equals(CarWaybillV1Enum.REPLENISH_FINISH.getCode(), waybillOrder.getStatus())
-                    && !Objects.equals(CarWaybillV1Enum.WAIT_LEAVE.getCode(), waybillOrder.getStatus())
-                    && !Objects.equals(CarWaybillV1Enum.UNLOADING.getCode(), waybillOrder.getStatus())) {
+
+            //场景二:空载离场,-0.5<=净重<=0.5
+            if (loadAmount.compareTo(BigDecimal.valueOf(0.5)) <= 0) {
+                waybillOrder.setTargetStatus(1);
+                return;
+            }
+
+            // 场景三:超载流程, 净重>任务量或者毛重>法定载重
+            if (loadAmount.compareTo(entrustAmount) > 0 || param.getWeighAmount().compareTo(truckStandardLoad) > 0) {
+                waybillOrder.setTargetStatus(3);
                 return;
             }
+            // 场景四:正常流程,0.5<净重<=任务量
+            waybillOrder.setTargetStatus(2);
         }
 
-        //法定载重
-        BigDecimal truckStandardLoad = getTruckStandardLoad(param.getTruckNo());
-        // 场景三:超载流程, 净重>任务量或者毛重>法定载重
+
+//        //场景一:净重<-0.5
+//        if (loadAmount.compareTo(BigDecimal.valueOf(-0.5)) < 0) {
+//            return;
+//        }
+//        //场景二:空载离场,-0.5<=净重<=0.5
+//        if (loadAmount.compareTo(BigDecimal.valueOf(0.5)) <= 0) {
+//            waybillOrder.setTargetStatus(1);
+//            return;
+//        }
+//
+//        if (Objects.equals(forklift.getStatus(), ForkliftStatusEnum.PENDING_ORDERS.getCode())) {
+//            //如果铲车司机未接单,则二次过磅的时候,非空载情况,必须校验是否完成装载
+//            //场景:铲车未接单,司机第一次空载离场,第二次空载离场,还是展示空载,其它什么不展示。(就是没有完成装货就什么都不展示)
+//            if (!Objects.equals(CarWaybillV1Enum.EXIT_COMPLETED.getCode(), waybillOrder.getStatus())
+//                    && !Objects.equals(CarWaybillV1Enum.REPLENISH_FINISH.getCode(), waybillOrder.getStatus())
+//                    && !Objects.equals(CarWaybillV1Enum.WAIT_LEAVE.getCode(), waybillOrder.getStatus())
+//                    && !Objects.equals(CarWaybillV1Enum.UNLOADING.getCode(), waybillOrder.getStatus())) {
+//                //什么不展示
+//                return;
+//            }
+//        } else {
+//            //如果铲车司机完成装载,则二次过磅的时候,已最新的一次称重为准
+//            //场景:铲车未接单,司机第一次空载离场,然后铲车装货完成。 二次过磅,是什么流程就是什么流程
+//            if (!Objects.equals(CarWaybillV1Enum.EXIT_COMPLETED.getCode(), waybillOrder.getStatus())
+//                    && !Objects.equals(CarWaybillV1Enum.EMPTY_WAIT_LEAVE.getCode(), waybillOrder.getStatus())
+//                    && !Objects.equals(CarWaybillV1Enum.REPLENISH_FINISH.getCode(), waybillOrder.getStatus())
+//                    && !Objects.equals(CarWaybillV1Enum.WAIT_LEAVE.getCode(), waybillOrder.getStatus())
+//                    && !Objects.equals(CarWaybillV1Enum.UNLOADING.getCode(), waybillOrder.getStatus())) {
+//                return;
+//            }
+//        }
+//
+//        //法定载重
+//        BigDecimal truckStandardLoad = getTruckStandardLoad(param.getTruckNo());
+//        // 场景三:超载流程, 净重>任务量或者毛重>法定载重
 //        if (loadAmount.compareTo(entrustAmount) > 0 || param.getWeighAmount().compareTo(truckStandardLoad) > 0) {
 //            waybillOrder.setTargetStatus(3);
 //            return;
 //        }
-
-        // 场景四:正常流程,0.5<净重<=任务量
-        waybillOrder.setTargetStatus(2);
+//
+//        // 场景四:正常流程,0.5<净重<=任务量
+//        waybillOrder.setTargetStatus(2);
 
     }
 
@@ -366,17 +409,34 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
         // 校验是否第一次过磅
         if (checkIsFirst(waybillOrder)) {
             status = CarWaybillV1Enum.REFUSE_TRAFFIC.getCode();
-        } else {
-            if (waybillOrder.getTargetStatus() == null) {
-                return;
-            }
-            status = switch (waybillOrder.getTargetStatus()) {
-                case 1 -> CarWaybillV1Enum.EMPTY_WAIT_LEAVE.getCode();
-                case 2 -> CarWaybillV1Enum.WAIT_LEAVE.getCode();
-//                case 3 -> CarWaybillV1Enum.UNLOADING.getCode();
-                default -> -1;
-            };
+            updateOrderStatus(waybillOrder, status);
+            return;
         }
+        // 后续过磅,只更新label
+        if (waybillOrder.getTargetStatus() == null) {
+            waybillOrder.setLabel(Global.NUMERICAL_ONE);
+            waybillOrderRepository.updateById(waybillOrder);
+            return;
+
+        }
+
+        waybillOrder.setLabel(Global.NUMERICAL_ZERO);
+        status = switch (waybillOrder.getTargetStatus()) {
+            case 1 -> CarWaybillV1Enum.EMPTY_WAIT_LEAVE.getCode();
+            case 2 -> CarWaybillV1Enum.WAIT_LEAVE.getCode();
+            case 3 -> CarWaybillV1Enum.UNLOADING.getCode();
+            default -> -1;
+        };
+
+        updateOrderStatus(waybillOrder, status);
+    }
+
+    /**
+     * 修改运单状态
+     * @param waybillOrder
+     * @param status
+     */
+    private void updateOrderStatus(KwtWaybillOrder waybillOrder, Integer status) {
         // 1. 修改运单状态
         waybillOrder.setStatus(status);
         waybillOrderRepository.updateById(waybillOrder);

+ 5 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrder.java

@@ -177,6 +177,11 @@ public class KwtWaybillOrder implements Serializable {
      */
     private Integer dispatchWay;
 
+    /**
+     * 标签
+     */
+    private Integer label;
+
     //用于存储动态状态
     @TableField(exist = false)
     private Integer targetStatus;

+ 5 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderStatusResp.java

@@ -223,4 +223,9 @@ public class WaybillOrderStatusResp implements Serializable {
     @Schema(description = "订单类型(1-原矿转运)")
     private Integer orderType;
 
+
+    /**
+     * 标签
+     */
+    private Integer label;
 }

+ 6 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderDetailResp.java

@@ -253,6 +253,12 @@ public class WaybillOrderDetailResp implements Serializable {
      */
     @Schema(description = "单据信息")
     private BillInfo billInfo;
+
+    /**
+     * 标签
+     */
+    private Integer label;
+
     /**
      * 运单id列表
      */

+ 7 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtForkliftWaybillOrderRepository.java

@@ -65,6 +65,13 @@ public class KwtForkliftWaybillOrderRepository extends ServiceImpl<KwtForkliftWa
                 .last("limit 1"));
     }
 
+    public List<KwtForkliftWaybillOrder> queryForkliftWaybillOrdersByWOrderId(Long wOrderId) {
+        return list(Wrappers.<KwtForkliftWaybillOrder>lambdaQuery()
+                .eq(KwtForkliftWaybillOrder::getWOrderId, wOrderId)
+                .orderByDesc(KwtForkliftWaybillOrder::getId)
+                .orderByDesc(KwtForkliftWaybillOrder::getCreateTime));
+    }
+
 
 
 

+ 3 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -4631,6 +4631,7 @@ public class KwtWaybillOrderV1Service {
         resp.setPriceType(String.valueOf(logOrder.getBillingMode()));
         resp.setPriceTypeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), logOrder.getBillingMode()));
         resp.setRemark(billOrder.getRemark());
+        resp.setLabel(billOrder.getLabel());
         // 票据信息
         String shipmentTicketKey = subtask.getWOrderId() + "-" + AddressTypeEnum.SHIPMENT.getCode();
         KwtWaybillOrderTicket tareAmountTicket = ticketMap.getOrDefault(shipmentTicketKey, new KwtWaybillOrderTicket());
@@ -4725,7 +4726,8 @@ public class KwtWaybillOrderV1Service {
 
         // 状态信息
         resp.setStatus(subtask.getStatus());
-        resp.setStatusDesc(CarWaybillV1Enum.geDesc(subtask.getStatus()));
+        resp.setStatusDesc(Objects.equals(subtask.getStatus(), CarWaybillV1Enum.COMPLETED.getCode())
+                && Objects.equals(subtask.getRemark(), "空载离场") ? "空载完成" : CarWaybillV1Enum.geDesc(subtask.getStatus()));
         resp.setLegalLoad(Objects.isNull( truck)  ? null:truck.getLegalLoad());
 
         // 计算装货完成率

+ 44 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/ForkliftOrderService.java

@@ -10,6 +10,7 @@ import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.model.enums.ForkliftStatusEnum;
 import com.sckw.core.model.enums.LoadingTypeEnum;
 import com.sckw.core.utils.CollectionUtils;
@@ -695,11 +696,54 @@ public class ForkliftOrderService {
         forkliftWaybillOrder.setForkliftAcceptTime(new Date());
         forkliftWaybillOrderRepository.updateById(forkliftWaybillOrder);
 
+        //修改司机状态
+        updateWaybillOrder(forkliftWaybillOrder);
+
         // 创建司机日志记录
         creatWaybillOrderNode(param, forkliftWaybillOrder);
         log.info("铲车接单成功,订单ID:{}", forkliftWaybillOrder.getWOrderId());
     }
 
+    /**
+     * 修改司机状态
+     * @param forkliftWaybillOrder
+     */
+    private void updateWaybillOrder(KwtForkliftWaybillOrder forkliftWaybillOrder) {
+        // 修改运单状态
+        updateWaybillStatus(forkliftWaybillOrder);
+
+        // 修改子运单状态
+        updateWaybillSubtaskStatus(forkliftWaybillOrder);
+    }
+
+
+    /**
+     * 修改运单状态
+     * @param forkliftWaybillOrder
+     */
+    private void updateWaybillStatus(KwtForkliftWaybillOrder forkliftWaybillOrder) {
+        KwtWaybillOrder waybillOrder = waybillOrderRepository.getById(forkliftWaybillOrder.getWOrderId());
+        if (waybillOrder == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前运单数据不存在!");
+        }
+
+        waybillOrder.setStatus(CarWaybillV1Enum.REFUSE_TRAFFIC.getCode());
+        waybillOrderRepository.updateById(waybillOrder);
+    }
+
+    /**
+     * 修改子运单状态
+     * @param forkliftWaybillOrder
+     */
+    private void updateWaybillSubtaskStatus(KwtForkliftWaybillOrder forkliftWaybillOrder) {
+        KwtWaybillOrderSubtask waybillSubtask = waybillOrderSubtaskRepository.queryByWOrderId(forkliftWaybillOrder.getWOrderId());
+        if (waybillSubtask == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_SUB_NOT_FOUND, "未找到关联的子运单!");
+        }
+        waybillSubtask.setStatus(CarWaybillV1Enum.REFUSE_TRAFFIC.getCode());
+        waybillOrderSubtaskRepository.updateById(waybillSubtask);
+    }
+
     /**
      * 创建日子轨迹记录
      * @param param

+ 6 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -1084,6 +1084,7 @@ public class WaybillOrderService {
         wbOrderResp.setLogisticsOrderId(Optional.ofNullable(wbOrder.getLOrderId()).map(String::valueOf).orElse(null));
         wbOrderResp.setWaybillNo(wbOrder.getWOrderNo());
         wbOrderResp.setRemark(wbOrder.getRemark());
+        wbOrderResp.setLabel(wbOrder.getLabel());
         //装货、卸货净重、任务量
         KwtWaybillOrderSubtask subtask = subtaskMap.getOrDefault(wbOrder.getId(), new KwtWaybillOrderSubtask());
         wbOrderResp.setLoadingNetWeight(subtask.getLoadAmount());
@@ -1162,7 +1163,11 @@ public class WaybillOrderService {
         } else if (Objects.equals(wbOrder.getStatus(), CarWaybillV1Enum.COMPLETION_LOADING.getCode())) {
             wbOrderResp.setStatusDesc("待审核");
         } else if (Objects.equals(wbOrder.getStatus(), CarWaybillV1Enum.COMPLETED.getCode())) {
-            wbOrderResp.setStatusDesc("已完成");
+            if (Objects.equals(subtask.getRemark(), "空载离场")) {
+                wbOrderResp.setStatusDesc("空载完成");
+            } else {
+                wbOrderResp.setStatusDesc("已完成");
+            }
         } else if (Objects.equals(wbOrder.getStatus(), CarWaybillV1Enum.REVIEW_REJECTION.getCode())) {
             wbOrderResp.setStatusDesc("待修改");
         } else if (Objects.equals(wbOrder.getStatus(), CarWaybillV1Enum.CANCELLED.getCode())) {