Prechádzať zdrojové kódy

根据贸易合同查询单位信息

chenxiaofei 8 hodín pred
rodič
commit
0669dc8371

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

@@ -198,6 +198,11 @@ public class KwtWaybillOrder implements Serializable {
      */
     private String passUrl;
 
+    /**
+     * 是否已抬杆
+     */
+    private Integer opened;
+
     //用于存储动态状态
     @TableField(exist = false)
     private Integer targetStatus;

+ 84 - 48
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/GatekeeperOrderService.java

@@ -11,6 +11,7 @@ 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.GatekeeperStatusEnum;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.DateUtils;
@@ -21,6 +22,7 @@ import com.sckw.order.api.model.OrderUnitInfoDetailVO;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.model.*;
+import com.sckw.transport.model.enuma.WeighbridgeTypeEnum;
 import com.sckw.transport.model.param.forklift.reponse.GatekeeperOrderResp;
 import com.sckw.transport.model.param.forklift.request.GatekeeperOrderIsPassParam;
 import com.sckw.transport.model.param.forklift.request.GatekeeperOrderPassParam;
@@ -54,13 +56,17 @@ public class GatekeeperOrderService {
 
 
     private final KwtGatekeeperWaybillOrderRepository gatekeeperWaybillOrderRepository;
-
+    private final KwtForkliftWaybillOrderRepository forkliftWaybillOrderRepository;
     private final KwtWaybillOrderRepository waybillOrderRepository;
     private final KwtWaybillOrderSubtaskRepository waybillOrderSubtaskRepository;
     private final KwtWaybillOrderTicketRepository waybillOrderTicketRepository;
     private final KwtLogisticsOrderRepository logisticsOrderRepository;
     private final KwtLogisticsOrderGoodsRepository logisticsOrderGoodsRepository;
+    private final KwtLogisticsOrderContractRepository logisticsOrderContractRepository;
     private final KwtWaybillOrderNodeRepository waybillOrderNodeRepository;
+    private final KwtWaybillOrderWeighbridgeRepository waybillOrderWeighbridgeRepository;
+    @Autowired
+    protected KwtLogisticsOrderUnitRepository logisticsOrderUnitRepository;
 
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteContractService remoteContractService;
@@ -735,62 +741,92 @@ public class GatekeeperOrderService {
      * @return true-允许放行, false-不允许放行
      */
     public Boolean checkIsPass(GatekeeperOrderIsPassParam gatekeeper) {
-        log.info("[门卫校验]开始校验车辆是否可放行,入参:{}", JSON.toJSONString(gatekeeper));
-
-        // 1. 参数校验:车牌号不能为空
-        if (StringUtils.isBlank(gatekeeper.getTruckNo())) {
-            log.warn("[门卫校验]校验失败,车牌号为空");
-            throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "车牌号不能为空!");
-        }
-
-        // 2. 根据车牌号查询运单列表
+        log.info("校验是否可放行:{}", JSON.toJSONString(gatekeeper));
         List<KwtWaybillOrder> wbOrderByTruckNo = waybillOrderRepository.findWbOrderByTruckNo(gatekeeper.getTruckNo());
         if (CollectionUtils.isEmpty(wbOrderByTruckNo)) {
-            log.info("[门卫校验]校验结果:未找到该车牌[{}]对应的运单记录,禁止放行", gatekeeper.getTruckNo());
+            log.info("未找到运单数据,校验抬杆结果:{}, 运单:{}", Boolean.FALSE, JSON.toJSONString(wbOrderByTruckNo));
             return Boolean.FALSE;
         }
-
-        // 获取最新的一条运单数据(假设列表已按时间倒序排列或取第一条为最新)
+        // 获取最新的一条数据
         KwtWaybillOrder waybillOrder = wbOrderByTruckNo.get(0);
-        log.debug("[门卫校验]找到对应运单,运单ID:{},运单号:{}", waybillOrder.getId(), waybillOrder.getWOrderNo());
+        List<KwtWaybillOrderWeighbridge> weighbridges = checkIsFirst(waybillOrder);
+        if (CollectionUtils.isEmpty(weighbridges)) {
+            // 进场第一次抬杆
+            Boolean result = Objects.equals(waybillOrder.getStatus(), CarWaybillV1Enum.PENDING_VEHICLE.getCode()) ? Boolean.TRUE : Boolean.FALSE;
+            log.info("第一次过磅校校验抬杆结果:{}, 运单:{}", JSON.toJSONString(result), JSON.toJSONString(waybillOrder));
+            return result;
+        } else if (weighbridges.size() == 1) {
+            //第二次抬杆
+
+            //第三次抬杆:铲车司机已接单未完成装载情况
+            KwtForkliftWaybillOrder forklift = forkliftWaybillOrderRepository.queryForkliftWaybillOrderByWOrderId(waybillOrder.getId());
+            if (Objects.equals(forklift.getStatus(), ForkliftStatusEnum.ORDER_TAKING.getCode())) {
+                log.info("[出场上榜]铲车司机已接单未完成,抬杆结果:{}, 运单:{}", Boolean.FALSE, JSON.toJSONString(waybillOrder));
+                return Boolean.FALSE;
+            }
+            if (Objects.equals(forklift.getStatus(), ForkliftStatusEnum.COMPLETED.getCode())) {
+                Boolean result = Objects.equals(waybillOrder.getStatus(), CarWaybillV1Enum.EXIT_COMPLETED.getCode()) ? Boolean.TRUE : Boolean.FALSE;
+                log.info("[出场上榜]铲车司机完成装载,抬杆结果:{}, 运单:{}", result, JSON.toJSONString(waybillOrder));
+                return result;
+            }
 
-        // 3. 根据运单ID查询门卫订单
-        List<KwtGatekeeperWaybillOrder> gatekeeperWaybillOrders = gatekeeperWaybillOrderRepository
-                .queryGatekeeperWaybillOrderByWOrderIds(Lists.newArrayList(waybillOrder.getId()));
-        
-        if (CollectionUtils.isEmpty(gatekeeperWaybillOrders)) {
-            log.info("[门卫校验]校验结果:运单ID[{}]未关联门卫订单,禁止放行", waybillOrder.getId());
-            return Boolean.FALSE;
-        }
+            Boolean result = Objects.equals(waybillOrder.getStatus(), CarWaybillV1Enum.REFUSE_TRAFFIC.getCode()) ? Boolean.TRUE : Boolean.FALSE;
+            log.info("[进场下榜/出场上榜]抬杆,校验出场结果:{}, 运单:{}", result, JSON.toJSONString(waybillOrder));
+            return result;
+        } else {
+            KwtForkliftWaybillOrder forklift = forkliftWaybillOrderRepository.queryForkliftWaybillOrderByWOrderId(waybillOrder.getId());
+            if (Objects.equals(forklift.getStatus(), ForkliftStatusEnum.COMPLETED.getCode())) {
+                if (Objects.equals(waybillOrder.getStatus(), CarWaybillV1Enum.EXIT_COMPLETED.getCode())) {
+                    log.info("[出场上榜]运输司机回退,铲车司机完成装载,抬杆结果:{}, 运单:{}", Boolean.TRUE, JSON.toJSONString(waybillOrder));
+                    return Boolean.TRUE;
+                }
+            }
 
-        // 获取对应的门卫订单
-        KwtGatekeeperWaybillOrder gatekeeperWaybillOrder = gatekeeperWaybillOrders.get(0);
-        Integer currentStatus = gatekeeperWaybillOrder.getStatus();
-        log.debug("[门卫校验]找到对应门卫订单,订单ID:{},当前状态:{}", gatekeeperWaybillOrder.getId(), currentStatus);
-
-        // 4. 定义允许放行的状态集合
-        // PENDING_ENTRY: 待进场 (可能用于重新入场或特殊流程)
-        // READY_RELEASE: 已放行/待离场 (正常放行流程)
-        // EXITED: 已离场 (可能用于补录或异常处理)
-        // EMPTY_EXITED: 空车离场
-        List<Integer> PASS_STATUSES = Arrays.asList(
-                GatekeeperStatusEnum.PENDING_ENTRY.getCode(),
-                GatekeeperStatusEnum.IN_YARD.getCode(),
-                GatekeeperStatusEnum.READY_RELEASE.getCode(),
-                GatekeeperStatusEnum.EXITED.getCode(),
-                GatekeeperStatusEnum.EMPTY_EXITED.getCode()
-        );
+            if (Objects.equals(waybillOrder.getStatus(), CarWaybillV1Enum.WAIT_LOADING.getCode())) {
+                log.info("[出场下榜]抬杆,校验出场结果:{}, 运单:{}", Boolean.TRUE, JSON.toJSONString(waybillOrder));
+                // 填充抬杆完成标签
+                updateWaybillOrderOpened(waybillOrder);
+                return Boolean.TRUE;
+            }
 
-        // 5. 判断当前状态是否允许放行
-        boolean isAllowed = PASS_STATUSES.contains(currentStatus);
-        
-        if (isAllowed) {
-            log.info("[门卫校验]校验通过,车牌[{}]当前状态[{}]在允许放行列表中", gatekeeper.getTruckNo(), currentStatus);
-        } else {
-            log.info("[门卫校验]校验拒绝,车牌[{}]当前状态[{}]不在允许放行列表中", gatekeeper.getTruckNo(), currentStatus);
+            if (Objects.equals(waybillOrder.getStatus(), CarWaybillV1Enum.COMPLETED.getCode())) {
+                if (Objects.equals(forklift.getStatus(), ForkliftStatusEnum.COMPLETED.getCode())) {
+                    log.info("[出场下榜]铲车司机完成装载,空载离场过磅,校验出场结果:{}, 运单:{}", Boolean.TRUE, JSON.toJSONString(waybillOrder));
+                    // 填充抬杆完成标签
+                    updateWaybillOrderOpened(waybillOrder);
+                    return Boolean.TRUE;
+                } else {
+                    log.info("[出场下榜]铲车司机未接单,空载离场过磅,校验出场结果:{}, 运单:{}", Boolean.TRUE, JSON.toJSONString(waybillOrder));
+                    // 填充抬杆完成标签
+                    updateWaybillOrderOpened(waybillOrder);
+                    return Boolean.TRUE;
+                }
+            }
+            if (Objects.equals(waybillOrder.getStatus(), CarWaybillV1Enum.REFUSE_TRAFFIC.getCode())) {
+                log.info("[出场下榜]铲车未接单,有重量过磅,校验出场结果:{}, 运单:{}", Boolean.FALSE, JSON.toJSONString(waybillOrder));
+                return Boolean.FALSE;
+            }
         }
-
-        return isAllowed;
+        log.info("抬杆未知情况,校验出场结果:{}, 运单:{}", Boolean.FALSE, JSON.toJSONString(waybillOrder));
+        return Boolean.FALSE;
     }
 
+    /**
+     * 校验是否第一次过磅
+     * @param waybillOrder
+     * @return
+     */
+    private List<KwtWaybillOrderWeighbridge> checkIsFirst(KwtWaybillOrder waybillOrder) {
+        return waybillOrderWeighbridgeRepository
+                .queryWaybillOrderWeighbridgeByWOrderId(waybillOrder.getId(), WeighbridgeTypeEnum.LOADING.getCode());
+    }
+    /**
+     * 填充抬杆完成标签
+     * @param waybillOrder
+     */
+    private void updateWaybillOrderOpened(KwtWaybillOrder waybillOrder) {
+        waybillOrder.setOpened(1);
+        waybillOrderRepository.updateById(waybillOrder);
+        log.info("已完成全部过磅流程,运单:{}", JSON.toJSONString(waybillOrder));
+    }
 }