소스 검색

提交全图监控

chenxiaofei 1 개월 전
부모
커밋
752518ff85

+ 4 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/VehicleExceptionTypeEnum.java

@@ -9,7 +9,10 @@ import lombok.Getter;
  */
 @Getter
 public enum VehicleExceptionTypeEnum {
-    
+    /**
+     * 正常
+     */
+    NORMAL(0, "正常"),
     /**
      * 车辆偏航
      */

+ 10 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CurrentTaskTraceReqVo.java

@@ -43,6 +43,16 @@ public class CurrentTaskTraceReqVo implements Serializable {
          */
         @Schema(description = "定位时间")
         private String locationTime;
+        /**
+         * 状态
+         */
+        @Schema(description = "状态")
+        private String status;
+        /**
+         * 状态描述
+         */
+        @Schema(description = "状态描述")
+        private String statusDesc;
         /**
          * 耗时
          */

+ 31 - 14
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -42,6 +42,7 @@ import com.sckw.transport.model.dto.TruckDto;
 import com.sckw.transport.api.feign.VehicleTraceClient;
 import com.sckw.transport.api.model.dto.VehicleDataDTO;
 import com.sckw.transport.api.model.dto.VehicleReturnData;
+import com.sckw.transport.model.enuma.ExceptionSortTypeEnum;
 import com.sckw.transport.model.enuma.VehicleExceptionTypeEnum;
 import com.sckw.transport.model.param.*;
 import com.sckw.transport.model.dto.GenerateTraceReq;
@@ -423,34 +424,42 @@ public class kwfTruckTraceService {
 
     /**
      * 查询当前任务的轨迹
-     * @param req 请求参数
-     * @return 响应参数
+     * @param req 请求参数,包含车辆编号和订单号等信息
+     * @return 当前任务轨迹信息,包括轨迹点列表和地址点列表
      */
     public CurrentTaskTraceReqVo queryCurrentTaskTrace(CurrentTaskTraceReq req) {
         log.info("查询当前任务轨迹参数:{}", req);
 
+        // 获取当前登录用户的企业ID
         Long entId = LoginUserHolder.getEntId();
         String wOrderNo = StringUtils.EMPTY ;
+        
+        // 如果请求中包含订单号,则直接使用;否则根据车牌号查询对应订单号
         if (StringUtils.isNotBlank(req.getOrderNo())){
             wOrderNo  = req.getOrderNo();
         }else {
             KwtWaybillOrder waybillOrder = kwtWaybillOrderRepository.findOneByTruckNo(req.getTruckNo(),entId);
             wOrderNo = Optional.ofNullable(waybillOrder).map(KwtWaybillOrder::getWOrderNo).orElse("");
         }
-        //查询数据中台获取轨迹
+        
+        // 查询数据中台获取轨迹数据
         List<VehicleReturnData> vehicleReturnDataList = getVehicleReturnDataList(wOrderNo);
 
         CurrentTaskTraceReqVo currentTaskTraceReqVo = new CurrentTaskTraceReqVo();
+        
+        // 如果轨迹数据不为空,则处理轨迹点信息
         if (CollectionUtils.isNotEmpty(vehicleReturnDataList)){
-            //组织返回数据
+            // 将VehicleReturnData转换为CurrentTaskTrace,并按时间排序
             List<CurrentTaskTraceReqVo.CurrentTaskTrace> currentTaskTraceList = vehicleReturnDataList.stream()
                     .map(kwfTruckTraceService::getCurrentTaskTrace)
                     .filter(x->StringUtils.isNotBlank(x.getLocationTime()))
                     .sorted(Comparator.comparing(CurrentTaskTraceReqVo.CurrentTaskTrace::getLocationTime))
                     .collect(Collectors.toList());
 
+            // 设置订单号
             currentTaskTraceReqVo.setOrderNo(vehicleReturnDataList.get(0).getWOrderNo());
 
+            // 计算相邻轨迹点之间的时间间隔(分钟)
             for (int i = 1; i < currentTaskTraceList.size(); i++) {
                 CurrentTaskTraceReqVo.CurrentTaskTrace current = currentTaskTraceList.get(i);
                 CurrentTaskTraceReqVo.CurrentTaskTrace previous = currentTaskTraceList.get(i - 1);
@@ -460,6 +469,8 @@ public class kwfTruckTraceService {
                 Duration duration = Duration.between(previousTime, currentTime);
                 current.setDuration(String.valueOf(duration.toMinutes()));
             }
+            
+            // 计算总时长(第一个点到最后一个点的时间差)
             CurrentTaskTraceReqVo.CurrentTaskTrace first = currentTaskTraceList.get(0);
             CurrentTaskTraceReqVo.CurrentTaskTrace last = currentTaskTraceList.get(currentTaskTraceList.size() - 1);
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -472,10 +483,12 @@ public class kwfTruckTraceService {
             currentTaskTraceReqVo.setCurrentTaskTraceList(currentTaskTraceList);
         }
 
-        //构造点位假数据
+        // 构造点位假数据(用于演示或测试)
         List<CurrentTaskTraceReqVo.CurrentAddress> addressList = getCurrentAddresses();
         // 将地址列表设置到 CurrentTaskTraceReqVo 对象中
         currentTaskTraceReqVo.setCurrentAddressList(addressList);
+        
+        // 计算地址点的总时长
         int sum = addressList.stream()
                 .filter(a -> StringUtils.isNotBlank(a.getDuration()))
                 .mapToInt(x -> Integer.parseInt(x.getDuration()))
@@ -526,19 +539,21 @@ public class kwfTruckTraceService {
     private List<VehicleReturnData> getVehicleReturnDataList(String wOrderNo) {
         VehicleDataDTO vehicleDataDTO = new VehicleDataDTO();
         vehicleDataDTO.setWOrderNo(wOrderNo);
-        String s;
+        
         try {
-             s = HttpUtil.postJson(urlConfigProperties.getApiBaseUrl()+ UrlConstants.QUERY_TRACE_URL, JSON.toJSONString(vehicleDataDTO), null);
+            // 使用 Feign 调用查询车辆轨迹列表
+            log.info("查询任务轨迹列表请求参数: {}", JSON.toJSONString(vehicleDataDTO));
+            BaseIotResult<List<VehicleReturnData>> result = vehicleTraceClient.queryVehicleDataList(vehicleDataDTO);
+            
+            if (result == null || !StringUtils.equals(result.getCode(), "0") || result.getData() == null) {
+                log.warn("查询任务轨迹返回空数据, 运单号: {}", wOrderNo);
+                return List.of();
+            }
+            return result.getData();
         } catch (Exception e) {
-            log.error("查询任务轨迹异常",e);
+            log.error("查询任务轨迹异常, 运单号: {}", wOrderNo, e);
             throw new BusinessException("查询任务轨迹异常");
         }
-        if (StringUtils.isBlank(s)){
-            return Collections.emptyList();
-        }
-        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) {
@@ -566,6 +581,8 @@ public class kwfTruckTraceService {
         currentTaskTrace.setLongitude(e.getLongitude());
         currentTaskTrace.setLatitude(e.getLatitude());
         currentTaskTrace.setLocationTime(Objects.isNull(e.getTs()) ? "" : DateUtils.format(e.getTs().toLocalDateTime(), DateUtils.DATE_TIME_PATTERN));
+        currentTaskTrace.setStatus(e.getStatus());
+        currentTaskTrace.setStatusDesc(StringUtils.isNotBlank(e.getStatus()) ? VehicleExceptionTypeEnum.getName(Integer.parseInt(e.getStatus())) : "");
         return currentTaskTrace;
     }