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