|
|
@@ -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;
|
|
|
}
|