Răsfoiți Sursa

友盛功能

donglang 1 lună în urmă
părinte
comite
b23f1efe09

+ 20 - 32
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/GatekeeperStatusEnum.java

@@ -17,58 +17,32 @@ public enum GatekeeperStatusEnum {
     /**
      * 待进场
      */
-    PENDING_ENTRY(1,  "待进场"),
+    PENDING_ENTRY(1,  "待进场",  "卸货待进场"),
 
     /**
      * 已进场
      */
-    IN_YARD(5,  "已进场"),
+    IN_YARD(5,  "已进场",  "卸货已进场"),
 
     /**
      * 待放行
      */
-    PENDING_RELEASE(10, "待放行"),
+    PENDING_RELEASE(10, "待放行", "卸货待放行"),
 
     /**
      * 已放行
      */
-    READY_RELEASE(15, "已放行"),
+    READY_RELEASE(15, "已放行", "卸货已放行"),
 
     /**
      * 已离场
      */
-    EXITED(20, "已离场"),
+    EXITED(20, "已离场", "卸货已离场"),
 
     /**
      * 空载离场
      */
-    EMPTY_EXITED(25, "空载离场"),
-
-
-    /**
-     * 卸货待进场
-     */
-    UNLOADING_PENDING_ENTRY(30,  "卸货待进场"),
-
-    /**
-     * 卸货已进场
-     */
-    UNLOADING_IN_YARD(35,  "卸货已进场"),
-
-    /**
-     * 卸货待放行
-     */
-    UNLOADING_WAIT_RELEASE(40, "卸货待放行"),
-
-    /**
-     * 卸货已放行
-     */
-    UNLOADING_READY_RELEASE(45, "卸货已放行"),
-
-    /**
-     * 卸货已离场
-     */
-    UNLOADING_EXITED(50, "卸货已离场"),
+    EMPTY_EXITED(25, "空载离场", "空载离场"),
 
 
     ;
@@ -77,6 +51,8 @@ public enum GatekeeperStatusEnum {
 
     private final String destination;
 
+    private final String description;
+
 
     public static String getDesc(Integer status) {
         if (status == null) {
@@ -90,4 +66,16 @@ public enum GatekeeperStatusEnum {
         return null;
     }
 
+    public static String getDescription(Integer status) {
+        if (status == null) {
+            return null;
+        }
+        for (GatekeeperStatusEnum forkliftStatusEnum : EnumSet.allOf(GatekeeperStatusEnum.class)) {
+            if (forkliftStatusEnum.code.equals(status)) {
+                return forkliftStatusEnum.description;
+            }
+        }
+        return null;
+    }
+
 }

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/LiftRodReleaseHandler.java

@@ -126,7 +126,8 @@ public class LiftRodReleaseHandler extends AbstractWaybillOrderHandler<WaybillOr
                     gatekeeper.setGoodsName(orderGoods.getGoodsName());
                 }
                 gatekeeper.setWaybillAcceptTime(waybillOrder.getCreateTime());
-                gatekeeper.setStatus(GatekeeperStatusEnum.UNLOADING_PENDING_ENTRY.getCode());
+                gatekeeper.setType(GatekeeperTypeEnum.UNLOADING.getCode());
+                gatekeeper.setStatus(GatekeeperStatusEnum.PENDING_ENTRY.getCode());
                 gatekeeper.setWaybillAcceptTime(waybillOrder.getCreateTime());
                 gatekeeper.setTruckType(truck.getTruckType());
                 gatekeeper.setEntrustAmount(waybillSubtask.getEntrustAmount());

+ 8 - 13
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/UnloadingLeavedHandler.java

@@ -6,7 +6,7 @@ import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.model.enums.GatekeeperStatusEnum;
-import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.model.enums.GatekeeperTypeEnum;
 import com.sckw.transport.model.KwtGatekeeperWaybillOrder;
 import com.sckw.transport.model.KwtWaybillOrder;
 import com.sckw.transport.model.KwtWaybillOrderSubtask;
@@ -14,7 +14,6 @@ import com.sckw.transport.model.param.WaybillOrderUnLoadingLeaveParam;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
 import java.util.Objects;
 
 /**
@@ -36,7 +35,7 @@ public class UnloadingLeavedHandler extends AbstractWaybillOrderHandler<WaybillO
     @Override
     protected void checkState(WaybillOrderUnLoadingLeaveParam param, KwtWaybillOrder waybillOrder) {
         if (!Objects.equals(CarWaybillV1Enum.UNLOADING_WAIT_LEAVE.getCode(), waybillOrder.getStatus())) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "运单状态不是“待离场”状态, 无法推进下一节点!");
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "运单状态不是“卸货待离场”状态, 无法推进下一节点!");
         }
     }
 
@@ -54,21 +53,17 @@ public class UnloadingLeavedHandler extends AbstractWaybillOrderHandler<WaybillO
      * @return
      */
     public void updateGatekeeperOrderStatus(KwtWaybillOrder waybillOrder) {
-        List<KwtGatekeeperWaybillOrder> gatekeeperList = gatekeeperWaybillOrderRepository
-                .queryGatekeeperWaybillOrdersByWOrderId(waybillOrder.getId());
-        if (CollectionUtils.isEmpty(gatekeeperList)) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "当前门卫卸货订单数据不存在!");
-        }
-        //获取卸货门卫订单
-        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperList.stream()
-                .filter(gate -> Objects.equals(gate.getStatus(), GatekeeperStatusEnum.UNLOADING_IN_YARD.getCode()))
-                .findFirst().orElse(null);
+        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperWaybillOrderRepository
+                .queryGatekeeperWaybillOrderByWOrderId(waybillOrder.getId(), GatekeeperTypeEnum.UNLOADING.getCode());
         if (gatekeeper == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "当前门卫卸货订单数据不存在!");
         }
+        if (!Objects.equals(gatekeeper.getStatus(), GatekeeperStatusEnum.IN_YARD.getCode())) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_STATUS_ERROR, "门卫状态不是“卸货已进场”状态, 无法推进下一节点!!");
+        }
 
         //修改门卫:卸货待放行
-        gatekeeper.setStatus(GatekeeperStatusEnum.UNLOADING_WAIT_RELEASE.getCode());
+        gatekeeper.setStatus(GatekeeperStatusEnum.PENDING_RELEASE.getCode());
         gatekeeperWaybillOrderRepository.updateById(gatekeeper);
     }
 

+ 134 - 8
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/UnloadingWeighHandler.java

@@ -4,14 +4,21 @@ package com.sckw.transport.handler;
 import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
-import com.sckw.transport.model.KwtWaybillOrder;
-import com.sckw.transport.model.KwtWaybillOrderSubtask;
-import com.sckw.transport.model.KwtWaybillOrderTicket;
+import com.sckw.core.model.enums.GatekeeperStatusEnum;
+import com.sckw.core.model.enums.GatekeeperTypeEnum;
+import com.sckw.core.utils.StringUtils;
+import com.sckw.transport.model.*;
+import com.sckw.transport.model.enuma.WeighbridgeTypeEnum;
 import com.sckw.transport.model.param.WaybillOrderUnloadingWeighParam;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.CompletableFuture;
 
 /**
  * Author: donglang
@@ -31,8 +38,8 @@ public class UnloadingWeighHandler extends AbstractWaybillOrderHandler<WaybillOr
 
     @Override
     protected void checkState(WaybillOrderUnloadingWeighParam param, KwtWaybillOrder waybillOrder) {
-        if (!Objects.equals(CarWaybillV1Enum.WAIT_LOADING.getCode(), waybillOrder.getStatus())) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "运单状态不是“已离场”状态,无法推进下一节点!");
+        if (StringUtils.isBlank(param.getTruckNo())) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "车牌号不能为空!");
         }
     }
 
@@ -42,10 +49,125 @@ public class UnloadingWeighHandler extends AbstractWaybillOrderHandler<WaybillOr
         if (takeTicket == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_TICKET_NOT_FOUND, "当前物流运单卸货单信息不存在,无法记录毛重!");
         }
+        //校验是否第一次卸货过磅
+        if (checkIsFirst(waybillOrder)) {
+            //第一次卸货过磅
+            firstWeighbridge(param, waybillOrder, takeTicket);
+        } else {
+            //第二次过磅
+            laterWeighbridge(param,waybillOrder, takeTicket);
+        }
+
+    }
+
+    /**
+     * 校验是否第一次过磅
+     * @param waybillOrder
+     * @return
+     */
+    private Boolean checkIsFirst(KwtWaybillOrder waybillOrder) {
+        List<KwtWaybillOrderWeighbridge> weighbridges = waybillOrderWeighbridgeRepository
+                .queryWaybillOrderWeighbridgeByWOrderId(waybillOrder.getId(), WeighbridgeTypeEnum.UNLOADING.getCode());
+        return CollectionUtils.isEmpty(weighbridges);
+    }
+
+    /**
+     * 第一次过磅
+     * @param param
+     */
+    private void firstWeighbridge(WaybillOrderUnloadingWeighParam param, KwtWaybillOrder waybillOrder, KwtWaybillOrderTicket takeTicket) {
+        if (param.getGrossAmount() == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "毛重不能为空!");
+        }
+        // 校验运单
+        if (!Objects.equals(CarWaybillV1Enum.WAIT_LOADING.getCode(), waybillOrder.getStatus())) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "当前物流运单状态不是“已离场”状态,无法卸货称重过磅!");
+        }
+
+        // 1. 填充毛重
+        updateWaybillTicketGrossAmount(param, takeTicket);
+
+        // 2.修改门卫卸货状态:卸货已进场
+        updateGatekeeperOrderStatus(waybillOrder);
+
+        // 3.创建卸货过磅记录
+        createWeighbridges(waybillOrder);
+    }
+
+    /**
+     * 填充毛重
+     * @param param
+     */
+    private void updateWaybillTicketGrossAmount(WaybillOrderUnloadingWeighParam param, KwtWaybillOrderTicket takeTicket) {
         //填充卸货单毛重
         takeTicket.setGrossAmount(param.getGrossAmount());
         waybillOrderTicketRepository.updateById(takeTicket);
+    }
+
+    /**
+     * 修改门卫卸货状态:卸货已进场
+     * @param waybillOrder
+     * @return
+     */
+    public void updateGatekeeperOrderStatus(KwtWaybillOrder waybillOrder) {
+        KwtGatekeeperWaybillOrder gatekeeper = gatekeeperWaybillOrderRepository
+                .queryGatekeeperWaybillOrderByWOrderId(waybillOrder.getId(), GatekeeperTypeEnum.UNLOADING.getCode());
+        if (gatekeeper == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_NOT_FOUND, "当前门卫订单数据不存在!");
+        }
+        if (!(GatekeeperStatusEnum.IN_YARD.getCode().equals(gatekeeper.getStatus()))) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.GATEKEEPER_ORDER_STATUS_ERROR, "当前门卫订单状态异常,不能推进为待放行状态!");
+        }
+        //修改门卫:待放行
+        gatekeeper.setStatus(GatekeeperStatusEnum.PENDING_RELEASE.getCode());
+        gatekeeperWaybillOrderRepository.updateById(gatekeeper);
+    }
+
+    /**
+     * 创建卸货过磅记录
+     * @param waybillOrder
+     */
+    private void createWeighbridges(KwtWaybillOrder waybillOrder) {
+        CompletableFuture.runAsync(() ->{
+            try {
+                log.debug("开始异步保存地磅记录,运单ID:{}", waybillOrder.getId());
+                KwtWaybillOrderWeighbridge weighbridge = new KwtWaybillOrderWeighbridge();
+                weighbridge.setWOrderId(waybillOrder.getId());
+                weighbridge.setLOrderId(waybillOrder.getLOrderId());
+                weighbridge.setTruckId(waybillOrder.getTruckId());
+                weighbridge.setTruckNo(waybillOrder.getTruckNo());
+                weighbridge.setType(WeighbridgeTypeEnum.UNLOADING.getCode());
+                weighbridge.setWeighbridgeId(10001l);
+                weighbridge.setWeight(BigDecimal.ZERO);
+                weighbridge.setWeighUrl(null);
+                weighbridge.setCreateTime(new Date());
+                weighbridge.setCreateUser(waybillOrder.getDriverId());
+                weighbridge.setUpdateUser(waybillOrder.getDriverId());
+
+                waybillOrderWeighbridgeRepository.save(weighbridge);
+                log.debug("异步保存过磅数据保存成功");
+            } catch (Exception e) {
+                throw new BusinessPlatfromException(ErrorCodeEnum.DATA_SAVE_FAIL, "异步保存过磅数据失败!");
+            }
+        });
+    }
+
+
+    /**
+     * 第二次过磅
+     * @param param
+     */
+    private void laterWeighbridge(WaybillOrderUnloadingWeighParam param, KwtWaybillOrder waybillOrder, KwtWaybillOrderTicket takeTicket) {
+        if (StringUtils.isBlank(param.getTareAmount())) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "皮重不能为空!");
+        }
+
+        //1.填充运单卸货单皮重
+        takeTicket.setTareAmount(param.getTareAmount());
+        waybillOrderTicketRepository.updateById(takeTicket);
 
+        // 2.创建卸货过磅记录
+        createWeighbridges(waybillOrder);
     }
 
     @Override
@@ -55,18 +177,22 @@ public class UnloadingWeighHandler extends AbstractWaybillOrderHandler<WaybillOr
 
     @Override
     protected String getProcessName() {
-        return "离场过磅";
+        return "卸货离场过磅";
     }
 
     @Override
     protected void getStatus(KwtWaybillOrder waybillOrder) {
+        // 校验是否第一次卸货过磅
+        CarWaybillV1Enum status = Objects.equals(waybillOrder.getStatus(), CarWaybillV1Enum.WAIT_LOADING)
+                ? CarWaybillV1Enum.UNLOADING_POINT : CarWaybillV1Enum.UNLOADING_WAIT_LEAVE;
+
         // 1. 修改运单状态
-        waybillOrder.setStatus(CarWaybillV1Enum.INTO_UNLOADING.getCode());
+        waybillOrder.setStatus(status.getCode());
         waybillOrderRepository.updateById(waybillOrder);
 
         // 2. 修改子运单状态
         KwtWaybillOrderSubtask waybillSubtask = getWaybillSubtask(waybillOrder.getId());
-        waybillSubtask.setStatus(CarWaybillV1Enum.INTO_UNLOADING.getCode());
+        waybillSubtask.setStatus(status.getCode());
         waybillOrderSubtaskRepository.updateById(waybillSubtask);
     }
 

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

@@ -42,11 +42,4 @@ public class KwtGatekeeperWaybillOrderRepository extends ServiceImpl<KwtGatekeep
                         .last("limit 1"));
     }
 
-    public List<KwtGatekeeperWaybillOrder> queryGatekeeperWaybillOrdersByWOrderId(Long wOrderId) {
-        return list(
-                Wrappers.<KwtGatekeeperWaybillOrder>lambdaQuery()
-                        .eq(KwtGatekeeperWaybillOrder::getWOrderId, wOrderId)
-                        .orderByDesc(KwtGatekeeperWaybillOrder::getId));
-    }
-
 }

+ 27 - 9
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/GatekeeperOrderService.java

@@ -11,6 +11,7 @@ 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.GatekeeperStatusEnum;
+import com.sckw.core.model.enums.GatekeeperTypeEnum;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.DateUtils;
 import com.sckw.core.utils.StringUtils;
@@ -566,7 +567,7 @@ public class GatekeeperOrderService {
      */
     private void updateGatekeeperOrderStatus(KwtGatekeeperWaybillOrder gatekeeper, GatekeeperOrderPassParam param) {
         if (!GatekeeperStatusEnum.PENDING_RELEASE.getCode().equals(gatekeeper.getStatus())) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前车辆订单状态异常,不能放行!");
+            throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前门卫订单状态异常,不能放行!");
         }
         //门卫放行后状态更改为:已放行
         gatekeeper.setStatus(GatekeeperStatusEnum.READY_RELEASE.getCode());
@@ -601,11 +602,20 @@ public class GatekeeperOrderService {
         if (waybillOrder == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前运单数据不存在!");
         }
-        if (!CarWaybillV1Enum.WAIT_RELEASE.getCode().equals(waybillOrder.getStatus())) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前运单状态异常,不能推进为已放行待离场!");
+
+        //装货单
+        if (Objects.equals(gatekeeper.getType(), GatekeeperTypeEnum.LOADING.getCode())) {
+            if (!CarWaybillV1Enum.WAIT_RELEASE.getCode().equals(waybillOrder.getStatus())) {
+                throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "当前运单状态异常,不能推进为已放行待离场!");
+            }
+            waybillOrder.setStatus(CarWaybillV1Enum.RELEASED_NOT_EXITED.getCode());
+        } else {
+            //卸货单校验
+            if (!CarWaybillV1Enum.UNLOADING_WAIT_RELEASE.getCode().equals(waybillOrder.getStatus())) {
+                throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "当前运单状态异常,不能推进为已完成!");
+            }
+            waybillOrder.setStatus(CarWaybillV1Enum.COMPLETED.getCode());
         }
-        //
-        waybillOrder.setStatus(CarWaybillV1Enum.RELEASED_NOT_EXITED.getCode());
         waybillOrderRepository.updateById(waybillOrder);
     }
 
@@ -618,11 +628,19 @@ public class GatekeeperOrderService {
         if (waybillSubtask == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_SUB_NOT_FOUND, "未找到关联的子运单!");
         }
-
-        if (!CarWaybillV1Enum.WAIT_RELEASE.getCode().equals(waybillSubtask.getStatus())) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前子运单状态异常,不能推进为已放行待离场!");
+        //装货单
+        if (Objects.equals(gatekeeper.getType(), GatekeeperTypeEnum.LOADING.getCode())) {
+            if (!CarWaybillV1Enum.WAIT_RELEASE.getCode().equals(waybillSubtask.getStatus())) {
+                throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "当前子运单状态异常,不能推进为已放行待离场!");
+            }
+            waybillSubtask.setStatus(CarWaybillV1Enum.RELEASED_NOT_EXITED.getCode());
+        } else {
+            //卸货单校验
+            if (!CarWaybillV1Enum.UNLOADING_WAIT_RELEASE.getCode().equals(waybillSubtask.getStatus())) {
+                throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "当前子运单状态异常,不能推进为已完成!");
+            }
+            waybillSubtask.setStatus(CarWaybillV1Enum.COMPLETED.getCode());
         }
-        waybillSubtask.setStatus(CarWaybillV1Enum.WAIT_RELEASE.getCode());
         waybillOrderSubtaskRepository.updateById(waybillSubtask);
     }