Przeglądaj źródła

过磅流程优化

donglang 3 tygodni temu
rodzic
commit
831bc95ac5

+ 6 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderCmeIntoWeighParam.java

@@ -19,6 +19,12 @@ public class WaybillOrderCmeIntoWeighParam extends WaybillOrderProcessParam impl
     @Serial
     private static final long serialVersionUID = 1038619782660342061L;
 
+    /**
+     * 地磅企业id
+     */
+    @Schema(description = "地磅企业id")
+    private Long entId;
+
     /**
      * 车辆号
      */

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

@@ -552,7 +552,7 @@ public class GatekeeperOrderService {
      * @return
      */
     public StatisticsWaybillResp statisticsGatekeeperOrder(GatekeeperOrderQueryParam param) {
-        log.info("铲车订单状态统计:{}", JSON.toJSONString(param));
+        log.info("门卫订单统计:{}", JSON.toJSONString(param));
         StatisticsWaybillResp resp = new StatisticsWaybillResp();
 
         LambdaQueryWrapper<KwtGatekeeperWaybillOrder> wrapper = Wrappers.<KwtGatekeeperWaybillOrder>lambdaQuery()

+ 107 - 15
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -1608,25 +1608,116 @@ public class WaybillOrderService {
      */
     @Transactional(rollbackFor = Exception.class)
     public void comeInto(WaybillOrderCmeIntoWeighParam param) {
+        log.info("[过磅]开始过磅,入参参数:{}", JSON.toJSONString(param));
+        if (param.getEntId() == null){
+            throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "地磅企业id不能为空!");
+        }
         if (StringUtils.isBlank(param.getTruckNo())){
             throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "车牌号不能为空!");
         }
         if (param.getWeighAmount() == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "称重重量不能为空!");
         }
-        // 1.装货过磅
-        comeIntoHandler(param);
+        // 定义运单可以过磅的状态集合
+        List<Integer> FORBIDDEN_STATUSES = Arrays.asList(
+                CarWaybillV1Enum.PENDING_VEHICLE.getCode(),
+                CarWaybillV1Enum.REFUSE_TRAFFIC.getCode(),
+                CarWaybillV1Enum.EXIT_COMPLETED.getCode(),
+                CarWaybillV1Enum.EMPTY_WAIT_LEAVE.getCode(),
+                CarWaybillV1Enum.WAIT_LEAVE.getCode(),
+                CarWaybillV1Enum.UNLOADING.getCode(),
+                CarWaybillV1Enum.REPLENISHING.getCode(),
+                CarWaybillV1Enum.REPLENISH_FINISH.getCode(),
+                CarWaybillV1Enum.WAIT_LOADING.getCode(),
+                CarWaybillV1Enum.UNLOADING_POINT.getCode()
+        );
+        List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.findWbOrderByTruckNoAndStatus(param.getTruckNo(), FORBIDDEN_STATUSES);
+        if (CollectionUtils.isEmpty(waybillOrders)) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[称重过磅]当前车辆没有称重过磅状态的运单!");
+        }
+        if (waybillOrders.size() > 1) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[称重过磅]当前车辆过磅称重运单数据存在多条!");
+        }
+        KwtWaybillOrder waybillOrder = waybillOrders.get(0);
+
+        //查询物流订单
+        KwtLogisticsOrder logisticsOrder = logisticsOrderRepository.queryByLogisticsOrderId(waybillOrder.getLOrderId());
+        if (logisticsOrder == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[称重过磅]当前物流运单不存在!");
+        }
+        // 山上企业
+        Long upEntId = 538039617157337089L;
+        // 山下企业
+        Long downEntId = 538040297439891457L;
+        // 原矿运输
+        if (Objects.equals(1, logisticsOrder.getOrderType())) {
+            log.info("[过磅]该过磅订单为原矿运输,订单信息:{}", JSON.toJSONString(logisticsOrder));
+            KwtLogisticsOrderUnit logisticsOrderUnit = logisticsOrderUnitRepository.queryByLOrderIdAndUnitType(logisticsOrder.getId(), 1);
+            if (logisticsOrderUnit == null) {
+                throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[称重过磅]当前物流订单关联企业信息不存在!");
+            }
+            //校验走山上还是山下
+            if (Objects.equals(param.getEntId(), logisticsOrderUnit.getEntId()) && Objects.equals(logisticsOrderUnit.getEntId(), upEntId)) {
+                // 1. 山上装货过磅
+                comeIntoHandler(param, waybillOrder);
+            } else if (Objects.equals(param.getEntId(), logisticsOrderUnit.getEntId()) && Objects.equals(logisticsOrderUnit.getEntId(), downEntId)) {
+                // 2. 山下卸货过磅
+                unloadingWeighHnadler(param, waybillOrder);
+            } else {
+                log.info("[称重过磅]过磅称重匹配失败,地磅企业:{},供应企业:{}",
+                        JSON.toJSONString(param.getEntId()), JSON.toJSONString(logisticsOrderUnit.getEntId()));
+                throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[称重过磅]过磅称重匹配失败!");
+            }
+        } else {
+            log.info("[过磅]该过磅订单为产品销售,订单信息:{}", JSON.toJSONString(logisticsOrder));
+            // 查询贸易订单企业id
+            List<OrderUnitInfoDetailVO> unitInfoDetailVOS = tradeOrderInfoService.queryOrderUnitByTradeOrderId(logisticsOrder.getTOrderId());
+            OrderUnitInfoDetailVO unitInfoDetailVO = unitInfoDetailVOS.stream()
+                    .filter(unit -> Objects.equals(unit.getUnitType(), "2"))
+                    .findFirst().orElse(new OrderUnitInfoDetailVO());
+
+            //产品销售流程只能过自己接单的企业所属地磅
+            if (Objects.equals(param.getEntId(), unitInfoDetailVO.getEntId())) {
+                // 装货过磅
+                comeIntoHandler(param, waybillOrder);
+            }
+        }
+        log.info("[过磅]过磅结束!");
+    }
 
-        // 2.卸货过磅
-        unloadingWeighHnadler(param);
+    /**
+     * 获取企业id
+     * @param logOrder
+     * @return
+     */
+    private Long getEntId(KwtLogisticsOrder logOrder) {
+        log.info("[创建装货门卫]开始查询企业id,入参参数:{}", JSON.toJSONString(logOrder));
+        Long entId;
+        KwtLogisticsOrderUnit kwtLogisticsOrderUnit = logisticsOrderUnitRepository.queryByLOrderIdAndUnitType(logOrder.getId(), 1);
+        if (kwtLogisticsOrderUnit == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_FOUND, "[接单]物流企业信息数据不存在");
+        }
+        // 原矿运输山上、上下门卫企业id
+        List<Long> mockEntIds = Arrays.asList(538039617157337089L, 538040297439891457L);
+        if (Objects.equals(1, logOrder.getOrderType()) && mockEntIds.contains(kwtLogisticsOrderUnit.getEntId())) {
+            entId = mockEntIds.get(0);
+        } else {
+            List<OrderUnitInfoDetailVO> unitInfoDetailVOS = tradeOrderInfoService.queryOrderUnitByTradeOrderId(logOrder.getTOrderId());
+            OrderUnitInfoDetailVO unitInfoDetailVO = unitInfoDetailVOS.stream()
+                    .filter(unit -> Objects.equals(unit.getUnitType(), "2"))
+                    .findFirst().orElse(new OrderUnitInfoDetailVO());
+            entId = unitInfoDetailVO.getEntId();
+        }
+        log.info("[创建装货门卫]查询企业id完成,入参参数:{}", JSON.toJSONString(entId));
+        return entId;
     }
 
     /**
      * 装货过磅
      * @param param
      */
-    private void comeIntoHandler(WaybillOrderCmeIntoWeighParam param) {
-
+    private void comeIntoHandler(WaybillOrderCmeIntoWeighParam param, KwtWaybillOrder waybillOrder) {
+        log.info("[装货过磅]开始装货过磅,参数:{}", JSON.toJSONString(param));
         // 定义运单可以过磅的状态集合
         List<Integer> FORBIDDEN_STATUSES = Arrays.asList(
                 CarWaybillV1Enum.PENDING_VEHICLE.getCode(),
@@ -1638,19 +1729,20 @@ public class WaybillOrderService {
                 CarWaybillV1Enum.REPLENISHING.getCode(),
                 CarWaybillV1Enum.REPLENISH_FINISH.getCode()
         );
-        List<KwtWaybillOrder> wbOrderByTruckNo = waybillOrderRepository.findWbOrderByTruckNoAndStatus(param.getTruckNo(), FORBIDDEN_STATUSES);
-        if (CollectionUtils.isEmpty(wbOrderByTruckNo) || wbOrderByTruckNo.size() > 1) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "当前车辆没有可以称重过磅状态的运单");
+        if (!FORBIDDEN_STATUSES.contains(waybillOrder.getStatus())) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "[装货过磅]当前车辆没有称重过磅状态的运单");
         }
-        param.setWaybillOrderId(wbOrderByTruckNo.get(0).getId());
+        param.setWaybillOrderId(waybillOrder.getId());
         comeIntoHandler.handler(param);
+        log.info("[装货过磅]装货过磅结束!");
     }
 
     /**
      * 卸货过磅
      * @param param
      */
-    private void unloadingWeighHnadler(WaybillOrderCmeIntoWeighParam param) {
+    private void unloadingWeighHnadler(WaybillOrderCmeIntoWeighParam param, KwtWaybillOrder waybillOrder) {
+        log.info("[卸货过磅]开始装货过磅,参数:{}", JSON.toJSONString(param));
         WaybillOrderUnloadingWeighParam unloadingWeighParam = new WaybillOrderUnloadingWeighParam();
         unloadingWeighParam.setTruckNo(param.getTruckNo());
         unloadingWeighParam.setWeighAmount(param.getWeighAmount());
@@ -1663,12 +1755,12 @@ public class WaybillOrderService {
                 CarWaybillV1Enum.WAIT_LOADING.getCode(),
                 CarWaybillV1Enum.UNLOADING_POINT.getCode()
         );
-        List<KwtWaybillOrder> wbOrderByTruckNo = waybillOrderRepository.findWbOrderByTruckNoAndStatus(param.getTruckNo(), FORBIDDEN_STATUSES);
-        if (CollectionUtils.isEmpty(wbOrderByTruckNo) || wbOrderByTruckNo.size() > 1) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "当前车辆没有可以卸货过磅称重状态的运单");
+        if (!FORBIDDEN_STATUSES.contains(waybillOrder.getStatus())) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "[卸货过磅]当前车辆没有称重过磅状态的运单");
         }
-        unloadingWeighParam.setWaybillOrderId(wbOrderByTruckNo.get(0).getId());
+        unloadingWeighParam.setWaybillOrderId(waybillOrder.getId());
         unloadingWeighHandler.handler(unloadingWeighParam);
+        log.info("[卸货过磅]卸货过磅结束!");
     }