ソースを参照

司机违规取消运单

donglang 22 時間 前
コミット
588bd91709

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

@@ -157,7 +157,7 @@ public class CancelHandler extends AbstractWaybillOrderHandler<WaybillOrderCance
         //分钟数
         Integer cancelOrderMinutes = driverRulesVO.getIllegalCancelOrderMinutes();
         if (cancelOrderScore <= 0 || cancelOrderMinutes<= 0) {
-            log.warn("【司机违规取消运单】企业{}的司机违规取消运单分钟数/分数异常,运单ID:{}", waybillOrder.getEntId(), waybillOrder.getId());
+            log.warn("【司机违规取消运单】企业{}的司机违规取消运单分钟数/分数异常,运单ID:{}", supEntId, waybillOrder.getId());
             throw new BusinessPlatfromException(ErrorCodeEnum.DATA_NOT_EXIST, "【司机违规取消运单】配置的分钟数/分数需大于0!");
         }
         //司机接单时间

+ 19 - 24
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/UnloadingHandler.java

@@ -279,10 +279,6 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
 
     @Override
     protected void calculateAutoDispatchScore(WaybillOrderUnloadParam param, KwtWaybillOrder waybillOrder) {
-//        if (true) {
-//            //先不执行自动派单逻辑
-//            return;
-//        }
         //查询运单装卸货地址
         List<KwtWaybillOrderAddress> addressList = waybillOrderAddressRepository.queryByWOrderId(waybillOrder.getId());
         if (CollectionUtils.isEmpty(addressList)) {
@@ -318,14 +314,16 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
     @NotNull
     private void checkFakeUnloadDistance(KwtWaybillOrder waybillOrder, Map<Integer, KwtWaybillOrderAddress> addressMap) {
         log.info("校验司机是否虚假卸货:waybillOrderId:{}", waybillOrder.getId());
+        //供应商
+        Long supEntId = getSupplierId(waybillOrder);
         // 获取司机行为规则配置
-        DriverConductRulesVO driverRulesVO = getDriverConductRulesByEntId(waybillOrder.getEntId());
+        DriverConductRulesVO driverRulesVO = getDriverConductRulesByEntId(supEntId);
         //虚假卸货分数
         Integer fakeUnloadScore = driverRulesVO.getFakeUnloadScore();
         //虚假卸货偏离距离
         Integer distance = driverRulesVO.getFakeUnloadDistance();
         if (fakeUnloadScore <= 0 || distance <= 0) {
-            log.warn("【虚假卸货】企业{}的虚假卸货配置分数/偏差距离异常,运单ID:{}", waybillOrder.getEntId(), waybillOrder.getId());
+            log.warn("【虚假卸货】企业{}的虚假卸货配置分数/偏差距离异常,运单ID:{}", supEntId, waybillOrder.getId());
             throw new BusinessPlatfromException(ErrorCodeEnum.DATA_NOT_EXIST, "【虚假卸货】配置分数/偏差距离需大于0!");
         }
         //运单应卸货地址
@@ -351,13 +349,10 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
             log.info("【虚假卸货】运单ID={},卸货地址偏差={}KM",waybillOrder.getId(), distanceKm);
             //1、更新司机分数(减分)
             fakeUnloadScore = -Math.abs(fakeUnloadScore);
-            Long supEntId = getSupplierId(waybillOrder);
             updateDriverScore(supEntId, waybillOrder.getEntId(), waybillOrder.getDriverId(), fakeUnloadScore, "虚假卸货");
             //2、更新企业分数(减分)
             updateLogEntScore(waybillOrder, supEntId, fakeUnloadScore, "虚假卸货");
         }
-
-
     }
 
     /**
@@ -366,22 +361,22 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
      * @param addressMap  运单地址
      */
     protected void checkWaybillCompletionTimeout(KwtWaybillOrder waybillOrder, Map<Integer, KwtWaybillOrderAddress> addressMap) {
+        Long supEntId = getSupplierId(waybillOrder);
         //查询司机行为规则配置
-        DriverConductRulesVO rulesVO = getDriverConductRulesByEntId(waybillOrder.getEntId());
+        DriverConductRulesVO rulesVO = getDriverConductRulesByEntId(supEntId);
         //严重超时倍数
         BigDecimal timeoutMultiple = rulesVO.getUnloadSeriousTimeoutMultiple();
         //严重超时分数
         Integer timeoutScore = rulesVO.getUnloadSeriousTimeoutScore();
         if (timeoutMultiple == null || timeoutMultiple.compareTo(BigDecimal.ZERO) <= 0 || timeoutScore <= 0) {
-            log.warn("【卸货严重超时】扣分失败,企业{}的司机卸货严重超时倍数/分数配置为空,运单ID:{}", waybillOrder.getEntId(), waybillOrder.getId());
+            log.warn("【卸货严重超时】扣分失败,企业{}的司机卸货严重超时倍数/分数配置为空,运单ID:{}", supEntId, waybillOrder.getId());
             throw new BusinessPlatfromException(ErrorCodeEnum.DATA_NOT_EXIST, "【卸货严重超时】配置严重超时倍数/分数需大于0!");
         }
         //校验是否超时
-        Boolean timeOut = isTimeOut(waybillOrder, addressMap, timeoutMultiple);
+        Boolean timeOut = isTimeOut(supEntId, waybillOrder, addressMap, timeoutMultiple);
         if (timeOut) {
             //1、更新司机分数(减分)
             timeoutScore = -Math.abs(timeoutScore);
-            Long supEntId = getSupplierId(waybillOrder);
             updateDriverScore(supEntId, waybillOrder.getEntId(), waybillOrder.getDriverId(), timeoutScore, "卸货严重超时");
             //2、更新企业分数(减分)
             updateLogEntScore(waybillOrder, supEntId, timeoutScore, "卸货严重超时");
@@ -394,12 +389,12 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
      * @param waybillOrder 运单
      * @param addressMap  运单地址
      */
-    protected Boolean isTimeOut(KwtWaybillOrder waybillOrder, Map<Integer, KwtWaybillOrderAddress> addressMap, BigDecimal timeoutMultiple) {
+    protected Boolean isTimeOut(Long supEntId, KwtWaybillOrder waybillOrder, Map<Integer, KwtWaybillOrderAddress> addressMap, BigDecimal timeoutMultiple) {
         log.info("校验司机运单完成是否超时:运单ID:{}", waybillOrder.getId());
         //运单总耗时
         Long orderTotalTimes = calOrderTotalTimes(waybillOrder);
         //平台配置的单趟总耗时
-        Integer singleTripTotalTimes = calSingleTripTotalTimes(waybillOrder, addressMap);
+        Integer singleTripTotalTimes = calSingleTripTotalTimes(supEntId, waybillOrder, addressMap);
         //计算超时阈值
         BigDecimal threshold = timeoutMultiple.compareTo(BigDecimal.ZERO) == 0 ?
                 new BigDecimal(singleTripTotalTimes) : timeoutMultiple.multiply(new BigDecimal(singleTripTotalTimes));
@@ -419,10 +414,10 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
     private Long calOrderTotalTimes(KwtWaybillOrder waybillOrder) {
         //司机接单时间
         KwtWaybillOrderNode takingOrderNodes = getNodesByOrderId(waybillOrder.getId(), CarWaybillV1Enum.PENDING_VEHICLE.getCode());
-        Date takingOrderTime = takingOrderNodes.getCreateTime() != null ? takingOrderNodes.getCreateTime() : null;
+        Date takingOrderTime = takingOrderNodes.getCreateTime();
         //司机完成运单时间
         KwtWaybillOrderNode overOrderNodes = getNodesByOrderId(waybillOrder.getId(), CarWaybillV1Enum.COMPLETED.getCode());
-        Date overOrderTime = overOrderNodes.getCreateTime() != null ? overOrderNodes.getCreateTime() : null;
+        Date overOrderTime = overOrderNodes.getCreateTime();
         //运单总耗时(分钟)
         Long orderTotalTimes = DateUtils.calculateTimeDiffMinutes(takingOrderTime, overOrderTime);
         log.info("司机完成运单总耗时:{}", orderTotalTimes);
@@ -435,9 +430,9 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
      * @param addressMap
      * @return
      */
-    private Integer calSingleTripTotalTimes(KwtWaybillOrder waybillOrder, Map<Integer, KwtWaybillOrderAddress> addressMap) {
+    private Integer calSingleTripTotalTimes(Long supEntId, KwtWaybillOrder waybillOrder, Map<Integer, KwtWaybillOrderAddress> addressMap) {
         // 获取自动派单系数配置(单趟耗时 = 装货时间 + 卸货时间 + 运输时间 + 返回时间)
-        TruckDispatchCoefficientVO truckDispatchVO = getAutoTruckDispatchByEntId(waybillOrder.getEntId());
+        TruckDispatchCoefficientVO truckDispatchVO = getAutoTruckDispatchByEntId(supEntId);
         //装货时长
         Integer vehicleLoadingHours = truckDispatchVO.getVehicleLoadingHours();
         //卸货货时长
@@ -446,7 +441,7 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
         Integer vehicleAvgSpeed = truckDispatchVO.getVehicleAvgSpeed();
         if (vehicleLoadingHours <= 0 || vehicleUnloadingHours <= 0 || vehicleAvgSpeed <= 0) {
             log.warn("企业{}的司机装货时长/卸货时长/平均行驶速度配置数据异常(装货:{},卸货:{},速度:{}),运单ID:{}",
-                    waybillOrder.getEntId(), vehicleLoadingHours, vehicleUnloadingHours, vehicleAvgSpeed, waybillOrder.getId());
+                    supEntId, vehicleLoadingHours, vehicleUnloadingHours, vehicleAvgSpeed, waybillOrder.getId());
             throw new BusinessPlatfromException(ErrorCodeEnum.DATA_NOT_EXIST, "司机配置的装货时长/卸货时长/平均行驶速度需要大于0!");
         }
         //查询运单装卸货地址
@@ -491,14 +486,15 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
      * @param waybillOrder
      */
     private void checkContinuousUnload(KwtWaybillOrder waybillOrder, Map<Integer, KwtWaybillOrderAddress> addressMap) {
+        Long supEntId = getSupplierId(waybillOrder);
         // 获取司机行为规则配置(连续准时卸货次数)
-        DriverConductRulesVO driverRulesVO = getDriverConductRulesByEntId(waybillOrder.getEntId());
+        DriverConductRulesVO driverRulesVO = getDriverConductRulesByEntId(supEntId);
         //连续卸货次数
         Integer continuousOnTimes = driverRulesVO.getContinuousOnTimeUnloadTimes();
         //连续卸货分数
         Integer continuousUnloadScore = driverRulesVO.getContinuousOnTimeUnloadScore();
         if (continuousOnTimes <= 0 || continuousUnloadScore <= 0) {
-            log.warn("【连续准时卸货】该司机无需加分,企业{}的连续按时到场配置次数/分数异常,运单ID:{}", waybillOrder.getEntId(), waybillOrder.getId());
+            log.warn("【连续准时卸货】该司机无需加分,企业{}的连续按时到场配置次数/分数异常,运单ID:{}", supEntId, waybillOrder.getId());
             throw new BusinessPlatfromException(ErrorCodeEnum.DATA_NOT_EXIST, "【连续准时卸货】配置次数/分数需大于0!");
         }
 
@@ -513,7 +509,7 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
         List<Long> nodeIds = new ArrayList<>();
         for (KwtWaybillOrderNode orderNode : waybillOrderNodeList) {
             KwtWaybillOrder wOrder = getWaybillOrder(orderNode.getWOrderId());
-            Boolean timeOut = isTimeOut(wOrder, addressMap, BigDecimal.ZERO);
+            Boolean timeOut = isTimeOut(supEntId, wOrder, addressMap, BigDecimal.ZERO);
             if (timeOut) {
                 log.info("司机{}存在超时情况,运单id:{}", orderNode.getDriverId(), orderNode.getWOrderId());
                 return;
@@ -536,7 +532,6 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
         updateNode(waybillOrder, nodeIds, continuousCount, continuousUnloadScore);
 
         //2 .更新司机分数(加分)
-        Long supEntId = getSupplierId(waybillOrder);
         updateDriverScore(supEntId, waybillOrder.getEntId(), waybillOrder.getDriverId(), continuousUnloadScore, "连续准时卸货");
 
         //3. 更新企业分数(加分)