Jelajahi Sumber

Merge remote-tracking branch 'origin/dev_20260131_youshen430' into dev_20260131_youshen430

xucaiqin 1 bulan lalu
induk
melakukan
f4507129b3

+ 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;
 package com.sckw.fleet.api.feign;
 
 
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.HttpResult;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 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 org.springframework.web.bind.annotation.RequestParam;
 
 
+import java.util.Map;
+
 /**
 /**
  * 车辆档案 Feign 服务。
  * 车辆档案 Feign 服务。
  *
  *
@@ -22,4 +27,10 @@ public interface FleetTruckFeignService {
      */
      */
     @GetMapping("/kwfTruck/findByTruckNo")
     @GetMapping("/kwfTruck/findByTruckNo")
     HttpResult findByTruckNo(@RequestParam("truckNo") String truckNo);
     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);
+
 }
 }

+ 6 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderStatusResp.java

@@ -210,4 +210,10 @@ public class WaybillOrderStatusResp implements Serializable {
      */
      */
     @Schema(description = "订单余量")
     @Schema(description = "订单余量")
     private BigDecimal orderSurplus;
     private BigDecimal orderSurplus;
+
+    /**
+     * 备注(是否空载离场)
+     */
+    @Schema(description = "备注(是否空载离场)")
+    private String remark;
 }
 }

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

@@ -223,6 +223,12 @@ public class WaybillOrderDetailResp implements Serializable {
     @Schema(description = "卸货地址纬度")
     @Schema(description = "卸货地址纬度")
     private String unloadLatitude;
     private String unloadLatitude;
 
 
+    /**
+     * 备注(是否空载离场)
+     */
+    @Schema(description = "备注(是否空载离场)")
+    private String remark;
+
     /**
     /**
      * 过磅记录
      * 过磅记录
      */
      */

+ 4 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -3200,7 +3200,10 @@ public class KwtLogisticsConsignmentService {
         OrderDetailVo orderDetailVo = tradeIdAndOrderDetailVoMap.getOrDefault(kwtLogisticsOrder.getTOrderId(), new OrderDetailVo());
         OrderDetailVo orderDetailVo = tradeIdAndOrderDetailVoMap.getOrDefault(kwtLogisticsOrder.getTOrderId(), new OrderDetailVo());
         logisticsOrderResp.setAmount((Objects.nonNull(orderDetailVo.getAmount()) ?
         logisticsOrderResp.setAmount((Objects.nonNull(orderDetailVo.getAmount()) ?
                 orderDetailVo.getAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "0.00") + kwtLogisticsOrder.getUnit());
                 orderDetailVo.getAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "0.00") + kwtLogisticsOrder.getUnit());
-
+        if (Objects.equals(kwtLogisticsOrder.getOrderType(),1)){
+            logisticsOrderResp.setAmount((Objects.nonNull(kwtLogisticsOrder.getAmount()) ?
+                    kwtLogisticsOrder.getAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "0.00") + kwtLogisticsOrder.getUnit());
+        }
         BigDecimal expectedTransportPrice =
         BigDecimal expectedTransportPrice =
                 Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(orderDetailVo.getAmount()) ?
                 Objects.nonNull(kwtLogisticsOrder.getPrice()) && Objects.nonNull(orderDetailVo.getAmount()) ?
                         kwtLogisticsOrder.getPrice().multiply(orderDetailVo.getAmount()) : BigDecimal.ZERO;
                         kwtLogisticsOrder.getPrice().multiply(orderDetailVo.getAmount()) : BigDecimal.ZERO;

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

@@ -4603,6 +4603,7 @@ public class KwtWaybillOrderV1Service {
         resp.setLogisticOrderNo(logOrder.getLOrderNo());
         resp.setLogisticOrderNo(logOrder.getLOrderNo());
         resp.setPriceType(String.valueOf(logOrder.getBillingMode()));
         resp.setPriceType(String.valueOf(logOrder.getBillingMode()));
         resp.setPriceTypeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), logOrder.getBillingMode()));
         resp.setPriceTypeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), logOrder.getBillingMode()));
+        resp.setRemark(billOrder.getRemark());
         // 票据信息
         // 票据信息
         String shipmentTicketKey = subtask.getWOrderId() + "-" + AddressTypeEnum.SHIPMENT.getCode();
         String shipmentTicketKey = subtask.getWOrderId() + "-" + AddressTypeEnum.SHIPMENT.getCode();
         KwtWaybillOrderTicket tareAmountTicket = ticketMap.getOrDefault(shipmentTicketKey, new KwtWaybillOrderTicket());
         KwtWaybillOrderTicket tareAmountTicket = ticketMap.getOrDefault(shipmentTicketKey, new KwtWaybillOrderTicket());

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

+ 1 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -847,6 +847,7 @@ public class WaybillOrderService {
         wbOrderResp.setId(wbOrder.getId());
         wbOrderResp.setId(wbOrder.getId());
         wbOrderResp.setLogisticsOrderId(Optional.ofNullable(wbOrder.getLOrderId()).map(String::valueOf).orElse(null));
         wbOrderResp.setLogisticsOrderId(Optional.ofNullable(wbOrder.getLOrderId()).map(String::valueOf).orElse(null));
         wbOrderResp.setWaybillNo(wbOrder.getWOrderNo());
         wbOrderResp.setWaybillNo(wbOrder.getWOrderNo());
+        wbOrderResp.setRemark(wbOrder.getRemark());
         //装货、卸货净重、任务量
         //装货、卸货净重、任务量
         KwtWaybillOrderSubtask subtask = subtaskMap.getOrDefault(wbOrder.getId(), new KwtWaybillOrderSubtask());
         KwtWaybillOrderSubtask subtask = subtaskMap.getOrDefault(wbOrder.getId(), new KwtWaybillOrderSubtask());
         wbOrderResp.setLoadingNetWeight(subtask.getLoadAmount());
         wbOrderResp.setLoadingNetWeight(subtask.getLoadAmount());