chenxiaofei 3 месяцев назад
Родитель
Сommit
df777bd773
46 измененных файлов с 1554 добавлено и 1 удалено
  1. 15 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java
  2. 12 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/page/PageResult.java
  3. 15 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/CommonConstants.java
  4. 24 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/request/PageReq.java
  5. 55 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/BaseResult.java
  6. 47 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/result/PageResult.java
  7. 7 0
      sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java
  8. 21 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckController.java
  9. 34 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java
  10. 19 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/CapacityStatusReq.java
  11. 73 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/CapacityStatusVo.java
  12. 46 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/CapacityTotalStatusVo.java
  13. 17 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverCardRepository.java
  14. 16 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverEntRepository.java
  15. 15 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverImportRepository.java
  16. 15 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverLicenseRepository.java
  17. 16 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverQualificationRepository.java
  18. 15 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverRepository.java
  19. 15 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetDriverRepository.java
  20. 33 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetRepository.java
  21. 26 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetTruckRepository.java
  22. 16 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTransportLicenseRepository.java
  23. 15 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckEntRepository.java
  24. 16 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckImportRepository.java
  25. 15 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckLicenseRepository.java
  26. 16 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckReportImportRepository.java
  27. 15 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckReportRepository.java
  28. 40 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRepository.java
  29. 120 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  30. 33 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwfTaskController.java
  31. 56 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwfTruckTraceController.java
  32. 12 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrder.java
  33. 4 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderAddress.java
  34. 33 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/TaskStatisticsVo.java
  35. 50 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/TruckDto.java
  36. 22 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/CurrentTaskTraceReq.java
  37. 27 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/KwfTruckTraceReplayReq.java
  38. 24 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/TruckInfoReq.java
  39. 38 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CurrentTaskTraceReqVo.java
  40. 71 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/KwfTruckTraceReplayVo.java
  41. 66 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/TruckInfoVo.java
  42. 15 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderAddressRepository.java
  43. 44 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java
  44. 50 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwfTaskService.java
  45. 209 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java
  46. 11 0
      sql/2025/10/30/2025_10_30_cxf_alert.sql

+ 15 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java

@@ -1,6 +1,7 @@
 package com.sckw.core.model.enums;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -110,6 +111,20 @@ public enum CarWaybillEnum {
         return null;
     }
 
+    /**
+     *
+     * 获取任务中的状态
+     * @return 任务中的状态
+     */
+    public static List<Integer> getTasking() {
+        return Arrays.asList(CarWaybillEnum.PENDING_VEHICLE.getCode(),
+                CarWaybillEnum.EXIT_COMPLETED.getCode(),
+                CarWaybillEnum.WAIT_LOADING.getCode(),
+                CarWaybillEnum.COMPLETION_LOADING.getCode(),
+                CarWaybillEnum.WAIT_UNLOADING.getCode(),
+                CarWaybillEnum.COMPLETION_UNLOADING.getCode());
+    }
+
     public static String getWaybillOrderDestination(String status) {
         for (CarWaybillEnum waybillEnum : CarWaybillEnum.values()) {
             if (waybillEnum.getStatus().equals(status)) {

+ 12 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/page/PageResult.java

@@ -1,5 +1,6 @@
 package com.sckw.core.model.page;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.pagehelper.PageInfo;
 
 import java.io.Serializable;
@@ -77,6 +78,17 @@ public class PageResult implements Serializable {
         return pageResult;
     }
 
+    public static <T> PageResult of(IPage page, List<T> records) {
+        PageResult pageResult = new PageResult();
+        pageResult.setPage((int)page.getCurrent());
+        pageResult.setPageSize((int) page.getSize());
+        pageResult.setSize(page.getTotal());
+        // 修正总页数计算
+        pageResult.setPages((int) ((page.getTotal() + page.getSize() - 1) / page.getSize()));
+        pageResult.setList(records);
+        return pageResult;
+    }
+
     public void setPageInfo(PageInfo pageInfo){
         this.page = pageInfo.getPageNum();
         this.pageSize = pageInfo.getPageSize();

+ 15 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/CommonConstants.java

@@ -0,0 +1,15 @@
+package com.sckw.core.web.constant;
+
+import lombok.Getter;
+
+
+
+/**
+ * @author PC
+ */
+@Getter
+public class CommonConstants {
+    public static final String DATE_TIME = "1000-01-01 00:00:00";
+    public static final String TRUCK_LOCATION = "cache:truck:location:";
+    public static final String UNDERSCORE = "_";
+}

+ 24 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/request/PageReq.java

@@ -0,0 +1,24 @@
+package com.sckw.core.web.request;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * @author PC
+ */
+@Data
+public class PageReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 7250765223450002050L;
+    /**
+     * 当前页码
+     */
+    private int pageNum = 1;
+    /**
+     * 每页数量
+     */
+    private int pageSize = 10;
+}

+ 55 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/BaseResult.java

@@ -0,0 +1,55 @@
+package com.sckw.core.web.response;
+
+import com.sckw.core.web.constant.HttpStatus;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+@Data
+public class BaseResult<T> implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -7714239361191848765L;
+    private int code = HttpStatus.SUCCESS_CODE;
+	private String message = HttpStatus.SUCCESS_MESSAGE;
+	private T data;
+
+    /**
+     * 成功响应 - 无数据
+     */
+    public static <T> BaseResult<T> success() {
+        return success(null);
+    }
+    /**
+     * 成功响应 - 有数据
+     */
+    public static <T> BaseResult<T> success(T data) {
+        BaseResult<T> result = new BaseResult<>();
+        result.setData(data);
+        return result;
+    }
+
+    /**
+     * 失败响应 - 自定义消息
+     */
+    public static <T> BaseResult<T> failed(String message) {
+        BaseResult<T> result = new BaseResult<>();
+        result.setCode(500);
+        result.setMessage(message);
+        return result;
+    }
+
+    /**
+     * 失败响应 - 自定义码值和消息
+     */
+    public static <T> BaseResult<T> failed(int code, String message) {
+        BaseResult<T> result = new BaseResult<>();
+        result.setCode(code);
+        result.setMessage(message);
+        return result;
+    }
+
+
+}

+ 47 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/result/PageResult.java

@@ -0,0 +1,47 @@
+package com.sckw.core.web.response.result;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+
+
+/**
+ * @author PC
+ */
+@Data
+public class PageResult<T> implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1803433537622129194L;
+    /** 总记录数 */
+    private long total;
+
+    /** 当前页码(从1开始) */
+    private int pageNum;
+
+    /** 每页显示条数 */
+    private int pageSize;
+
+    /**
+     * 总页数
+     */
+    private int pages;
+
+    /** 当前页的数据列表 */
+    private List<T> list;
+
+
+
+    public PageResult(IPage pageInfo){
+        this.pageNum = (int) (pageInfo.getCurrent());
+        this.pageSize = (int) pageInfo.getSize();
+        this.total = (int)pageInfo.getTotal();
+        this.pages = (int) pageInfo.getPages();
+        this.list = (List<T>) pageInfo.getRecords();
+    }
+
+}

+ 7 - 0
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java

@@ -78,4 +78,11 @@ public interface RemoteFleetService {
      * @date 2023/9/4
      **/
     List<Map<String, Object>> capacityStatistics(List<Long> entIds, Integer capacityAmountMin, Integer capacityAmountMax);
+
+    /**
+     * 根据车队id查询车辆数据的第一条
+     * @param entId
+     * @return
+     */
+    RTruckVo findDataFirstTruck(Long entId);
 }

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

@@ -2,6 +2,7 @@ package com.sckw.fleet.controller;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.sckw.core.annotation.ApiVersion;
 import com.sckw.core.exception.CustomPromptException;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
@@ -11,12 +12,16 @@ import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.fleet.model.dto.GpsByTruckNoDto;
 import com.sckw.fleet.model.dto.KwfTransportLicenseDto;
 import com.sckw.fleet.model.dto.KwfTruckDto;
 import com.sckw.fleet.model.dto.KwfTruckLicenseDto;
+import com.sckw.fleet.model.request.CapacityStatusReq;
+import com.sckw.fleet.model.vo.CapacityStatusVo;
+import com.sckw.fleet.model.vo.CapacityTotalStatusVo;
 import com.sckw.fleet.model.vo.KwfTruckDetailVo;
 import com.sckw.fleet.model.vo.KwfTruckVo;
 import com.sckw.fleet.service.KwfTruckService;
@@ -292,5 +297,21 @@ public class KwfTruckController {
         detail.put("gpsTime", DateUtils.getCurrentTime());*/
         return HttpResult.ok(truckService.findDetailByTruckNo(truckNo));
     }
+    /**
+     *  获取运力实况
+     **/
+    @PostMapping("/queryCapacityStatus")
+    @ApiVersion("获取运力实况")
+    public BaseResult<CapacityStatusVo> queryCapacityStatus(CapacityStatusReq req) {
+        return BaseResult.success(truckService.queryCapacityStatus(req));
+    }
 
+    /**
+     *  获取运力实况
+     **/
+    @GetMapping("/queryTotalCapacityStatus")
+    @ApiVersion("获取运力实况总是统计")
+    public BaseResult<CapacityTotalStatusVo> queryTotalCapacityStatus() {
+        return BaseResult.success(truckService.queryTotalCapacityStatus());
+    }
 }

+ 34 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java

@@ -13,14 +13,18 @@ import com.sckw.fleet.dao.KwfDriverMapper;
 import com.sckw.fleet.dao.KwfTruckMapper;
 import com.sckw.fleet.model.KwfDriver;
 import com.sckw.fleet.model.KwfTruck;
+import com.sckw.fleet.repository.KwfFleetRepository;
+import com.sckw.fleet.repository.KwfTruckRepository;
+import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * @author zk
@@ -29,12 +33,16 @@ import java.util.Map;
  */
 @DubboService(group = "design", version = "1.0.0")
 @Service
+@RequiredArgsConstructor
 public class RemoteFleetServiceImpl implements RemoteFleetService {
 
     @Autowired
     KwfTruckMapper truckDao;
     @Autowired
     KwfDriverMapper driverDao;
+    private final KwfFleetRepository fleetRepository;
+
+    private final KwfTruckRepository kwfTruckRepository;
 
     /**
      * @param driverIds 司机档案主键id,多个已逗号隔开
@@ -188,4 +196,29 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
     public List<Map<String, Object>> capacityStatistics(List<Long> entIds, Integer capacityAmountMin, Integer capacityAmountMax) {
         return truckDao.capacityStatistics(entIds, capacityAmountMin, capacityAmountMax);
     }
+
+    @Override
+    public RTruckVo findDataFirstTruck(Long entId) {
+        KwfTruck truck = kwfTruckRepository.getOneByEntId(entId);
+        return getTruckVo(truck);
+    }
+
+    /**
+     *  获取车辆数据
+     * @param truck 车辆对象
+     * @return 车辆数据
+     */
+    private static RTruckVo getTruckVo(KwfTruck truck) {
+        RTruckVo rTruckVo = new RTruckVo();
+        rTruckVo.setId(truck.getId());
+        rTruckVo.setTruckNo(truck.getTruckNo());
+        rTruckVo.setActualWeight(Objects.isNull(truck.getActualWeight()) ? null : truck.getActualWeight().doubleValue());
+        rTruckVo.setTrailerNo(truck.getTrailerNo());
+        rTruckVo.setTotalComplete(truck.getTotalComplete());
+        rTruckVo.setTotalTake(truck.getTotalTake());
+        rTruckVo.setTotalWeight(truck.getTotalWeight());
+        rTruckVo.setBusinessStatus(truck.getBusinessStatus());
+        rTruckVo.setTruckType(StringUtils.isBlank(truck.getType()) ? "": String.valueOf(truck.getType()));
+        return rTruckVo;
+    }
 }

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

@@ -0,0 +1,19 @@
+package com.sckw.fleet.model.request;
+
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+/**
+ * @author PC
+ */
+@Data
+public class CapacityStatusReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 4100728625596590978L;
+    /**
+     * 车队名称
+     */
+    private String fleetName;
+}

+ 73 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/CapacityStatusVo.java

@@ -0,0 +1,73 @@
+package com.sckw.fleet.model.vo;
+
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 运力实况返回数据
+ * @author PC
+ */
+@Data
+public class CapacityStatusVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 718957004655863405L;
+    /**
+     * 车辆数据
+     */
+    private List<Truck> truck;
+
+    /**
+     * 总车队数量
+     */
+    private String totalNum;
+
+    /**
+     * 总计车数量
+     */
+    private String truckTotalNum;
+
+    /**
+     * 总运行车辆
+     */
+    private String runningTotalTruckNum;
+    /**
+     * 总空闲车辆
+     */
+    private String idleTotalTruckNum;
+    /**
+     * 总异常车辆
+     */
+    private String abnormalTotalTruckNum;
+    @Data
+    public static class Truck implements Serializable{
+        @Serial
+        private static final long serialVersionUID = 2971251347608274308L;
+        /**
+         * 车队 ID
+         */
+        private String fleetId;
+        /**
+         * 车队名称
+         */
+        private String fleetName;
+
+        /**
+         * 空闲车辆数
+         */
+        private String idleNum;
+        /**
+         * 运行车辆数
+         */
+        private String runningNum;
+        /**
+         * 异常车辆数
+         */
+        private String abnormalNum;
+    }
+
+
+}

+ 46 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/CapacityTotalStatusVo.java

@@ -0,0 +1,46 @@
+package com.sckw.fleet.model.vo;
+
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 运力实况返回数据
+ * @author PC
+ */
+@Data
+public class CapacityTotalStatusVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 718957004655863405L;
+    /**
+     * 总车队数量
+     */
+    private String fleetTotalNum;
+
+    /**
+     * 总计车数量
+     */
+    private String truckTotalNum;
+
+    /**
+     * 总运行车辆
+     */
+    private String runningTotalTruckNum;
+    /**
+     * 总空闲车辆
+     */
+    private String idleTotalTruckNum;
+    /**
+     * 总异常车辆
+     */
+    private String abnormalTotalTruckNum;
+
+
+    public static CapacityTotalStatusVo getInstance(){
+        return new CapacityTotalStatusVo();
+    }
+
+}

+ 17 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverCardRepository.java

@@ -0,0 +1,17 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfDriverCardMapper;
+import com.sckw.fleet.model.KwfDriverCard;
+import org.springframework.stereotype.Repository;
+
+
+
+/**
+ * @author PC
+ * 司机身份证信息接口
+ */
+@Repository
+public class KwfDriverCardRepository extends ServiceImpl<KwfDriverCardMapper, KwfDriverCard> {
+
+}

+ 16 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverEntRepository.java

@@ -0,0 +1,16 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfDriverEntMapper;
+import com.sckw.fleet.model.KwfDriverEnt;
+import org.springframework.stereotype.Repository;
+
+
+
+/**
+ * @author PC
+ * 司机信息与企业关联信息接口
+ */
+@Repository
+public class KwfDriverEntRepository extends ServiceImpl<KwfDriverEntMapper, KwfDriverEnt> {
+}

+ 15 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverImportRepository.java

@@ -0,0 +1,15 @@
+package com.sckw.fleet.repository;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfDriverImportMapper;
+import com.sckw.fleet.model.KwfDriverImport;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author PC
+ * 司机信息导入记录接口
+ */
+@Repository
+public class KwfDriverImportRepository extends ServiceImpl<KwfDriverImportMapper, KwfDriverImport> {
+}

+ 15 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverLicenseRepository.java

@@ -0,0 +1,15 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfDriverLicenseMapper;
+import com.sckw.fleet.model.KwfDriverLicense;
+import org.springframework.stereotype.Repository;
+
+
+/**
+ * @author PC
+ * 司机驾驶证信息接口
+ */
+@Repository
+public class KwfDriverLicenseRepository extends ServiceImpl<KwfDriverLicenseMapper, KwfDriverLicense> {
+}

+ 16 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverQualificationRepository.java

@@ -0,0 +1,16 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfDriverQualificationMapper;
+import com.sckw.fleet.model.KwfDriverQualification;
+import org.springframework.stereotype.Repository;
+
+
+
+/**
+ * @author PC
+ * 司机从业资格证接口
+ */
+@Repository
+public class KwfDriverQualificationRepository extends ServiceImpl<KwfDriverQualificationMapper, KwfDriverQualification> {
+}

+ 15 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverRepository.java

@@ -0,0 +1,15 @@
+package com.sckw.fleet.repository;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfDriverMapper;
+import com.sckw.fleet.model.KwfDriver;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author PC
+ * 司机信息接口
+ */
+@Repository
+public class KwfDriverRepository extends ServiceImpl<KwfDriverMapper, KwfDriver> {
+}

+ 15 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetDriverRepository.java

@@ -0,0 +1,15 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfFleetDriverMapper;
+import com.sckw.fleet.model.KwfFleetDriver;
+import org.springframework.stereotype.Repository;
+
+
+/**
+ * @author PC
+ * 车队-司机接口
+ */
+@Repository
+public class KwfFleetDriverRepository extends ServiceImpl<KwfFleetDriverMapper, KwfFleetDriver> {
+}

+ 33 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetRepository.java

@@ -0,0 +1,33 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.core.model.base.BaseModel;
+import com.sckw.fleet.dao.KwfFleetMapper;
+import com.sckw.fleet.model.KwfFleet;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+/**
+ * @author PC
+ * 车队接口
+ */
+@Repository
+public class KwfFleetRepository extends ServiceImpl<KwfFleetMapper, KwfFleet> {
+
+    public KwfFleet queryByName(String fleetName) {
+        return getOne(Wrappers.<KwfFleet>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .like(StringUtils.isNotBlank(fleetName),KwfFleet::getName, fleetName)
+                .orderByDesc(BaseModel::getId)
+                .last("limit 1"));
+    }
+
+    public List<KwfFleet> findAll() {
+        return list(Wrappers.<KwfFleet>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0));
+    }
+}

+ 26 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfFleetTruckRepository.java

@@ -0,0 +1,26 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.core.model.base.BaseModel;
+import com.sckw.fleet.dao.KwfFleetTruckMapper;
+import com.sckw.fleet.model.KwfFleetTruck;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Set;
+
+
+/**
+ * @author PC
+ * 车队-车辆接口
+ */
+@Repository
+public class KwfFleetTruckRepository extends ServiceImpl<KwfFleetTruckMapper, KwfFleetTruck> {
+    public List<KwfFleetTruck> queryByFleetIds(Set<Long> truckIds) {
+
+        return list(Wrappers.<KwfFleetTruck>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .in(KwfFleetTruck::getFleetId,truckIds));
+    }
+}

+ 16 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTransportLicenseRepository.java

@@ -0,0 +1,16 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfTransportLicenseMapper;
+import com.sckw.fleet.model.KwfTransportLicense;
+import org.springframework.stereotype.Repository;
+
+
+
+/**
+ * @author PC
+ * 车辆道路运输许可证接口
+ */
+@Repository
+public class KwfTransportLicenseRepository extends ServiceImpl<KwfTransportLicenseMapper, KwfTransportLicense> {
+}

+ 15 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckEntRepository.java

@@ -0,0 +1,15 @@
+package com.sckw.fleet.repository;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfTruckEntMapper;
+import com.sckw.fleet.model.KwfTruckEnt;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author PC
+ * 车辆信息与企业关联信息接口
+ */
+@Repository
+public class KwfTruckEntRepository extends ServiceImpl<KwfTruckEntMapper, KwfTruckEnt> {
+}

+ 16 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckImportRepository.java

@@ -0,0 +1,16 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfTruckImportMapper;
+import com.sckw.fleet.model.KwfTruckImport;
+import org.springframework.stereotype.Repository;
+
+
+
+/**
+ * @author PC
+ * 司机信息信息导入记录接口
+ */
+@Repository
+public class KwfTruckImportRepository extends ServiceImpl<KwfTruckImportMapper, KwfTruckImport> {
+}

+ 15 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckLicenseRepository.java

@@ -0,0 +1,15 @@
+package com.sckw.fleet.repository;
+
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfTruckLicenseMapper;
+import com.sckw.fleet.model.KwfTruckLicense;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author PC
+ * 车辆行驶证信息接口
+ */
+@Repository
+public class KwfTruckLicenseRepository extends ServiceImpl<KwfTruckLicenseMapper, KwfTruckLicense> {
+}

+ 16 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckReportImportRepository.java

@@ -0,0 +1,16 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfTruckReportImportMapper;
+import com.sckw.fleet.model.KwfTruckReportImport;
+import org.springframework.stereotype.Repository;
+
+
+
+/**
+ * @author PC
+ * 车辆上报导入记录接口
+ */
+@Repository
+public class KwfTruckReportImportRepository extends ServiceImpl<KwfTruckReportImportMapper, KwfTruckReportImport> {
+}

+ 15 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckReportRepository.java

@@ -0,0 +1,15 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfTruckReportMapper;
+import com.sckw.fleet.model.KwfTruckReport;
+import org.springframework.stereotype.Repository;
+
+
+/**
+ * @author PC
+ * 车辆上报接口
+ */
+@Repository
+public class KwfTruckReportRepository extends ServiceImpl<KwfTruckReportMapper, KwfTruckReport> {
+}

+ 40 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRepository.java

@@ -0,0 +1,40 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.core.model.base.BaseModel;
+import com.sckw.fleet.dao.KwfTruckMapper;
+import com.sckw.fleet.model.KwfTruck;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Set;
+
+
+/**
+ * @author PC
+ * 车辆信息接口
+ */
+@Repository
+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)
+                .orderByDesc(BaseModel::getCreateTime)
+                .last("limit 1"));
+    }
+
+
+
+    public List<KwfTruck> findAll() {
+        return list(Wrappers.<KwfTruck>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0));
+    }
+
+    public List<KwfTruck> queryByTruckIds(Set<Long> truckIds) {
+        return list(Wrappers.<KwfTruck>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .in(KwfTruck::getId, truckIds));
+    }
+}

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

@@ -6,9 +6,11 @@ import com.alibaba.excel.read.metadata.ReadSheet;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Lists;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.FileEnum;
 import com.sckw.core.exception.SystemException;
+import com.sckw.core.model.base.BaseModel;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.EntTypeEnum;
 import com.sckw.core.model.enums.SystemTypeEnum;
@@ -24,7 +26,11 @@ import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.fleet.dao.*;
 import com.sckw.fleet.model.*;
 import com.sckw.fleet.model.dto.*;
+import com.sckw.fleet.model.request.CapacityStatusReq;
 import com.sckw.fleet.model.vo.*;
+import com.sckw.fleet.repository.KwfFleetRepository;
+import com.sckw.fleet.repository.KwfFleetTruckRepository;
+import com.sckw.fleet.repository.KwfTruckRepository;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
@@ -34,6 +40,7 @@ import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.dto.RWaybillOrderDto;
 import com.sckw.transport.api.model.vo.RTruckMonitorVo;
 import com.sckw.transport.api.model.vo.RWaybillOrderVo;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,6 +52,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -56,6 +64,7 @@ import java.util.stream.Collectors;
 @Service
 @SuppressWarnings("all")
 @Transactional(rollbackFor = Exception.class)
+@RequiredArgsConstructor
 public class KwfTruckService {
 
     @Autowired
@@ -70,6 +79,10 @@ public class KwfTruckService {
     KwfTruckImportMapper kwfTruckImportDao;
     @Autowired
     KwfFleetTruckMapper fleetTruckDao;
+    private final KwfTruckRepository kwfTruckRepository;
+    private final KwfFleetRepository kwfFleetRepository;
+
+    private final KwfFleetTruckRepository kwfFleetTruckRepository;
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     private RemoteSystemService remoteSystemService;
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
@@ -1291,4 +1304,111 @@ public class KwfTruckService {
         }
     }
 
+    public CapacityStatusVo queryCapacityStatus(CapacityStatusReq req) {
+        log.info("获取运力实况,请求参数:{}",JSON.toJSONString(req));
+        //查询车队
+        List<KwfFleet> kwfFleets = Lists.newArrayList();
+        if (StringUtils.isNotBlank(req.getFleetName())){
+            KwfFleet fleet = kwfFleetRepository.queryByName(req.getFleetName());
+            kwfFleets.add(fleet);
+        }else {
+            kwfFleets = kwfFleetRepository.findAll();
+        }
+        if (CollectionUtils.isEmpty(kwfFleets)){
+            return new CapacityStatusVo();
+        }
+        //将车队列表转换成map
+        Map<Long, KwfFleet> fleetMap = kwfFleets.stream()
+                .collect(Collectors.toMap(BaseModel::getId, Function.identity(),(k1,k2)->k1));
+
+        //根据车队id查询车辆-车队映射表
+        List<KwfFleetTruck> kwfFleetTrucks= kwfFleetTruckRepository.queryByFleetIds(fleetMap.keySet());
+        //按照车队进行分组
+        Map<Long, List<KwfFleetTruck>> fleetIdAndFleetTruckListMap = kwfFleetTrucks.stream().collect(Collectors.groupingBy(KwfFleetTruck::getFleetId));
+        List<CapacityStatusVo.Truck> truckList = Lists.newArrayList();
+        //获取车辆id
+        Set<Long> truckIds = kwfFleetTrucks.stream().map(KwfFleetTruck::getTruckId).collect(Collectors.toSet());
+
+        //根据车辆id查询车辆信息
+        List<KwfTruck> kwfTrucks = kwfTruckRepository.queryByTruckIds(truckIds);
+        //按照车辆id进行分组
+        Map<Long, List<KwfTruck>> truckIdAndTruckListMap = kwfTrucks.stream().collect(Collectors.groupingBy(KwfTruck::getId));
+        //获取要返回的车辆信息
+        List<CapacityStatusVo.Truck> trucks = kwfFleetTrucks.stream().map(x -> getTruck(x, fleetMap, truckIdAndTruckListMap)).collect(Collectors.toList());
+
+        CapacityStatusVo capacityStatusVo = new CapacityStatusVo();
+        capacityStatusVo.setTruck(trucks);
+        return capacityStatusVo;
+    }
+
+
+    public CapacityTotalStatusVo queryTotalCapacityStatus() {
+        log.info("获取运力实况总是统计");
+        List<KwfFleet> kwfFleets = kwfFleetRepository.findAll();
+        if (CollectionUtils.isEmpty(kwfFleets)){
+            //初始化数据
+            return initCapacityTotalStatusVo();
+        }
+        //获取车队id
+        Set<Long> fleetIds = kwfFleets.stream().map(BaseModel::getId).collect(Collectors.toSet());
+        //根据车队id查询车辆-车队映射表
+        List<KwfFleetTruck> kwfFleetTrucks= kwfFleetTruckRepository.queryByFleetIds(fleetIds);
+        //获取车辆id
+        Set<Long> truckIds = kwfFleetTrucks.stream().map(KwfFleetTruck::getTruckId).collect(Collectors.toSet());
+        //根据车辆id查询车辆信息
+        List<KwfTruck> kwfTrucks = kwfTruckRepository.queryByTruckIds(truckIds);
+        //获取返回数据
+        return getCapacityTotalStatusVo(fleetIds, kwfTrucks);
+    }
+
+
+    private static CapacityStatusVo.Truck getTruck(KwfFleetTruck x, Map<Long, KwfFleet> fleetMap, Map<Long, List<KwfTruck>> truckIdAndTruckListMap) {
+        CapacityStatusVo.Truck truck = new CapacityStatusVo.Truck();
+        truck.setFleetId(String.valueOf(x.getFleetId()));
+        truck.setFleetName(fleetMap.getOrDefault(x.getFleetId(), new KwfFleet()).getName());
+        List<KwfTruck> fleetTrucks = truckIdAndTruckListMap.get(x.getTruckId());
+        //获取空闲车辆数
+        long idleNum = fleetTrucks.stream()
+                .filter(ft -> Objects.equals(ft.getStatus(), 0))
+                .count();
+        truck.setIdleNum(String.valueOf(idleNum));
+        long runningNum = fleetTrucks.stream()
+                .filter(ft -> Objects.equals(ft.getStatus(), 1))
+                .count();
+        truck.setRunningNum(String.valueOf(runningNum));
+        truck.setAbnormalNum("");
+        return truck;
+    }
+
+
+
+    /**
+     * 组装返回数据
+     * @param fleetIds 车队id
+     * @param truckIds 车辆id
+     * @return
+     */
+    private static CapacityTotalStatusVo getCapacityTotalStatusVo(Set<Long> fleetIds, List<KwfTruck> kwfTrucks) {
+        CapacityTotalStatusVo capacityTotalStatusVo = CapacityTotalStatusVo.getInstance();
+        capacityTotalStatusVo.setFleetTotalNum(String.valueOf(fleetIds.size()));
+        capacityTotalStatusVo.setTruckTotalNum(CollectionUtils.isEmpty(kwfTrucks) ? "0" :   String.valueOf(kwfTrucks.size()));
+        capacityTotalStatusVo.setRunningTotalTruckNum(CollectionUtils.isEmpty(kwfTrucks) ? "0" :  String.valueOf(kwfTrucks.stream()
+                .filter(x -> Objects.equals(x.getBusinessStatus(), 1))
+                .count()));
+        capacityTotalStatusVo.setIdleTotalTruckNum(CollectionUtils.isEmpty(kwfTrucks) ? "0" : String.valueOf(kwfTrucks.stream()
+                .filter(x -> Objects.equals(x.getStatus(), 0))
+                .count()));
+        capacityTotalStatusVo.setAbnormalTotalTruckNum("");
+        return capacityTotalStatusVo;
+    }
+
+    private CapacityTotalStatusVo initCapacityTotalStatusVo() {
+        CapacityTotalStatusVo capacityTotalStatusVo = CapacityTotalStatusVo.getInstance();
+        capacityTotalStatusVo.setFleetTotalNum("0");
+        capacityTotalStatusVo.setTruckTotalNum("0");
+        capacityTotalStatusVo.setRunningTotalTruckNum("0");
+        capacityTotalStatusVo.setIdleTotalTruckNum("0");
+        capacityTotalStatusVo.setAbnormalTotalTruckNum("0");
+        return capacityTotalStatusVo;
+    }
 }

+ 33 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwfTaskController.java

@@ -0,0 +1,33 @@
+package com.sckw.transport.controller;
+
+import com.sckw.core.annotation.ApiVersion;
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.transport.model.TaskStatisticsVo;
+
+import com.sckw.transport.service.KwfTaskService;
+import com.sckw.transport.service.kwfTruckTraceService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * @author cxf
+ * @desc 任务统计接口
+ */
+@RestController
+@RequestMapping("/task")
+@RequiredArgsConstructor
+public class KwfTaskController {
+    private final KwfTaskService kwfTaskService;
+
+    @PostMapping("/taskStatistics")
+    @ApiVersion("任务和车辆数据统计")
+    public BaseResult<TaskStatisticsVo> getTaskStatistics()  {
+        TaskStatisticsVo truckInfoVo = kwfTaskService.getTaskStatistics();
+        return BaseResult.success(truckInfoVo);
+    }
+
+
+}

+ 56 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwfTruckTraceController.java

@@ -0,0 +1,56 @@
+package com.sckw.transport.controller;
+
+import com.sckw.core.annotation.ApiVersion;
+import com.sckw.core.model.page.PageResult;
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.transport.model.param.CurrentTaskTraceReq;
+import com.sckw.transport.model.param.KwfTruckTraceReplayReq;
+import com.sckw.transport.model.param.TruckInfoReq;
+import com.sckw.transport.model.vo.CurrentTaskTraceReqVo;
+import com.sckw.transport.model.vo.TruckInfoVo;
+import com.sckw.transport.service.kwfTruckTraceService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * @author cxf
+ * @desc 车辆轨迹接口
+ */
+@RestController
+@RequestMapping("/kwfTruckTrace")
+@RequiredArgsConstructor
+public class KwfTruckTraceController {
+    private final kwfTruckTraceService kwfTruckTraceService;
+
+    @PostMapping("/queryTruckInfo")
+    @ApiVersion("获取车辆实时位置信息")
+    public BaseResult<TruckInfoVo> queryTruckInfo(@RequestBody TruckInfoReq req )  {
+        TruckInfoVo truckInfoVo = kwfTruckTraceService.queryTruckInfo(req);
+        return BaseResult.success(truckInfoVo);
+    }
+
+    @PostMapping("/queryCurrentTaskTrace")
+    @ApiVersion("查询当前任务的线路")
+    public BaseResult<CurrentTaskTraceReqVo> queryCurrentTaskTrace(@RequestBody CurrentTaskTraceReq req )  {
+        CurrentTaskTraceReqVo taskTrace = kwfTruckTraceService.queryCurrentTaskTrace(req);
+        return BaseResult.success(taskTrace);
+    }
+
+    @PostMapping("/queryCurrentTaskTrace")
+    @ApiVersion("查询当前车辆的轨迹明细")
+    public BaseResult<CurrentTaskTraceReqVo> queryCurrentTruckTrace(@RequestBody CurrentTaskTraceReq req )  {
+        CurrentTaskTraceReqVo taskTrace = kwfTruckTraceService.queryCurrentTruckTrace(req);
+        return BaseResult.success(taskTrace);
+    }
+
+
+
+    @PostMapping("/replay")
+    @ApiVersion("轨迹回放")
+    public BaseResult<PageResult> findPage(@RequestBody KwfTruckTraceReplayReq req )  {
+        PageResult pageResult = kwfTruckTraceService.findPage(req);
+        return BaseResult.success(pageResult);
+    }
+
+}

+ 12 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrder.java

@@ -1,5 +1,6 @@
 package com.sckw.transport.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -151,6 +152,17 @@ public class KwtWaybillOrder implements Serializable {
      */
     @TableLogic("0")
     private Integer delFlag;
+    /**
+     * 任务开始时间
+     */
+    @TableField("task_start_time")
+    private Date taskStartTime;
+
+    /**
+     * 任务结束时间
+     */
+    @TableField("task_end_time")
+    private Date taskEndTime;
 
     private static final long serialVersionUID = 1L;
 }

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

@@ -1,5 +1,6 @@
 package com.sckw.transport.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -148,4 +149,7 @@ public class KwtWaybillOrderAddress implements Serializable {
     private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
+
+    @TableField(exist = false)
+    private String wOrderIdStatusKey;
 }

+ 33 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/TaskStatisticsVo.java

@@ -0,0 +1,33 @@
+package com.sckw.transport.model;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+
+/**
+ * @author PC
+ */
+@Data
+public class TaskStatisticsVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -4679270490916242074L;
+    /**
+     * 任务总数
+     */
+    private String taskTotal;
+    /**
+     * 处理中的任务数
+     */
+    private String taskRunning;
+    /**
+     * 已完成的任务数
+     */
+    private String taskCompleted;
+    /**
+     * 占全部运力百分比
+     */
+    private String taskPercent;
+}

+ 50 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/TruckDto.java

@@ -0,0 +1,50 @@
+package com.sckw.transport.model.dto;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+
+/**
+ * @author PC
+ */
+@Data
+public class TruckDto implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -7375595663448057033L;
+    /**
+     * 运单号
+     */
+    private String wOrderNo;
+    /**
+     * 车牌号
+     */
+    private String truckNo;
+    /**
+     * GPS状态
+     */
+    private String gpsStatus;
+    /**
+     * 精度
+     */
+    private String longitude;
+    /**
+     * 纬度
+     */
+    private String latitude;
+
+    /**
+     * 定位时间
+     */
+    private String locationTime;
+    /**
+     * 关联任务号
+     */
+    private String lOrderNo;
+    /**
+     * 任务地点
+     */
+    private String taskAddress;
+}

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

@@ -0,0 +1,22 @@
+package com.sckw.transport.model.param;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+@Data
+public class CurrentTaskTraceReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8645240848510669952L;
+
+    /**
+     * 车牌号
+     */
+    private String truckNo;
+    /**
+     * 运单号
+     */
+    private String wOrderNo;
+}

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

@@ -0,0 +1,27 @@
+package com.sckw.transport.model.param;
+
+import com.sckw.core.web.request.PageReq;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * @author PC
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class KwfTruckTraceReplayReq extends PageReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -34385531213284288L;
+    /**
+     * 任务创建时间下限
+     */
+    private String startTime;
+    /**
+     * 任务开始时间上限
+     */
+    private String endTime;
+}

+ 24 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/TruckInfoReq.java

@@ -0,0 +1,24 @@
+package com.sckw.transport.model.param;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * @author PC
+ */
+@Data
+public class TruckInfoReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -1005206382530999253L;
+    /**
+     * 车队id
+     */
+    private String entId;
+    /**
+     * 车牌号
+     */
+    private String truckNo;
+}

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

@@ -0,0 +1,38 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+ * @author PC
+ */
+@Data
+public class CurrentTaskTraceReqVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8645240848510669952L;
+    List<CurrentTaskTrace> currentTaskTraceList;
+
+    @Data
+    public static class CurrentTaskTrace {
+        /**
+         * 运单号
+         */
+        private String wOrderNo;
+        /**
+         * 经度
+         */
+        private String longitude;
+        /**
+         * 纬度
+         */
+        private String latitude;
+        /**
+         * 定位时间
+         */
+        private String locationTime;
+    }
+}

+ 71 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/KwfTruckTraceReplayVo.java

@@ -0,0 +1,71 @@
+package com.sckw.transport.model.vo;
+
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * @author PC
+ */
+@Data
+public class KwfTruckTraceReplayVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -34385531213284288L;
+    /**
+     * 运单id
+     */
+    private Long wOrderId;
+    /**
+     * 运单编号
+     */
+    private String wOrderNo;
+    /**
+     * 司机姓名
+     */
+    private String driverName;
+    /**
+     * 驾驶员手机号
+     */
+    private String phone;
+    /**
+     * 承运单位
+     */
+    private String carrier;
+    /**
+     * 状态
+     */
+    private String status;
+
+    /**
+     * 状态描述
+     */
+    private String statusDesc;
+    /**
+     * 起始地点
+     */
+    private String startAddress;
+    /**
+     * 结束地点
+     */
+    private String endAddress;
+    /**
+     * 关联任务单号
+     */
+    private String relationTaskNo;
+    /**
+     * 任务开始时间
+     */
+    private String taskStartTime;
+
+    /**
+     * 任务开始时间
+     */
+    private String taskEndTime;
+    /**
+     * 告警记录数
+     */
+    private String warningCount;
+}

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

@@ -0,0 +1,66 @@
+package com.sckw.transport.model.vo;
+
+import com.sckw.transport.model.dto.TruckDto;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+/**
+ * @author PC
+ */
+@Data
+public class TruckInfoVo implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -1005206382530999253L;
+    /**
+     * 运单号
+     */
+    private String wOrderNo;
+    /**
+     * 车牌号
+     */
+    private String truckNo;
+    /**
+     * GPS状态
+     */
+    private String gpsStatus;
+    /**
+     * 精度
+     */
+    private String longitude;
+    /**
+     * 纬度
+     */
+    private String latitude;
+
+    /**
+     * 定位时间
+     */
+    private String locationTime;
+    /**
+     * 关联任务号
+     */
+    private String lOrderNo;
+    /**
+     * 任务地点
+     */
+    private String taskAddress;
+
+    public static TruckInfoVo getInstance() {
+        return new TruckInfoVo();
+    }
+    public static TruckInfoVo toTruckInfoVo(TruckDto truckDto ) {
+        TruckInfoVo truckInfoVo = TruckInfoVo.getInstance();
+        truckInfoVo.setWOrderNo(truckDto.getWOrderNo());
+        truckInfoVo.setTruckNo(truckDto.getTruckNo());
+        truckInfoVo.setGpsStatus(truckDto.getGpsStatus());
+        truckInfoVo.setLongitude(truckDto.getLongitude());
+        truckInfoVo.setLatitude(truckDto.getLatitude());
+        truckInfoVo.setLocationTime(truckDto.getLocationTime());
+        truckInfoVo.setLOrderNo(truckDto.getLOrderNo());
+        truckInfoVo.setTaskAddress(truckDto.getTaskAddress());
+        return truckInfoVo;
+    }
+}

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

@@ -0,0 +1,15 @@
+package com.sckw.transport.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.transport.dao.KwtWaybillOrderAddressMapper;
+import com.sckw.transport.model.KwtWaybillOrderAddress;
+import org.springframework.stereotype.Repository;
+
+
+
+/**
+ * @author PC
+ */
+@Repository
+public class KwtWaybillOrderAddressRepository extends ServiceImpl<KwtWaybillOrderAddressMapper, KwtWaybillOrderAddress> {
+}

+ 44 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java

@@ -0,0 +1,44 @@
+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.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.transport.dao.KwtWaybillOrderMapper;
+import com.sckw.transport.model.KwtWaybillOrder;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author: 马超伟
+ * @CreateTime: 2025-10-12
+ * @Description:
+ * @Version: 1.0
+ */
+
+@Repository
+public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper, KwtWaybillOrder> {
+    public Page<KwtWaybillOrder> findPage(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)
+                .orderByDesc(KwtWaybillOrder::getCreateTime);
+        return page(page,wrapper);
+    }
+
+    public List<KwtWaybillOrder> findAll() {
+        LambdaQueryWrapper<KwtWaybillOrder> wrapper = Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .eq(KwtWaybillOrder::getDelFlag, 0)
+                .orderByDesc(KwtWaybillOrder::getCreateTime)
+                .select(KwtWaybillOrder::getId,
+                        KwtWaybillOrder::getStatus,
+                        KwtWaybillOrder::getTruckNo);
+        return list(wrapper);
+    }
+
+
+}

+ 50 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwfTaskService.java

@@ -0,0 +1,50 @@
+package com.sckw.transport.service;
+
+
+import com.sckw.core.model.enums.CarWaybillEnum;
+import com.sckw.transport.model.KwtWaybillOrder;
+import com.sckw.transport.model.TaskStatisticsVo;
+import com.sckw.transport.repository.KwtWaybillOrderRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author PC
+ */
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class KwfTaskService {
+    private final KwtWaybillOrderRepository kwtWaybillOrderRepository;
+    public TaskStatisticsVo getTaskStatistics() {
+        log.info("开始获取任务统计信息请求参数");
+        List<KwtWaybillOrder> waybillOrder= kwtWaybillOrderRepository.findAll();
+        //任务总数
+        int totalCount = waybillOrder.size();
+        if (totalCount == 0) {
+            return new TaskStatisticsVo();
+        }
+        List<Integer> tasking = CarWaybillEnum.getTasking();
+        //处理中的任务数
+        long taskingCount = waybillOrder.stream()
+                .filter(w -> tasking.contains(w.getStatus()) && StringUtils.isNotBlank(w.getTruckNo()))
+                .count();
+        //已经完成的任务数
+        long completedCount = waybillOrder.stream()
+                .filter(w -> Objects.equals(w.getStatus(), CarWaybillEnum.COMPLETION_UNLOADING.getCode()))
+                .count();
+        TaskStatisticsVo taskStatisticsVo = new TaskStatisticsVo();
+        taskStatisticsVo.setTaskTotal(String.valueOf(totalCount));
+        taskStatisticsVo.setTaskRunning(String.valueOf(taskingCount));
+        taskStatisticsVo.setTaskCompleted(String.valueOf(completedCount));
+        taskStatisticsVo.setTaskPercent(taskingCount == 0 ? "0" : String.format("%.2f", (double) taskingCount / totalCount * 100));
+        return taskStatisticsVo;
+    }
+
+}

+ 209 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -0,0 +1,209 @@
+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.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.sckw.contract.api.RemoteContractService;
+import com.sckw.core.exception.BusinessException;
+import com.sckw.core.model.enums.CarWaybillEnum;
+import com.sckw.core.model.page.PageResult;
+
+import com.sckw.core.utils.DateUtils;
+import com.sckw.core.web.constant.CommonConstants;
+import com.sckw.fleet.api.RemoteFleetService;
+import com.sckw.fleet.api.model.vo.RTruckVo;
+import com.sckw.manage.api.RemoteManageService;
+import com.sckw.order.api.dubbo.RemoteTradeOrderAmountService;
+import com.sckw.order.api.dubbo.TradeOrderInfoService;
+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.KwsEnterpriseResDto;
+import com.sckw.transport.model.KwtWaybillOrder;
+import com.sckw.transport.model.KwtWaybillOrderAddress;
+import com.sckw.transport.model.dto.TruckDto;
+import com.sckw.transport.model.param.CurrentTaskTraceReq;
+import com.sckw.transport.model.param.KwfTruckTraceReplayReq;
+import com.sckw.transport.model.param.TruckInfoReq;
+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.KwtWaybillOrderAddressRepository;
+import com.sckw.transport.repository.KwtWaybillOrderRepository;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * @author PC
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class kwfTruckTraceService {
+    private final KwtWaybillOrderRepository kwtWaybillOrderRepository;
+    private final KwtWaybillOrderAddressRepository kwtWaybillOrderAddressRepository;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
+    RemoteSystemService remoteSystemService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
+    TradeOrderInfoService tradeOrderInfoService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
+    RemoteTradeOrderAmountService tradeOrderAmountService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
+    GoodsInfoService goodsInfoService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
+    RemoteFleetService fleetService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    RemoteContractService remoteContractService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    RemoteManageService remoteManageService;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    PaymentDubboService paymentDubboService ;
+
+    public PageResult findPage(KwfTruckTraceReplayReq req) {
+        log.info("查询历轨迹回放氢气参数:{}", req);
+        Date date = new Date();
+        if (StringUtils.isBlank(req.getStartTime())){
+            date = DateUtils.formatDate(req.getStartTime());
+        }
+        Date beforeDate = DateUtils.addDateDays(date, -30);
+        if (StringUtils.isBlank(req.getEndTime())){
+            beforeDate = DateUtils.formatDate(req.getEndTime());
+        }
+        Page<KwtWaybillOrder> page = kwtWaybillOrderRepository.findPage(req.getPageNum(), req.getPageSize(), beforeDate, date);
+        List<KwtWaybillOrder> records = page.getRecords();
+        if(CollectionUtils.isEmpty(page.getRecords())) {
+            return new PageResult();
+        }
+        //查询企业 获取承运单位
+        List<Long> entIds = records.stream().map(KwtWaybillOrder::getId).distinct().collect(Collectors.toList());
+        //运单id
+        List<Long> wOrderIds = records.stream().map(KwtWaybillOrder::getId).collect(Collectors.toList());
+        //通过企业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);
+        //运单id和状态组合key映射地址
+        Map<Long, List<KwtWaybillOrderAddress>> wOrderIdAndAddressMap = orderAddresses.stream()
+                .collect(Collectors.groupingBy(KwtWaybillOrderAddress::getWOrderId));
+
+        List<KwfTruckTraceReplayVo> kwfTruckTraceReplayVoList = records.stream()
+                .map(r -> getKwfTruckTraceReplayVo(r, idAndKwsEnterpriseMap, wOrderIdAndAddressMap))
+                .collect(Collectors.toList());
+       return PageResult.of(page,kwfTruckTraceReplayVoList);
+    }
+
+
+    private static KwfTruckTraceReplayVo getKwfTruckTraceReplayVo(KwtWaybillOrder r, Map<Long, KwsEnterpriseResDto> idAndKwsEnterpriseMap, Map<Long, List<KwtWaybillOrderAddress>> wOrderIdAndAddressMap) {
+
+        KwfTruckTraceReplayVo kwfTruckTraceReplay = new KwfTruckTraceReplayVo();
+        kwfTruckTraceReplay.setWOrderId(r.getId());
+        kwfTruckTraceReplay.setWOrderNo(r.getWOrderNo());
+        kwfTruckTraceReplay.setDriverName(r.getDriverName());
+        kwfTruckTraceReplay.setPhone(r.getDriverPhone());
+        kwfTruckTraceReplay.setStatus(String.valueOf(r.getStatus()));
+        kwfTruckTraceReplay.setStatusDesc(CarWaybillEnum.getName(r.getStatus()));
+        KwsEnterpriseResDto orDefault = idAndKwsEnterpriseMap.getOrDefault(r.getEntId(), new KwsEnterpriseResDto());
+        kwfTruckTraceReplay.setCarrier(orDefault.getFirmName());
+        List<KwtWaybillOrderAddress> addressList = wOrderIdAndAddressMap.get(r.getId());
+        addressList.forEach(e -> {
+            if (Objects.equals(e.getAddressType(),1)){
+                kwfTruckTraceReplay.setStartAddress(e.getDetailAddress());
+            }
+            if (Objects.equals(e.getAddressType(),2)){
+                kwfTruckTraceReplay.setEndAddress(e.getDetailAddress());
+            }
+        });
+
+        kwfTruckTraceReplay.setRelationTaskNo(Objects.nonNull(r.getLOrderId()) ? String.valueOf(r.getLOrderId()) : "");
+//        if (Objects.equals(r.getStatus(), CarWaybillEnum.WAIT_LOADING.getCode())){
+//
+//        }
+        String taskStartEndTime = DateUtils.format(r.getTaskStartTime(), DateUtils.DATE_TIME_PATTERN);
+        kwfTruckTraceReplay.setTaskStartTime(StringUtils.equals(taskStartEndTime, CommonConstants.DATE_TIME) ? StringUtils.EMPTY: taskStartEndTime);
+//        if (Objects.equals(r.getStatus(),CarWaybillEnum.COMPLETION_UNLOADING.getCode())){
+//
+//        }
+        String endStartEndTime = DateUtils.format(r.getTaskEndTime(), DateUtils.DATE_TIME_PATTERN);
+        kwfTruckTraceReplay.setTaskEndTime(StringUtils.equals(endStartEndTime, CommonConstants.DATE_TIME) ? StringUtils.EMPTY: endStartEndTime);
+        kwfTruckTraceReplay.setWarningCount("");
+        return kwfTruckTraceReplay;
+    }
+
+    public TruckInfoVo queryTruckInfo(TruckInfoReq req) {
+        log.info("查询车辆实时位置信息参数:{}", req);
+        //todo cxf 查询当前位置 有可能没有任务则不查询td 查询redis
+        String location;
+        if (StringUtils.isNotBlank(req.getTruckNo())){
+            return getTruckInfoVo(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();
+        }
+        return getTruckInfoVo(dataFirstTruck.getTruckNo());
+    }
+
+    private static TruckInfoVo getTruckInfoVo(String truckNo) {
+        String location = RedissonUtils.getString(CommonConstants.TRUCK_LOCATION + truckNo);
+        if (StringUtils.isBlank(location)){
+            //todo cxf 查询中交运车辆位置
+            return new TruckInfoVo();
+        }
+        TruckDto truckDto = JSON.parseObject(location, TruckDto.class);
+        //如果运单号为空那么返回redis的数据 这个数据是app最后一次上报的数据
+        if (Objects.nonNull(truckDto) && StringUtils.isBlank(truckDto.getWOrderNo())){
+           return TruckInfoVo.toTruckInfoVo(truckDto);
+        }
+        //如果车牌不为空直接查询 查缓存
+        if (StringUtils.isNotBlank(truckDto.getWOrderNo())){
+            //todo cxf 查询中交
+            return new TruckInfoVo();
+        }
+        return null;
+    }
+
+    public CurrentTaskTraceReqVo queryCurrentTaskTrace(CurrentTaskTraceReq req) {
+        log.info("查询当前任务轨迹参数:{}", req);
+        if (StringUtils.isBlank(req.getWOrderNo())){
+            log.info("运单号为空没有任务,没有关联路线");
+            return new CurrentTaskTraceReqVo();
+        }
+        //cxf todo 查询车辆td数据库
+        return new CurrentTaskTraceReqVo();
+    }
+
+    public CurrentTaskTraceReqVo queryCurrentTruckTrace(CurrentTaskTraceReq req) {
+        if (StringUtils.isBlank(req.getTruckNo())){
+            throw  new BusinessException("车牌号不能为空");
+        }
+        //cxf todo 查询车辆td数据库
+        return new CurrentTaskTraceReqVo();
+    }
+}

+ 11 - 0
sql/2025/10/30/2025_10_30_cxf_alert.sql

@@ -0,0 +1,11 @@
+ALTER TABLE kwf_truck ADD gps_flag tinyint NOT NULL default 0 comment '是否安装gps 0-未安装1-已安装';
+ALTER TABLE kwf_truck ADD company_id varchar(255) NOT NULL default '' comment '企业id(旧系统)';
+ALTER TABLE kwf_truck ADD truck_mark tinyint      NOT NULL default 0  comment '0-自有车辆 1-外部车辆';
+ALTER TABLE kwf_truck ADD signup_channel tinyint   NOT NULL default 0  comment '采集来源 0-app 1-pc端';
+ALTER TABLE kwf_truck ADD all_mileage varchar(255)   NOT NULL default ''  comment '里程总数';
+ALTER TABLE kwf_truck ADD car_axis varchar(255)    NOT NULL default ''      comment '轴数';
+ALTER TABLE kwf_truck ADD drive_mode varchar(255)    NOT NULL default ''      comment '是否是无人驾驶(0-有人驾驶,1-无人驾驶)';
+
+
+ALTER TABLE kwt_waybill_order ADD task_start_time datetime NOT NULL default '1000-01-01 00:00:00' comment '任务开始时间';
+ALTER TABLE kwt_waybill_order ADD task_end_time datetime NOT NULL default '1000-01-01 00:00:00' comment '任务结束时间';