Prechádzať zdrojové kódy

司机违规取消运单

donglang 15 hodín pred
rodič
commit
7564309c2f

+ 8 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/AbstractWaybillOrderHandler.java

@@ -9,6 +9,7 @@ import com.sckw.contract.api.model.dto.req.LogisticsScoreDetailFeignDto;
 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.DispatchWayEnums;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.fleet.api.RemoteFleetService;
@@ -91,7 +92,9 @@ public abstract class AbstractWaybillOrderHandler<T extends WaybillOrderProcessP
             // 6. 生成节点轨迹
             createNodeTrace(param, waybillOrder);
             //7.自动派单计算分值
-            calculateAutoDispatchScore(param, waybillOrder);
+            if(DispatchWayEnums.AUTO_DISPATCH.getCode().equals(waybillOrder.getDispatchWay())) {
+                calculateAutoDispatchScore(param, waybillOrder);
+            }
             // 8. 后置处理
             OrderTakingResp handlerResult = afterProcess(param, waybillOrder);
 
@@ -248,8 +251,8 @@ public abstract class AbstractWaybillOrderHandler<T extends WaybillOrderProcessP
         if (waybillOrder == null) {
             return 0L;
         }
-        //查询订单托运单位(自动派单订单承运单位只为供应商)
-        KwtLogisticsOrderUnit logisticsOrderUnit = logisticsOrderUnitRepository.queryByLOrderIdAndUnitType(waybillOrder.getLOrderId(), 2);
+        //查询订单托运单位
+        KwtLogisticsOrderUnit logisticsOrderUnit = logisticsOrderUnitRepository.queryByLOrderIdAndUnitType(waybillOrder.getLOrderId(), 1);
         if (logisticsOrderUnit == null || logisticsOrderUnit.getEntId() == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_ENT, "未找到关联的物流订单托运企业(供应商)!");
         }
@@ -258,7 +261,7 @@ public abstract class AbstractWaybillOrderHandler<T extends WaybillOrderProcessP
 
 
     /**
-     * 查询司机所在企业的派车系数
+     * 查询司机所在企业的供应商派车系数
      */
     protected TruckDispatchCoefficientVO getAutoTruckDispatchByEntId(Long entId) {
         TruckDispatchCoefficientVO truckDispatchVO = remoteFleetService.findAutoTruckDispatchByEntId(entId);
@@ -269,7 +272,7 @@ public abstract class AbstractWaybillOrderHandler<T extends WaybillOrderProcessP
     }
 
     /**
-     * 查询司机所在企业的司机行为规则
+     * 查询司机所在企业的供应商司机行为规则
      */
     protected DriverConductRulesVO getDriverConductRulesByEntId(Long entId) {
         DriverConductRulesVO driverRulesVO = remoteFleetService.findDriverConductRulesByEntId(entId);

+ 5 - 13
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/CancelHandler.java

@@ -1,13 +1,10 @@
 package com.sckw.transport.handler;
 
 
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 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.utils.DateUtils;
-import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.DriverConductRulesVO;
 import com.sckw.order.api.model.OrderDetailVo;
@@ -28,7 +25,6 @@ import org.springframework.stereotype.Service;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.Objects;
-import java.util.Optional;
 
 /**
  * Author: donglang
@@ -152,12 +148,10 @@ public class CancelHandler extends AbstractWaybillOrderHandler<WaybillOrderCance
      */
     @Override
     protected void calculateAutoDispatchScore(WaybillOrderCancelParam param, KwtWaybillOrder waybillOrder) {
-//        if (true) {
-//            //先不执行自动派单逻辑
-//            return;
-//        }
+        //供应商
+        Long supEntId = getSupplierId(waybillOrder);
         // 获取司机行为规则配置
-        DriverConductRulesVO driverRulesVO = getDriverConductRulesByEntId(waybillOrder.getEntId());
+        DriverConductRulesVO driverRulesVO = getDriverConductRulesByEntId(supEntId);
         //分数
         Integer cancelOrderScore = driverRulesVO.getIllegalCancelOrderScore();
         //分钟数
@@ -168,10 +162,10 @@ public class CancelHandler extends AbstractWaybillOrderHandler<WaybillOrderCance
         }
         //司机接单时间
         KwtWaybillOrderNode takingOrderNodes = getNodesByOrderId(waybillOrder.getId(), CarWaybillV1Enum.PENDING_VEHICLE.getCode());
-        Date takingOrderTime = takingOrderNodes.getCreateTime() != null ? takingOrderNodes.getCreateTime() : null;
+        Date takingOrderTime = takingOrderNodes.getCreateTime();
         //司机取消接单时间
         KwtWaybillOrderNode cancelNode = getNodesByOrderId(waybillOrder.getId(), CarWaybillV1Enum.CANCELLED.getCode());
-        Date cancelNodeTime = cancelNode.getCreateTime() != null ? cancelNode.getCreateTime() : null;
+        Date cancelNodeTime = cancelNode.getCreateTime();
 
         // 计算两个时间的分钟差
         Long timeDiffMinutes = DateUtils.calculateTimeDiffMinutes(takingOrderTime, cancelNodeTime);
@@ -179,12 +173,10 @@ public class CancelHandler extends AbstractWaybillOrderHandler<WaybillOrderCance
             log.info("【司机违规取消运单】超时!司机违规取消运单分钟数限制:" + cancelOrderMinutes + "分钟,实际:" + timeDiffMinutes + "分钟");
             //1、更新司机分数(减分)
             cancelOrderScore = -Math.abs(cancelOrderScore);
-            Long supEntId = getSupplierId(waybillOrder);
             updateDriverScore(supEntId, waybillOrder.getEntId(), waybillOrder.getDriverId(), cancelOrderScore, "司机违规取消运单");
 
             //2、更新企业分数(减分)
             updateLogEntScore(waybillOrder, supEntId, cancelOrderScore, "司机违规取消运单");
-
         }
 
     }

+ 3 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/TakingOrderHandler.java

@@ -10,10 +10,8 @@ import com.sckw.core.model.enums.AddressTypeEnum;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.model.enums.LogisticsOrderV1Enum;
 import com.sckw.core.utils.CollectionUtils;
-import com.sckw.core.utils.StringUtils;
 import com.sckw.fleet.api.model.vo.RDriverVo;
 import com.sckw.fleet.api.model.vo.RTruckVo;
-import com.sckw.fleet.api.model.vo.TmsTruckAxleNumVO;
 import com.sckw.order.api.model.OrderDetailVo;
 import com.sckw.order.api.model.UpdateActualAmountParam;
 import com.sckw.transport.model.*;
@@ -97,7 +95,7 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
         BigDecimal truckLoadVolume = queryCurTruckLoadVolume(truck, tradeOrder);
 
         //1、生成物流运单
-        KwtWaybillOrder waybillOrder = createWaybillOrder(param, driver, truck);
+        KwtWaybillOrder waybillOrder = createWaybillOrder(param, driver, truck, logOrder);
 
         //2、生成物流子运单
         KwtWaybillOrderSubtask waybillOrderSubtask = createWaybillOrderSubtask(param, waybillOrder, truckLoadVolume);
@@ -314,7 +312,7 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
      *
      * @param param
      */
-    private KwtWaybillOrder createWaybillOrder(OrderCirculateTakingQueryParam param, RDriverVo driver, RTruckVo truckNo) {
+    private KwtWaybillOrder createWaybillOrder(OrderCirculateTakingQueryParam param, RDriverVo driver, RTruckVo truckNo, KwtLogisticsOrder logOrder) {
         log.info("生成物流运单,入参参数:{}", JSON.toJSONString(param));
         KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
         waybillOrder.setEntId(param.getEntId());
@@ -331,6 +329,7 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
         waybillOrder.setTaskStartTime(new Date());
         waybillOrder.setCreateBy(param.getDriverId());
         waybillOrder.setUpdateBy(param.getDriverId());
+        waybillOrder.setDispatchWay(logOrder.getDispatchWay());
         waybillOrderRepository.save(waybillOrder);
         log.info("创建物流运单成功,运单ID:{}", waybillOrder.getId());
 

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

@@ -171,4 +171,9 @@ public class KwtWaybillOrder implements Serializable {
 
     @TableField(exist = false)
     private String yearAndMonth;
+
+    /**
+     * 派车方式
+     */
+    private Integer dispatchWay;
 }

+ 3 - 8
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/task/LogisticsOrderCompletionTask.java

@@ -9,6 +9,7 @@ import com.sckw.core.common.enums.enums.ErrorCodeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
+import com.sckw.core.model.enums.DispatchWayEnums;
 import com.sckw.core.model.enums.LogisticsOrderV1Enum;
 import com.sckw.core.utils.DateUtils;
 import com.sckw.fleet.api.RemoteFleetService;
@@ -174,6 +175,7 @@ public class LogisticsOrderCompletionTask {
             List<KwtWaybillOrder> waybillOrderOrders = waybillOrderRepository.list(
                     new LambdaQueryWrapper<KwtWaybillOrder>()
                             .eq(KwtWaybillOrder::getStatus, CarWaybillV1Enum.PENDING_VEHICLE.getCode())
+                            .eq(KwtWaybillOrder::getDispatchWay, DispatchWayEnums.AUTO_DISPATCH.getCode())
                             .eq(KwtWaybillOrder::getDelFlag, 0)
             );
             if (CollectionUtils.isEmpty(waybillOrderOrders)) {
@@ -188,14 +190,7 @@ public class LogisticsOrderCompletionTask {
             //提取物流订单id
             Set<Long> logisticOrderIds = waybillOrderOrders.stream().map(KwtWaybillOrder::getLOrderId).collect(Collectors.toSet());
 
-            //物流订单和合同映射
-//            List<KwtLogisticsOrderContract> logisticsOrderContracts = logisticsOrderContractRepository.queryByLogOrderIds(logisticOrderIds);
-//            Map<Long, KwtLogisticsOrderContract> logisticsOrderAndContractMap = logisticsOrderContracts.stream()
-//                    .collect(Collectors.toMap(KwtLogisticsOrderContract::getLOrderId, Function.identity(), (x, y) -> x));
-//
-//            Set<Long> contractIds = logisticsOrderContracts.stream().map(KwtLogisticsOrderContract::getContractId).collect(Collectors.toSet());
-//            remoteContractService.queryContractUnitByContractId()
-
+            //物流订单和企业映射
             List<KwtLogisticsOrderUnit> logisticsOrderUnits = logisticsOrderUnitRepository.queryByLOrderIdsAndUnitType(logisticOrderIds, 1);
             Map<Long, KwtLogisticsOrderUnit> logisticsOrderAndUnitMap = logisticsOrderUnits.stream()
                     .collect(Collectors.toMap(KwtLogisticsOrderUnit::getLOrderId, Function.identity(), (x, y) -> x));