Pārlūkot izejas kodu

新增司机app相关接口

donglang 1 mēnesi atpakaļ
vecāks
revīzija
5c301cc142
32 mainītis faili ar 1327 papildinājumiem un 29 dzēšanām
  1. 17 6
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/AddressTypeEnum.java
  2. 41 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/UnitTypeEnum.java
  3. 3 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java
  4. 1 1
      sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/RemoteFleetService.java
  5. 7 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  6. 68 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderUnitInfoDetailVO.java
  7. 6 0
      sckw-modules-api/sckw-transport-api/pom.xml
  8. 8 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteService.java
  9. 30 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/CapacityTruckParam.java
  10. 31 0
      sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/vo/CapacityTruckVO.java
  11. 53 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfDriverController.java
  12. 16 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dao/KwfDriverAssociatedTrackMapper.java
  13. 1 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java
  14. 94 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/KwfDriverAssociatedTrack.java
  15. 40 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/AssociatedTrackAddRequest.java
  16. 28 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/AssociatedTrackRequest.java
  17. 54 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/KwfDriverAssociatedTrackVO.java
  18. 16 0
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfDriverAssociatedTrackRepository.java
  19. 1 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRepository.java
  20. 156 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfDriverService.java
  21. 1 1
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java
  22. 24 5
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  23. 47 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/enterpriseApp/AppWayBillController.java
  24. 41 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java
  25. 35 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderResp.java
  26. 41 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/OrderCirculateQueryParam.java
  27. 39 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/OrderCirculateTotalTakeParam.java
  28. 43 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderCirculateTotalTakeVo.java
  29. 9 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderRepository.java
  30. 217 10
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  31. 140 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/utils/DistanceUtils.java
  32. 19 0
      sql/2025/mvp2/2025_11_03_donglang.sql

+ 17 - 6
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/AddressTypeEnum.java

@@ -10,25 +10,36 @@ import lombok.Getter;
 @Getter
 @Getter
 public enum AddressTypeEnum {
 public enum AddressTypeEnum {
 
 
-    //普通
+    /**
+     * 普通
+     */
     NO(0, ""),
     NO(0, ""),
-    //装货地址
+
+    /**
+     * 装货地址
+     */
     SHIPMENT(1, "装货"),
     SHIPMENT(1, "装货"),
-    //收货地址
+
+    /**
+     * 收货地址
+     */
     TAKE(2, "卸货"),
     TAKE(2, "卸货"),
-    //装/卸
+
+    /**
+     *
+     */
     BOTH(3, "装/卸");
     BOTH(3, "装/卸");
 
 
     private final int code;
     private final int code;
 
 
     private final String name;
     private final String name;
 
 
-    AddressTypeEnum(int code, String name){
+    AddressTypeEnum(int code, String name) {
         this.code = code;
         this.code = code;
         this.name = name;
         this.name = name;
     }
     }
 
 
-    public static AddressTypeEnum getName(int code){
+    public static AddressTypeEnum getName(int code) {
         for (AddressTypeEnum addressDefaultTypeEnum : values()) {
         for (AddressTypeEnum addressDefaultTypeEnum : values()) {
             if (addressDefaultTypeEnum.getCode() == code) {
             if (addressDefaultTypeEnum.getCode() == code) {
                 return addressDefaultTypeEnum;
                 return addressDefaultTypeEnum;

+ 41 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/UnitTypeEnum.java

@@ -0,0 +1,41 @@
+package com.sckw.core.model.enums;
+
+import lombok.Getter;
+
+/**
+ * @author czh
+ * @desc 合作类型
+ * @date 2023/6/15
+ */
+@Getter
+public enum UnitTypeEnum {
+
+    /**
+     * 托运企业
+     */
+    CONSIGN(1, "托运企业"),
+
+    /**
+     * 承运企业
+     */
+    CARRIAGE(2, "承运企业");
+
+    private final int code;
+
+    private final String name;
+
+    UnitTypeEnum(int code, String name){
+        this.code = code;
+        this.name = name;
+    }
+
+    public static UnitTypeEnum getName(int code){
+        for (UnitTypeEnum cooperateStatusEnum : values()) {
+            if (cooperateStatusEnum.getCode() == code) {
+                return cooperateStatusEnum;
+            }
+        }
+        return null;
+    }
+
+}

+ 3 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/constant/HttpStatus.java

@@ -255,4 +255,7 @@ public class HttpStatus {
     public static final String ENT_FAILED = "新增子企业,父级企业不能为空!";
     public static final String ENT_FAILED = "新增子企业,父级企业不能为空!";
 
 
 
 
+    public static final String LOG_ORDER_TAKING = "当前物流订单不是可接单状态!";
+
+
 }
 }

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

@@ -106,7 +106,7 @@ public interface RemoteFleetService {
     List<TmsTruckAxleNumVO> getCarAxisInfo(List<Integer> axleNumIds);
     List<TmsTruckAxleNumVO> getCarAxisInfo(List<Integer> axleNumIds);
 
 
 
 
-    List<RTruckVo> findTruckByTruckIds(Set<Long> truckIds);
+    List<RTruckVo> findTruckByTruckIds(List<Long> truckIds);
 
 
     List<RFleetVo> findFleetByIds(Set<Long> fleetIds);
     List<RFleetVo> findFleetByIds(Set<Long> fleetIds);
 }
 }

+ 7 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -4,6 +4,7 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.order.api.model.*;
 import com.sckw.order.api.model.*;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Set;
 
 
 /**
 /**
  * @desc: 贸易订单信息相关dubbo
  * @desc: 贸易订单信息相关dubbo
@@ -118,4 +119,10 @@ public interface TradeOrderInfoService {
     Boolean associateEnt(Long firstEntId,Long secondEntId);
     Boolean associateEnt(Long firstEntId,Long secondEntId);
 
 
     OrderDetailVo queryByTradeOrderId(Long tradeOrderId);
     OrderDetailVo queryByTradeOrderId(Long tradeOrderId);
+
+    /**
+     * 通交易订单id查询交易订单采购/销售企业信息     * @param tradeOrderId
+     * @return
+     */
+    List<OrderUnitInfoDetailVO> queryOrderUnitInfByTOrderId(Set<Long> tradeOrderId);
 }
 }

+ 68 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderUnitInfoDetailVO.java

@@ -0,0 +1,68 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 采购/销售企业信息详情
+ * @author: 董浪
+ * @date: 2025-11-15 11:10
+ */
+@Getter
+@Setter
+@ToString
+public class OrderUnitInfoDetailVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -6810936561067718404L;
+
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * 交易订单id
+     */
+    private Long tOrderId;
+
+    /**
+     * 订单编号
+     */
+    private String tOrderNo;
+
+    /**
+     * 单位类型(1采购单位、2销售单位)
+     */
+    private String unitType;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 企业名称
+     */
+    private String firmName;
+
+    /**
+     * 联系人id
+     */
+    private Long contactsId;
+
+    /**
+     * 联系人姓名
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+}

+ 6 - 0
sckw-modules-api/sckw-transport-api/pom.xml

@@ -32,5 +32,11 @@
             <groupId>com.sckw</groupId>
             <groupId>com.sckw</groupId>
             <artifactId>sckw-common-core</artifactId>
             <artifactId>sckw-common-core</artifactId>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>io.swagger.core.v3</groupId>
+            <artifactId>swagger-annotations-jakarta</artifactId>
+            <version>2.2.22</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
     </dependencies>
 </project>
 </project>

+ 8 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteService.java

@@ -4,6 +4,7 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
 import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
 import com.sckw.transport.api.model.dto.RWaybillOrderDto;
 import com.sckw.transport.api.model.dto.RWaybillOrderDto;
+import com.sckw.transport.api.model.param.CapacityTruckParam;
 import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
 import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
 import com.sckw.transport.api.model.param.LogisticsOrderParam;
 import com.sckw.transport.api.model.param.LogisticsOrderParam;
 import com.sckw.transport.api.model.param.UpdateOrderStatusDto;
 import com.sckw.transport.api.model.param.UpdateOrderStatusDto;
@@ -148,4 +149,11 @@ public interface TransportRemoteService {
     List<KwtLogisticsOrderVO> queryLogisticOrderByTradeId(Long tradeId);
     List<KwtLogisticsOrderVO> queryLogisticOrderByTradeId(Long tradeId);
 
 
     List<KwtLogisticsOrderVO> queryTransportEntByEntId(Long entId);
     List<KwtLogisticsOrderVO> queryTransportEntByEntId(Long entId);
+
+    /**
+     * 查询物流订单已派运力车辆
+     * @param param
+     * @return
+     */
+    List<CapacityTruckVO> queryCapacityTruck(CapacityTruckParam param);
 }
 }

+ 30 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/param/CapacityTruckParam.java

@@ -0,0 +1,30 @@
+package com.sckw.transport.api.model.param;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 已派运力车牌查询请求参数
+ * @create :2025-11-13 08:58:00
+ */
+@Data
+public class CapacityTruckParam implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 265154065731895605L;
+
+    /**
+     * 企业id
+     */
+    private String entId;
+
+    /**
+     * 车牌号
+     */
+    private String truckNo;
+
+}

+ 31 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/vo/CapacityTruckVO.java

@@ -0,0 +1,31 @@
+package com.sckw.transport.api.model.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :donglang
+ * @version :1.0
+ * @description :
+ * @create :2025-11-13 08:59:00
+ */
+@Data
+public class CapacityTruckVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 7238751050019370981L;
+
+    /**
+     * 车辆id
+     */
+    private Long truckId;
+
+    /**
+     * 车牌号
+     */
+    private String truckNo;
+
+
+}

+ 53 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfDriverController.java

@@ -10,9 +10,13 @@ import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.fleet.model.dto.*;
 import com.sckw.fleet.model.dto.*;
+import com.sckw.fleet.model.request.AssociatedTrackAddRequest;
+import com.sckw.fleet.model.request.AssociatedTrackRequest;
+import com.sckw.fleet.model.vo.KwfDriverAssociatedTrackVO;
 import com.sckw.fleet.model.vo.KwfDriverDetailVo;
 import com.sckw.fleet.model.vo.KwfDriverDetailVo;
 import com.sckw.fleet.model.vo.KwfDriverVo;
 import com.sckw.fleet.model.vo.KwfDriverVo;
 import com.sckw.fleet.service.KwfDriverService;
 import com.sckw.fleet.service.KwfDriverService;
@@ -275,4 +279,53 @@ public class KwfDriverController {
         return driverService.bindTruck(params);
         return driverService.bindTruck(params);
     }
     }
 
 
+    /**
+     * 查询司机关联车辆信息
+     *
+     * @param param
+     * @return
+     */
+    @GetMapping("/queryAssociatedTrack")
+    public BaseResult<List<KwfDriverAssociatedTrackVO>> queryAssociatedTrack(@RequestBody @Valid AssociatedTrackRequest param){
+        List<KwfDriverAssociatedTrackVO> kwfDriverAssociatedTrackVOS = driverService.queryAssociatedTrack(param);
+        return BaseResult.success(kwfDriverAssociatedTrackVOS);
+    }
+
+    /**
+     * 新增司机关联车辆
+     *
+     * @param param
+     * @return
+     */
+    @PostMapping("/addAssociatedTrack")
+    public BaseResult addAssociatedTrack(@RequestBody @Valid AssociatedTrackAddRequest param){
+        driverService.addAssociatedTrack(param);
+        return BaseResult.success();
+    }
+
+    /**
+     * 删除司机关联车辆
+     *
+     * @param id
+     * @return
+     */
+    @PostMapping("/deleteAssociatedTrack")
+    public BaseResult deleteAssociatedTrack(@RequestParam Long id){
+        driverService.deleteAssociatedTrack(id);
+        return BaseResult.success();
+    }
+
+
+    /**
+     * 切换关联车辆
+     *
+     * @param id
+     * @return
+     */
+    @PostMapping("/switchAssociatedTrack")
+    public BaseResult switchAssociatedTrack(@RequestParam Long id){
+        driverService.switchAssociatedTrack(id);
+        return BaseResult.success();
+    }
+
 }
 }

+ 16 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dao/KwfDriverAssociatedTrackMapper.java

@@ -0,0 +1,16 @@
+package com.sckw.fleet.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.fleet.model.KwfDriverAssociatedTrack;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @desc 司机关联车辆 Mapper 接口
+ * @author zk
+ * @date 2023/7/6 0006
+ */
+@Mapper
+public interface KwfDriverAssociatedTrackMapper extends BaseMapper<KwfDriverAssociatedTrack> {
+
+
+}

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

@@ -390,7 +390,7 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
     }
     }
 
 
     @Override
     @Override
-    public List<RTruckVo> findTruckByTruckIds(Set<Long> truckIds) {
+    public List<RTruckVo> findTruckByTruckIds(List<Long> truckIds) {
         List<KwfTruck> trucks = kwfTruckRepository.findTruckByTruckIds(truckIds);
         List<KwfTruck> trucks = kwfTruckRepository.findTruckByTruckIds(truckIds);
         if (CollectionUtils.isEmpty(trucks)){
         if (CollectionUtils.isEmpty(trucks)){
             return Collections.emptyList();
             return Collections.emptyList();

+ 94 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/KwfDriverAssociatedTrack.java

@@ -0,0 +1,94 @@
+package com.sckw.fleet.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 司机关联车辆表(司机app) Model
+ *
+ * @author Generated
+ * @since 2024
+ */
+@Data
+@TableName("kwf_driver_associated_track")
+public class KwfDriverAssociatedTrack  implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -3120079394293028870L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 企业id
+     */
+    @TableField("ent_id")
+    private Long entId;
+
+    /**
+     * 司机id
+     */
+    @TableField("driver_id")
+    private Long driverId;
+
+    /**
+     * 车牌号
+     */
+    @TableField("truck_No")
+    private String truckNo;
+
+    /**
+     * 车辆轴数id
+     */
+    @TableField("truck_axle_id")
+    private Long truckAxleId;
+
+    /**
+     * 法定载重(吨)
+     */
+    @TableField("legalLoad")
+    private BigDecimal legalLoad;
+
+    /**
+     * 是否为当前车辆(0否,1是)
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 车辆关系是否删除(0未删除,1删除)
+     */
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private Data createTime;
+
+    /**
+     * 更新时间
+     */
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private Data updateTime;
+
+    /**
+     * 创建人
+     */
+    @TableField(value = "create_user", fill = FieldFill.INSERT)
+    private String createUser;
+
+    /**
+     * 更新人
+     */
+    @TableField(value = "update_user", fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+}

+ 40 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/AssociatedTrackAddRequest.java

@@ -0,0 +1,40 @@
+package com.sckw.fleet.model.request;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author zk
+ * @desc 车辆信息
+ * @date 2023/7/12 0012
+ */
+@Data
+public class AssociatedTrackAddRequest {
+
+    /**
+     * 企业id
+     */
+    @NotNull(message = "企业id不能为空!")
+    private Long entId;
+
+    /**
+     * 司机id
+     */
+    @NotNull(message = "司机id不能为空!")
+    private Long driverId;
+
+    /**
+     * 车牌号
+     */
+    @NotBlank(message = "车辆号不能为空!")
+    private String truckNo;
+
+    /**
+     * 车辆轴数id
+     */
+    @NotNull(message = "车辆id不能为空!")
+    private Long truckAxleId;
+
+
+}

+ 28 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/AssociatedTrackRequest.java

@@ -0,0 +1,28 @@
+package com.sckw.fleet.model.request;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+/**
+ * @author zk
+ * @desc 车辆信息
+ * @date 2023/7/12 0012
+ */
+@Data
+public class AssociatedTrackRequest {
+
+    /**
+     * 企业id
+     */
+    @NotNull(message = "企业id不能为空!")
+    private Long entId;
+
+    /**
+     * 司机id
+     */
+    @NotNull(message = "司机主键id不能为空!")
+    private Long driverId;
+
+
+
+}

+ 54 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/KwfDriverAssociatedTrackVO.java

@@ -0,0 +1,54 @@
+package com.sckw.fleet.model.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 司机关联车辆表(司机app) Model
+ *
+ * @author Generated
+ * @since 2024
+ */
+@Data
+public class KwfDriverAssociatedTrackVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -3120079394293028870L;
+
+    /**
+     * 主键
+     */
+    @Schema(description = "主键")
+    private Long id;
+
+    /**
+     * 车牌号
+     */
+    @Schema(description = "车牌号")
+    private String truckNo;
+
+    /**
+     * 车辆轴数
+     */
+    @Schema(description = "车辆轴数")
+    private String truckAxleName;
+
+    /**
+     * 法定载重
+     */
+    @Schema(description = "法定载重")
+    private BigDecimal legalLoad;
+
+    /**
+     * 是否为当前车辆(0否,1是)
+     */
+    @TableField("status")
+    private Integer status;
+
+
+}

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

@@ -0,0 +1,16 @@
+package com.sckw.fleet.repository;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sckw.fleet.dao.KwfDriverAssociatedTrackMapper;
+import com.sckw.fleet.model.KwfDriverAssociatedTrack;
+import org.springframework.stereotype.Repository;
+
+
+/**
+ * @author PC
+ * 车辆轴数接口
+ */
+@Repository
+public class KwfDriverAssociatedTrackRepository extends ServiceImpl<KwfDriverAssociatedTrackMapper, KwfDriverAssociatedTrack> {
+
+}

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

@@ -78,7 +78,7 @@ public class KwfTruckRepository extends ServiceImpl<KwfTruckMapper, KwfTruck> {
                 .le(StringUtils.isNotBlank(endTime),KwfTruck::getCreateTime, endTime));
                 .le(StringUtils.isNotBlank(endTime),KwfTruck::getCreateTime, endTime));
     }
     }
 
 
-    public List<KwfTruck> findTruckByTruckIds(Set<Long> truckIds) {
+    public List<KwfTruck> findTruckByTruckIds(List<Long> truckIds) {
 
 
         return list(Wrappers.<KwfTruck>lambdaQuery()
         return list(Wrappers.<KwfTruck>lambdaQuery()
                 .eq(BaseModel::getDelFlag,0)
                 .eq(BaseModel::getDelFlag,0)

+ 156 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfDriverService.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.ExcelReader;
 import com.alibaba.excel.ExcelReader;
 import com.alibaba.excel.read.metadata.ReadSheet;
 import com.alibaba.excel.read.metadata.ReadSheet;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
@@ -23,7 +24,11 @@ import com.sckw.file.api.dubbo.FileApiDubboService;
 import com.sckw.fleet.dao.*;
 import com.sckw.fleet.dao.*;
 import com.sckw.fleet.model.*;
 import com.sckw.fleet.model.*;
 import com.sckw.fleet.model.dto.*;
 import com.sckw.fleet.model.dto.*;
+import com.sckw.fleet.model.request.AssociatedTrackAddRequest;
+import com.sckw.fleet.model.request.AssociatedTrackRequest;
 import com.sckw.fleet.model.vo.*;
 import com.sckw.fleet.model.vo.*;
+import com.sckw.fleet.repository.KwfDriverAssociatedTrackRepository;
+import com.sckw.fleet.repository.KwfTruckAxleNumRepository;
 import com.sckw.fleet.repository.KwfTruckReportRepository;
 import com.sckw.fleet.repository.KwfTruckReportRepository;
 import com.sckw.fleet.repository.KwfTruckRepository;
 import com.sckw.fleet.repository.KwfTruckRepository;
 import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.constant.RedisConstant;
@@ -33,6 +38,10 @@ import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.transport.api.dubbo.TransportRemoteService;
+import com.sckw.transport.api.model.param.CapacityTruckParam;
+import com.sckw.transport.api.model.vo.CapacityTruckVO;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -48,6 +57,7 @@ import java.util.stream.Collectors;
  * @author zk
  * @author zk
  * @date 2023/7/6 0006
  * @date 2023/7/6 0006
  */
  */
+@Slf4j
 @Service
 @Service
 @SuppressWarnings("all")
 @SuppressWarnings("all")
 @Transactional(rollbackFor = Exception.class)
 @Transactional(rollbackFor = Exception.class)
@@ -79,7 +89,12 @@ public class KwfDriverService {
     KwfTruckReportRepository truckReportRepository;
     KwfTruckReportRepository truckReportRepository;
     @Autowired
     @Autowired
     KwfTruckRepository truckRepository;
     KwfTruckRepository truckRepository;
-
+    @Autowired
+    KwfDriverAssociatedTrackRepository driverAssociatedTrackRepository;
+    @Autowired
+    KwfTruckAxleNumRepository truckAxleNumRepository;
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
+    private TransportRemoteService transportRemoteService;
 
 
     /**
     /**
      * @param key 逐渐id
      * @param key 逐渐id
@@ -1118,5 +1133,145 @@ public class KwfDriverService {
         }
         }
     }
     }
 
 
+    /**
+     * 查询司机关联车辆信息
+     * @param request
+     * @return
+     */
+    public List<KwfDriverAssociatedTrackVO> queryAssociatedTrack(AssociatedTrackRequest request) {
+        log.info("查询司机关联车辆信息:{}", JSON.toJSONString(request));
+        LambdaQueryWrapper<KwfDriverAssociatedTrack> queryWrapper = Wrappers.<KwfDriverAssociatedTrack>lambdaQuery()
+                .eq(KwfDriverAssociatedTrack::getEntId, request.getEntId())
+                .eq(KwfDriverAssociatedTrack::getDriverId, request.getDriverId())
+                .eq(KwfDriverAssociatedTrack::getDelFlag, 0)
+                .orderByDesc(KwfDriverAssociatedTrack::getCreateTime);
+
+        List<KwfDriverAssociatedTrack> associatedTrackList = driverAssociatedTrackRepository.list(queryWrapper);
+        if (CollectionUtils.isEmpty(associatedTrackList)) {
+            return Collections.emptyList();
+        }
+        List<KwfDriverAssociatedTrackVO> associatedTrackVOList = associatedTrackList.stream().map(truck ->{
+            KwfDriverAssociatedTrackVO vo = new KwfDriverAssociatedTrackVO();
+            TmsTruckAxleNum carAxisInfo = getCarAxisInfo(truck.getTruckAxleId());
+            vo.setId(truck.getId());
+            vo.setTruckNo(truck.getTruckNo());
+            vo.setTruckAxleName(carAxisInfo.getName());
+            vo.setLegalLoad(truck.getLegalLoad());
+            vo.setStatus(truck.getStatus());
+            return vo;
+        }).collect(Collectors.toList());
+        log.info("查询司机关联车辆信息完成,结果:{}", JSON.toJSONString(associatedTrackVOList));
+        return associatedTrackVOList;
+    }
+
+
+    /**
+     * 根据车轴id查询轴数信息
+     *
+     * @param truck
+     * @param ents
+     * @return
+     */
+    private TmsTruckAxleNum getCarAxisInfo(Long axleNumId) {
+        if (axleNumId == null) {
+            return new TmsTruckAxleNum();
+        }
+        //查询车辆关联司机信息
+        TmsTruckAxleNum axleNum = truckAxleNumRepository.getOne(Wrappers.<TmsTruckAxleNum>lambdaQuery()
+                .eq(TmsTruckAxleNum::getStatus, 1)
+                .eq(TmsTruckAxleNum::getId, axleNumId));
+        if (axleNum == null) {
+            return new TmsTruckAxleNum();
+        }
+        return axleNum;
+    }
+
+    /**
+     * 新增车辆关系
+     * @param request
+     * @return
+     */
+    public void addAssociatedTrack(AssociatedTrackAddRequest request) {
+        log.info("新增司机关联车辆信息:{}", JSON.toJSONString(request));
+        CapacityTruckParam param = new CapacityTruckParam();
+        param.setTruckNo(request.getTruckNo());
+        param.setEntId(request.getTruckNo());
+        //校验物流订单列表里是否存在相同这牌
+        List<CapacityTruckVO> capacityTruckVOS = transportRemoteService.queryCapacityTruck(param);
+        if (CollectionUtils.isEmpty(capacityTruckVOS)) {
+            throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, "您所在的企业暂无该车辆,请与企业管理人员联系");
+        }
+
+        Long truckId = capacityTruckVOS.stream().map(CapacityTruckVO::getTruckId)
+                .distinct().findFirst().orElse(null);
+        KwfTruck truckByTruckId = truckRepository.queryByTruckId(truckId);
+
+        //校验物流订单列表里车牌是否存在相同车轴
+        if ( truckByTruckId.getCarAxis() == null || request.getTruckAxleId() != Long.parseLong(truckByTruckId.getCarAxis())) {
+            throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, "您所在的企业暂无该车辆,请与企业管理人员联系");
+        }
+        //新增司机关联车辆信息
+        KwfDriverAssociatedTrack associatedTrack = new KwfDriverAssociatedTrack();
+        associatedTrack.setEntId(request.getEntId());
+        associatedTrack.setDriverId(request.getDriverId());
+        associatedTrack.setTruckNo(request.getTruckNo());
+        associatedTrack.setTruckAxleId(request.getTruckAxleId());
+        driverAssociatedTrackRepository.save(associatedTrack);
+        log.info("新增司机关联车辆成功!");
+    }
+
+    /**
+     * 删除司机关联车辆
+     * @param id
+     */
+    public void deleteAssociatedTrack(Long id) {
+        log.info("删除司机关联车辆:{}", id);
+        //校验
+        if (StringUtils.isBlank(id)) {
+            throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.ID_MISSING);
+        }
+        KwfDriverAssociatedTrack associatedTrack = driverAssociatedTrackRepository.getById(id);
+        if (associatedTrack == null) {
+            throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.DELETE_FAIL);
+        }
+        associatedTrack.setDelFlag(Global.YES);
+        if (!driverAssociatedTrackRepository.updateById(associatedTrack)) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.DELETE_FAIL);
+        }
+        log.info("删除司机关联车辆成功!");
+    }
+
+    /**
+     * 切换关联车辆
+     * @param id
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void switchAssociatedTrack(Long id) {
+        log.info("切换关联车辆id:{}", id);
+        //校验
+        if (StringUtils.isBlank(id)) {
+            throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.ID_MISSING);
+        }
+        KwfDriverAssociatedTrack associatedTrack = driverAssociatedTrackRepository.getById(id);
+        if (associatedTrack == null) {
+            throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.DELETE_FAIL);
+        }
+        //先更改旧关联车辆
+        LambdaQueryWrapper<KwfDriverAssociatedTrack> queryWrapper = Wrappers.<KwfDriverAssociatedTrack>lambdaQuery()
+                .eq(KwfDriverAssociatedTrack::getDriverId, associatedTrack.getDriverId())
+                .eq(KwfDriverAssociatedTrack::getEntId, associatedTrack.getEntId())
+                .eq(KwfDriverAssociatedTrack::getStatus, Global.YES);
+        KwfDriverAssociatedTrack oldAssociatedTrack = driverAssociatedTrackRepository.getOne(queryWrapper);
+        oldAssociatedTrack.setStatus(Global.NO);
+        driverAssociatedTrackRepository.updateById(oldAssociatedTrack);
+
+        //更改新关联车辆
+        associatedTrack.setStatus(Global.YES);
+        driverAssociatedTrackRepository.updateById(associatedTrack);
+        log.info("切换关联车辆成功!");
+    }
+
+
+
 
 
 }
 }

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

@@ -328,7 +328,7 @@ public class KwfTruckService {
     }
     }
 
 
     /**
     /**
-     * 根据企业id和车辆id查询司机信息
+     * 根据车轴id查询轴数信息
      *
      *
      * @param truck
      * @param truck
      * @param ents
      * @param ents

+ 24 - 5
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -31,11 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
-import java.time.ZoneId;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -574,4 +570,27 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         busSum.setObject(order);
         busSum.setObject(order);
         streamBridge.send("sckw-busSum", JSON.toJSONString(busSum));
         streamBridge.send("sckw-busSum", JSON.toJSONString(busSum));
     }
     }
+
+    @Override
+    public List<OrderUnitInfoDetailVO> queryOrderUnitInfByTOrderId(Set<Long> tradeOrderId) {
+        List<KwoTradeOrderUnit> kwoTradeOrderUnits = kwoTradeOrderUnitRepository.queryByOrderIds(tradeOrderId);
+        if (CollectionUtils.isEmpty(kwoTradeOrderUnits)){
+            return Collections.emptyList();
+        }
+        return kwoTradeOrderUnits.stream().map(unit -> {
+            OrderUnitInfoDetailVO vo = new OrderUnitInfoDetailVO();
+            vo.setId(unit.getId());
+            vo.setTOrderId(unit.getTOrderId());
+            vo.setTOrderNo(unit.getTOrderNo());
+            vo.setUnitType(unit.getUnitType());
+            vo.setEntId(unit.getEntId());
+            vo.setFirmName(unit.getFirmName());
+            vo.setContactsId(unit.getContactsId());
+            vo.setContacts(unit.getContacts());
+            vo.setPhone(unit.getPhone());
+            return vo;
+        }).collect(Collectors.toList());
+
+    }
+
 }
 }

+ 47 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/enterpriseApp/AppWayBillController.java

@@ -2,9 +2,15 @@ package com.sckw.transport.controller.enterpriseApp;
 
 
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.transport.model.dto.WaybillListAppDTO;
 import com.sckw.transport.model.dto.WaybillListAppDTO;
-import com.sckw.transport.model.dto.WaybillOrderQueryDto;
+import com.sckw.transport.model.param.LogisticsOrderResp;
+import com.sckw.transport.model.param.OrderCirculateQueryParam;
+import com.sckw.transport.model.param.OrderCirculateTotalTakeParam;
+import com.sckw.transport.model.vo.OrderCirculateTotalTakeVo;
+import com.sckw.transport.service.KwtLogisticsConsignmentService;
 import com.sckw.transport.service.KwtWaybillManagementService;
 import com.sckw.transport.service.KwtWaybillManagementService;
 import com.sckw.transport.service.KwtWaybillManagementV1Service;
 import com.sckw.transport.service.KwtWaybillManagementV1Service;
 import jakarta.validation.Valid;
 import jakarta.validation.Valid;
@@ -27,6 +33,8 @@ public class AppWayBillController {
     KwtWaybillManagementService waybillManagementService;
     KwtWaybillManagementService waybillManagementService;
     @Autowired
     @Autowired
     KwtWaybillManagementV1Service waybillManagementV1Service;
     KwtWaybillManagementV1Service waybillManagementV1Service;
+    @Autowired
+    KwtLogisticsConsignmentService logisticsConsignmentService;
 
 
     /**
     /**
      * APP 运单统计分类 - [运输中|已完成] - 数据库
      * APP 运单统计分类 - [运输中|已完成] - 数据库
@@ -186,4 +194,42 @@ public class AppWayBillController {
         return waybillManagementV1Service.waybillDetail(wOrderId);
         return waybillManagementV1Service.waybillDetail(wOrderId);
     }
     }
 
 
+    /**
+     * 查询司机关联的完成运单和累计运输量
+     *
+     * @param param
+     * @return
+     */
+    @GetMapping("/queryTotalTake")
+    public BaseResult<OrderCirculateTotalTakeVo> queryTotalTake(@RequestBody @Valid OrderCirculateTotalTakeParam param){
+        OrderCirculateTotalTakeVo totalTakeVo = logisticsConsignmentService.queryTotalTake(param);
+        return BaseResult.success(totalTakeVo);
+    }
+
+
+    /**
+     * 查询司机关联车辆的物流订单
+     *
+     * @param param
+     * @return
+     */
+    @GetMapping("/queryTruckLogisticsOrder")
+    public BaseResult<PageDataResult<LogisticsOrderResp>> queryTruckLogisticsOrder(@RequestBody @Valid OrderCirculateQueryParam param){
+        PageDataResult<LogisticsOrderResp> LogisticsOrderList = logisticsConsignmentService.queryTruckLogisticsOrder(param);
+        return BaseResult.success(LogisticsOrderList);
+    }
+
+    /**
+     * 物流订单接单
+     *
+     * @param LogOrderId
+     * @return
+     */
+    @GetMapping("/orderTaking")
+    public BaseResult orderTaking(@RequestParam Long LogOrderId){
+       logisticsConsignmentService.orderTaking(LogOrderId);
+        return BaseResult.success();
+    }
+
+
 }
 }

+ 41 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java

@@ -4,8 +4,8 @@ import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
-import com.sckw.contract.api.RemoteContractService;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.exception.BusinessException;
@@ -20,6 +20,8 @@ import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.fleet.api.RemoteFleetService;
+import com.sckw.fleet.api.model.vo.RTruckVo;
 import com.sckw.manage.api.RemoteManageService;
 import com.sckw.manage.api.RemoteManageService;
 import com.sckw.manage.api.model.dto.res.LineFreightAddressRes;
 import com.sckw.manage.api.model.dto.res.LineFreightAddressRes;
 import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.enums.BusinessTypeEnum;
@@ -36,13 +38,13 @@ import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import com.sckw.transport.api.model.dto.AcceptCarriageLogisticsOrderDto;
 import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
 import com.sckw.transport.api.model.dto.AccountCheckingBindDTO;
 import com.sckw.transport.api.model.dto.RWaybillOrderDto;
 import com.sckw.transport.api.model.dto.RWaybillOrderDto;
+import com.sckw.transport.api.model.param.CapacityTruckParam;
 import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
 import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
 import com.sckw.transport.api.model.param.LogisticsOrderParam;
 import com.sckw.transport.api.model.param.LogisticsOrderParam;
 import com.sckw.transport.api.model.param.UpdateOrderStatusDto;
 import com.sckw.transport.api.model.param.UpdateOrderStatusDto;
 import com.sckw.transport.api.model.vo.*;
 import com.sckw.transport.api.model.vo.*;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.*;
-import com.sckw.transport.model.vo.WaybillCountVo;
 import com.sckw.transport.repository.*;
 import com.sckw.transport.repository.*;
 import com.sckw.transport.service.KwtCommonService;
 import com.sckw.transport.service.KwtCommonService;
 import jakarta.annotation.Resource;
 import jakarta.annotation.Resource;
@@ -90,6 +92,9 @@ public class TransportServiceImpl implements TransportRemoteService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
     private TradeOrderInfoService tradeOrderInfoService;
     private TradeOrderInfoService tradeOrderInfoService;
 
 
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
+    RemoteFleetService remoteFleetService;
+
     @Autowired
     @Autowired
     private KwtLogisticsOrderMapper logisticsOrderMapper;
     private KwtLogisticsOrderMapper logisticsOrderMapper;
 
 
@@ -123,6 +128,7 @@ public class TransportServiceImpl implements TransportRemoteService {
     private final KwtLogisticsOrderRepository logisticsOrderRepository;
     private final KwtLogisticsOrderRepository logisticsOrderRepository;
     private final KwtLogisticsOrderUnitRepository logisticsOrderUnitRepository;
     private final KwtLogisticsOrderUnitRepository logisticsOrderUnitRepository;
     private final KwtLogisticsOrderContractRepository logisticsOrderContractRepository;
     private final KwtLogisticsOrderContractRepository logisticsOrderContractRepository;
+    private final KwtLogisticsOrderCirculateRepository logisticsOrderCirculateRepository;
     /**
     /**
      * 对账管理-ids查询
      * 对账管理-ids查询
      *
      *
@@ -1046,4 +1052,37 @@ public class TransportServiceImpl implements TransportRemoteService {
         vo.setDepartureTime(waybillOrder.getEndTime());
         vo.setDepartureTime(waybillOrder.getEndTime());
         return vo;
         return vo;
     }
     }
+
+    /**
+     * 查询物流订单已派运力车辆
+     * @param param
+     * @return
+     */
+    public List<CapacityTruckVO> queryCapacityTruck(CapacityTruckParam param) {
+        log.info("查询物流订单已派运力车辆:{}", com.alibaba.fastjson.JSON.toJSONString(param));
+        LambdaQueryWrapper<KwtLogisticsOrderCirculate> queryWrapper = Wrappers.<KwtLogisticsOrderCirculate>lambdaQuery()
+                .in(KwtLogisticsOrderCirculate::getEntId, param.getEntId())
+                .eq(KwtLogisticsOrderCirculate::getDelFlag,0)
+                .eq(KwtLogisticsOrderCirculate::getTruckNo,param.getTruckNo())
+                .orderByDesc(KwtLogisticsOrderCirculate::getCreateTime)
+                .orderByAsc(KwtLogisticsOrderCirculate::getId);
+        //TODO 是否考虑订单状态
+        List<KwtLogisticsOrderCirculate> orderCirculateList = logisticsOrderCirculateRepository.list(queryWrapper);
+        if (CollectionUtils.isEmpty(orderCirculateList)) {
+            return new ArrayList<>();
+        }
+        //获取车牌号
+        List<Long> truckId = orderCirculateList.stream().map(KwtLogisticsOrderCirculate::getTruckId)
+                .distinct().collect(Collectors.toList());
+        //查询车辆信息
+        List<RTruckVo> truckByTruckIds = remoteFleetService.findTruckByTruckIds(truckId);
+        List<CapacityTruckVO> truckVOList = truckByTruckIds.stream().map(truck -> {
+            CapacityTruckVO truckVO = new CapacityTruckVO();
+            truckVO.setTruckId(truck.getId());
+            truckVO.setTruckNo(truck.getTruckNo());
+            return truckVO;
+        }).collect(Collectors.toList());
+        log.info("查询物流订单已派运力车辆成功,结果:{}", com.alibaba.fastjson.JSON.toJSONString(param));
+        return truckVOList;
+    }
 }
 }

+ 35 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderResp.java

@@ -139,4 +139,39 @@ public class LogisticsOrderResp implements Serializable {
     @Schema(description = "创建时间")
     @Schema(description = "创建时间")
     private String createTime;
     private String createTime;
 
 
+    /**
+     * 供应单位id
+     */
+    @Schema(description = "供应单位id")
+    private String supplierCompanyId;
+    /**
+     * 供应单位名称
+     */
+    @Schema(description = "承运单位名称")
+    private String supplierCompanyName;
+
+    /**
+     * 派单时间
+     */
+    @Schema(description = "派单时间")
+    private String sendTime;
+
+    /**
+     * 派单人
+     */
+    @Schema(description = "派单人")
+    private String sendOperator;
+
+    /**
+     * 派单人电话
+     */
+    @Schema(description = "派单人电话")
+    private String sendPhone;
+
+    /**
+     * 装卸货之间距离
+     */
+    @Schema(description = "装卸货之间距离")
+    private double distanceKm;
+
 }
 }

+ 41 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/OrderCirculateQueryParam.java

@@ -0,0 +1,41 @@
+package com.sckw.transport.model.param;
+
+import com.sckw.core.web.request.PageReq;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :donglang
+ * @version :1.0
+ * @description :
+ * @create :2025-11-13 08:59:00
+ */
+@Data
+public class OrderCirculateQueryParam extends PageReq implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -9098396227857171692L;
+
+    /**
+     * 企业id
+     */
+    @Schema(description = "企业id")
+    @NotNull(message = "企业id不能为空!")
+    private Long entId;
+
+    /**
+     * 车牌号
+     */
+    @Schema(description = "车牌号")
+    @NotBlank(message = "车牌号不能为空!")
+    private String truckNo;
+
+
+
+
+}

+ 39 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/OrderCirculateTotalTakeParam.java

@@ -0,0 +1,39 @@
+package com.sckw.transport.model.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :donglang
+ * @version :1.0
+ * @description :
+ * @create :2025-11-13 08:59:00
+ */
+@Data
+public class OrderCirculateTotalTakeParam implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -9098396227857171692L;
+
+    /**
+     * 企业id
+     */
+    @Schema(description = "企业id")
+    @NotNull(message = "企业id不能为空!")
+    private Long entId;
+
+    /**
+     * 司机id
+     */
+    @Schema(description = "司机id")
+    @NotNull(message = "司机id不能为空!")
+    private Long driverId;
+
+
+
+
+}

+ 43 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderCirculateTotalTakeVo.java

@@ -0,0 +1,43 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author :donglang
+ * @version :1.0
+ * @description :
+ * @create :2025-11-13 08:59:00
+ */
+@Data
+public class OrderCirculateTotalTakeVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -9098396227857171692L;
+
+    /**
+     * 累计运输量
+     */
+    @Schema(description = "累计运输量")
+    private BigDecimal entrustAmount;
+
+    /**
+     * 累计运单量
+     */
+    @Schema(description = "累计运单量")
+    private int totalTake;
+
+    /**
+     * 单位
+     */
+    @Schema(description = "单位")
+    private String unit;
+
+
+
+
+}

+ 9 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderRepository.java

@@ -79,4 +79,13 @@ public class KwtLogisticsOrderRepository extends ServiceImpl<KwtLogisticsOrderMa
                 .eq(KwtLogisticsOrder::getDelFlag,0)
                 .eq(KwtLogisticsOrder::getDelFlag,0)
                 .in(KwtLogisticsOrder::getId, logOrderIds));
                 .in(KwtLogisticsOrder::getId, logOrderIds));
     }
     }
+
+    public KwtLogisticsOrder queryByLogOrderIdAndStatus(Long logOrderId) {
+        return getOne(Wrappers.<KwtLogisticsOrder>lambdaQuery()
+                .eq(KwtLogisticsOrder::getDelFlag,0)
+                .eq(KwtLogisticsOrder::getId, logOrderId)
+                .eq(KwtLogisticsOrder::getStatus, 15));
+    }
+
+
 }
 }

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

@@ -2,12 +2,13 @@ package com.sckw.transport.service;
 
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ArrayUtil;
-
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Lists;
@@ -18,6 +19,7 @@ import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.exception.BusinessException;
+import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.enums.*;
 import com.sckw.core.model.enums.*;
@@ -32,7 +34,6 @@ import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.excel.utils.DateUtil;
 import com.sckw.excel.utils.DateUtil;
 import com.sckw.excel.utils.ValidUtil;
 import com.sckw.excel.utils.ValidUtil;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.RemoteFleetService;
-import com.sckw.fleet.api.model.vo.RFleetVo;
 import com.sckw.fleet.api.model.vo.RTruckVo;
 import com.sckw.fleet.api.model.vo.RTruckVo;
 import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwLogisticsOrder;
@@ -47,16 +48,15 @@ import com.sckw.stream.enums.MessageEnum;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.dto.*;
-import com.sckw.transport.model.param.AddLogisticsOrderParam;
-import com.sckw.transport.model.param.LogisticsConsignmentParam;
-import com.sckw.transport.model.param.LogisticsOrderResp;
-import com.sckw.transport.model.param.QueryLogisticsOrderReq;
+import com.sckw.transport.model.param.*;
 import com.sckw.transport.model.vo.*;
 import com.sckw.transport.model.vo.*;
 import com.sckw.transport.repository.*;
 import com.sckw.transport.repository.*;
+import com.sckw.transport.utils.DistanceUtils;
 import io.seata.spring.annotation.GlobalTransactional;
 import io.seata.spring.annotation.GlobalTransactional;
 import jakarta.annotation.Resource;
 import jakarta.annotation.Resource;
 import jakarta.validation.Valid;
 import jakarta.validation.Valid;
@@ -2624,9 +2624,10 @@ public class KwtLogisticsConsignmentService {
             return PageDataResult.empty(req.getPageNum(), req.getPageSize());
             return PageDataResult.empty(req.getPageNum(), req.getPageSize());
         }
         }
         //获取车辆id
         //获取车辆id
-        Set<Long> truckIds = records.stream()
+        List<Long> truckIds = records.stream()
                 .map(KwtWaybillOrder::getTruckId)
                 .map(KwtWaybillOrder::getTruckId)
-                .collect(Collectors.toSet());
+                .distinct()
+                .collect(Collectors.toList());
         Map<Long, RTruckVo> truckIdAndTruckMap = Maps.newHashMap();
         Map<Long, RTruckVo> truckIdAndTruckMap = Maps.newHashMap();
         List<RTruckVo> truckByTruckIds = Lists.newArrayList() ;
         List<RTruckVo> truckByTruckIds = Lists.newArrayList() ;
         //查询车辆信息
         //查询车辆信息
@@ -2677,9 +2678,10 @@ public class KwtLogisticsConsignmentService {
             return PageDataResult.empty(req.getPageNum(), req.getPageSize());
             return PageDataResult.empty(req.getPageNum(), req.getPageSize());
         }
         }
 
 
-        Set<Long> truckIds = records.stream()
+        List<Long> truckIds = records.stream()
                 .map(KwtLogisticsOrderCirculate::getTruckId)
                 .map(KwtLogisticsOrderCirculate::getTruckId)
-                .collect(Collectors.toSet());
+                .distinct()
+                .collect(Collectors.toList());
         List<RTruckVo> truckByTruckIds = remoteFleetService.findTruckByTruckIds(truckIds);
         List<RTruckVo> truckByTruckIds = remoteFleetService.findTruckByTruckIds(truckIds);
         Map<Long, RTruckVo> truckIdAndTruckMap = Maps.newHashMap();
         Map<Long, RTruckVo> truckIdAndTruckMap = Maps.newHashMap();
         if (CollectionUtils.isNotEmpty(truckByTruckIds)){
         if (CollectionUtils.isNotEmpty(truckByTruckIds)){
@@ -2770,4 +2772,209 @@ public class KwtLogisticsConsignmentService {
 
 
         return logisticsOrderCirculateRepository.updateCirculates(orderCirculates);
         return logisticsOrderCirculateRepository.updateCirculates(orderCirculates);
     }
     }
+
+    /**
+     * 查询司机关联完成运单和累计运输量
+     * @param param
+     * @return
+     */
+    public OrderCirculateTotalTakeVo queryTotalTake(OrderCirculateTotalTakeParam param) {
+        log.info("查询司机关联完成运单和累计运输量:{}", JSON.toJSONString(param));
+        LambdaQueryWrapper<KwtLogisticsOrderCirculate> queryWrapper = Wrappers.<KwtLogisticsOrderCirculate>lambdaQuery()
+                .eq(KwtLogisticsOrderCirculate::getEntId, param.getEntId())
+                .eq(KwtLogisticsOrderCirculate::getDriverId, param.getDriverId())
+                .eq(KwtLogisticsOrderCirculate::getDelFlag,0)
+                .orderByDesc(KwtLogisticsOrderCirculate::getCreateTime)
+                .orderByDesc(KwtLogisticsOrderCirculate::getId);
+        List<KwtLogisticsOrderCirculate> circulateList = logisticsOrderCirculateRepository.list(queryWrapper);
+        if (CollectionUtils.isEmpty(circulateList)) {
+            log.info("当前司机的无运单,driverId: {}", JSON.toJSONString(param));
+            return new OrderCirculateTotalTakeVo();
+        }
+
+        //总运单量
+        int totalTake = circulateList.stream()
+                .filter(cr -> cr.getTotalTake() != null)
+                .mapToInt(KwtLogisticsOrderCirculate::getTotalTake)
+                .sum();
+        //总运输量
+        BigDecimal toalEntrustAmount = circulateList.stream().map(KwtLogisticsOrderCirculate::getEntrustAmount)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        //单位
+        String unit = circulateList.stream().map(KwtLogisticsOrderCirculate::getUnit)
+                .filter(Objects::nonNull)
+                .findFirst().orElse(null);
+
+        OrderCirculateTotalTakeVo totalTakeVo = new OrderCirculateTotalTakeVo();
+        totalTakeVo.setTotalTake(totalTake);
+        totalTakeVo.setEntrustAmount(toalEntrustAmount);
+        totalTakeVo.setUnit(unit);
+        log.info("查询司机关联完成运单和累计运输量成功,结果:{}", JSON.toJSONString(totalTakeVo));
+
+        return totalTakeVo;
+
+    }
+
+    /**
+     * 查询司机关联车辆的物流订单
+     * @param param
+     * @return
+     */
+    public PageDataResult<LogisticsOrderResp> queryTruckLogisticsOrder(OrderCirculateQueryParam param) {
+        log.info("查询司机关联车辆的物流订单:{}", JSON.toJSONString(param));
+
+        LambdaQueryWrapper<KwtLogisticsOrderCirculate> queryWrapper = Wrappers.<KwtLogisticsOrderCirculate>lambdaQuery()
+                .eq(KwtLogisticsOrderCirculate::getEntId, param.getEntId())
+                .eq(KwtLogisticsOrderCirculate::getTruckNo, param.getTruckNo())
+                .eq(KwtLogisticsOrderCirculate::getDelFlag, 0)
+                .orderByDesc(KwtLogisticsOrderCirculate::getCreateTime)
+                .orderByDesc(KwtLogisticsOrderCirculate::getId);//TODO donglang 运单状态
+        //车牌映射的物流订单
+        Page<KwtLogisticsOrderCirculate> logOrderCirculateList = logisticsOrderCirculateRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), queryWrapper);
+        List<KwtLogisticsOrderCirculate> records = logOrderCirculateList.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            log.info("当前车辆辆的无物流订单,truckNo:{}", param.getTruckNo());
+            return PageDataResult.empty(param.getPageNum(), param.getPageSize());
+        }
+        //车牌关联物流订单
+        Map<Long, KwtLogisticsOrderCirculate> logOrderIdAndCirculateMap = records.stream().collect(Collectors.toMap(KwtLogisticsOrderCirculate::getLOrderId,
+                Function.identity(), (x, y) -> x));
+
+        List<Long> logOrderIdList = records.stream().map(KwtLogisticsOrderCirculate::getLOrderId)
+                .filter(Objects::nonNull).collect(Collectors.toList());
+
+        //物流订单
+        List<KwtLogisticsOrder> logOrderList = logisticsOrderRepository.queryByLogisticsOrderIds(logOrderIdList);
+        if (CollectionUtils.isEmpty(logOrderList)) {
+            log.info("当前车辆辆的无物流订单,truckNo:{}", param.getTruckNo());
+            return PageDataResult.empty(param.getPageNum(), param.getPageSize());
+        }
+
+        //商品
+        List<KwtLogisticsOrderGoods> kwtLogisticsOrderGoods = logisticsOrderGoodsRepository.queryByLogOrderIds(logOrderIdList);
+        //物流id映射物流商品
+        Map<Long, KwtLogisticsOrderGoods> logOrderIdAndGoodsMap = kwtLogisticsOrderGoods.stream().collect(Collectors.toMap(KwtLogisticsOrderGoods::getLOrderId,
+                Function.identity(), (x, y) -> x));
+
+        List<Long> goodsIds = kwtLogisticsOrderGoods.stream().map(KwtLogisticsOrderGoods::getGoodsId).distinct().collect(Collectors.toList());
+        //商品id映射商品
+        Map<Long, KwpGoods> goodsIdAndGoodsMap = goodsInfoService.getGoodsByIds(goodsIds);
+
+        //承运托运企业
+        List<KwtLogisticsOrderUnit> kwtLogisticsOrderUnits = logisticsOrderUnitRepository.queryByLogOrderIds(logOrderIdList);
+        Map<String, KwtLogisticsOrderUnit> logOrderIdAndUnitMap = kwtLogisticsOrderUnits.stream()
+                .collect(Collectors.toMap(unit -> unit.getLOrderId() + "-" + unit.getUnitType(),
+                        Function.identity(), (x, y) -> x));
+
+        //供应企业
+        Set<Long> tradeOrderIds = logOrderList.stream().map(KwtLogisticsOrder::getTOrderId).collect(Collectors.toSet());
+        //交易订单Map
+        List<OrderUnitInfoDetailVO> orderUnitDetailVOS = tradeOrderInfoService.queryOrderUnitInfByTOrderId(tradeOrderIds);
+        Map<String, OrderUnitInfoDetailVO> tOrderIdAndUnitMap = orderUnitDetailVOS.stream()
+                .collect(Collectors.toMap(unit -> unit.getTOrderId() + "-" + unit.getUnitType(),
+                        Function.identity(), (x, y) -> x));
+
+        //地址
+        List<KwtLogisticsOrderAddress> logOrderAddressList = logisticsOrderAddressRepository.queryByLogOrderIds(logOrderIdList);
+        Map<String, KwtLogisticsOrderAddress> logOrderIdAndAddressMap = logOrderAddressList.stream()
+                .collect(Collectors.toMap(address -> address.getLOrderId() + "-" + address.getType(),
+                        Function.identity(), (x, y) -> x));
+
+        //组装数据
+        List<LogisticsOrderResp> ordderList = logOrderList.stream()
+                .map(order -> {
+                    return getLogisticsOrderResp(order, logOrderIdAndGoodsMap, goodsIdAndGoodsMap, logOrderIdAndUnitMap,
+                    tOrderIdAndUnitMap, logOrderIdAndAddressMap, logOrderIdAndCirculateMap);
+                }).collect(Collectors.toList());
+        log.info("查询司机关联车辆的物流订单成功!");
+        return PageDataResult.success(param.getPageNum(), param.getPageSize(), (long) ordderList.size(), ordderList);
+    }
+
+    /**
+     * 组装订单列表信息
+     * @param order
+     * @param logOrderIdAndGoodsMap
+     * @param goodsIdAndGoodsMap
+     * @param logOrderIdAndUnitMap
+     * @param tOrderIdAndUnitMap
+     * @param logOrderIdAndAddressMap
+     * @param logOrderIdAndCirculateMap
+     * @return
+     */
+    private LogisticsOrderResp getLogisticsOrderResp(KwtLogisticsOrder order, Map<Long, KwtLogisticsOrderGoods> logOrderIdAndGoodsMap,
+                                                     Map<Long, KwpGoods> goodsIdAndGoodsMap,
+                                                     Map<String, KwtLogisticsOrderUnit> logOrderIdAndUnitMap,
+                                                     Map<String, OrderUnitInfoDetailVO> tOrderIdAndUnitMap,
+                                                     Map<String, KwtLogisticsOrderAddress> logOrderIdAndAddressMap,
+                                                     Map<Long, KwtLogisticsOrderCirculate> logOrderIdAndCirculateMap) {
+        LogisticsOrderResp orderResp = new LogisticsOrderResp();
+        orderResp.setLogisticsOrderNo(order.getLOrderNo());
+        //商品
+        KwtLogisticsOrderGoods orderGoods = logOrderIdAndGoodsMap.getOrDefault(order.getId(), new KwtLogisticsOrderGoods());
+        KwpGoods goods = goodsIdAndGoodsMap.getOrDefault(orderGoods.getGoodsId(), new KwpGoods());
+        orderResp.setGoodsId(String.valueOf(goods.getId()));
+        orderResp.setGoodsName(goods.getName());
+
+        //托运企业
+        KwtLogisticsOrderUnit consignEnt = logOrderIdAndUnitMap.getOrDefault(order.getId() + "-" + UnitTypeEnum.CONSIGN.getCode(), new KwtLogisticsOrderUnit());
+        orderResp.setConsignCompanyId(Optional.ofNullable(consignEnt.getEntId()).map(String::valueOf).orElse(null));
+        orderResp.setConsignCompanyName(consignEnt.getFirmName());
+        //承运企业
+        KwtLogisticsOrderUnit carriageEnt = logOrderIdAndUnitMap.getOrDefault(order.getId() + "-" + UnitTypeEnum.CONSIGN.getCode(), new KwtLogisticsOrderUnit());
+        orderResp.setCarriageCompanyId(Optional.ofNullable(carriageEnt.getEntId()).map(String::valueOf).orElse(null));
+        orderResp.setCarriageCompanyName(carriageEnt.getFirmName());
+        //供应企业
+        OrderUnitInfoDetailVO supplierEnt = tOrderIdAndUnitMap.getOrDefault(order.getTOrderId() + "-" + "2", new OrderUnitInfoDetailVO());
+        orderResp.setSupplierCompanyId(Optional.ofNullable(supplierEnt.getEntId()).map(String::valueOf).orElse(null));
+        orderResp.setSupplierCompanyName(supplierEnt.getFirmName());
+
+        //装货地址
+        KwtLogisticsOrderAddress shipmentAddress = logOrderIdAndAddressMap.getOrDefault(order.getId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new KwtLogisticsOrderAddress());
+        orderResp.setLoadAddress(shipmentAddress.getDetailAddress());
+        //卸货地址
+        KwtLogisticsOrderAddress takeAddress = logOrderIdAndAddressMap.getOrDefault(order.getId() + "-" + AddressTypeEnum.TAKE.getCode(), new KwtLogisticsOrderAddress());
+        orderResp.setUnloadAddress(takeAddress.getDetailAddress());
+        //装卸地之间距离
+        double distanceKm = DistanceUtils.calculateDistance(
+                Optional.ofNullable(shipmentAddress.getLat()).map(Double::valueOf).orElse(null),
+                Optional.ofNullable(shipmentAddress.getLng()).map(Double::valueOf).orElse(null),
+                Optional.ofNullable(takeAddress.getLat()).map(Double::valueOf).orElse(null),
+                Optional.ofNullable(takeAddress.getLng()).map(Double::valueOf).orElse(null));
+        orderResp.setDistanceKm(distanceKm);
+
+        //时间
+        orderResp.setStartTime(DateUtils.format(order.getStartTime(), DateUtils.DATE_PATTERN));
+        orderResp.setEndTime(DateUtils.format(order.getEndTime(), DateUtils.DATE_PATTERN));
+        KwtLogisticsOrderCirculate orderCirculate = logOrderIdAndCirculateMap.getOrDefault(order.getId(), new KwtLogisticsOrderCirculate());
+        orderResp.setSendTime(DateUtils.format(orderCirculate.getCreateTime(), DateUtils.DATE_PATTERN));
+
+        //派单人信息
+        UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(orderCirculate.getCreateBy());
+        orderResp.setSendOperator(Optional.ofNullable(userCacheResDto).map(UserCacheResDto::getName).orElse(null));
+        orderResp.setSendPhone(Optional.ofNullable(userCacheResDto).map(UserCacheResDto::getPhone).orElse(null));
+
+        return orderResp;
+    }
+
+
+    /**
+     * 物流订单接单
+     * @param param
+     * @return
+     */
+    public void orderTaking(Long LogOrderId){
+        log.info("物流订单接单入参参数:{}", LogOrderId);
+        //校验
+        KwtLogisticsOrder order = logisticsOrderRepository.queryByLogOrderIdAndStatus(LogOrderId);
+        if (order == null) {
+            log.info("当前物流订单不是可接单状态:{}", LogOrderId);
+            throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.LOG_ORDER_TAKING);
+        }
+
+
+    }
+
+
 }
 }

+ 140 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/utils/DistanceUtils.java

@@ -0,0 +1,140 @@
+package com.sckw.transport.utils;
+
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+/**
+ * Author: donglang
+ * Time: 2025-11-15
+ * Des: 距离计算
+ * Version: 1.0
+ */
+
+public class DistanceUtils {
+
+    // 地球半径常量(不同单位)
+    private static final double EARTH_RADIUS_KM = 6371;    // 千米(平均半径)
+    private static final double EARTH_RADIUS_M = 6371000;  // 米(1km = 1000m)
+    private static final double EARTH_RADIUS_MI = 3956;    // 英里(地球平均半径英里数)
+
+    /**
+     * 距离单位枚举
+     */
+    public enum Unit {
+        KM("千米", EARTH_RADIUS_KM),    // 千米
+        M("米", EARTH_RADIUS_M),        // 米
+        MI("英里", EARTH_RADIUS_MI);    // 英里
+
+        private final String desc;
+        private final double radius;
+
+        Unit(String desc, double radius) {
+            this.desc = desc;
+            this.radius = radius;
+        }
+
+        public double getRadius() {
+            return radius;
+        }
+
+        public String getDesc() {
+            return desc;
+        }
+    }
+
+    /**
+     * 计算两个经纬度之间的距离(默认单位:千米)
+     *
+     * @param lon1 第一个点的经度(范围:-180~180)
+     * @param lat1 第一个点的纬度(范围:-90~90)
+     * @param lon2 第二个点的经度(范围:-180~180)
+     * @param lat2 第二个点的纬度(范围:-90~90)
+     * @return 距离(保留2位小数,单位:千米)
+     */
+    public static double calculateDistance(Double lon1, Double lat1, Double lon2, Double lat2) {
+        return calculateDistance(lon1, lat1, lon2, lat2, Unit.KM);
+    }
+
+    /**
+     * 计算两个经纬度之间的距离(指定单位)
+     *
+     * @param lon1  第一个点的经度(范围:-180~180)
+     * @param lat1  第一个点的纬度(范围:-90~90)
+     * @param lon2  第二个点的经度(范围:-180~180)
+     * @param lat2  第二个点的纬度(范围:-90~90)
+     * @param unit  距离单位(KM/M/MI)
+     * @return 距离(保留2位小数,单位:指定的unit)
+     */
+    public static double calculateDistance(Double lon1, Double lat1, Double lon2, Double lat2, Unit unit) {
+        // 1. 校验参数是否为null
+        if (lon1 == null || lat1 == null || lon2 == null || lat2 == null) {
+            return Double.NaN;
+        }
+
+        // 2. 校验经纬度合法性
+        validateCoordinates(lon1, lat1);
+        validateCoordinates(lon2, lat2);
+
+        // 3. 角度转弧度
+        double radLon1 = Math.toRadians(lon1);
+        double radLat1 = Math.toRadians(lat1);
+        double radLon2 = Math.toRadians(lon2);
+        double radLat2 = Math.toRadians(lat2);
+
+        // 4. 计算经纬度差值
+        double deltaLon = radLon2 - radLon1;
+        double deltaLat = radLat2 - radLat1;
+
+        // 5. 应用Haversine公式
+        double a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2)
+                + Math.cos(radLat1) * Math.cos(radLat2)
+                * Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);
+        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+
+        // 6. 计算距离并保留2位小数
+        double distance = unit.getRadius() * c;
+        return new BigDecimal(distance)
+                .setScale(2, RoundingMode.HALF_UP)
+                .doubleValue();
+    }
+
+    /**
+     * 校验经纬度是否合法
+     *
+     * @param longitude 经度(范围:-180 ≤ longitude ≤ 180)
+     * @param latitude  纬度(范围:-90 ≤ latitude ≤ 90)
+     */
+    private static void validateCoordinates(double longitude, double latitude) {
+        if (longitude < -180 || longitude > 180) {
+            throw new IllegalArgumentException("经度必须在[-180, 180]范围内,当前值:" + longitude);
+        }
+        if (latitude < -90 || latitude > 90) {
+            throw new IllegalArgumentException("纬度必须在[-90, 90]范围内,当前值:" + latitude);
+        }
+    }
+
+    // 测试示例
+    public static void main(String[] args) {
+        // 北京:116.403874°E, 39.914885°N
+        // 上海:121.473701°E, 31.230416°N
+        double lon1 = 116.403874;
+        double lat1 = 39.914885;
+        double lon2 = 121.473701;
+        double lat2 = 31.230416;
+
+        // 计算不同单位的距离
+        double distanceKm = calculateDistance(lon1, lat1, lon2, lat2, Unit.KM);
+        double distanceM = calculateDistance(lon1, lat1, lon2, lat2, Unit.M);
+        double distanceMi = calculateDistance(lon1, lat1, lon2, lat2, Unit.MI);
+
+        System.out.println("北京到上海的距离:");
+        System.out.println(distanceKm + " " + Unit.KM.getDesc());  // 约 1067.99 千米
+        System.out.println(distanceM + " " + Unit.M.getDesc());    // 约 1067990.00 米
+        System.out.println(distanceMi + " " + Unit.MI.getDesc());  // 约 663.62 英里
+    }
+
+
+
+
+}

+ 19 - 0
sql/2025/mvp2/2025_11_03_donglang.sql

@@ -38,3 +38,22 @@ CREATE TABLE `kwp_biz_wallet_prepay`
     PRIMARY KEY (`id`) USING BTREE
     PRIMARY KEY (`id`) USING BTREE
 ) COMMENT='钱包预付金额明细表';
 ) COMMENT='钱包预付金额明细表';
 
 
+
+CREATE TABLE `kwf_driver_associated_track`
+(
+    id                      bigint                                                          NOT NULL AUTO_INCREMENT COMMENT '主键',
+    ent_id                  bigint                                                          NOT NULL COMMENT '企业id',
+    driver_id               bigint                                                          NOT NULL COMMENT '司机id',
+    truck_No                varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci    NOT NULL COMMENT '车牌号',
+    truck_axle_id           bigint                                                          NOT NULL COMMENT '车辆轴数id',
+    legalLoad               decimal(10,2)                                                   NOT NULL DEFAULT '0.00' COMMENT '法定载重(吨)',
+    status                  int                                                             NOT NULL DEFAULT '0' COMMENT '是否为当前车辆(0否,1是)',
+    del_flag                int                                                             NOT NULL DEFAULT '0' COMMENT '车辆关系是否删除(0未删除,1删除)',
+    create_time             datetime                                                        not null default CURRENT_TIMESTAMP comment '创建时间',
+    update_time             datetime                                                        not null default current_timestamp on update CURRENT_TIMESTAMP comment '更新时间',
+    create_user             varchar(255)                                                    not null default '' comment '创建人',
+    update_user             varchar(255)                                                     not null default '' comment '更新人',
+    PRIMARY KEY (`id`) USING BTREE
+) COMMENT='司机关联车辆表(司机app)';
+
+