chenxiaofei hai 1 mes
pai
achega
0210e6d1c0

+ 11 - 0
sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/feign/FleetTruckFeignService.java

@@ -1,10 +1,15 @@
 package com.sckw.fleet.api.feign;
 
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.util.Map;
+
 /**
  * 车辆档案 Feign 服务。
  *
@@ -22,4 +27,10 @@ public interface FleetTruckFeignService {
      */
     @GetMapping("/kwfTruck/findByTruckNo")
     HttpResult findByTruckNo(@RequestParam("truckNo") String truckNo);
+
+    // sckw-modules-api/sckw-fleet-api/src/main/java/com/sckw/fleet/api/feign/FleetTruckFeignService.java
+
+    @PostMapping("/kwfTruck/truckDetail")
+    BaseResult<Map<String, Object>> truckDetail(@RequestBody Map<String, Object> param);
+
 }

+ 43 - 38
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TradeOrderTransportInfoService.java

@@ -2,12 +2,17 @@ package com.sckw.transport.service;
 
 import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.fleet.api.feign.FleetTruckFeignService;
 import com.sckw.order.api.feign.TradeOrderApi;
 import com.sckw.order.api.model.OrderPara;
 import com.sckw.order.api.model.TradeOrderVo;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.KwpGoods;
+import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.KwtLogisticsOrderAddress;
 import com.sckw.transport.model.KwtLogisticsOrderGoods;
@@ -27,18 +32,12 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -66,6 +65,10 @@ public class TradeOrderTransportInfoService {
     private final KwtLogisticsOrderGoodsRepository logisticsOrderGoodsRepository;
     private final KwtLogisticsOrderAddressRepository logisticsOrderAddressRepository;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private GoodsInfoService goodsInfoService;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
 
     /**
      * 根据贸易订单号查询运输相关信息。
@@ -441,6 +444,8 @@ public class TradeOrderTransportInfoService {
                 .filter(item -> Objects.equals(UNLOAD_ADDRESS_TYPE, item.getAddressType()))
                 .collect(Collectors.toMap(KwtLogisticsOrderAddress::getLOrderId, Function.identity(), (a, b) -> a));
         log.debug("查询到卸货地址数量:{}", unloadAddressMap.size());
+        //查询字典
+        Map<String, Map<String, String>> dictValueAndDictResDtoMap = remoteSystemService.queryDictByType(Arrays.asList(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.GOODS_SPEC.getType()));
 
         // 用于缓存车辆轴数信息,避免重复Feign调用
         Map<String, String> truckAxleCache = new LinkedHashMap<>();
@@ -453,7 +458,8 @@ public class TradeOrderTransportInfoService {
                         loadTicketMap.get(waybillOrder.getId()),
                         goodsMap.get(waybillOrder.getLOrderId()),
                         unloadAddressMap.get(waybillOrder.getLOrderId()),
-                        truckAxleCache))
+                        truckAxleCache,
+                        dictValueAndDictResDtoMap))
                 .collect(Collectors.toList());
         
         log.info("运输任务信息列表组装完成,最终任务数量:{}", taskInfoList.size());
@@ -485,9 +491,12 @@ public class TradeOrderTransportInfoService {
                                                                KwtWaybillOrderTicket loadTicket,
                                                                KwtLogisticsOrderGoods goods,
                                                                KwtLogisticsOrderAddress unloadAddress,
-                                                               Map<String, String> truckAxleCache) {
+                                                               Map<String, String> truckAxleCache,
+                                                               Map<String, Map<String, String>> dictValueAndDictResDtoMap) {
         log.debug("开始组装单车任务信息,waybillNo:{}", Objects.nonNull(waybillOrder) ? waybillOrder.getWOrderNo() : null);
-        
+        //查询商品数据
+
+        KwpGoods goodsById = goodsInfoService.getGoodsById(goods.getGoodsId());
         TradeOrderTransportInfoResp.TaskInfo taskInfo = new TradeOrderTransportInfoResp.TaskInfo();
         
         // 1. 设置任务编号
@@ -516,7 +525,7 @@ public class TradeOrderTransportInfoService {
         taskInfo.setDriverInfo(buildDriverInfo(waybillOrder));
 
         // 5. 组装货物及重量信息(名称、规格、单位、各类重量数据)
-        taskInfo.setGoodsInfo(buildGoodsInfo(logisticsOrder, subtask, loadTicket, goods));
+        taskInfo.setGoodsInfo(buildGoodsInfo(logisticsOrder, subtask, loadTicket, goods,goodsById,dictValueAndDictResDtoMap));
 
         // 6. 组装车辆信息(车牌号、轴数-含缓存逻辑)
         taskInfo.setTruckInfo(buildTruckInfo(waybillOrder, truckAxleCache));
@@ -600,7 +609,9 @@ public class TradeOrderTransportInfoService {
     private TradeOrderTransportInfoResp.GoodsInfo buildGoodsInfo(KwtLogisticsOrder logisticsOrder,
                                                                  KwtWaybillOrderSubtask subtask,
                                                                  KwtWaybillOrderTicket loadTicket,
-                                                                 KwtLogisticsOrderGoods goods) {
+                                                                 KwtLogisticsOrderGoods goods,
+                                                                 KwpGoods goodsById,
+                                                                 Map<String, Map<String, String>> dictValueAndDictResDtoMap) {
         log.debug("开始组装货物及重量信息,logisticsOrderId:{}, waybillSubtaskId:{}, loadTicketId:{}, goodsId:{}", 
                 Objects.nonNull(logisticsOrder) ? logisticsOrder.getId() : null,
                 Objects.nonNull(subtask) ? subtask.getId() : null,
@@ -608,11 +619,12 @@ public class TradeOrderTransportInfoService {
                 Objects.nonNull(goods) ? goods.getId() : null);
 
         TradeOrderTransportInfoResp.GoodsInfo goodsInfo = new TradeOrderTransportInfoResp.GoodsInfo();
-        
+        Map<String, String> goodsTypeMap = dictValueAndDictResDtoMap.getOrDefault(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), new HashMap<>());
+        Map<String, String> goodsSpecMap = dictValueAndDictResDtoMap.getOrDefault(DictTypeEnum.GOODS_SPEC.getType(), new HashMap<>());
         // 1. 设置货物基础属性:名称和规格
         if (Objects.nonNull(goods)) {
             goodsInfo.setMaterialName(goods.getGoodsName());
-            goodsInfo.setSpecification(goods.getRemark());
+            goodsInfo.setSpecification(Objects.nonNull(goodsById)? goodsSpecMap.getOrDefault(goodsById.getSpec(), ""):"");
             log.debug("设置货物名称: {}, 规格: {}", goods.getGoodsName(), goods.getRemark());
         } else {
             log.warn("货物明细为空,无法设置货物名称和规格");
@@ -712,45 +724,38 @@ public class TradeOrderTransportInfoService {
      * @param truckNo 车牌号
      * @return 车辆轴数(字符串格式),若查询失败、无数据或发生异常则返回 null
      */
+    // sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TradeOrderTransportInfoService.java
+
     private String queryTruckAxle(String truckNo) {
-        // 1. 参数校验:车牌号为空直接返回
         if (StringUtils.isBlank(truckNo)) {
             log.debug("查询车辆轴数跳过:车牌号为空");
             return null;
         }
-        
+
         log.debug("开始查询车辆轴数,truckNo:{}", truckNo);
         try {
-            // 2. 调用远程 Feign 接口
-            HttpResult result = fleetTruckFeignService.findByTruckNo(truckNo);
-            
-            // 3. 校验响应结果有效性
-            // - 响应对象非空
-            // - 状态码为成功 (HttpStatus.SUCCESS_CODE)
-            // - 返回数据结构为 Map 类型
-            if (Objects.isNull(result) || result.getCode() != HttpStatus.SUCCESS_CODE || !(result.getData() instanceof Map<?, ?> dataMap)) {
-                log.warn("查询车辆轴数失败:远程服务返回异常或数据格式不符,truckNo:{}, resultCode:{}, dataType:{}", 
-                        truckNo, 
-                        Objects.nonNull(result) ? result.getCode() : "N/A", 
-                        Objects.nonNull(result) && Objects.nonNull(result.getData()) ? result.getData().getClass().getSimpleName() : "N/A");
+            BaseResult<Map<String, Object>> result = fleetTruckFeignService.truckDetail(Map.of("truckNo", truckNo));
+
+            if (Objects.isNull(result) || !result.isSuccess() || Objects.isNull(result.getData())) {
+                log.warn("查询车辆轴数失败:远程服务返回异常或数据为空,truckNo:{}, resultCode:{}, dataType:{}",
+                        truckNo,
+                        Objects.nonNull(result) ? result.getCode() : "N/A",
+                        Objects.nonNull(result) && Objects.nonNull(result.getData())
+                                ? result.getData().getClass().getSimpleName()
+                                : "N/A");
                 return null;
             }
 
-            // 4. 提取轴数字段 "carAxis"
-            Object carAxis = dataMap.get("carAxis");
-            
-            // 5. 转换并返回结果
+            Object carAxis = result.getData().get("carAxis");
             if (Objects.nonNull(carAxis)) {
                 String axleStr = String.valueOf(carAxis);
                 log.debug("成功查询到车辆轴数,truckNo:{}, axle:{}", truckNo, axleStr);
                 return axleStr;
-            } else {
-                log.debug("远程服务返回数据中未包含轴数信息,truckNo:{}", truckNo);
-                return null;
             }
-            
+
+            log.debug("远程服务返回数据中未包含轴数信息,truckNo:{}", truckNo);
+            return null;
         } catch (Exception e) {
-            // 6. 异常处理:记录错误日志并返回 null,避免影响主流程
             log.error("Feign 调用查询车辆轴数发生异常,truckNo:{}, errorMessage:{}", truckNo, e.getMessage(), e);
             return null;
         }