Explorar el Código

Merge remote-tracking branch 'origin/dev_20251130' into dev_20251130

xucaiqin hace 2 semanas
padre
commit
0af11794ef
Se han modificado 15 ficheros con 182 adiciones y 89 borrados
  1. 2 2
      sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java
  2. 10 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/LocUtils.java
  3. 9 1
      sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java
  4. 4 2
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckRouteService.java
  5. 3 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java
  6. 12 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/AbstractWaybillOrderHandler.java
  7. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/LeaveMockHandler.java
  8. 63 28
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/UnloadingHandler.java
  9. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderSubtask.java
  10. 2 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderCirculateRepository.java
  11. 7 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtVehicleExceptionRepository.java
  12. 3 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  13. 42 40
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java
  14. 19 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/VehicleExceptionService.java
  15. 4 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

+ 2 - 2
sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java

@@ -209,8 +209,8 @@ public class AuthServiceImpl implements IAuthService {
         }
 
         /*缓存信息**/
-        AsyncFactory.execute(new AsyncProcess(loginBase, user, null, enterprise, remoteUserService));
-
+//        AsyncFactory.execute(new AsyncProcess(loginBase, user, null, enterprise, remoteUserService));
+        new AsyncProcess(loginBase, user, null, enterprise, remoteUserService).run();
         /*数据组装**/
 
         LoginResVo1 loginRes = new LoginResVo1();

+ 10 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/LocUtils.java

@@ -3,9 +3,12 @@ package com.sckw.core.utils;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -72,8 +75,9 @@ public class LocUtils {
      * @param pointCount  需要生成的轨迹点数量
      * @return 包含轨迹点位和耗时的结果对象
      */
-    public static RouteResult getDrivingRoutePointsWithDuration(String startLng, String startLat, 
-                                                                 String endLng, String endLat, int pointCount) {
+    public static RouteResult getDrivingRoutePointsWithDuration(String startLng, String startLat,
+                                                                String endLng, String endLat, int pointCount,
+                                                                LocalDate date) {
         if (StringUtils.isBlank(startLng) || StringUtils.isBlank(startLat) 
                 || StringUtils.isBlank(endLng) || StringUtils.isBlank(endLat)) {
             return null;
@@ -114,6 +118,10 @@ public class LocUtils {
             // 从所有点位中均匀选取指定数量的点
             //List<RoutePoint> selectedPoints = selectUniformPoints(allPoints, pointCount);
             LocalDateTime now = LocalDateTime.now();
+            if (Objects.nonNull( date)){
+                now = date.atTime(LocalTime.now());
+            }
+
             for (int i = 0; i < allPoints.size(); i++) {
                 RoutePoint point = allPoints.get(i);
                 point.setTs(now.plusMinutes(i * 5L));

+ 9 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java

@@ -1335,8 +1335,16 @@ public class KwcContractTradeService {
         kwcContractTrade.setAmount(amountTotal);
 
         kwcContractTrade.setId(contactId);
-        kwcContractTrade.setStatus(ContractStatusEnum.SAVE.getCode());
         kwcContractTrade.setSigningUrl(req.getContractFile());
+
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntTreeById(LoginUserHolder.getEntId());
+        if (Objects.nonNull(entCacheResDto) && StringUtils.isNotBlank(entCacheResDto.getEntTypes())) {
+            if (org.apache.commons.lang3.StringUtils.equals(entCacheResDto.getEntTypes(), String.valueOf(EntTypeEnum.SUPPLIER.getCode()))){
+                kwcContractTrade.setStatus(ContractStatusEnum.WAIT_APPROVE.getCode());
+            }else if (org.apache.commons.lang3.StringUtils.equals(entCacheResDto.getEntTypes(), String.valueOf(EntTypeEnum.PURCHASER.getCode()))){
+                kwcContractTrade.setStatus(ContractStatusEnum.SUBMIT.getCode());
+            }
+        }
         if (kwcContractTradeMapper.insert(kwcContractTrade) <= 0) {
             throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.INSERT_FAIL);
         }

+ 4 - 2
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckRouteService.java

@@ -316,7 +316,8 @@ public class KwfTruckRouteService {
                     startLat,
                     endLng,
                     endLat,
-                    20
+                    20,
+                    null
             );
 
             if (routeResult != null && com.sckw.core.utils.StringUtils.isNotBlank(routeResult.getPointInfo())) {
@@ -384,7 +385,8 @@ public class KwfTruckRouteService {
                         req.getStartLat(),
                         req.getEndLng(),
                         req.getEndLat(),
-                        20
+                        20,
+                         null
                 );
 
                 if (routeResult != null && StringUtils.isNotBlank(routeResult.getPointInfo())) {

+ 3 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java

@@ -1504,7 +1504,9 @@ public class TransportServiceImpl implements TransportRemoteService {
         if (CollectionUtils.isEmpty(logisticsOrderContracts)){
             return List.of();
         }
-        Map<Long, List<KwtLogisticsOrderContract>> logContractIdAndContractsMap = logisticsOrderContracts.stream().collect(Collectors.groupingBy(KwtLogisticsOrderContract::getContractId));
+
+        Map<Long, List<Long>> logContractIdAndContractsMap = logisticsOrderContracts.stream()
+                .collect(Collectors.groupingBy(KwtLogisticsOrderContract::getContractId, Collectors.mapping(KwtLogisticsOrderContract::getLOrderId, Collectors.toList())));
         List<Long> logIds = logisticsOrderContracts.stream()
                 .map(KwtLogisticsOrderContract::getLOrderId)
                 .distinct()

+ 12 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/AbstractWaybillOrderHandler.java

@@ -15,10 +15,7 @@ import com.sckw.fleet.api.model.dto.RUpdateDriverScoreDto;
 import com.sckw.fleet.api.model.vo.DriverConductRulesVO;
 import com.sckw.fleet.api.model.vo.TruckDispatchCoefficientVO;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
-import com.sckw.transport.model.KwtLogisticsOrderUnit;
-import com.sckw.transport.model.KwtWaybillOrder;
-import com.sckw.transport.model.KwtWaybillOrderNode;
-import com.sckw.transport.model.KwtWaybillOrderSubtask;
+import com.sckw.transport.model.*;
 import com.sckw.transport.model.param.*;
 import com.sckw.transport.repository.*;
 import lombok.extern.slf4j.Slf4j;
@@ -197,6 +194,17 @@ public abstract class AbstractWaybillOrderHandler<T extends WaybillOrderProcessP
     protected abstract String getRemark(T param, KwtWaybillOrder waybillOrder);
 
 
+    /**
+     * 查询物流订单
+     */
+    protected KwtLogisticsOrder getLogisticsOrder(Long waybillOrderId) {
+        KwtLogisticsOrder logisticsOrder = logisticsOrderRepository.queryByLogisticsOrderId(waybillOrderId);
+        if (logisticsOrder == null) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_FOUND, "物流订单数据不存在!");
+        }
+        return logisticsOrder;
+    }
+
     /**
      * 查询运单
      */

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

@@ -58,7 +58,7 @@ public class LeaveMockHandler extends AbstractWaybillOrderHandler<WaybillOrderLe
                 .collect(Collectors.toMap(KwtWaybillOrderTicket::getType, Function.identity(), (a, b) -> a));
         //1.填充毛重
         updateGrossAmount(param, ticketMap);
-        //2.填充装货
+        //2.填充运单装货重
         updateLoadAmount(param, waybillOrder, ticketMap);
     }
 

+ 63 - 28
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/UnloadingHandler.java

@@ -13,6 +13,7 @@ import com.sckw.core.utils.DistanceUtils;
 import com.sckw.fleet.api.model.vo.DriverConductRulesVO;
 import com.sckw.fleet.api.model.vo.TruckDispatchCoefficientVO;
 import com.sckw.order.api.model.OrderDetailVo;
+import com.sckw.order.api.model.TradeOrderSettlePara;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.param.WaybillOrderUnloadParam;
 import com.sckw.transport.repository.KwtWaybillOrderSubtaskRepository;
@@ -75,28 +76,26 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
 
     @Override
     protected void doBusiness(WaybillOrderUnloadParam param, KwtWaybillOrder waybill) {
-        KwtLogisticsOrder logisticsOrder = logisticsOrderRepository.queryByLogisticsOrderId(waybill.getLOrderId());
-        if (logisticsOrder == null) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_FOUND, "物流订单数据不存在!");
-        }
+        //查询物流订单
+        KwtLogisticsOrder logisticsOrder = getLogisticsOrder(waybill.getLOrderId());
+
         OrderDetailVo orderDetailVo = tradeOrderInfoService.queryByTradeOrderId(logisticsOrder.getTOrderId());
         if (orderDetailVo == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.TRADE_ORDER_NOT_FOUND, "交易订单数据不存在!");
         }
-
+        //计算净装货量
+        BigDecimal loadAmount = getLoadAmount(param);
         //按照装货量计算:推送到已完成状态
         if (orderDetailVo.getChargeType() == 1) {
             this.targetStatus = Global.NUMERICAL_ONE;
-            //1.计算净装货量
-            BigDecimal loadAmount = getLoadAmount(param);
 
-            //2. 填充运单装货量
-            KwtWaybillOrderSubtask subtask = updateWaybillOrderSubtask(waybill, loadAmount);
+            //1.更新物流订单装货量
+            updateLogisticsOrder(waybill, logisticsOrder, loadAmount);
 
-            //3. 更新物流订单
-            updateTradeOrder(logisticsOrder, loadAmount, subtask);
+            //2.更新贸易订单装货量
+            updateTradeOrder(logisticsOrder, loadAmount);
 
-            //4. 解绑车辆
+            //3.解绑车辆
             unbindTruck(waybill.getId());
 
         } else if (orderDetailVo.getChargeType() == 2) {
@@ -104,14 +103,15 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
                 throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "卸货净重和卸货凭证不能为空!");
             }
             this.targetStatus = Global.NUMERICAL_TWO;
-            //按照卸货量计算:推送到已卸货状态,更新子运单卸货净重
-            KwtWaybillOrderSubtask subtask = getWaybillSubtask(waybill.getId());
-            subtask.setUnloadAmount(param.getUnloadAmount());
-            subtask.setUnloadTime(new Date());
-            subtask.setUnloadUrl(param.getUnloadUrl());
-            subtask.setUnloadUploadTime(new Date());
-            subtask.setUnloadOperator(waybill.getDriverId());
-            waybillOrderSubtaskRepository.updateById(subtask);
+
+            //1.更新子运单卸货量
+            updateWaybillOrderSubtask(param, waybill);
+
+            //2.更新物流订单装货量
+            updateLogisticsOrderByTake(logisticsOrder, loadAmount);
+
+            //3.更新贸易订单装货量
+            updateTradeOrder(logisticsOrder, loadAmount);
         }
     }
 
@@ -142,20 +142,27 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
     }
 
     /**
-     * 填充运单装货量
+     * 按照卸货量计算:推送到已卸货状态,更新子运单卸货净重
+     * @param param
+     * @param waybill
      */
-    private KwtWaybillOrderSubtask updateWaybillOrderSubtask(KwtWaybillOrder waybill, BigDecimal loadAmount) {
+    private void updateWaybillOrderSubtask(WaybillOrderUnloadParam param, KwtWaybillOrder waybill) {
         KwtWaybillOrderSubtask subtask = getWaybillSubtask(waybill.getId());
-//        subtask.setLoadAmount(loadAmount);
-//        subtask.setLoadTime(new Date());
-//        waybillOrderSubtaskRepository.updateById(subtask);
-        return subtask;
+        subtask.setUnloadAmount(param.getUnloadAmount());
+        subtask.setUnloadTime(new Date());
+        subtask.setUnloadUrl(param.getUnloadUrl());
+        subtask.setUnloadUploadTime(new Date());
+        subtask.setUnloadOperator(waybill.getDriverId());
+        waybillOrderSubtaskRepository.updateById(subtask);
     }
 
     /**
      * 更新物流订单装货量和已委托量
      */
-    private void updateTradeOrder(KwtLogisticsOrder logisticsOrder, BigDecimal loadAmount, KwtWaybillOrderSubtask subtask) {
+    private void updateLogisticsOrder(KwtWaybillOrder waybill, KwtLogisticsOrder logisticsOrder, BigDecimal loadAmount) {
+        //查询子运单
+        KwtWaybillOrderSubtask subtask = getWaybillSubtask(waybill.getId());
+
         //物流订单装货量累加
         BigDecimal currentTotalLoad = Optional.ofNullable(logisticsOrder.getTotalLoadAmount())
                 .filter(amount -> amount.compareTo(BigDecimal.ZERO) > 0)
@@ -171,7 +178,7 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
         BigDecimal totalEntrustAmount = currentEntrust.subtract(subtractAmount);
         // 确保已委托量不为负数
         logisticsOrder.setEntrustAmount(totalEntrustAmount.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : totalEntrustAmount);
-        //如果当前运单的物流订单下没有其它进行中的运单,则修改单状态已完成
+        //如果当前运单的物流订单下没有其它进行中的运单,则修改物流订单状态已完成
         if (Objects.equals(LogisticsOrderV1Enum.NEARING_COMPLETION.getCode(), logisticsOrder.getStatus())) {
             List<KwtWaybillOrder> waybillOrderList = waybillOrderRepository
                     .findOneByLogOrderIdAndStatus(logisticsOrder.getId(), UNFINISHED_STATUSES, subtask.getWOrderId());
@@ -182,6 +189,34 @@ public class UnloadingHandler extends AbstractWaybillOrderHandler<WaybillOrderUn
         logisticsOrderRepository.updateById(logisticsOrder);
     }
 
+    /**
+     * 更新贸易订单装货量
+     */
+    private void updateTradeOrder(KwtLogisticsOrder logisticsOrder, BigDecimal loadAmount) {
+        //贸易订单装货量累加
+        TradeOrderSettlePara tradeOrderSettlePara = new TradeOrderSettlePara();
+        tradeOrderSettlePara.setTOrderId(logisticsOrder.getTOrderId());
+        tradeOrderSettlePara.setLoadAmount(loadAmount);
+
+        tradeOrderInfoService.orderSettle(tradeOrderSettlePara);
+        log.info("离场过磅更新贸易订单累计装货净重成功!贸易订单ID: {}, 本次装货净重: {}", logisticsOrder.getTOrderId(), loadAmount);
+    }
+
+
+    /**
+     * 更新物流订单装货量和已委托量
+     */
+    private void updateLogisticsOrderByTake(KwtLogisticsOrder logisticsOrder, BigDecimal loadAmount) {
+        //物流订单装货量累加
+        BigDecimal currentTotalLoad = Optional.ofNullable(logisticsOrder.getTotalLoadAmount())
+                .filter(amount -> amount.compareTo(BigDecimal.ZERO) > 0)
+                .orElse(BigDecimal.ZERO);
+        BigDecimal totalLoadAmount = currentTotalLoad.add(Optional.ofNullable(loadAmount).orElse(BigDecimal.ZERO));
+        logisticsOrder.setTotalLoadAmount(totalLoadAmount);
+        logisticsOrderRepository.updateById(logisticsOrder);
+        log.info("卸货更新物流订单累计装货净重成功!物流订单ID: {}, 本次装货净重: {}", logisticsOrder.getId(), loadAmount);
+    }
+
     /**
      * 解绑车辆
      * @param wOrderId

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderSubtask.java

@@ -27,7 +27,7 @@ public class KwtWaybillOrderSubtask extends BaseModel {
     private Long lOrderId;
 
     /**
-     * 物流订单id
+     * 单id
      */
     private Long wOrderId;
 

+ 2 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderCirculateRepository.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.core.model.constant.Global;
 import com.sckw.transport.dao.KwtLogisticsOrderCirculateMapper;
 import com.sckw.transport.model.KwtLogisticsOrderCirculate;
 import org.springframework.stereotype.Repository;
@@ -62,6 +63,7 @@ public class KwtLogisticsOrderCirculateRepository extends ServiceImpl<KwtLogisti
                 .eq(KwtLogisticsOrderCirculate::getLOrderId, logOrder)
                 .eq(Objects.nonNull(truckNo),KwtLogisticsOrderCirculate::getTruckNo, truckNo)
                 .eq(KwtLogisticsOrderCirculate::getEntId, entId)
+                .eq(KwtLogisticsOrderCirculate::getStatus, Global.NUMERICAL_ZERO) //0-开启,1-关闭
         );
     }
 

+ 7 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtVehicleExceptionRepository.java

@@ -57,7 +57,7 @@ public class KwtVehicleExceptionRepository extends ServiceImpl<KwtVehicleExcepti
      * @return 分页结果
      */
     public IPage<KwtVehicleException> queryExceptionImagePage1(Long entId, Integer exceptionType,
-                                                              String truckNo, int pageNum, int pageSize) {
+                                                              String truckNo,String startDate,String endDate, int pageNum, int pageSize) {
         // 构建子查询条件:当前记录的异常时间等于该车牌号的最大异常时间
         // 使用 (truck_no, exception_time) IN 子查询来确保只查询每个车牌号最新的一条
         StringBuilder subQuery = new StringBuilder();
@@ -72,6 +72,12 @@ public class KwtVehicleExceptionRepository extends ServiceImpl<KwtVehicleExcepti
         if (Objects.nonNull(exceptionType)) {
             subQuery.append(" AND exception_type = ").append(exceptionType);
         }
+        if (StringUtils.isNotBlank(startDate)) {
+            subQuery.append(" AND exception_time >= '").append(startDate).append("'");
+        }
+        if (StringUtils.isNotBlank(endDate)) {
+            subQuery.append(" AND exception_time <= '").append(endDate).append("'");
+        }
         if (StringUtils.isNotBlank(truckNo)) {
             // 转义单引号防止 SQL 注入
             String escapedTruckNo = truckNo.replace("'", "''");

+ 3 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -3191,7 +3191,7 @@ public class KwtLogisticsConsignmentService {
         logisticsOrderRepository.updateBatchById(logisticsOrders);
 
         //更新贸易订单数据
-        updateTradeOrder(tradeIds);
+       // updateTradeOrder(tradeIds);
         return Boolean.TRUE;
     }
 
@@ -3224,11 +3224,11 @@ public class KwtLogisticsConsignmentService {
 
         tradeOrderSettlePara.setTOrderId(tradeOrderId);
         BigDecimal loadAmount = orders.stream()
-                .filter(x -> Objects.nonNull(x.getLoadAmount()))
+                .filter(x -> Objects.nonNull(x.getTotalLoadAmount()))
                 .map(KwtLogisticsOrder::getLoadAmount)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
         BigDecimal unloadAmount = orders.stream()
-                .filter(x -> Objects.nonNull(x.getUnloadAmount()))
+                .filter(x -> Objects.nonNull(x.getTotalUnloadAmount()))
                 .map(KwtLogisticsOrder::getUnloadAmount)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
         tradeOrderSettlePara.setLoadAmount(loadAmount);

+ 42 - 40
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -3657,6 +3657,7 @@ public class KwtWaybillOrderV1Service {
         if (Objects.isNull(subtask)){
             throw new BusinessException("子运单信息不存在");
         }
+        KwtLogisticsOrder kwtLogistics= kwtLogisticsOrderRepository.queryByLogisticsOrderId(subtask.getLOrderId());
         KwtWaybillOrder updateOrder = new KwtWaybillOrder();
         updateOrder.setId(billOrder.getId());
         KwtWaybillOrderSubtask updateSubtask = new KwtWaybillOrderSubtask();
@@ -3680,11 +3681,12 @@ public class KwtWaybillOrderV1Service {
                 updateSubtask.setUnloadUploadTime(DateUtils.parse(req.getUploadTime(), DateUtils.DATE_TIME_PATTERN));
             }
             boolean b = kwtWaybillOrderRepository.updateById(updateOrder) && kwtWaybillOrderSubtaskRepository.updateById(updateSubtask);
-            //修改物流订单数据
-            KwtLogisticsOrder kwtLogistics= kwtLogisticsOrderRepository.queryByLogisticsOrderId(subtask.getLOrderId());
             //获取更新 订单状态
-            KwtLogisticsOrder kwtLogisticsOrder = getKwtLogisticsOrder(kwtLogistics, subtask,status);
-            boolean b1 = kwtLogisticsOrderRepository.updateById(kwtLogisticsOrder);
+            if (Objects.equals(status, CarWaybillV1Enum.COMPLETED.getCode())){
+                KwtLogisticsOrder kwtLogisticsOrder = getKwtLogisticsOrder(kwtLogistics, subtask,status);
+                kwtLogisticsOrderRepository.updateById(kwtLogisticsOrder);
+            }
+
             //如果物流订单状态是已完成需要通知贸易订单完成
 
             // 存储记录
@@ -3697,7 +3699,7 @@ public class KwtWaybillOrderV1Service {
             }
 
             saveNode(billOrder, subtask, status,remark);
-            if (!b || !b1){
+            if (!b ){
                 throw new BusinessException("审核运单失败");
             }
             //查询司机是否存在已绑定的车辆
@@ -3737,31 +3739,45 @@ public class KwtWaybillOrderV1Service {
             }
             //如果审核的状态是 完成,那么就要去查询物流订单状态是完结中,并且所有物流订单下的运单全部是完成或者取消如果是则更新状态为已完成
             //修改物流订单数据
-            updateLogisticOrder(subtask);
+            KwtLogisticsOrder kwtLogisticsOrder = getKwtLogisticsOrder(kwtLogistics, subtask,status);
+            kwtLogisticsOrderRepository.updateById(kwtLogisticsOrder);
+           // updateLogisticOrder(subtask,kwtLogistics);
             //查询司机是否存在已绑定的车辆
             log.info("运单由审核驳回审核完成,解绑司机与车辆关系,运单id:{},企业id:{},司机id:{}", billOrder.getId(), billOrder.getEntId(), billOrder.getDriverId());
             remoteFleetService.unbindTruck(billOrder.getEntId(), billOrder.getDriverId());
             return Boolean.TRUE;
         }
+        noticeTraderOrder(status, subtask,kwtLogistics);
         //计算司机分值
         calculateAutoDispatchScore(billOrder, status);
 
         return Boolean.FALSE;
     }
 
-    private void updateLogisticOrder(KwtWaybillOrderSubtask subtask) {
-        KwtLogisticsOrder kwtLogistics= kwtLogisticsOrderRepository.queryByLogisticsOrderId(subtask.getLOrderId());
+    private void updateLogisticOrder(KwtWaybillOrderSubtask subtask,KwtLogisticsOrder kwtLogistics) {
         if (Objects.nonNull(kwtLogistics) && Objects.equals(kwtLogistics.getStatus(), LogisticsOrderV1Enum.NEARING_COMPLETION.getCode())){
             List<KwtWaybillOrderSubtask> waybillOrderSubtasks = kwtWaybillOrderSubtaskRepository.queryByLogId(subtask.getLOrderId());
             boolean b2 = waybillOrderSubtasks.stream()
                     .allMatch(x -> Arrays.asList(CarWaybillV1Enum.COMPLETED.getCode(), CarWaybillV1Enum.CANCELLED.getCode()).contains(x.getStatus()));
+            KwtLogisticsOrder logisticsOrder = new KwtLogisticsOrder();
+            logisticsOrder.setId(kwtLogistics.getId());
             if (b2){
-                KwtLogisticsOrder logisticsOrder = new KwtLogisticsOrder();
-                logisticsOrder.setId(kwtLogistics.getId());
                 logisticsOrder.setStatus(LogisticsOrderV1Enum.COMPLETED.getCode());
                 log.info("运单状态由审核驳回变成审核完成,修改物流订单状态为已完成,物流订单id:{}", kwtLogistics.getId());
-                kwtLogisticsOrderRepository.updateById(logisticsOrder);
+
             }
+            BigDecimal unloadAmount  = Objects.isNull(kwtLogistics.getUnloadAmount())  ? BigDecimal.ZERO: kwtLogistics.getUnloadAmount();
+            BigDecimal subUnloadAmount = Objects.isNull(subtask.getUnloadAmount()) ? BigDecimal.ZERO: subtask.getUnloadAmount();
+            BigDecimal entrustAmount  = Objects.isNull(kwtLogistics.getEntrustAmount())  ? BigDecimal.ZERO: kwtLogistics.getEntrustAmount();
+            BigDecimal subEntrustAmount = Objects.isNull(subtask.getEntrustAmount()) ? BigDecimal.ZERO: subtask.getEntrustAmount();
+            KwtLogisticsOrder kwtLogisticsOrder = new KwtLogisticsOrder();
+            kwtLogisticsOrder.setId(kwtLogistics.getId());
+            BigDecimal subtractAmount = entrustAmount.subtract(subEntrustAmount);
+            BigDecimal entrust = subtractAmount.compareTo(BigDecimal.ZERO) >= 0
+                    ? subtractAmount : new BigDecimal("0.00");
+            kwtLogisticsOrder.setEntrustAmount(entrust);
+            kwtLogisticsOrder.setTotalUnloadAmount(unloadAmount.add(subUnloadAmount));
+            kwtLogisticsOrderRepository.updateById(logisticsOrder);
         }
     }
 
@@ -4154,34 +4170,14 @@ public class KwtWaybillOrderV1Service {
     }
 
 
-    private void noticeTraderOrder(KwtLogisticsOrder kwtLogisticsOrder, KwtLogisticsOrder kwtLogistics) {
-
-        if (!Objects.equals(kwtLogisticsOrder.getStatus(),LogisticsOrderV1Enum.COMPLETED.getCode())){
+    private void noticeTraderOrder(Integer status, KwtWaybillOrderSubtask subtask,KwtLogisticsOrder kwtLogistics) {
+        if (!Objects.equals(status,CarWaybillV1Enum.COMPLETED.getCode())){
+            log.info("物流订单状态不是已完成,不通知贸易订单完结");
            return;
         }
-        // 根据贸易订单id查询物理订单
-        List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderRepository.queryByTradeOrderId(kwtLogisticsOrder.getTOrderId());
-        if (org.apache.commons.collections4.CollectionUtils.isEmpty(kwtLogisticsOrders)){
-            return;
-        }
-        //判断所有的物流订单都都已经完成
-        boolean b = kwtLogisticsOrders.stream()
-                .allMatch(x -> Arrays.asList(LogisticsOrderV1Enum.COMPLETED.getCode(), LogisticsOrderV1Enum.REJECT_ORDER.getCode()).contains(x.getStatus()));
-        if (!b){
-            return;
-        }
         TradeOrderSettlePara tradeOrderSettlePara = new TradeOrderSettlePara();
         tradeOrderSettlePara.setTOrderId(kwtLogistics.getTOrderId());
-        BigDecimal loadAmount = kwtLogisticsOrders.stream()
-                .map(KwtLogisticsOrder::getLoadAmount)
-                .filter(Objects::nonNull)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        BigDecimal unloadAmount = kwtLogisticsOrders.stream()
-                .map(KwtLogisticsOrder::getUnloadAmount)
-                .filter(Objects::nonNull)
-                .reduce(BigDecimal.ZERO, BigDecimal::add);
-        tradeOrderSettlePara.setLoadAmount(loadAmount);
-        tradeOrderSettlePara.setUnloadAmount(unloadAmount);
+        tradeOrderSettlePara.setUnloadAmount(subtask.getUnloadAmount());
         log.info("运单审核通过修改贸易订单状态请求参数:{}",JSON.toJSONString(tradeOrderSettlePara));
         tradeOrderInfoService.orderSettle(tradeOrderSettlePara);
     }
@@ -4208,15 +4204,18 @@ public class KwtWaybillOrderV1Service {
             throw new BusinessException("物流订单信息不存在");
         }
         //调物流订单完结订单
-        BigDecimal loadAmount  = Objects.isNull(kwtLogistics.getLoadAmount())  ? BigDecimal.ZERO: kwtLogistics.getLoadAmount();
-        BigDecimal subLoadAmount = Objects.isNull(subtask.getLoadAmount()) ? BigDecimal.ZERO: subtask.getLoadAmount();
+       // BigDecimal loadAmount  = Objects.isNull(kwtLogistics.getLoadAmount())  ? BigDecimal.ZERO: kwtLogistics.getLoadAmount();
+       // BigDecimal subLoadAmount = Objects.isNull(subtask.getLoadAmount()) ? BigDecimal.ZERO: subtask.getLoadAmount();
         BigDecimal unloadAmount  = Objects.isNull(kwtLogistics.getUnloadAmount())  ? BigDecimal.ZERO: kwtLogistics.getUnloadAmount();
         BigDecimal subUnloadAmount = Objects.isNull(subtask.getUnloadAmount()) ? BigDecimal.ZERO: subtask.getUnloadAmount();
-
-
+        BigDecimal entrustAmount  = Objects.isNull(kwtLogistics.getEntrustAmount())  ? BigDecimal.ZERO: kwtLogistics.getEntrustAmount();
+        BigDecimal subEntrustAmount = Objects.isNull(subtask.getEntrustAmount()) ? BigDecimal.ZERO: subtask.getEntrustAmount();
         KwtLogisticsOrder kwtLogisticsOrder = new KwtLogisticsOrder();
         kwtLogisticsOrder.setId(kwtLogistics.getId());
-        kwtLogisticsOrder.setTotalLoadAmount(loadAmount.add(subLoadAmount));
+        BigDecimal subtractAmount = entrustAmount.subtract(subEntrustAmount);
+        BigDecimal entrust = subtractAmount.compareTo(BigDecimal.ZERO) >= 0
+                ? subtractAmount : new BigDecimal("0.00");
+        kwtLogisticsOrder.setEntrustAmount(entrust);
         kwtLogisticsOrder.setTotalUnloadAmount(unloadAmount.add(subUnloadAmount));
 
         //如果审核的状态是 完成,那么就要去查询物流订单状态是完结中,并且所有物流订单下的运单全部是完成或者取消如果是则更新状态为已完成
@@ -4327,6 +4326,9 @@ public class KwtWaybillOrderV1Service {
         waybillOrderNodeVo.setTimelines(voList);
         // 获取时间节点
         List<WaybillOrderNodeVo.WaybillOrderNode> nodeList = getWaybillOrderNodes(voList);
+        nodeList = nodeList.stream()
+                .sorted(Comparator.comparing(WaybillOrderNodeVo.WaybillOrderNode::getOrderStatus))
+                .collect(Collectors.toList());
         waybillOrderNodeVo.setWaybillOrderNodes(nodeList);
         return waybillOrderNodeVo;
     }

+ 19 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/VehicleExceptionService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.sckw.core.model.enums.AddressTypeEnum;
+import com.sckw.core.utils.DateUtils;
 import com.sckw.core.web.response.BaseIotResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.transport.api.feign.VehicleTraceClient;
@@ -61,6 +62,14 @@ public class VehicleExceptionService {
      */
     public PageDataResult<VehicleExceptionVo> queryExceptionList(VehicleExceptionQueryReq req) {
         log.info("分页查询车辆异常信息,参数:{}", JSON.toJSONString( req));
+        if (StringUtils.isBlank( req.getStartDate())){
+            String startDate = DateUtils.format(DateUtils.getStartOfDay(new Date()), DateUtils.DATE_TIME_PATTERN);
+            req.setStartDate(startDate);
+        }
+        if (StringUtils.isBlank( req.getEndDate())){
+            String endDate = DateUtils.format(DateUtils.getEndOfDay(new Date()), DateUtils.DATE_TIME_PATTERN);
+            req.setEndDate(endDate);
+        }
         // 分页查询异常图片数据
         IPage<KwtVehicleException> page = exceptionImageRepository.queryExceptionImagePage(
                 req.getEntId(),
@@ -257,11 +266,21 @@ public class VehicleExceptionService {
      */
     public PageDataResult<VehicleExceptionVo> exceptionJkList(VehicleExceptionQueryReq req) {
         log.info("分页查询车辆异常监控列表, req: {}", JSON.toJSONString( req));
+        if (StringUtils.isBlank( req.getStartDate())){
+            String startDate = DateUtils.format(DateUtils.getStartOfDay(new Date()), DateUtils.DATE_TIME_PATTERN);
+            req.setStartDate(startDate);
+        }
+        if (StringUtils.isBlank( req.getEndDate())){
+            String endDate = DateUtils.format(DateUtils.getEndOfDay(new Date()), DateUtils.DATE_TIME_PATTERN);
+            req.setEndDate(endDate);
+        }
         // 分页查询异常图片数据
         IPage<KwtVehicleException> page = exceptionImageRepository.queryExceptionImagePage1(
                 req.getEntId(),
                 req.getExceptionType(),
                 req.getTruckNo(),
+                req.getStartDate(),
+                req.getEndDate(),
                 req.getPageNum(),
                 req.getPageSize()
         );

+ 4 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -1572,7 +1572,7 @@ public class kwfTruckTraceService {
              endLat = latitude;
         }
 
-        LocUtils.RouteResult routeResult = generateRoutePointsWithDuration(startLng, startLat, endLng, endLat);
+        LocUtils.RouteResult routeResult = generateRoutePointsWithDuration(startLng, startLat, endLng, endLat, date);
         if (routeResult == null || com.sckw.core.utils.StringUtils.isBlank(routeResult.getPointInfo())) {
             log.error("高德API生成轨迹点位失败,起点: {},{} 终点: {},{}", startLng, startLat, endLng, endLat);
             throw new BusinessException("生成轨迹失败:高德API生成轨迹点位失败");
@@ -1665,7 +1665,7 @@ public class kwfTruckTraceService {
     }
 
 
-    private LocUtils.RouteResult generateRoutePointsWithDuration(String startLng, String startLat, String endLng, String endLat) {
+    private LocUtils.RouteResult generateRoutePointsWithDuration(String startLng, String startLat, String endLng, String endLat,LocalDate date) {
         try {
             log.info("开始调用高德API生成轨迹点位和耗时,起点: {},{} 终点: {},{}",
                     startLng, startLat, endLng, endLat);
@@ -1676,7 +1676,8 @@ public class kwfTruckTraceService {
                     startLat,
                     endLng,
                     endLat,
-                    20
+                    20,
+                     date
             );
 
             if (routeResult != null && com.sckw.core.utils.StringUtils.isNotBlank(routeResult.getPointInfo())) {