Explorar o código

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

donglang hai 7 meses
pai
achega
a4bcb2902c
Modificáronse 16 ficheiros con 303 adicións e 94 borrados
  1. 1 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/UrlConstants.java
  2. 3 3
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java
  3. 6 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/CapacityStatusReq.java
  4. 4 2
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetRepository.java
  5. 2 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRepository.java
  6. 4 4
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  7. 3 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/CurrentTaskTraceReq.java
  8. 4 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/KwfTruckTraceReplayReq.java
  9. 10 10
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/VehiclesTrajectoryReq.java
  10. 26 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/TruckInfoVo.java
  11. 32 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderUnitRepository.java
  12. 7 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderAddressRepository.java
  13. 19 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java
  14. 7 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderSubtaskRepository.java
  15. 174 72
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java
  16. 1 0
      sql/2025/10/30/2025_10_30_cxf_create.sql

+ 1 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/constant/UrlConstants.java

@@ -5,7 +5,7 @@ public class UrlConstants {
     /**
      * 获取轨迹的请求路径
      */
-    public static final String QUERY_TRACE_URL = "api/transfer/pageVehicleDataList";
+    public static final String QUERY_TRACE_URL = "api/transfer/queryVehicleDataList";
     /**
      * 上报车辆轨迹接口
      */

+ 3 - 3
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java

@@ -310,10 +310,10 @@ public class KwfTruckController {
     /**
      *  获取运力实况
      **/
-    @GetMapping("/queryTotalCapacityStatus")
+    @PostMapping("/queryTotalCapacityStatus")
     @Operation(summary = "获取总运力实况", description = "获取总运力实况")
-    public BaseResult<CapacityTotalStatusVo> queryTotalCapacityStatus() {
-        return BaseResult.success(truckService.queryTotalCapacityStatus());
+    public BaseResult<CapacityTotalStatusVo> queryTotalCapacityStatus(@RequestBody CapacityStatusReq req) {
+        return BaseResult.success(truckService.queryTotalCapacityStatus(req));
     }
 
 

+ 6 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/CapacityStatusReq.java

@@ -18,4 +18,10 @@ public class CapacityStatusReq implements Serializable {
      */
     @Schema(description = "车队名称")
     private String fleetName;
+
+    /**
+     * 企业ID
+     */
+    @Schema(description = "企业ID")
+    private Long entId;
 }

+ 4 - 2
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetRepository.java

@@ -11,6 +11,7 @@ import com.sckw.fleet.model.KwfFleet;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
 
@@ -21,9 +22,10 @@ import java.util.Set;
 @Repository
 public class KwfFleetRepository extends ServiceImpl<KwfFleetMapper, KwfFleet> {
 
-    public KwfFleet queryByName(String fleetName) {
+    public KwfFleet queryByEntIdAndName(Long entId,String fleetName) {
         return getOne(Wrappers.<KwfFleet>lambdaQuery()
                 .eq(BaseModel::getDelFlag,0)
+                .eq(Objects.nonNull(entId),KwfFleet::getEntId, entId)
                 .like(StringUtils.isNotBlank(fleetName),KwfFleet::getName, fleetName)
                 .orderByDesc(BaseModel::getId)
                 .last("limit 1"));
@@ -50,6 +52,6 @@ public class KwfFleetRepository extends ServiceImpl<KwfFleetMapper, KwfFleet> {
     public List<KwfFleet> findFleetByEntId(Long entId) {
         return list(Wrappers.<KwfFleet>lambdaQuery()
                 .eq(BaseModel::getDelFlag,0)
-                .eq(KwfFleet::getEntId,entId));
+                .eq(Objects.nonNull(entId),KwfFleet::getEntId,entId));
     }
 }

+ 2 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRepository.java

@@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 
 
@@ -21,7 +22,7 @@ public class KwfTruckRepository extends ServiceImpl<KwfTruckMapper, KwfTruck> {
     public KwfTruck getOneByEntId(Long entId) {
         return getOne(Wrappers.<KwfTruck>lambdaQuery()
                 .eq(BaseModel::getDelFlag,0)
-                .eq(KwfTruck::getEntId, entId)
+                .eq(Objects.nonNull(entId),KwfTruck::getEntId, entId)
                 .orderByDesc(BaseModel::getCreateTime)
                 .last("limit 1"));
     }

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

@@ -1359,10 +1359,10 @@ public class KwfTruckService {
         //查询车队
         List<KwfFleet> kwfFleets = Lists.newArrayList();
         if (StringUtils.isNotBlank(req.getFleetName())){
-            KwfFleet fleet = kwfFleetRepository.queryByName(req.getFleetName());
+            KwfFleet fleet = kwfFleetRepository.queryByEntIdAndName(req.getEntId() ,req.getFleetName());
             kwfFleets.add(fleet);
         }else {
-            kwfFleets = kwfFleetRepository.findAll();
+            kwfFleets = kwfFleetRepository.findFleetByEntId(req.getEntId());
         }
         if (CollectionUtils.isEmpty(kwfFleets)){
             return new CapacityStatusVo();
@@ -1392,9 +1392,9 @@ public class KwfTruckService {
     }
 
 
-    public CapacityTotalStatusVo queryTotalCapacityStatus() {
+    public CapacityTotalStatusVo queryTotalCapacityStatus(CapacityStatusReq req) {
         log.info("获取运力实况总是统计");
-        List<KwfFleet> kwfFleets = kwfFleetRepository.findAll();
+        List<KwfFleet> kwfFleets = kwfFleetRepository.findFleetByEntId(req.getEntId());
         if (CollectionUtils.isEmpty(kwfFleets)){
             //初始化数据
             return initCapacityTotalStatusVo();

+ 3 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/CurrentTaskTraceReq.java

@@ -7,6 +7,9 @@ import java.io.Serial;
 import java.io.Serializable;
 
 
+/**
+ * @author PC
+ */
 @Data
 public class CurrentTaskTraceReq implements Serializable {
     @Serial

+ 4 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/KwfTruckTraceReplayReq.java

@@ -27,4 +27,8 @@ public class KwfTruckTraceReplayReq extends PageReq implements Serializable {
      */
     @Schema(description = "任务创建时间上限")
     private String endTime;
+    /**
+     * 车牌号
+     */
+    private String truckNo;
 }

+ 10 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/VehiclesTrajectoryReq.java

@@ -45,56 +45,56 @@ public class VehiclesTrajectoryReq {
      * 车速(km/h)
      */
     @Schema(description = "车速(km/h)")
-    private Float speed  =15.0f;
+    private Float speed;
 
     /**
      * GPS状态
      */
     @Schema(description = "GPS状态")
-    private String gpsStatus = "1";
+    private String gpsStatus;
     /**
      * 行驶方向(角度)
      */
     @Schema(description = "行驶方向(角度)")
-    private Float direction = 0.0f;
+    private Float direction ;
 
     /**
      * 燃油液位(%)
      */
     @Schema(description = "燃油液位(%)")
-    private Float fuelLevel = 0.0f;
+    private Float fuelLevel;
 
     /**
      * 里程数(km)
      */
     @Schema(description = "里程数(km)")
-    private String mileage= "1.0";
+    private String mileage;
 
     /**
      * 发动机温度(℃)
      */
     @Schema(description = "发动机温度(℃)")
-    private Float engineTemp = 25.0f;
+    private Float engineTemp ;
 
     /**
      * 电池电压(V)
      */
     @Schema(description = "电池电压(V)")
-    private Float batteryVoltage = 12.0f;
+    private Float batteryVoltage ;
 
     /**
      * 车辆状态
      */
 
     @Schema(description = "车辆状态")
-    private String status = "0";
+    private String status ;
 
     /**
      * 运单号
      */
 
     @Schema(description = "运单号")
-    private String wOrderNo = "55121245";
+    private String wOrderNo ;
     /**
      * 运单状态
      */
@@ -106,7 +106,7 @@ public class VehiclesTrajectoryReq {
      * 报警代码
      */
     @Schema(description = "报警代码")
-    private String alarmCode = "123";
+    private String alarmCode ;
 
     /**
      * 车辆信息

+ 26 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/TruckInfoVo.java

@@ -25,6 +25,32 @@ public class TruckInfoVo implements Serializable {
      */
     @Schema(description = "车牌号")
     private String truckNo;
+    /**
+     * 车辆id
+     */
+    private String truckId;
+    /**
+     * 司机id
+     */
+    private String driveId;
+    /**
+     * 司机名称
+     */
+    private String driveName;
+    /**
+     * 承运单位
+     */
+    private String  carrier ;
+
+    /**
+     * 司机手机号
+     */
+    private String drivePhone;
+    /**
+     * 运单状态
+     */
+    private String taskStatus;
+
     /**
      * GPS状态
      */

+ 32 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderUnitRepository.java

@@ -0,0 +1,32 @@
+package com.sckw.transport.repository;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.transport.dao.KwtLogisticsOrderUnitMapper;
+import com.sckw.transport.model.KwtLogisticsOrderUnit;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author PC
+ */
+@Repository
+public class KwtLogisticsOrderUnitRepository extends ServiceImpl<KwtLogisticsOrderUnitMapper, KwtLogisticsOrderUnit> {
+    public KwtLogisticsOrderUnit queryByLOrderIdAndUnitType(Long lOrderId, int unitType) {
+        return getOne(Wrappers.<KwtLogisticsOrderUnit>lambdaQuery()
+                .eq(KwtLogisticsOrderUnit::getDelFlag,0)
+                .eq(KwtLogisticsOrderUnit::getLOrderId,lOrderId)
+                .eq(KwtLogisticsOrderUnit::getUnitType,unitType)
+                .orderByDesc(KwtLogisticsOrderUnit::getId)
+                .last("limit 1"));
+    }
+
+    public List<KwtLogisticsOrderUnit> queryByLOrderIdsAndUnitType(Set<Long> lOrderIds, int unitType) {
+        return list(Wrappers.<KwtLogisticsOrderUnit>lambdaQuery()
+                .eq(KwtLogisticsOrderUnit::getDelFlag,0)
+                .in(KwtLogisticsOrderUnit::getLOrderId,lOrderIds)
+                .eq(KwtLogisticsOrderUnit::getUnitType,unitType));
+    }
+}

+ 7 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderAddressRepository.java

@@ -1,5 +1,6 @@
 package com.sckw.transport.repository;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sckw.transport.dao.KwtWaybillOrderAddressMapper;
@@ -21,4 +22,10 @@ public class KwtWaybillOrderAddressRepository extends ServiceImpl<KwtWaybillOrde
                 .eq(KwtWaybillOrderAddress::getWOrderId, wOrderId)
                 .eq(KwtWaybillOrderAddress::getDelFlag, 0));
     }
+
+    public List<KwtWaybillOrderAddress> queryBywOrderIds(List<Long> wOrderIds) {
+        return list(Wrappers.<KwtWaybillOrderAddress>lambdaQuery()
+                .eq(KwtWaybillOrderAddress::getDelFlag, 0)
+                .in(KwtWaybillOrderAddress::getWOrderId, wOrderIds));
+    }
 }

+ 19 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java

@@ -1,6 +1,7 @@
 package com.sckw.transport.repository;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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;
@@ -23,12 +24,13 @@ import java.util.Objects;
 
 @Repository
 public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper, KwtWaybillOrder> {
-    public Page<KwtWaybillOrder> findPage(int pageNum, int pageSize, Date beforeDate, Date date) {
+    public Page<KwtWaybillOrder> findPage(String truckNo,int pageNum, int pageSize, Date beforeDate, Date date) {
         Page<KwtWaybillOrder> page = new Page<>(pageNum, pageSize);
         LambdaQueryWrapper<KwtWaybillOrder> wrapper = Wrappers.<KwtWaybillOrder>lambdaQuery()
                 .ge(KwtWaybillOrder::getCreateTime, beforeDate)
                 .le(KwtWaybillOrder::getCreateTime, date)
                 .eq(KwtWaybillOrder::getDelFlag, 0)
+                .eq(StringUtils.isNotBlank(truckNo),KwtWaybillOrder::getTruckNo, truckNo)
                 .orderByDesc(KwtWaybillOrder::getCreateTime);
         return page(page,wrapper);
     }
@@ -75,4 +77,20 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
                 .eq(Objects.nonNull(entId),KwtWaybillOrder::getEntId, entId)
                 .eq(KwtWaybillOrder::getDelFlag, 0));
     }
+
+    public KwtWaybillOrder findOneByTruckId(String truckId) {
+        return getOne(Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .eq(KwtWaybillOrder::getTruckId,truckId)
+                .eq(KwtWaybillOrder::getDelFlag,0)
+                .orderByDesc(KwtWaybillOrder::getId)
+                .last("limit 1"));
+    }
+
+    public KwtWaybillOrder findOneByWOrderNo(String wOrderNo) {
+        return getOne(Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .eq(KwtWaybillOrder::getWOrderNo,wOrderNo)
+                .eq(KwtWaybillOrder::getDelFlag,0)
+                .orderByDesc(KwtWaybillOrder::getId)
+                .last("limit 1"));
+    }
 }

+ 7 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderSubtaskRepository.java

@@ -34,4 +34,11 @@ public class KwtWaybillOrderSubtaskRepository extends ServiceImpl<KwtWaybillOrde
                 .eq(BaseModel::getDelFlag,0)
                 .eq(KwtWaybillOrderSubtask::getEntId,entId));
     }
+
+    public List<KwtWaybillOrderSubtask> queryByWOrderIds(List<Long> wOrderIds) {
+
+        return list(Wrappers.<KwtWaybillOrderSubtask>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .in(KwtWaybillOrderSubtask::getWOrderId,wOrderIds));
+    }
 }

+ 174 - 72
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -1,9 +1,9 @@
 package com.sckw.transport.service;
 
 import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Maps;
 import com.sckw.contract.api.RemoteContractService;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.UrlConstants;
@@ -24,8 +24,10 @@ import com.sckw.payment.api.dubbo.PaymentDubboService;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.KwsEnterpriseResDto;
 import com.sckw.transport.common.config.UrlConfigProperties;
+import com.sckw.transport.model.KwtLogisticsOrderUnit;
 import com.sckw.transport.model.KwtWaybillOrder;
 import com.sckw.transport.model.KwtWaybillOrderAddress;
 import com.sckw.transport.model.KwtWaybillOrderSubtask;
@@ -39,12 +41,12 @@ import com.sckw.transport.model.param.VehiclesTrajectoryReq;
 import com.sckw.transport.model.vo.CurrentTaskTraceReqVo;
 import com.sckw.transport.model.vo.KwfTruckTraceReplayVo;
 import com.sckw.transport.model.vo.TruckInfoVo;
+import com.sckw.transport.repository.KwtLogisticsOrderUnitRepository;
 import com.sckw.transport.repository.KwtWaybillOrderAddressRepository;
 import com.sckw.transport.repository.KwtWaybillOrderRepository;
 import com.sckw.transport.repository.KwtWaybillOrderSubtaskRepository;
 import com.sckw.transport.response.CollectZjxlResponse;
 import com.sckw.transport.service.zj.VehicleCollectService;
-import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -53,7 +55,10 @@ import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
+import java.time.ZoneOffset;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 
@@ -69,7 +74,7 @@ public class kwfTruckTraceService {
     private final UrlConfigProperties urlConfigProperties;
     private final KwtWaybillOrderSubtaskRepository kwtWaybillOrderSubtaskRepository;
     private final VehicleCollectService vehicleCollectService;
-
+    private final KwtLogisticsOrderUnitRepository kwtLogisticsOrderUnitRepository;
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     RemoteSystemService remoteSystemService;
 
@@ -96,6 +101,9 @@ public class kwfTruckTraceService {
 
     public PageDataResult<KwfTruckTraceReplayVo> findPage(KwfTruckTraceReplayReq req) {
         log.info("查询历轨迹回放氢气参数:{}", req);
+        if (StringUtils.isBlank(req.getTruckNo())){
+            return PageDataResult.empty(req.getPageNum(), req.getPageSize());
+        }
         Date date = new Date();
         if (StringUtils.isNotBlank(req.getStartTime())){
             date = DateUtils.formatDate(req.getStartTime());
@@ -104,29 +112,45 @@ public class kwfTruckTraceService {
         if (StringUtils.isNotBlank(req.getEndTime())){
             beforeDate = DateUtils.formatDate(req.getEndTime());
         }
-        Page<KwtWaybillOrder> page = kwtWaybillOrderRepository.findPage(req.getPageNum(), req.getPageSize(), beforeDate, date);
+        Page<KwtWaybillOrder> page = kwtWaybillOrderRepository.findPage(req.getTruckNo(),req.getPageNum(), req.getPageSize(), beforeDate, date);
         List<KwtWaybillOrder> records = page.getRecords();
         if(CollectionUtils.isEmpty(page.getRecords())) {
             return PageDataResult.success(req.getPageNum(), req.getPageSize(),0L, null);
         }
         //查询企业 获取承运单位
-        List<Long> entIds = records.stream().map(KwtWaybillOrder::getId).distinct().collect(Collectors.toList());
+        List<Long> entIds = records.stream().map(KwtWaybillOrder::getEntId).distinct().collect(Collectors.toList());
         //运单id
         List<Long> wOrderIds = records.stream().map(KwtWaybillOrder::getId).collect(Collectors.toList());
+        //通过运单号查询订单
+        List<KwtWaybillOrderSubtask> waybillOrderSubtasks = kwtWaybillOrderSubtaskRepository.queryByWOrderIds(wOrderIds);
+
+        //关联订单id
+        Set<Long>  lOrderIds = null;
+        //订单号映射订单对象
+        Map<String, KwtWaybillOrderSubtask> worderNoAndWorderMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(waybillOrderSubtasks)){
+            lOrderIds = waybillOrderSubtasks.stream().map(KwtWaybillOrderSubtask::getLOrderId).collect(Collectors.toSet());
+            worderNoAndWorderMap = waybillOrderSubtasks.stream()
+                    .collect(Collectors.toMap(KwtWaybillOrderSubtask::getWOrderNo, Function.identity(), (k1, k2) -> k1));
+        }
+
+        List<KwtLogisticsOrderUnit> logisticsOrderUnits = kwtLogisticsOrderUnitRepository.queryByLOrderIdsAndUnitType(lOrderIds,2);
+        //物流订单id映射企业
+        Map<Long, KwtLogisticsOrderUnit> lOrderIdAndLogisticsOrderUnitMap = logisticsOrderUnits.stream()
+                .collect(Collectors.toMap(KwtLogisticsOrderUnit::getLOrderId, Function.identity(), (k1, k2) -> k1));
         //通过企业id映射企业信息
         Map<Long, KwsEnterpriseResDto> idAndKwsEnterpriseMap = remoteSystemService.queryEnterpriseByEntIds(entIds);
 
         //装货地址和卸货地址 kwt_waybill_order_address
-        LambdaQueryWrapper<KwtWaybillOrderAddress> wrapper = Wrappers.<KwtWaybillOrderAddress>lambdaQuery()
-                .eq(KwtWaybillOrderAddress::getDelFlag, 0)
-                .in(KwtWaybillOrderAddress::getWOrderId, wOrderIds);
-        List<KwtWaybillOrderAddress> orderAddresses = kwtWaybillOrderAddressRepository.list(wrapper);
+        List<KwtWaybillOrderAddress> orderAddresses = kwtWaybillOrderAddressRepository.queryBywOrderIds(wOrderIds);
+
         //运单id和状态组合key映射地址
         Map<Long, List<KwtWaybillOrderAddress>> wOrderIdAndAddressMap = orderAddresses.stream()
                 .collect(Collectors.groupingBy(KwtWaybillOrderAddress::getWOrderId));
 
+        Map<String, KwtWaybillOrderSubtask> finalWorderNoAndWorderMap = worderNoAndWorderMap;
         List<KwfTruckTraceReplayVo> kwfTruckTraceReplayVoList = records.stream()
-                .map(r -> getKwfTruckTraceReplayVo(r, idAndKwsEnterpriseMap, wOrderIdAndAddressMap))
+                .map(r -> getKwfTruckTraceReplayVo(r, idAndKwsEnterpriseMap, wOrderIdAndAddressMap, lOrderIdAndLogisticsOrderUnitMap, finalWorderNoAndWorderMap))
                 .collect(Collectors.toList());
        return PageDataResult.of(page,kwfTruckTraceReplayVoList);
     }
@@ -138,7 +162,10 @@ public class kwfTruckTraceService {
      * @param wOrderIdAndAddressMap 运单id映射地址map
      * @return 轨迹回访返回数据
      */
-    private static KwfTruckTraceReplayVo getKwfTruckTraceReplayVo(KwtWaybillOrder waybillOrder, Map<Long, KwsEnterpriseResDto> idAndKwsEnterpriseMap, Map<Long, List<KwtWaybillOrderAddress>> wOrderIdAndAddressMap) {
+    private static KwfTruckTraceReplayVo getKwfTruckTraceReplayVo(KwtWaybillOrder waybillOrder, Map<Long, KwsEnterpriseResDto> idAndKwsEnterpriseMap,
+                                                                  Map<Long, List<KwtWaybillOrderAddress>> wOrderIdAndAddressMap
+                                                                ,Map<Long, KwtLogisticsOrderUnit> lOrderIdAndLogisticsOrderUnitMap
+                                                                ,Map<String, KwtWaybillOrderSubtask> worderNoAndWorderMap) {
 
         KwfTruckTraceReplayVo kwfTruckTraceReplay = new KwfTruckTraceReplayVo();
         kwfTruckTraceReplay.setWOrderId(waybillOrder.getId());
@@ -147,7 +174,10 @@ public class kwfTruckTraceService {
         kwfTruckTraceReplay.setPhone(waybillOrder.getDriverPhone());
         kwfTruckTraceReplay.setStatus(String.valueOf(waybillOrder.getStatus()));
         kwfTruckTraceReplay.setStatusDesc(CarWaybillEnum.getName(waybillOrder.getStatus()));
-        KwsEnterpriseResDto orDefault = idAndKwsEnterpriseMap.getOrDefault(waybillOrder.getEntId(), new KwsEnterpriseResDto());
+        KwtWaybillOrderSubtask subtask = worderNoAndWorderMap.getOrDefault(waybillOrder.getWOrderNo(), new KwtWaybillOrderSubtask());
+        kwfTruckTraceReplay.setRelationTaskNo(String.valueOf(subtask.getLOrderId()));
+        KwtLogisticsOrderUnit kwtLogisticsOrderUnit = lOrderIdAndLogisticsOrderUnitMap.getOrDefault(subtask.getLOrderId(), new KwtLogisticsOrderUnit());
+        KwsEnterpriseResDto orDefault = idAndKwsEnterpriseMap.getOrDefault(kwtLogisticsOrderUnit.getEntId(), new KwsEnterpriseResDto());
         kwfTruckTraceReplay.setCarrier(orDefault.getFirmName());
         List<KwtWaybillOrderAddress> addressList = wOrderIdAndAddressMap.get(waybillOrder.getId());
         addressList.forEach(e -> {
@@ -159,7 +189,6 @@ public class kwfTruckTraceService {
             }
         });
 
-        kwfTruckTraceReplay.setRelationTaskNo(Objects.nonNull(waybillOrder.getLOrderId()) ? String.valueOf(waybillOrder.getLOrderId()) : "");
 
         String taskStartEndTime = DateUtils.format(waybillOrder.getTaskStartTime(), DateUtils.DATE_TIME_PATTERN);
         kwfTruckTraceReplay.setTaskStartTime(StringUtils.equals(taskStartEndTime, CommonConstants.DATE_TIME) ? StringUtils.EMPTY: taskStartEndTime);
@@ -178,43 +207,83 @@ public class kwfTruckTraceService {
     public TruckInfoVo queryTruckInfo(TruckInfoReq req) {
         log.info("查询车辆实时位置信息参数:{}", req);
         //先查缓存 缓存没有 在查询数据中台 数据中台没有 则查询中交
-        if (StringUtils.isNotBlank(req.getTruckId()) && StringUtils.isNotBlank(req.getTruckNo())){
-            return getTruckInfo(req.getTruckNo(),req.getWOrderNo(),req.getTruckNo());
+        if (StringUtils.isNotBlank(req.getTruckId()) ){
+            return getTruckInfo(req.getTruckId(),req.getWOrderNo(),req.getTruckNo());
         }
 
         //如果车牌为空那么查询车队的第一条数据 (从tab页面直接进来)
-        if (StringUtils.isBlank(req.getEntId())){
-            throw new BusinessException("企业id不能为空");
-        }
-        RTruckVo dataFirstTruck = fleetService.findDataFirstTruck(Long.valueOf(req.getEntId()));
-        if (Objects.isNull(dataFirstTruck) || Objects.isNull(dataFirstTruck.getTruckNo())){
-            return new TruckInfoVo();
+        if (StringUtils.isNotBlank(req.getEntId())){
+            RTruckVo dataFirstTruck = fleetService.findDataFirstTruck(Long.valueOf(req.getEntId()));
+            if (Objects.isNull(dataFirstTruck) || Objects.isNull(dataFirstTruck.getTruckNo())){
+                return new TruckInfoVo();
+            }
+            return getTruckInfo(req.getTruckId(),req.getWOrderNo(),dataFirstTruck.getTruckNo());
         }
-        return getTruckInfo(req.getTruckId(),req.getWOrderNo(),dataFirstTruck.getTruckNo());
+        return new TruckInfoVo();
     }
 
     private TruckInfoVo getTruckInfo(String truckId, String wOrderNo,String truckNo) {
         //先查询缓存 如果缓存没有就查数据中台 数据中台没有就查中交
         String location = RedissonUtils.getString(CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE+wOrderNo);
-        if (StringUtils.isBlank(location)){
-            return new TruckInfoVo();
-        }
-        TruckDto truckDto = JSON.parseObject(location, TruckDto.class);
-        //如果运单号为空那么返回redis的数据 这个数据是app最后一次上报的数据
-        if (Objects.nonNull(truckDto)){
-            return TruckInfoVo.toTruckInfoVo(truckDto);
+        if (StringUtils.isNotBlank(location)){
+            TruckDto truckDto = JSON.parseObject(location, TruckDto.class);
+            //如果运单号为空那么返回redis的数据 这个数据是app最后一次上报的数据
+            if (Objects.nonNull(truckDto)){
+                return TruckInfoVo.toTruckInfoVo(truckDto);
+            }
         }
+
         //缓存没有则查询数据中台
         VehicleReturnData vehicleReturnData = getVehicleReturnData(truckId);
         if (Objects.nonNull(vehicleReturnData)){
-            return buildTruckInfo(wOrderNo, vehicleReturnData);
+            saveRedisCache(truckId, wOrderNo, truckNo, vehicleReturnData);
+            return buildTruckInfo(truckId, vehicleReturnData, truckNo);
         }
         //todo 查询中交 如果数据中台没有数据则查询中交
-        return getTruckInfoVoByZj(truckNo, wOrderNo);
+        return getTruckInfoVoByZj(truckNo, wOrderNo,truckId);
+    }
+
+    private void saveRedisCache(String truckId, String wOrderNo, String truckNo, VehicleReturnData vehicleReturnData) {
+        TruckDto truckDto = new TruckDto();
+        truckDto.setWOrderNo(vehicleReturnData.getWOrderNo());
+        truckDto.setTruckNo(truckNo);
+        truckDto.setGpsStatus(String.valueOf(vehicleReturnData.getSpeed()));
+        truckDto.setLongitude(vehicleReturnData.getLongitude());
+        truckDto.setLatitude(vehicleReturnData.getLatitude());
+        if (Objects.nonNull(vehicleReturnData.getTs())){
+            LocalDateTime ts = vehicleReturnData.getTs();
+            Date date = Date.from(ts.toInstant(ZoneOffset.UTC));
+            truckDto.setLocationTime(DateUtils.format(date, DateUtils.DATE_TIME_PATTERN));
+        }
+        KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(wOrderNo);
+        truckDto.setLOrderNo(Objects.nonNull(subtask) ? String.valueOf(subtask.getLOrderId()):"");
+        String taskAddress = getTaskAddress(subtask);
+        truckDto.setTaskAddress(taskAddress);
+        RedissonUtils.putString(CommonConstants.TRUCK_LOCATION + truckId +CommonConstants.UNDERSCORE+ wOrderNo, JSON.toJSONString(truckDto),10,TimeUnit.DAYS);
     }
 
 
-    private TruckInfoVo getTruckInfoVoByZj(String truckNo, String wOrderNo) {
+    public String getTaskAddress(KwtWaybillOrderSubtask subtask) {
+        String startPoint = "";
+        String endPoint = "";
+        if (Objects.nonNull(subtask)){
+            List<KwtWaybillOrderAddress> kwtWaybillOrderAddresses = kwtWaybillOrderAddressRepository.queryByWOrderId(subtask.getWOrderId());
+            if (CollectionUtils.isNotEmpty(kwtWaybillOrderAddresses)){
+                for (KwtWaybillOrderAddress e : kwtWaybillOrderAddresses) {
+                    if (Objects.equals(e.getAddressType(), AddressTypeEnum.SHIPMENT.getCode())) {
+                        startPoint = e.getDetailAddress();
+                    }
+                    if (Objects.equals(e.getAddressType(), AddressTypeEnum.TAKE.getCode())) {
+                        endPoint = e.getDetailAddress();
+                    }
+                }
+            }
+        }
+        return startPoint+"-" + endPoint;
+    }
+
+
+    private TruckInfoVo getTruckInfoVoByZj(String truckNo, String wOrderNo,String truckId) {
         CollectZjxlResponse collectZjxlResponse = vehicleCollectService.transTimeManage(truckNo);
         TruckInfoVo instance = TruckInfoVo.getInstance();
         instance.setWOrderNo(wOrderNo);
@@ -231,45 +300,50 @@ public class kwfTruckTraceService {
         KwtWaybillOrderSubtask waybillOrderSubtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(oneByTruckNo.getWOrderNo());
         instance.setLOrderNo(Objects.nonNull(waybillOrderSubtask) && Objects.nonNull(waybillOrderSubtask.getLOrderId())
                 ? String.valueOf(waybillOrderSubtask.getLOrderId()) : "");
-        String startPoint = "";
-        String endPoint = "";
-        if (Objects.nonNull(waybillOrderSubtask)){
-            List<KwtWaybillOrderAddress> kwtWaybillOrderAddresses = kwtWaybillOrderAddressRepository.queryByWOrderId(waybillOrderSubtask.getWOrderId());
-            if (CollectionUtils.isNotEmpty(kwtWaybillOrderAddresses)){
-                for (KwtWaybillOrderAddress e : kwtWaybillOrderAddresses) {
-                    if (Objects.equals(e.getAddressType(), AddressTypeEnum.SHIPMENT.getCode())) {
-                        startPoint = e.getDetailAddress();
-                    }
-                    if (Objects.equals(e.getAddressType(), AddressTypeEnum.TAKE.getCode())) {
-                        endPoint = e.getDetailAddress();
-                    }
-                }
-            }
-        }
-
-        instance.setTaskAddress(startPoint+"-"+endPoint);
+        String taskAddress = getTaskAddress(waybillOrderSubtask);
+        instance.setTaskAddress(taskAddress);
         return instance;
     }
 
     /**
      * 将数据中台的数据进行组织
-     * @param wOrderNo 运单号
+     * @param truckId 车辆id
      * @param vehicleReturn 中台数据
      * @return 组织的数据
      */
-    private TruckInfoVo buildTruckInfo(String wOrderNo, VehicleReturnData vehicleReturn) {
+    private TruckInfoVo buildTruckInfo(String truckId, VehicleReturnData vehicleReturn, String truckNo) {
         TruckInfoVo truckInfoVo = TruckInfoVo.getInstance();
-        truckInfoVo.setWOrderNo(vehicleReturn.getWOrderNo());
-        truckInfoVo.setTruckNo(vehicleReturn.getCarNo());
+
+        truckInfoVo.setTruckNo(truckNo);
         truckInfoVo.setGpsStatus(String.valueOf(vehicleReturn.getSpeed()));
         truckInfoVo.setLongitude(vehicleReturn.getLongitude());
         truckInfoVo.setLatitude(vehicleReturn.getLatitude());
         truckInfoVo.setLocationTime(Objects.isNull(vehicleReturn.getTs())? "" : DateUtils.format(vehicleReturn.getTs(),DateUtils.DATE_TIME_PATTERN));
-        KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(wOrderNo);
+        KwtWaybillOrder order = kwtWaybillOrderRepository.findOneByTruckId(truckId);
+        if (Objects.nonNull(order)){
+            truckInfoVo.setTruckNo(order.getTruckNo());
+            truckInfoVo.setWOrderNo(order.getWOrderNo());
+            truckInfoVo.setDriveId(String.valueOf(order.getDriverId()));
+            truckInfoVo.setDriveName(order.getDriverName());
+            truckInfoVo.setDrivePhone(order.getDriverPhone());
+            truckInfoVo.setTruckId(truckId);
+            truckInfoVo.setTaskStatus(String.valueOf(order.getStatus()));
+        }
+
+        KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(Optional.ofNullable(order)
+                .map(KwtWaybillOrder::getWOrderNo).
+                orElse( null));
         truckInfoVo.setLOrderNo(Objects.isNull(subtask) ? "" : String.valueOf(subtask.getLOrderId()));
         if (Objects.isNull(subtask)){
             return truckInfoVo;
         }
+        //根据物流订单号查询承运单位 2.代表承运企业
+        KwtLogisticsOrderUnit kwtLogisticsOrderUnit = kwtLogisticsOrderUnitRepository.queryByLOrderIdAndUnitType(subtask.getLOrderId(), 2);
+        if (Objects.nonNull(kwtLogisticsOrderUnit) && Objects.nonNull(kwtLogisticsOrderUnit.getEntId())){
+            EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(kwtLogisticsOrderUnit.getEntId());
+            truckInfoVo.setCarrier(Optional.ofNullable(entCacheResDto).map(EntCacheResDto::getFirmName).orElse(""));
+        }
+
         List<KwtWaybillOrderAddress> kwtWaybillOrderAddresses = kwtWaybillOrderAddressRepository.queryByWOrderId(subtask.getWOrderId());
         if (CollectionUtils.isEmpty(kwtWaybillOrderAddresses)){
             return truckInfoVo;
@@ -295,12 +369,17 @@ public class kwfTruckTraceService {
      */
     public CurrentTaskTraceReqVo queryCurrentTaskTrace(CurrentTaskTraceReq req) {
         log.info("查询当前任务轨迹参数:{}", req);
-        if (StringUtils.isBlank(req.getWOrderNo())){
-            log.info("运单号为空没有任务,没有关联路线");
-            return new CurrentTaskTraceReqVo();
+       
+
+        String wOrderNo = StringUtils.EMPTY ;
+        if (StringUtils.isNotBlank(req.getWOrderNo())){
+            wOrderNo  = req.getWOrderNo();
+        }else {
+            KwtWaybillOrder waybillOrder = kwtWaybillOrderRepository.findOneByTruckNo(req.getTruckNo());
+            wOrderNo = Optional.ofNullable(waybillOrder).map(KwtWaybillOrder::getWOrderNo).orElse("");
         }
         //查询数据中台获取轨迹
-        List<VehicleReturnData> vehicleReturnDataList = getVehicleReturnDataList(req.getWOrderNo());
+        List<VehicleReturnData> vehicleReturnDataList = getVehicleReturnDataList(wOrderNo);
         if (CollectionUtils.isEmpty(vehicleReturnDataList)){
             return new CurrentTaskTraceReqVo();
         }
@@ -333,7 +412,9 @@ public class kwfTruckTraceService {
         if (StringUtils.isBlank(s)){
             return Collections.emptyList();
         }
-        return JSON.parseArray(s, VehicleReturnData.class);
+        JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
+        String data = JSON.toJSONString(jsonObject.get("data"));
+        return JSON.parseArray(data, VehicleReturnData.class);
     }
 
     public VehicleReturnData getVehicleReturnData(String truckId) {
@@ -349,7 +430,9 @@ public class kwfTruckTraceService {
         if (StringUtils.isBlank(s)){
             return null;
         }
-        return JSON.parseObject(s, VehicleReturnData.class);
+        JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
+        String data = JSON.toJSONString(jsonObject.get("data"));
+        return JSON.parseObject(data, VehicleReturnData.class);
     }
 
     private static CurrentTaskTraceReqVo.CurrentTaskTrace getCurrentTaskTrace(VehicleReturnData e) {
@@ -380,18 +463,19 @@ public class kwfTruckTraceService {
      * @param req 请求参数
      * @return 响应参数
      */
-    public Void vehiclesTrajectory(@Valid VehiclesTrajectoryReq req) {
+    public Void vehiclesTrajectory( VehiclesTrajectoryReq req) {
         //通过手机号查询司机以及车辆信息
         //req.setTs(DateUtils.format(new Date(),DateUtils.DATE_TIME_PATTERN));
         RDriverVo rDriverVo = fleetService.findDriverByPhone(req.getMobile());
         if (Objects.isNull(rDriverVo)){
             throw new BusinessException("司机信息不存在");
         }
+        initReq(req);
         //查询认为中的运单信息
         KwtWaybillOrder waybillOrder = kwtWaybillOrderRepository.findOneByDriverId(rDriverVo.getId());
         //获取车队信息
         RFleetDriverVo fleetByDriveId = fleetService.findFleetByDriveId(rDriverVo.getId());
-
+        req.setLOrderNo(Optional.ofNullable(waybillOrder).map(KwtWaybillOrder::getWOrderNo).orElse(""));
 
         VehiclesTrajectoryReq.VehicleDataVO vehicleDataVO = new VehiclesTrajectoryReq.VehicleDataVO();
         //车牌id
@@ -405,7 +489,7 @@ public class kwfTruckTraceService {
                 .map(RFleetDriverVo::getFleetId)
                 .orElse(null)));
         req.setVehicleDataVO(vehicleDataVO);
-
+        req.setStatus("1");
         try {
             String url = urlConfigProperties.getApiBaseUrl();
             HttpUtil.postJson(url+ UrlConstants.VEHICLE_TRAJECTORY, JSON.toJSONString(req), null);
@@ -413,31 +497,49 @@ public class kwfTruckTraceService {
             log.error("app上报车辆轨迹异常",e);
             throw new BusinessException("app上报车辆轨迹异常");
         }
-
+        String key = CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE;
+        String xwOrderNo = "";
+        if (Objects.nonNull(waybillOrder)){
+            xwOrderNo = waybillOrder.getWOrderNo();
+            key = CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE+xwOrderNo;
+        }
         //先删除缓存
-        RedissonUtils.delete(CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE+req.getWOrderNo());
+        RedissonUtils.delete(key);
         //组织缓存数据
-        TruckDto truckDto = getTruckDto(req);
-        //放入缓存
-        RedissonUtils.add(CommonConstants.TRUCK_LOCATION + truckId+CommonConstants.UNDERSCORE+req.getWOrderNo(),JSON.toJSONString(truckDto));
+        TruckDto truckDto = getTruckDto(req,xwOrderNo);
+        //放入缓存  存十天
+        RedissonUtils.putString(key,JSON.toJSONString(truckDto),10, TimeUnit.DAYS);
         return null;
     }
 
+    private void initReq(VehiclesTrajectoryReq req) {
+        req.setGpsStatus(req.getStatus());
+        req.setDirection(30.0f);
+        req.setFuelLevel(30.0f);
+        req.setMileage("1.0");
+        req.setEngineTemp(25.0f);
+        req.setBatteryVoltage(12.0f);
+        req.setStatus("1");
+        req.setAlarmCode("123");
+    }
+
     /**
      * 组织返回数据
      * @param req 请求参数
      * @return 缓存数据
      */
-    private static TruckDto getTruckDto(VehiclesTrajectoryReq req) {
+    private TruckDto getTruckDto(VehiclesTrajectoryReq req,String wOrderNo) {
         TruckDto truckDto = new TruckDto();
-        truckDto.setWOrderNo(req.getWOrderNo());
+        truckDto.setWOrderNo(wOrderNo);
         truckDto.setTruckNo(req.getTruckNo());
         truckDto.setGpsStatus(String.valueOf(req.getSpeed()));
         truckDto.setLongitude(req.getLongitude());
         truckDto.setLatitude(req.getLatitude());
         truckDto.setLocationTime(DateUtils.format(LocalDateTime.now(), DateUtils.DATE_TIME_PATTERN));
         truckDto.setLOrderNo(req.getLOrderNo());
-        truckDto.setTaskAddress("");
+        KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.findOneByWOrderNo(wOrderNo);
+        String taskAddress = getTaskAddress(subtask);
+        truckDto.setTaskAddress(taskAddress);
         return truckDto;
     }
 }

+ 1 - 0
sql/2025/10/30/2025_10_30_cxf_create.sql

@@ -10,6 +10,7 @@ create table kwf_truck_route
     start_point      varchar(400)  not null default '' comment '起始点',
     unloading_Point   varchar(400)  not null default '' comment '卸货地点',
     shortest_time varchar(10)        not null default  '' comment '最短时间',
+    point_info   text            null                 comment '详细点位信息',
     create_time datetime      not null default current_timestamp comment '创建时间',
     update_time datetime      not null default current_timestamp on update current_timestamp comment '更新时间',
     del_flag    tinyint       not null default 0 comment '是否删除(0未删除,1删除)'