ソースを参照

山上企业入场后自动完成装载

donglang 12 時間 前
コミット
c92cfab898

+ 125 - 6
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/ComeIntoHandler.java

@@ -21,6 +21,7 @@ import com.sckw.transport.model.*;
 import com.sckw.transport.model.enuma.WeighbridgeTypeEnum;
 import com.sckw.transport.model.param.WaybillOrderCmeIntoWeighParam;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -41,6 +42,16 @@ import java.util.stream.Collectors;
 @Service
 public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCmeIntoWeighParam> {
 
+    @Value("${business.waybill.default-driver-id}")
+    private Long defaultDriverId;
+
+    @Value("${business.waybill.default-driver-name}")
+    private String defaultDriverName;
+
+    @Value("${business.waybill.default-driver-phone}")
+    private String defaultDriverPhone;
+
+
     @Override
     protected KwtWaybillOrder getWaybillOrder(WaybillOrderCmeIntoWeighParam param) {
         return getWaybillOrder(param.getWaybillOrderId());
@@ -112,18 +123,20 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
         updateGatekeeperOrderStatus(waybillOrder);
 
         //4. 创建铲车记录
-        createForkliftWaybill(waybillOrder);
+        Long forkliftId = createForkliftWaybill(waybillOrder);
 
         //5.创建过磅记录
         createWeighbridges(param, waybillOrder);
+
+        //6.自动完成装载(山上企业)
+        autoCompleteLoading(forkliftId, waybillOrder);
     }
 
     /**
      * 创建铲车记录
      * @param waybillOrder
      */
-    private void createForkliftWaybill(KwtWaybillOrder waybillOrder) {
-        CompletableFuture.runAsync(() ->{
+    private Long createForkliftWaybill(KwtWaybillOrder waybillOrder) {
             try {
                 log.debug("开始异步保存铲车司机数据,运单ID:{}", waybillOrder.getId());
                 //企业id
@@ -169,10 +182,10 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
 
                 forkliftWaybillOrderRepository.save(forklift);
                 log.debug("铲车司机数据保存成功");
+                return forklift.getId();
             } catch (Exception e) {
                 throw new BusinessPlatfromException(ErrorCodeEnum.DATA_SAVE_FAIL, "异步保存铲车司机数据失败!");
             }
-        });
     }
 
     /**
@@ -229,7 +242,6 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
      * @param waybillOrder
      */
     private void createWeighbridges(WaybillOrderCmeIntoWeighParam param, KwtWaybillOrder waybillOrder) {
-        CompletableFuture.runAsync(() ->{
             try {
                 log.debug("开始异步保存地磅记录,运单ID:{}", waybillOrder.getId());
                 KwtWaybillOrderWeighbridge weighbridge = new KwtWaybillOrderWeighbridge();
@@ -250,7 +262,114 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
             } catch (Exception e) {
                 throw new BusinessPlatfromException(ErrorCodeEnum.DATA_SAVE_FAIL, "异步保存过磅数据失败!");
             }
-        });
+    }
+
+    /**
+     * 自动完成铲车接单
+     * @param waybillOrder
+     */
+    private void autoCompleteLoading(Long forkliftId, KwtWaybillOrder waybillOrder) {
+        log.info("[自动接单]开始自动接单,运单ID:{}", waybillOrder.getId());
+        // 只有山上的企业才做自动接单
+        if (getEntId(waybillOrder) != 538039617157337089L) {
+            log.info("[自动接单]当前企业不是山上企业,无需自动完成接单:{}", JSON.toJSONString(waybillOrder));
+            return;
+        }
+        KwtForkliftWaybillOrder forkliftWaybillOrder = forkliftWaybillOrderRepository.queryForkliftWaybillOrderByFOrderId(forkliftId);
+        if (forkliftWaybillOrder == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "[自动接单]当前铲车订单不存在!");
+        }
+
+        // 1. 铲车司机接单
+        createForkliftWaybillOrder(forkliftWaybillOrder);
+
+        // 2. 铲车司机完成装载
+        loadingCompleted(forkliftWaybillOrder);
+
+    }
+
+    /**
+     * 铲车司机接单
+     * @param forkliftWaybillOrder
+     */
+    public void createForkliftWaybillOrder(KwtForkliftWaybillOrder forkliftWaybillOrder) {
+        log.info("[自动接单]铲车订单接单,铲车订单id:{}", JSON.toJSONString(forkliftWaybillOrder.getId()));
+        if (!ForkliftStatusEnum.PENDING_ORDERS.getCode().equals(forkliftWaybillOrder.getStatus())) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能接单!");
+        }
+
+        forkliftWaybillOrder.setStatus(ForkliftStatusEnum.ORDER_TAKING.getCode());
+        forkliftWaybillOrder.setDriverId(defaultDriverId);
+        forkliftWaybillOrder.setDriverPhone(defaultDriverName);
+        forkliftWaybillOrder.setDriverName(defaultDriverPhone);
+        forkliftWaybillOrder.setForkliftAcceptTime(new Date());
+        forkliftWaybillOrderRepository.updateById(forkliftWaybillOrder);
+
+        //修改司机状态
+        updateWaybillOrder(forkliftWaybillOrder, CarWaybillV1Enum.REFUSE_TRAFFIC);
+
+        log.info("[自动接单]铲车接单成功,铲车订单ID:{}", forkliftWaybillOrder.getWOrderId());
+    }
+
+    /**
+     * 修改司机状态
+     * @param forkliftWaybillOrder
+     */
+    private void updateWaybillOrder(KwtForkliftWaybillOrder forkliftWaybillOrder, CarWaybillV1Enum waybillV1Enum) {
+        // 修改运单状态
+        updateWaybillStatus(forkliftWaybillOrder, waybillV1Enum);
+
+        // 修改子运单状态
+        updateWaybillSubtaskStatus(forkliftWaybillOrder, waybillV1Enum);
+    }
+
+
+    /**
+     * 装载完成
+     * @param forkliftWaybillOrder
+     * @return
+     */
+    public void loadingCompleted(KwtForkliftWaybillOrder forkliftWaybillOrder) {
+        log.info("[自动接单]铲车司机装载完成, 铲车订单id:{}", JSON.toJSONString(forkliftWaybillOrder.getId()));
+        if (!ForkliftStatusEnum.ORDER_TAKING.getCode().equals(forkliftWaybillOrder.getStatus())) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能装载完成!");
+        }
+
+        forkliftWaybillOrder.setStatus(ForkliftStatusEnum.COMPLETED.getCode());
+        forkliftWaybillOrder.setFinishTime(new Date());
+        forkliftWaybillOrderRepository.updateById(forkliftWaybillOrder);
+
+        //更新司机运单状态:已装货
+        updateWaybillOrder(forkliftWaybillOrder, CarWaybillV1Enum.EXIT_COMPLETED);
+        log.info("[自动接单]铲车装载成功,铲车订单ID:{}", forkliftWaybillOrder.getWOrderId());
+    }
+
+
+    /**
+     * 修改运单状态
+     * @param forkliftWaybillOrder
+     */
+    private void updateWaybillStatus(KwtForkliftWaybillOrder forkliftWaybillOrder, CarWaybillV1Enum waybillV1Enum) {
+        KwtWaybillOrder waybillOrder = waybillOrderRepository.getById(forkliftWaybillOrder.getWOrderId());
+        if (waybillOrder == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前运单数据不存在!");
+        }
+
+        waybillOrder.setStatus(waybillV1Enum.getCode());
+        waybillOrderRepository.updateById(waybillOrder);
+    }
+
+    /**
+     * 修改子运单状态
+     * @param forkliftWaybillOrder
+     */
+    private void updateWaybillSubtaskStatus(KwtForkliftWaybillOrder forkliftWaybillOrder, CarWaybillV1Enum waybillV1Enum) {
+        KwtWaybillOrderSubtask waybillSubtask = waybillOrderSubtaskRepository.queryByWOrderId(forkliftWaybillOrder.getWOrderId());
+        if (waybillSubtask == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_SUB_NOT_FOUND, "未找到关联的子运单!");
+        }
+        waybillSubtask.setStatus(waybillV1Enum.getCode());
+        waybillOrderSubtaskRepository.updateById(waybillSubtask);
     }