chenxiaofei 1 месяц назад
Родитель
Сommit
e8302d81a1

+ 13 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfTruckRouteController.java

@@ -3,6 +3,7 @@ package com.sckw.fleet.controller;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.fleet.model.request.DeleteTruckRoteReq;
 import com.sckw.fleet.model.request.DeleteTruckRoteReq;
+import com.sckw.fleet.model.request.QueryTruckRouteByDriverReq;
 import com.sckw.fleet.model.request.QueryTruckRoteReq;
 import com.sckw.fleet.model.request.QueryTruckRoteReq;
 import com.sckw.fleet.model.request.TruckRoteDetailReq;
 import com.sckw.fleet.model.request.TruckRoteDetailReq;
 import com.sckw.fleet.model.vo.QueryTruckRoteVo;
 import com.sckw.fleet.model.vo.QueryTruckRoteVo;
@@ -54,4 +55,16 @@ public class KwfTruckRouteController {
     public BaseResult<TruckRoteDetailVo> truckRouteDetail(@Valid @RequestBody TruckRoteDetailReq req) {
     public BaseResult<TruckRoteDetailVo> truckRouteDetail(@Valid @RequestBody TruckRoteDetailReq req) {
         return BaseResult.success(truckService.truckRouteDetail(req));
         return BaseResult.success(truckService.truckRouteDetail(req));
     }
     }
+
+    /**
+     * 根据司机ID和装货卸货地址查询常用路线
+     * @param req 请求参数
+     * @return 常用路线信息
+     */
+    @PostMapping("/queryByDriver")
+    @Operation(summary = "根据司机ID和装货卸货地址查询常用路线", description = "根据司机ID和装货卸货地址查询常用路线")
+    public BaseResult<QueryTruckRoteVo> queryTruckRouteByDriver(@Valid @RequestBody QueryTruckRouteByDriverReq req) {
+        return BaseResult.success(truckService.queryTruckRouteByDriver(req));
+    }
+
 }
 }

+ 39 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/QueryTruckRouteByDriverReq.java

@@ -0,0 +1,39 @@
+package com.sckw.fleet.model.request;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 根据司机ID和装货卸货地址查询常用路线请求参数
+ * @author PC
+ */
+@Data
+public class QueryTruckRouteByDriverReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 司机id
+     */
+    @NotNull(message = "司机ID不能为空")
+    @Schema(description = "司机id")
+    private Long driverId;
+
+    /**
+     * 装货地址(起始点)
+     */
+    @NotNull(message = "装货地址不能为空")
+    @Schema(description = "装货地址(起始点)")
+    private String startPoint;
+
+    /**
+     * 卸货地址
+     */
+    @NotNull(message = "卸货地址不能为空")
+    @Schema(description = "卸货地址")
+    private String unloadingPoint;
+}

+ 37 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/QueryTruckRoteVo.java

@@ -5,6 +5,10 @@ import lombok.Data;
 
 
 import java.io.Serial;
 import java.io.Serial;
 import java.io.Serializable;
 import java.io.Serializable;
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
 
 
 /**
 /**
  * @author PC
  * @author PC
@@ -13,6 +17,11 @@ import java.io.Serializable;
 public class QueryTruckRoteVo implements Serializable {
 public class QueryTruckRoteVo implements Serializable {
     @Serial
     @Serial
     private static final long serialVersionUID = 2817549090778895464L;
     private static final long serialVersionUID = 2817549090778895464L;
+    /**
+     * 主键id
+     */
+    @Schema(description = "主键id")
+    private Long id;
     /**
     /**
      * 车牌号
      * 车牌号
      */
      */
@@ -62,5 +71,32 @@ public class QueryTruckRoteVo implements Serializable {
      * 车辆id
      * 车辆id
      */
      */
     @Schema(description = "车辆id")
     @Schema(description = "车辆id")
-    private String id;
+    private String truckId;
+    /**
+     * 轨迹详情
+     */
+    @Schema(description = "轨迹详情")
+    List<TruckRoteDetail> truckRoteDetails;
+    @Data
+    public static class TruckRoteDetail implements Serializable{
+        @Serial
+        private static final long serialVersionUID = -3239327435958023091L;
+        /**
+         * 定位时间
+         */
+        @Schema(description = "定位时间")
+        private LocalDateTime ts;
+
+        /**
+         * 经度
+         */
+        @Schema(description = "经度")
+        private String longitude;
+
+        /**
+         * 纬度
+         */
+        @Schema(description = "纬度")
+        private String latitude;
+    }
 }
 }

+ 2 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/vo/TruckRoteDetailVo.java

@@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode;
 
 
 import java.io.Serial;
 import java.io.Serial;
 import java.io.Serializable;
 import java.io.Serializable;
+import java.sql.Timestamp;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.List;
 
 
@@ -37,7 +38,7 @@ public class TruckRoteDetailVo implements Serializable {
          * 定位时间
          * 定位时间
          */
          */
         @Schema(description = "定位时间")
         @Schema(description = "定位时间")
-        private LocalDateTime ts;
+        private Timestamp ts;
 
 
         /**
         /**
          * 经度
          * 经度

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

@@ -62,4 +62,20 @@ public class KwfTruckRouteRepository extends ServiceImpl<KwfTruckRouteMapper, Kw
                 .eq(KwfTruckRoute::getUnloadingPoint, unloadingPoint)
                 .eq(KwfTruckRoute::getUnloadingPoint, unloadingPoint)
                 .eq(KwfTruckRoute::getDelFlag,0));
                 .eq(KwfTruckRoute::getDelFlag,0));
     }
     }
+
+    /**
+     * 根据司机ID和装货卸货地址查询常用路线
+     * @param driverId 司机ID
+     * @param startPoint 装货地址(起始点)
+     * @param unloadingPoint 卸货地址
+     * @return 常用路线信息
+     */
+    public KwfTruckRoute queryByDriverIdAndAddress(Long driverId, String startPoint, String unloadingPoint) {
+        return getOne(Wrappers.<KwfTruckRoute>lambdaQuery()
+                .eq(KwfTruckRoute::getDriverId, driverId)
+                .eq(KwfTruckRoute::getStartPoint, startPoint)
+                .eq(KwfTruckRoute::getUnloadingPoint, unloadingPoint)
+                .eq(KwfTruckRoute::getDelFlag, 0)
+                .last("limit 1"));
+    }
 }
 }

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

@@ -10,6 +10,7 @@ import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.fleet.model.*;
 import com.sckw.fleet.model.*;
 import com.sckw.fleet.model.dto.KwfTruckRouteDto;
 import com.sckw.fleet.model.dto.KwfTruckRouteDto;
 import com.sckw.fleet.model.request.DeleteTruckRoteReq;
 import com.sckw.fleet.model.request.DeleteTruckRoteReq;
+import com.sckw.fleet.model.request.QueryTruckRouteByDriverReq;
 import com.sckw.fleet.model.request.QueryTruckRoteReq;
 import com.sckw.fleet.model.request.QueryTruckRoteReq;
 
 
 import com.sckw.fleet.model.request.TruckRoteDetailReq;
 import com.sckw.fleet.model.request.TruckRoteDetailReq;
@@ -23,6 +24,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.*;
 import java.util.function.Function;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -139,7 +141,7 @@ public class KwfTruckRouteService {
      */
      */
     private static QueryTruckRoteVo getQueryTruckRoteVo(KwfTruckRoute r, Map<Long, KwfFleet> fleetIdAndFleetMap, Map<Long, KwfDriver> driverIdAndDriverMap) {
     private static QueryTruckRoteVo getQueryTruckRoteVo(KwfTruckRoute r, Map<Long, KwfFleet> fleetIdAndFleetMap, Map<Long, KwfDriver> driverIdAndDriverMap) {
         QueryTruckRoteVo queryTruckRoteVo = new QueryTruckRoteVo();
         QueryTruckRoteVo queryTruckRoteVo = new QueryTruckRoteVo();
-        queryTruckRoteVo.setId(String.valueOf(r.getId()));
+        queryTruckRoteVo.setId(r.getId());
         queryTruckRoteVo.setTruckNo(r.getTruckNo());
         queryTruckRoteVo.setTruckNo(r.getTruckNo());
         queryTruckRoteVo.setStartPoint(r.getStartPoint());
         queryTruckRoteVo.setStartPoint(r.getStartPoint());
         queryTruckRoteVo.setUnloadingPoint(r.getUnloadingPoint());
         queryTruckRoteVo.setUnloadingPoint(r.getUnloadingPoint());
@@ -174,4 +176,66 @@ public class KwfTruckRouteService {
         truckRoteDetailVo.setTruckRoteDetails(truckRoteDetails);
         truckRoteDetailVo.setTruckRoteDetails(truckRoteDetails);
         return truckRoteDetailVo;
         return truckRoteDetailVo;
     }
     }
+
+    /**
+     * 根据司机ID和装货卸货地址查询常用路线
+     * @param req 请求参数
+     * @return 常用路线信息
+     */
+    public QueryTruckRoteVo queryTruckRouteByDriver(QueryTruckRouteByDriverReq req) {
+        log.info("根据司机ID和装货卸货地址查询常用路线,请求参数 :{}", JSON.toJSONString(req));
+        
+        // 查询常用路线
+        KwfTruckRoute truckRoute = truckRouteRepository.queryByDriverIdAndAddress(
+                req.getDriverId(), 
+                req.getStartPoint(), 
+                req.getUnloadingPoint()
+        );
+        
+        if (Objects.isNull(truckRoute)) {
+            log.info("未查询到司机ID:{},装货地址:{},卸货地址:{} 的常用路线", 
+                    req.getDriverId(), req.getStartPoint(), req.getUnloadingPoint());
+            return null;
+        }
+        
+        // 组装返回数据
+        QueryTruckRoteVo vo = new QueryTruckRoteVo();
+        vo.setId(truckRoute.getId());
+        vo.setTruckId(String.valueOf(truckRoute.getTruckId()));
+        vo.setTruckNo(truckRoute.getTruckNo());
+        vo.setStartPoint(truckRoute.getStartPoint());
+        vo.setUnloadingPoint(truckRoute.getUnloadingPoint());
+        vo.setDriverId(String.valueOf(truckRoute.getDriverId()));
+        vo.setSortedTime(truckRoute.getShortestTime());
+        vo.setUpdateTime(DateUtils.format(truckRoute.getUpdateTime(), DateUtils.DATE_TIME_PATTERN));
+        
+        // 查询车队信息
+        if (Objects.nonNull(truckRoute.getFleetId())) {
+            vo.setFleetId(String.valueOf(truckRoute.getFleetId()));
+            KwfFleet fleet = fleetRepository.getById(truckRoute.getFleetId());
+            if (Objects.nonNull(fleet)) {
+                vo.setFleetName(fleet.getName());
+            }
+        }
+        
+        // 查询司机信息
+        KwfDriver driver = driverRepository.getById(truckRoute.getDriverId());
+        if (Objects.nonNull(driver)) {
+            vo.setDriverName(driver.getName());
+        }
+
+        String pointInfo = truckRoute.getPointInfo();
+        if (StringUtils.isNotBlank(pointInfo)) {
+            List<QueryTruckRoteVo.TruckRoteDetail> truckRoteDetails = JSON.parseArray(pointInfo, QueryTruckRoteVo.TruckRoteDetail.class);
+            truckRoteDetails =truckRoteDetails.stream()
+                    .sorted(Comparator.comparing(QueryTruckRoteVo.TruckRoteDetail::getTs))
+                    .collect(Collectors.toList());
+
+            vo.setTruckRoteDetails(truckRoteDetails);
+        }
+
+        return vo;
+    }
+
+
 }
 }

+ 1 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/VehicleRouteData.java

@@ -3,6 +3,7 @@ package com.sckw.transport.model.dto;
 
 
 import lombok.Data;
 import lombok.Data;
 
 
+import java.sql.Timestamp;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 
 
 
 

+ 6 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/MapVehicleVo.java

@@ -39,6 +39,8 @@ public class MapVehicleVo implements Serializable {
     private String energyType;
     private String energyType;
     @Schema(description = "能源类型描述")
     @Schema(description = "能源类型描述")
     private String energyTypeDesc;
     private String energyTypeDesc;
+    @Schema(description = "司机id")
+    private Long driverId;
 
 
     @Schema(description = "司机姓名")
     @Schema(description = "司机姓名")
     private String driverName;
     private String driverName;
@@ -98,4 +100,8 @@ public class MapVehicleVo implements Serializable {
 
 
     @Schema(description = "异常数量")
     @Schema(description = "异常数量")
     private Integer exceptionCount;
     private Integer exceptionCount;
+    @Schema(description = "装货地址")
+    private String loadAddress;
+    @Schema(description = "卸货地址")
+    private String unloadAddress;
 }
 }

+ 0 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -3,7 +3,6 @@ package com.sckw.transport.service;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
@@ -18,7 +17,6 @@ import com.sckw.core.exception.BusinessException;
 import com.sckw.core.exception.BusinessPlatfromException;
 import com.sckw.core.exception.BusinessPlatfromException;
 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.constant.UrlConstants;
 import com.sckw.core.model.enums.*;
 import com.sckw.core.model.enums.*;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.model.page.PageResult;
@@ -29,7 +27,6 @@ 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.BaseIotResult;
 import com.sckw.core.web.response.BaseIotResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.HttpResult;
-import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.excel.utils.DateUtil;
 import com.sckw.excel.utils.DateUtil;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.RemoteFleetService;
@@ -46,7 +43,6 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.res.*;
 import com.sckw.system.api.model.dto.res.*;
 import com.sckw.transport.api.feign.VehicleTraceClient;
 import com.sckw.transport.api.feign.VehicleTraceClient;
-import com.sckw.transport.api.model.vo.VehicleTraceResponse;
 import com.sckw.transport.common.config.UrlConfigProperties;
 import com.sckw.transport.common.config.UrlConfigProperties;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.*;

+ 20 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -95,6 +95,7 @@ public class kwfTruckTraceService {
     private final KwtLogisticsOrderGoodsRepository kwtLogisticsOrderGoodsRepository;
     private final KwtLogisticsOrderGoodsRepository kwtLogisticsOrderGoodsRepository;
     private final KwtLogisticsOrderRepository kwtLogisticsOrderRepository;
     private final KwtLogisticsOrderRepository kwtLogisticsOrderRepository;
     private final KwtVehicleExceptionRepository kwtVehicleExceptionRepository;
     private final KwtVehicleExceptionRepository kwtVehicleExceptionRepository;
+    private final KwtLogisticsOrderAddressRepository kwtLogisticsOrderAddressRepository;
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     RemoteSystemService remoteSystemService;
     RemoteSystemService remoteSystemService;
 
 
@@ -850,13 +851,20 @@ public class kwfTruckTraceService {
 
 
         List<KwtLogisticsOrderUnit> logisticsOrderUnits = Lists.newArrayList();
         List<KwtLogisticsOrderUnit> logisticsOrderUnits = Lists.newArrayList();
         List<KwtLogisticsOrderGoods> goodsList = Lists.newArrayList();
         List<KwtLogisticsOrderGoods> goodsList = Lists.newArrayList();
+        List<KwtLogisticsOrderAddress> logisticsOrderAddress = Lists.newArrayList();
         if (CollectionUtils.isNotEmpty(lOrderIds)) {
         if (CollectionUtils.isNotEmpty(lOrderIds)) {
             // 查询托运企业和承运企业
             // 查询托运企业和承运企业
             logisticsOrderUnits = kwtLogisticsOrderUnitRepository.queryByLOrderIds(new ArrayList<>(lOrderIds));
             logisticsOrderUnits = kwtLogisticsOrderUnitRepository.queryByLOrderIds(new ArrayList<>(lOrderIds));
             // 查询商品信息
             // 查询商品信息
             goodsList = kwtLogisticsOrderGoodsRepository.queryByLOrderIds(new ArrayList<>(lOrderIds));
             goodsList = kwtLogisticsOrderGoodsRepository.queryByLOrderIds(new ArrayList<>(lOrderIds));
+            //查询物流地址
+            logisticsOrderAddress = kwtLogisticsOrderAddressRepository.queryByLogOrderIds(new ArrayList<>(lOrderIds));
+        }
+        Map<String, KwtLogisticsOrderAddress> logisticsOrderAddressMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(logisticsOrderAddress)){
+            logisticsOrderAddressMap = logisticsOrderAddress.stream()
+                    .collect(Collectors.toMap(x -> x.getLOrderId() + "_" + x.getAddressType(), Function.identity(), (k1, k2) -> k1));
         }
         }
-
         
         
         // 按物流订单ID和单位类型分组
         // 按物流订单ID和单位类型分组
         Map<String, KwtLogisticsOrderUnit> unitMap =new HashMap<>();
         Map<String, KwtLogisticsOrderUnit> unitMap =new HashMap<>();
@@ -919,9 +927,10 @@ public class kwfTruckTraceService {
         Map<Long, KwtLogisticsOrderGoods> finalGoodsMap = goodsMap;
         Map<Long, KwtLogisticsOrderGoods> finalGoodsMap = goodsMap;
         Map<Long, RTruckVo> finalTruckIdMap = truckIdMap;
         Map<Long, RTruckVo> finalTruckIdMap = truckIdMap;
         Map<String, SysDictResDto> finalEnergyTypeMap = energyTypeMap;
         Map<String, SysDictResDto> finalEnergyTypeMap = energyTypeMap;
+        Map<String, KwtLogisticsOrderAddress> finalLogisticsOrderAddressMap = logisticsOrderAddressMap;
         List<MapVehicleVo> result = filteredOrders.stream()
         List<MapVehicleVo> result = filteredOrders.stream()
                 .map(order -> buildMapVehicleVo(order, wOrderIdSubtaskMap, finalUnitMap, finalGoodsMap,
                 .map(order -> buildMapVehicleVo(order, wOrderIdSubtaskMap, finalUnitMap, finalGoodsMap,
-                        locationInfoMap, exceptionCountMap, finalTruckIdMap, finalEnergyTypeMap))
+                        locationInfoMap, exceptionCountMap, finalTruckIdMap, finalEnergyTypeMap, finalLogisticsOrderAddressMap))
                 .collect(Collectors.toList());
                 .collect(Collectors.toList());
         
         
         // 根据排序类型进行排序
         // 根据排序类型进行排序
@@ -1155,12 +1164,14 @@ public class kwfTruckTraceService {
                                            Map<String, VehicleLocationInfo> locationInfoMap,
                                            Map<String, VehicleLocationInfo> locationInfoMap,
                                            Map<String, Integer> exceptionCountMap,
                                            Map<String, Integer> exceptionCountMap,
                                            Map<Long, RTruckVo> truckIdMap,
                                            Map<Long, RTruckVo> truckIdMap,
-                                           Map<String, SysDictResDto> energyTypeMap) {
+                                           Map<String, SysDictResDto> energyTypeMap,
+                                           Map<String, KwtLogisticsOrderAddress> logisticsOrderAddressMap) {
         MapVehicleVo vo = new MapVehicleVo();
         MapVehicleVo vo = new MapVehicleVo();
         
         
         // 车辆和司机信息
         // 车辆和司机信息
         vo.setTruckNo(order.getTruckNo());
         vo.setTruckNo(order.getTruckNo());
         vo.setTruckId(order.getTruckId());
         vo.setTruckId(order.getTruckId());
+        vo.setDriverId(order.getDriverId());
         vo.setDriverName(order.getDriverName());
         vo.setDriverName(order.getDriverName());
         vo.setDriverPhone(order.getDriverPhone());
         vo.setDriverPhone(order.getDriverPhone());
         vo.setWayOrderId(order.getId());
         vo.setWayOrderId(order.getId());
@@ -1233,6 +1244,12 @@ public class kwfTruckTraceService {
         // 从异常表查询该运单的异常数量
         // 从异常表查询该运单的异常数量
         Integer exceptionCount = exceptionCountMap.getOrDefault(order.getWOrderNo(), 0);
         Integer exceptionCount = exceptionCountMap.getOrDefault(order.getWOrderNo(), 0);
         vo.setExceptionCount(exceptionCount);
         vo.setExceptionCount(exceptionCount);
+        Long logisticId = Optional.ofNullable(subtask).map(KwtWaybillOrderSubtask::getLOrderId)
+                .orElse(null);
+        KwtLogisticsOrderAddress loadAdd = logisticsOrderAddressMap.getOrDefault(logisticId + "_" + AddressTypeEnum.SHIPMENT.getCode(), new KwtLogisticsOrderAddress());
+        vo.setLoadAddress(loadAdd.getDetailAddress());
+        KwtLogisticsOrderAddress unLoadAdd = logisticsOrderAddressMap.getOrDefault(logisticId + "_" + AddressTypeEnum.TAKE.getCode(), new KwtLogisticsOrderAddress());
+        vo.setUnloadAddress(unLoadAdd.getDetailAddress());
         RTruckVo truckVo = truckIdMap.getOrDefault(order.getTruckId(), new RTruckVo());
         RTruckVo truckVo = truckIdMap.getOrDefault(order.getTruckId(), new RTruckVo());
         vo.setEnergyType(Objects.isNull(truckVo.getEnergyType())? "":String.valueOf(truckVo.getEnergyType()));
         vo.setEnergyType(Objects.isNull(truckVo.getEnergyType())? "":String.valueOf(truckVo.getEnergyType()));
         SysDictResDto dictResDto = energyTypeMap.getOrDefault(String.valueOf(truckVo.getEnergyType()), new SysDictResDto());
         SysDictResDto dictResDto = energyTypeMap.getOrDefault(String.valueOf(truckVo.getEnergyType()), new SysDictResDto());