Quellcode durchsuchen

提交车辆轨回放查询接口

chenxiaofei vor 1 Monat
Ursprung
Commit
aac9ec9355

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

@@ -100,6 +100,11 @@ public class VehiclesTrajectoryReq implements Serializable {
 
     @Schema(description = "运单号")
     private String wOrderNo ;
+    /**
+     * 运单号
+     */
+
+    private String wayOrderNo;
     /**
      * 运单状态
      */

+ 23 - 20
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/VehicleExceptionService.java

@@ -22,6 +22,7 @@ import com.sckw.transport.repository.KwtWaybillOrderSubtaskRepository;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
@@ -80,13 +81,13 @@ public class VehicleExceptionService {
         Map<String, Integer> truckLocationStatusMap = new HashMap<>();
         if (req.getLocationStatus() != null) {
             // 提取所有不重复的车牌号
-            List<String> truckNos = records.stream()
-                    .map(KwtVehicleException::getTruckNo)
-                    .distinct()
-                    .collect(Collectors.toList());
-            
+
+            Map<Long, String> truckIdAndTruckNoMap = records.stream()
+                    .filter(x->Objects.nonNull(x.getTruckId()))
+                    .collect(Collectors.toMap(KwtVehicleException::getTruckId, KwtVehicleException::getTruckNo, (k1, k2) -> k1));
+
             // 批量查询车辆定位状态
-            truckLocationStatusMap = queryVehicleLocationStatus(truckNos);
+            truckLocationStatusMap = queryVehicleLocationStatus(truckIdAndTruckNoMap);
         }
         
         // 提取所有不重复的运单ID
@@ -207,37 +208,40 @@ public class VehicleExceptionService {
     /**
      * 批量查询车辆定位状态
      *
-     * @param truckNos 车牌号列表
+     * @param truckIdAndTruckNoMap 车牌id列表
      * @return 车牌号与定位状态的映射
      */
-    private Map<String, Integer> queryVehicleLocationStatus(List<String> truckNos) {
+    private Map<String, Integer> queryVehicleLocationStatus(  Map<Long, String> truckIdAndTruckNoMap) {
         Map<String, Integer> locationStatusMap = new HashMap<>();
         LocalDateTime now = LocalDateTime.now();
         LocalDateTime thirtyMinutesAgo = now.minusMinutes(30);
-        
-        for (String truckNo : truckNos) {
+        if (MapUtils.isEmpty(truckIdAndTruckNoMap)){
+            return locationStatusMap;
+        }
+        truckIdAndTruckNoMap.forEach((truckId, truckNo) -> {
             try {
                 VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
-                vehicleDataDTO.setCarNo(truckNo);
+                vehicleDataDTO.setCarNo(Objects.isNull(truckId) ? "0" : String.valueOf(truckId));
                 BaseIotResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
                 // 默认离线
                 Integer locationStatus = 0;
-                
+
                 if (result != null && StringUtils.equals(result.getCode(), "0") && result.getData() != null) {
                     VehicleReturnData vehicleData = result.getData();
-                    
+
                     // 判断30分钟内有定位数据为在线
                     if (vehicleData.getTs() != null && vehicleData.getTs().toLocalDateTime().isAfter(thirtyMinutesAgo)) {
                         locationStatus = 1;
                     }
                 }
-                
+
                 locationStatusMap.put(truckNo, locationStatus);
             } catch (Exception e) {
                 log.warn("查询车辆定位状态异常, 车牌号: {}", truckNo, e);
                 locationStatusMap.put(truckNo, 0);
             }
-        }
+        });
+
         
         return locationStatusMap;
     }
@@ -271,13 +275,12 @@ public class VehicleExceptionService {
         Map<String, Integer> truckLocationStatusMap = new HashMap<>();
         if (req.getLocationStatus() != null) {
             // 提取所有不重复的车牌号
-            List<String> truckNos = records.stream()
-                    .map(KwtVehicleException::getTruckNo)
-                    .distinct()
-                    .collect(Collectors.toList());
+            Map<Long, String> truckIdAndTruckNoMap = records.stream()
+                    .filter(x->Objects.nonNull(x.getTruckId()))
+                    .collect(Collectors.toMap(KwtVehicleException::getTruckId, KwtVehicleException::getTruckNo, (k1, k2) -> k1));
 
             // 批量查询车辆定位状态
-            truckLocationStatusMap = queryVehicleLocationStatus(truckNos);
+            truckLocationStatusMap = queryVehicleLocationStatus(truckIdAndTruckNoMap);
         }
         
         // 提取所有不重复的运单ID

+ 32 - 28
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -60,6 +60,7 @@ import com.sckw.transport.service.zj.VehicleCollectService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.jetbrains.annotations.NotNull;
@@ -837,13 +838,13 @@ public class kwfTruckTraceService {
         }
         
         // 获取所有车牌号列表,用于查询实时位置
-        List<String> truckNos = waybillOrders.stream()
-                .map(KwtWaybillOrder::getTruckNo)
-                .distinct()
-                .collect(Collectors.toList());
-        
+
+        Map<Long, String> truckIdTruckNoMap = waybillOrders.stream()
+                .filter(x->Objects.nonNull(x.getTruckId()))
+                .collect(Collectors.toMap(KwtWaybillOrder::getTruckId, KwtWaybillOrder::getTruckNo, (key1, key2) -> key1));
+
         // 批量查询实时位置状态(30分钟内有数据为在线)
-        Map<String, Integer> truckLocationStatusMap = getStringIntegerMap(truckNos);
+        Map<String, Integer> truckLocationStatusMap = getStringIntegerMap(truckIdTruckNoMap);
 
         // 转换为 VO 对象并根据状态筛选
         return waybillOrders.stream()
@@ -855,21 +856,23 @@ public class kwfTruckTraceService {
     }
 
     @NotNull
-    private Map<String, Integer> getStringIntegerMap(List<String> truckNos) {
+    private Map<String, Integer> getStringIntegerMap(Map<Long, String> truckIdTruckNoMap) {
         Map<String, Integer> truckLocationStatusMap = new HashMap<>();
         LocalDateTime now = LocalDateTime.now();
         LocalDateTime thirtyMinutesAgo = now.minusMinutes(30);
-
-        for (String truckNo : truckNos) {
+        if (MapUtils.isEmpty(truckIdTruckNoMap)){
+            return truckLocationStatusMap;
+        }
+        truckIdTruckNoMap.forEach((truckId, truckNo) -> {
             try {
                 VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
-                vehicleDataDTO.setCarNo(truckNo);
+                vehicleDataDTO.setCarNo(Objects.isNull(truckId) ? "0" : String.valueOf(truckId));
                 BaseIotResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
 
                 if (result == null || !Objects.equals(result.getCode(), "0") || result.getData() == null) {
                     // 无定位数据,设置为离线
                     truckLocationStatusMap.put(truckNo, 0);
-                    return truckLocationStatusMap;
+                    return;
                 }
 
                 VehicleReturnData vehicleData = result.getData();
@@ -878,7 +881,7 @@ public class kwfTruckTraceService {
                 if (vehicleData.getTs() == null) {
                     // 无GPS时间,设置为离线
                     truckLocationStatusMap.put(truckNo, 0);
-                    return truckLocationStatusMap;
+                    return;
                 }
 
                 // 30分钟内为在线
@@ -892,7 +895,7 @@ public class kwfTruckTraceService {
                 log.warn("查询车辆实时位置异常, 车牌号: {}", truckNo, e);
                 truckLocationStatusMap.put(truckNo, 0);
             }
-        }
+        });
         return truckLocationStatusMap;
     }
 
@@ -1027,13 +1030,12 @@ public class kwfTruckTraceService {
         }
         
         // 获取车牌号列表,查询定位信息
-        List<String> truckNos = waybillOrders.stream()
-                .map(KwtWaybillOrder::getTruckNo)
-                .distinct()
-                .collect(Collectors.toList());
-        
+        Map<Long, String> truckIdAndTruckNoMap = waybillOrders.stream()
+                .filter(x->Objects.nonNull(x.getTruckId()))
+                .collect(Collectors.toMap(KwtWaybillOrder::getTruckId, KwtWaybillOrder::getTruckNo, (k1, k2) -> k1));
+
         // 批量查询定位状态和位置信息
-        Map<String, VehicleLocationInfo> locationInfoMap = queryVehicleLocationBatch(truckNos);
+        Map<String, VehicleLocationInfo> locationInfoMap = queryVehicleLocationBatch(truckIdAndTruckNoMap);
 
         // 批量查询运单轨迹数据,统计异常数量(通过alarmCode判断)
         List<String> wOrderNos = waybillOrders.stream()
@@ -1205,32 +1207,32 @@ public class kwfTruckTraceService {
     /**
      * 批量查询车辆定位信息
      */
-    private Map<String, VehicleLocationInfo> queryVehicleLocationBatch(List<String> truckNos) {
+    private Map<String, VehicleLocationInfo> queryVehicleLocationBatch(Map<Long, String> truckIdAndTruckNoMap) {
         Map<String, VehicleLocationInfo> locationInfoMap = new HashMap<>();
         LocalDateTime now = LocalDateTime.now();
         log.info("获取配置时间:{}", urlConfigProperties.getMinute());
         LocalDateTime thirtyMinutesAgo = now.minusMinutes(urlConfigProperties.getMinute());
-        if (CollectionUtils.isEmpty(truckNos)){
+        if (MapUtils.isEmpty(truckIdAndTruckNoMap)){
             return locationInfoMap;
         }
-        for (String truckNo : truckNos) {
+        truckIdAndTruckNoMap.forEach((truckId, truckNo) -> {
             try {
                 VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
-                vehicleDataDTO.setCarNo(truckNo);
+                vehicleDataDTO.setCarNo(Objects.isNull(truckId) ? "0" : String.valueOf(truckId));
                 BaseIotResult<VehicleReturnData> result = vehicleTraceClient.queryRealTimeLocation(vehicleDataDTO);
                 log.info("查询车辆数据中台响应定位信息:{}", JSON.toJSONString( result));
                 VehicleLocationInfo locationInfo = new VehicleLocationInfo();
-                
+
                 if (result != null && StringUtils.equals(result.getCode(), "0") && result.getData() != null) {
                     VehicleReturnData vehicleData = result.getData();
-                    
+
                     // 判断定位状态
                     if (vehicleData.getTs() != null && vehicleData.getTs().toLocalDateTime().isAfter(thirtyMinutesAgo)) {
                         locationInfo.setLocationStatus(1);
                     } else {
                         locationInfo.setLocationStatus(0);
                     }
-                    
+
                     locationInfo.setLongitude(vehicleData.getLongitude());
                     locationInfo.setLatitude(vehicleData.getLatitude());
                     if (vehicleData.getTs() != null) {
@@ -1248,7 +1250,7 @@ public class kwfTruckTraceService {
                 locationInfo.setLocationStatus(0);
                 locationInfoMap.put(truckNo, locationInfo);
             }
-        }
+        });
         
         return locationInfoMap;
     }
@@ -1549,13 +1551,15 @@ public class kwfTruckTraceService {
         vehiclesTrajectoryReq.setEngineTemp(40.0f);
         vehiclesTrajectoryReq.setBatteryVoltage(30.0f);
         vehiclesTrajectoryReq.setStatus("0");
+        vehiclesTrajectoryReq.setAlarmCode("0");
         if (req.getExceptionType() != null){
             vehiclesTrajectoryReq.setStatus(String.valueOf(req.getExceptionType()));
         }
         vehiclesTrajectoryReq.setWOrderNo(req.getWayOrderNo());
+        vehiclesTrajectoryReq.setWayOrderNo(req.getWayOrderNo());
         vehiclesTrajectoryReq.setLOrderNo(Optional.ofNullable(logisticsOrder).map(KwtLogisticsOrder::getLOrderNo).orElse( ""));
         VehiclesTrajectoryReq.VehicleDataVO vehicleDataVO = new VehiclesTrajectoryReq.VehicleDataVO();
-        vehicleDataVO.setCarNo(req.getTruckNo());
+        vehicleDataVO.setCarNo(Objects.isNull(order.getTruckId()) ? "0" : String.valueOf(order.getTruckId()));
         if (fleetByTruckId != null){
             vehicleDataVO.setFleetId(Objects.nonNull(fleetByTruckId.getId())?fleetByTruckId.getId().toString():"");
             vehicleDataVO.setFleetName(fleetByTruckId.getName());