Bläddra i källkod

提交修改物流订单代理商

chenxiaofei 3 timmar sedan
förälder
incheckning
20ec88d9dc

+ 19 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderDetailRes.java

@@ -144,6 +144,25 @@ public class OrderDetailRes implements Serializable {
      * 订单状态
      */
     private Integer status;
+    /**
+     * 是否代理属性:0-否,1-是
+     */
+    private Integer agentFlag;
+    /**
+     * 代理单位ID
+     */
+    private Long agentEntId;
+    /**
+     * 代理单位名称
+     */
+    private String agentFirmName;
+    /**
+     * 代理联系电话
+     */
+    private String agentPhone;
+    private Long supplierEntId;
+    private String supplierFirmName;
+    private String supplierPhone;
 
     /**
      * 订单状态label

+ 19 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderDetailVo.java

@@ -113,6 +113,25 @@ public class OrderDetailVo implements Serializable {
      * 交易订单状态
      */
     private Integer status;
+    /**
+     * 是否代理属性:0-否,1-是
+     */
+    private Integer agentFlag;
+    /**
+     * 代理单位ID
+     */
+    private Long agentEntId;
+    /**
+     * 代理单位名称
+     */
+    private String agentFirmName;
+    /**
+     * 代理联系电话
+     */
+    private String agentPhone;
+    private Long supplierEntId;
+    private String supplierFirmName;
+    private String supplierPhone;
 
     /**
      * 商品信息

+ 56 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -86,6 +86,11 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     @Override
     public OrderDetailRes getOrderDetailById(Long tOrderId) {
         OrderDetailRes order = BeanUtil.copyProperties(kwoTradeOrderService.detail(tOrderId), OrderDetailRes.class);
+        KwoTradeOrder tradeOrder = kwoTradeOrderRepository.queryByTradeOrderId(tOrderId);
+        if (Objects.nonNull(tradeOrder)) {
+            order.setAgentFlag(tradeOrder.getAgentFlag());
+        }
+        populateSupplierAndAgentInfo(order);
         BigDecimal actualPrice = Objects.isNull(order.getActualAmount()) || Objects.isNull(order.getGoodsInfo()) || Objects.isNull(order.getGoodsInfo().getUnitPrice()) ? BigDecimal.ZERO : order.getActualAmount().multiply(order.getGoodsInfo().getUnitPrice()).setScale(2, RoundingMode.HALF_UP);
         order.setActualPrice(actualPrice);
         return order;
@@ -503,6 +508,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         orderDetailRes.setChargeType(kwoTradeOrder.getChargeType());
         orderDetailRes.setConsignmentWay(kwoTradeOrder.getConsignmentWay());
         orderDetailRes.setStatus(kwoTradeOrder.getStatus());
+        orderDetailRes.setAgentFlag(kwoTradeOrder.getAgentFlag());
 
         if (Objects.nonNull(kwoTradeOrderGoods)) {
             OrderDetailVo.GoodsInfo goodsInfo = new OrderDetailVo.GoodsInfo();
@@ -533,6 +539,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
                 return unitInfo;
             }).collect(Collectors.toList()));
         }
+        populateSupplierAndAgentInfo(orderDetailRes, kwoTradeOrderUnits);
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwoTradeOrderAddresses)) {
             List<OrderDetailVo.AddressInfo> addressInfos = kwoTradeOrderAddresses.stream().map(a -> {
                 OrderDetailVo.AddressInfo addressInfo = new OrderDetailVo.AddressInfo();
@@ -573,11 +580,16 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             return List.of();
         }
 
-        return kwoTradeOrders.stream().map(TradeOrderInfoServiceImpl::getOrderDetailVo).collect(Collectors.toList());
+        Map<Long, List<KwoTradeOrderUnit>> unitMap = kwoTradeOrderUnitRepository.queryByOrderIds(tradeOrderIds)
+                .stream()
+                .collect(Collectors.groupingBy(KwoTradeOrderUnit::getTOrderId));
+        return kwoTradeOrders.stream()
+                .map(order -> getOrderDetailVo(order, unitMap.getOrDefault(order.getId(), Collections.emptyList())))
+                .collect(Collectors.toList());
     }
 
     @NotNull
-    private static OrderDetailVo getOrderDetailVo(KwoTradeOrder x) {
+    private static OrderDetailVo getOrderDetailVo(KwoTradeOrder x, List<KwoTradeOrderUnit> units) {
         OrderDetailVo orderDetailVo = new OrderDetailVo();
         orderDetailVo.setEntId(x.getEntId());
         orderDetailVo.setId(x.getId());
@@ -597,9 +609,51 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         orderDetailVo.setChargeType(x.getChargeType());
         orderDetailVo.setConsignmentWay(x.getConsignmentWay());
         orderDetailVo.setStatus(x.getStatus());
+        orderDetailVo.setAgentFlag(x.getAgentFlag());
+        populateSupplierAndAgentInfo(orderDetailVo, units);
         return orderDetailVo;
     }
 
+    private static void populateSupplierAndAgentInfo(OrderDetailRes order) {
+        if (Objects.isNull(order) || CollectionUtils.isEmpty(order.getUnitInfo())) {
+            return;
+        }
+        order.getUnitInfo().stream()
+                .filter(Objects::nonNull)
+                .filter(unit -> String.valueOf(NumberConstant.TWO).equals(unit.getUnitType()))
+                .findFirst()
+                .ifPresent(unit -> {
+                    order.setSupplierEntId(unit.getEntId());
+                    order.setSupplierFirmName(unit.getFirmName());
+                    order.setSupplierPhone(unit.getPhone());
+                    if (Objects.equals(order.getAgentFlag(), NumberConstant.ONE)) {
+                        order.setAgentEntId(unit.getEntId());
+                        order.setAgentFirmName(unit.getFirmName());
+                        order.setAgentPhone(unit.getPhone());
+                    }
+                });
+    }
+
+    private static void populateSupplierAndAgentInfo(OrderDetailVo order, List<KwoTradeOrderUnit> units) {
+        if (Objects.isNull(order) || CollectionUtils.isEmpty(units)) {
+            return;
+        }
+        units.stream()
+                .filter(Objects::nonNull)
+                .filter(unit -> String.valueOf(NumberConstant.TWO).equals(unit.getUnitType()))
+                .findFirst()
+                .ifPresent(unit -> {
+                    order.setSupplierEntId(unit.getEntId());
+                    order.setSupplierFirmName(unit.getFirmName());
+                    order.setSupplierPhone(unit.getPhone());
+                    if (Objects.equals(order.getAgentFlag(), NumberConstant.ONE)) {
+                        order.setAgentEntId(unit.getEntId());
+                        order.setAgentFirmName(unit.getFirmName());
+                        order.setAgentPhone(unit.getPhone());
+                    }
+                });
+    }
+
 
     @Override
     public void orderSettle(TradeOrderSettlePara tradeOrderSettlePara) {

+ 19 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java

@@ -170,6 +170,25 @@ public class OrderDetailRes implements Serializable {
      * 订单状态
      */
     private Integer status;
+    /**
+     * 是否代理属性:0-否,1-是
+     */
+    private Integer agentFlag;
+    /**
+     * 代理单位ID
+     */
+    private Long agentEntId;
+    /**
+     * 代理单位名称
+     */
+    private String agentFirmName;
+    /**
+     * 代理联系电话
+     */
+    private String agentPhone;
+    private Long supplierEntId;
+    private String supplierFirmName;
+    private String supplierPhone;
 
     /**
      * 订单状态label

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

@@ -39,6 +39,16 @@ public class LogisticsOrderResp implements Serializable {
      */
     @Schema(description = "托运单位名称")
     private String consignCompanyName;
+    /**
+     * 代理单位id
+     */
+    @Schema(description = "代理单位id")
+    private String agentEntId;
+    /**
+     * 代理单位名称
+     */
+    @Schema(description = "代理单位名称")
+    private String agentFirmName;
     /**
      * 承运单位id
      */

+ 5 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/QueryLogisticsOrderReq.java

@@ -52,6 +52,11 @@ public class QueryLogisticsOrderReq extends PageReq implements Serializable {
      */
     @Schema(description = "托运单位id")
     private String consignCompanyId;
+    /**
+     * 代理单位id
+     */
+    @Schema(description = "代理单位id")
+    private String agentEntId;
     /**
      * 承运单位id
      */

+ 15 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogisticsOrderDetailResp.java

@@ -91,6 +91,21 @@ public class LogisticsOrderDetailResp implements Serializable {
          */
         @Schema(description = "托运联系电话")
         private String consignUnitPhone;
+        /**
+         * 代理单位id
+         */
+        @Schema(description = "代理单位id")
+        private String agentUnitId;
+        /**
+         * 代理单位名称
+         */
+        @Schema(description = "代理单位名称")
+        private String agentUnitName;
+        /**
+         * 代理联系电话
+         */
+        @Schema(description = "代理联系电话")
+        private String agentUnitPhone;
         /**
          * 承运单位id
          */

+ 219 - 12
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -2352,7 +2352,7 @@ public class KwtLogisticsConsignmentService {
      */
     private boolean shouldReturnEmptyResult(Set<Long> logOrderIds, Set<Long> entList, QueryLogisticsOrderReq req) {
         return CollectionUtils.isEmpty(logOrderIds) &&
-                (!org.apache.commons.lang3.StringUtils.isAllBlank(req.getContractId(), req.getGoodsName(), req.getConsignCompanyId(), req.getCarriageCompanyId(), req.getKeywords())
+                (!org.apache.commons.lang3.StringUtils.isAllBlank(req.getContractId(), req.getGoodsName(), req.getConsignCompanyId(), req.getAgentEntId(), req.getCarriageCompanyId(), req.getKeywords())
                         || org.apache.commons.collections4.CollectionUtils.isNotEmpty(entList));
     }
 
@@ -3147,6 +3147,7 @@ public class KwtLogisticsConsignmentService {
     @NotNull
     private Set<Long> getLogOrderIds(QueryLogisticsOrderReq req, Set<Long> entList, Long allEnt) {
         applyAgentKeywordCondition(req);
+        applyAgentEntCondition(req);
         Set<Long> logOrderIds = Sets.newHashSet();
         if (Objects.nonNull(allEnt)) {
             entList.add(allEnt);
@@ -3207,6 +3208,9 @@ public class KwtLogisticsConsignmentService {
 
             logOrderIds.addAll(logOrderIdList);
         }
+        log.debug("物流订单ID数量: {}", logOrderIds.size());
+        logOrderIds = applyAgentEntFilterToLogOrderIds(req, logOrderIds);
+        log.debug("代理单位过滤后物流订单ID数量: {}", logOrderIds.size());
         if (StringUtils.isNotBlank(req.getContractId())) {
             List<KwtLogisticsOrderContract> kwtLogisticsOrderContracts = logisticsOrderContractRepository.queryByContractId(Long.parseLong(req.getContractId()));
             if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwtLogisticsOrderContracts)) {
@@ -3242,7 +3246,8 @@ public class KwtLogisticsConsignmentService {
         // 如果存在这些条件,后续的关键字搜索必须与这些条件的结果取交集(AND关系)
         boolean hasLogOrderIdRestrictedCondition = org.apache.commons.collections4.CollectionUtils.isNotEmpty(entList)
                 || StringUtils.isNotBlank(req.getContractId())
-                || StringUtils.isNotBlank(req.getGoodsName());
+                || StringUtils.isNotBlank(req.getGoodsName())
+                || StringUtils.isNotBlank(req.getAgentEntId());
         
         log.debug("关键字过滤前置检查: hasLogOrderIdRestrictedCondition={}, 当前logOrderIds大小={}", 
                 hasLogOrderIdRestrictedCondition, logOrderIds.size());
@@ -3250,6 +3255,88 @@ public class KwtLogisticsConsignmentService {
         return applyKeywordFilterToLogOrderIds(req, logOrderIds, hasLogOrderIdRestrictedCondition);
     }
 
+    /**
+     * 根据代理单位ID过滤物流订单ID集合。
+     * <p>
+     * 业务逻辑链路:
+     * 1. 校验请求参数,若无代理单位ID则直接返回原始订单ID集合。
+     * 2. 根据代理单位ID查询关联的贸易订单ID集合(远程调用)。
+     * 3. 查询这些贸易订单的详细信息,筛选出标记为“代理”且代理单位ID匹配的贸易订单ID。
+     * 4. 根据筛选后的贸易订单ID,查询关联的物流订单ID集合。
+     * 5. 将查询到的代理物流订单ID与原始传入的物流订单ID取交集(若原始集合为空,则直接返回代理物流订单ID)。
+     * </p>
+     *
+     * @param req         查询请求参数,包含代理单位ID
+     * @param logOrderIds 原始物流订单ID集合
+     * @return 过滤后的物流订单ID集合
+     */
+    private Set<Long> applyAgentEntFilterToLogOrderIds(QueryLogisticsOrderReq req, Set<Long> logOrderIds) {
+        // 1. 前置校验:如果请求为空或未指定代理单位ID,无需过滤,直接返回
+        if (Objects.isNull(req) || StringUtils.isBlank(req.getAgentEntId())) {
+            log.debug("代理单位过滤:未指定代理单位ID,跳过过滤");
+            return logOrderIds;
+        }
+
+        Long agentEntId = Long.valueOf(req.getAgentEntId());
+        log.info("开始执行代理单位过滤,agentEntId: {}, 初始物流订单ID数量: {}", agentEntId, 
+                CollectionUtils.isEmpty(logOrderIds) ? 0 : logOrderIds.size());
+
+        // 2. 根据代理单位ID查询关联的贸易订单ID
+        // NumberConstant.TWO 可能代表某种特定的业务类型或角色标识,需结合具体业务上下文
+        Set<Long> tradeOrderIds = tradeOrderInfoService.queryOrderIdByEntId(agentEntId, String.valueOf(NumberConstant.TWO));
+        
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(tradeOrderIds)) {
+            log.warn("代理单位过滤:代理单位[{}]下未找到关联的贸易订单,返回空集合", agentEntId);
+            return Sets.newHashSet();
+        }
+        log.debug("代理单位过滤:查询到关联贸易订单ID数量: {}", tradeOrderIds.size());
+
+        // 3. 获取贸易订单详情,并筛选出符合代理条件的订单
+        // 条件:订单标记为代理(Global.YES) 且 代理单位ID匹配
+        List<OrderDetailVo> tradeOrderDetails = tradeOrderInfoService.queryByTradeOrderIds(tradeOrderIds);
+        Set<Long> agentTradeOrderIds = tradeOrderDetails.stream()
+                .filter(order -> Objects.equals(order.getAgentFlag(), Global.YES))
+                .filter(order -> Objects.equals(order.getAgentEntId(), agentEntId))
+                .map(OrderDetailVo::getId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(agentTradeOrderIds)) {
+            log.warn("代理单位过滤:在关联的贸易订单中,未找到符合代理条件(agentFlag=YES, agentEntId={})的订单,返回空集合", agentEntId);
+            return Sets.newHashSet();
+        }
+        log.debug("代理单位过滤:筛选出符合条件的代理贸易订单ID数量: {}", agentTradeOrderIds.size());
+
+        // 4. 根据代理贸易订单ID,查询对应的物流订单ID
+        Set<Long> agentLogOrderIds = logisticsOrderRepository.queryByTradeOrderIds(agentTradeOrderIds).stream()
+                .map(KwtLogisticsOrder::getId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(agentLogOrderIds)) {
+            log.warn("代理单位过滤:符合条件的代理贸易订单下未找到关联的物流订单,返回空集合");
+            return Sets.newHashSet();
+        }
+        log.debug("代理单位过滤:查询到关联的代理物流订单ID数量: {}", agentLogOrderIds.size());
+
+        // 5. 合并结果:取交集
+        // 如果原始物流订单ID集合为空,说明之前没有其他限制条件,直接返回代理物流订单ID
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(logOrderIds)) {
+            log.info("代理单位过滤完成:无前置过滤条件,直接返回代理物流订单ID,数量: {}", agentLogOrderIds.size());
+            return agentLogOrderIds;
+        }
+
+        // 否则,取原始集合与代理物流订单ID集合的交集
+        Set<Long> result = Sets.newHashSet(logOrderIds);
+        int beforeSize = result.size();
+        result.retainAll(agentLogOrderIds);
+        
+        log.info("代理单位过滤完成:原始ID数: {}, 代理关联ID数: {}, 过滤后剩余ID数: {}", 
+                beforeSize, agentLogOrderIds.size(), result.size());
+        
+        return result;
+    }
+
     /**
      * 处理物流订单关键字段中的代理关键字。
      * 业务规则:当keywords包含“代理”时,将其转换为代理属性过滤(agentFlag=1),并清空keywords。
@@ -3268,6 +3355,19 @@ public class KwtLogisticsConsignmentService {
         req.setKeywords(null);
     }
 
+    /**
+     * 代理单位查询存在时,仅查询代理属性订单。
+     *
+     * @param req 物流订单分页查询请求
+     */
+    static void applyAgentEntCondition(QueryLogisticsOrderReq req) {
+        if (Objects.isNull(req) || org.apache.commons.lang3.StringUtils.isBlank(req.getAgentEntId())) {
+            return;
+        }
+        log.info("检测到代理单位查询条件,转换为代理标识过滤。agentEntId={}", req.getAgentEntId());
+        req.setAgentFlag(Global.YES);
+    }
+
     /**
      * 根据关键字段过滤物流订单ID。
      * 逻辑说明:
@@ -3406,11 +3506,6 @@ public class KwtLogisticsConsignmentService {
                 new KwtLogisticsOrderUnit());
         logisticsOrderResp.setConsignCompanyId(String.valueOf(consignCompany.getId()));
         logisticsOrderResp.setConsignCompanyName(consignCompany.getFirmName());
-        KwtLogisticsOrderUnit carriageCompany = finalLogOrderIdAndUnitTypeKeyAndUnitMap.getOrDefault(kwtLogisticsOrder.getId() +
-                        "-" + NumberConstant.TWO,
-                new KwtLogisticsOrderUnit());
-        logisticsOrderResp.setCarriageCompanyId(String.valueOf(carriageCompany.getId()));
-        logisticsOrderResp.setCarriageCompanyName(carriageCompany.getFirmName());
         logisticsOrderResp.setTradeOrderNo(kwtLogisticsOrder.getTOrderNo());
 
         KwtLogisticsOrderGoods goods = finalLogIdAndGoodsMap.getOrDefault(kwtLogisticsOrder.getId(), new KwtLogisticsOrderGoods());
@@ -3429,6 +3524,13 @@ public class KwtLogisticsConsignmentService {
         logisticsOrderResp.setChargeTypeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(),
                 String.valueOf(kwtLogisticsOrder.getBillingMode())));
         OrderDetailVo orderDetailVo = tradeIdAndOrderDetailVoMap.getOrDefault(kwtLogisticsOrder.getTOrderId(), new OrderDetailVo());
+        setConsignCompanyInfo(logisticsOrderResp, orderDetailVo, consignCompany);
+        setAgentUnitInfo(logisticsOrderResp, orderDetailVo);
+        KwtLogisticsOrderUnit carriageCompany = finalLogOrderIdAndUnitTypeKeyAndUnitMap.getOrDefault(kwtLogisticsOrder.getId() +
+                        "-" + NumberConstant.TWO,
+                new KwtLogisticsOrderUnit());
+        logisticsOrderResp.setCarriageCompanyId(String.valueOf(carriageCompany.getId()));
+        logisticsOrderResp.setCarriageCompanyName(carriageCompany.getFirmName());
         logisticsOrderResp.setAmount((Objects.nonNull(orderDetailVo.getAmount()) ?
                 orderDetailVo.getAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "0.00") + kwtLogisticsOrder.getUnit());
 
@@ -3504,6 +3606,85 @@ public class KwtLogisticsConsignmentService {
         return logisticsOrderResp;
     }
 
+    /**
+     * 设置代理商单位信息到响应对象中。
+     * <p>
+     * 业务逻辑:
+     * 1. 校验贸易订单是否为代理模式(agentFlag=1)且存在有效的代理企业ID。
+     * 2. 如果满足条件,则将代理企业ID和名称填充到物流订单响应对象中。
+     * 3. 如果不满足条件(非代理订单或无代理企业信息),则不执行任何操作,保持响应对象中相关字段为空或默认值。
+     * </p>
+     *
+     * @param logisticsOrderResp 物流订单响应对象,用于设置代理商信息
+     * @param orderDetailVo      贸易订单详情对象,包含代理标识及代理企业信息
+     */
+    private static void setAgentUnitInfo(LogisticsOrderResp logisticsOrderResp, OrderDetailVo orderDetailVo) {
+        // 1. 前置校验:判断是否为代理订单且代理企业ID不为空
+        // Global.YES 通常代表常量 1,表示是/启用
+        if (!Objects.equals(orderDetailVo.getAgentFlag(), Global.YES) || Objects.isNull(orderDetailVo.getAgentEntId())) {
+            log.debug("跳过设置代理单位信息:agentFlag={}, agentEntId={}", 
+                    orderDetailVo.getAgentFlag(), orderDetailVo.getAgentEntId());
+            return;
+        }
+
+        // 2. 设置代理企业ID
+        logisticsOrderResp.setAgentEntId(String.valueOf(orderDetailVo.getAgentEntId()));
+        
+        // 3. 设置代理企业名称
+        logisticsOrderResp.setAgentFirmName(orderDetailVo.getAgentFirmName());
+        
+        log.debug("成功设置代理单位信息:agentEntId={}, agentFirmName={}", 
+                orderDetailVo.getAgentEntId(), orderDetailVo.getAgentFirmName());
+    }
+
+    /**
+     * 设置托运单位(发货方)信息到响应对象中。
+     * <p>
+     * 业务逻辑优先级:
+     * 1. 优先从贸易订单详情(OrderDetailVo)中获取托运单位信息。
+     *    - 如果订单标记为代理订单(agentFlag=1)且存在代理企业ID,则使用代理企业信息作为托运方。
+     *    - 否则,使用供应商企业信息作为托运方。
+     * 2. 如果贸易订单详情中未获取到有效的企业ID,则降级使用物流订单单位表中的备用数据(fallbackConsignUnit)。
+     * </p>
+     *
+     * @param logisticsOrderResp 物流订单响应对象,用于设置最终展示的托运单位信息
+     * @param orderDetailVo      贸易订单详情对象,包含代理商、供应商等企业基础信息
+     * @param fallbackConsignUnit 物流订单单位表中的备用托运单位记录,作为兜底数据源
+     */
+    private static void setConsignCompanyInfo(LogisticsOrderResp logisticsOrderResp, OrderDetailVo orderDetailVo,
+                                              KwtLogisticsOrderUnit fallbackConsignUnit) {
+        // 1. 确定托运单位的企业ID
+        // 逻辑:如果是代理模式且有代理企业ID,则取代理企业ID;否则取供应商企业ID
+        Long consignEntId = Objects.equals(orderDetailVo.getAgentFlag(), Global.YES) && Objects.nonNull(orderDetailVo.getAgentEntId())
+                ? orderDetailVo.getAgentEntId()
+                : orderDetailVo.getSupplierEntId();
+
+        // 2. 确定托运单位的企业名称
+        // 逻辑:与上述ID获取逻辑保持一致,确保ID和名称来源相同
+        String consignFirmName = Objects.equals(orderDetailVo.getAgentFlag(), Global.YES) && Objects.nonNull(orderDetailVo.getAgentEntId())
+                ? orderDetailVo.getAgentFirmName()
+                : orderDetailVo.getSupplierFirmName();
+
+        // 3. 校验并设置主要数据源
+        if (Objects.nonNull(consignEntId)) {
+            log.debug("设置托运单位信息-来源贸易订单: entId={}, firmName={}", consignEntId, consignFirmName);
+            logisticsOrderResp.setConsignCompanyId(String.valueOf(consignEntId));
+            logisticsOrderResp.setConsignCompanyName(consignFirmName);
+            return;
+        }
+
+        // 4. 降级处理:使用备用数据源
+        // 当贸易订单中缺失托运单位信息时,使用物流订单关联的单位表数据进行填充,防止前端展示空白
+        if (Objects.nonNull(fallbackConsignUnit)) {
+            log.warn("贸易订单中缺失托运单位信息,使用物流订单单位表备用数据: entId={}, firmName={}", 
+                    fallbackConsignUnit.getEntId(), fallbackConsignUnit.getFirmName());
+            logisticsOrderResp.setConsignCompanyId(String.valueOf(fallbackConsignUnit.getEntId()));
+            logisticsOrderResp.setConsignCompanyName(fallbackConsignUnit.getFirmName());
+        } else {
+            log.error("无法获取托运单位信息:贸易订单无数据且备用单位对象为空");
+        }
+    }
+
     /**
      * 计算贸易订单的剩余可分配量(余量)
      * <p>
@@ -3680,7 +3861,7 @@ public class KwtLogisticsConsignmentService {
         //设置合同信息
         setContractInfo(orderContract, tradeContractResDto, logisticsOrderDetailResp);
         //设置单位信息
-        setUnitInfo(logOrderIdUnitTypeKeyAndUnitMap, logisticsOrder, logisticsOrderDetailResp);
+        setUnitInfo(logOrderIdUnitTypeKeyAndUnitMap, logisticsOrder, orderDetailVo, logisticsOrderDetailResp);
 
         //设置贸易信息
         setGoodsInfo(kwpGoods, logisticsOrder, logisticsOrderDetailResp, orderDetailVo, dictValueAndDictResDtoMap);
@@ -3844,14 +4025,18 @@ public class KwtLogisticsConsignmentService {
         logisticsOrderDetailResp.setGoodsInfoVO(goodsInfoVO);
     }
 
-    private static void setUnitInfo(Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap, KwtLogisticsOrder logisticsOrder, LogisticsOrderDetailResp logisticsOrderDetailResp) {
+    private static void setUnitInfo(Map<String, KwtLogisticsOrderUnit> logOrderIdUnitTypeKeyAndUnitMap, KwtLogisticsOrder logisticsOrder,
+                                    OrderDetailVo orderDetailVo, LogisticsOrderDetailResp logisticsOrderDetailResp) {
         LogisticsOrderDetailResp.UnitInfoVO unitInfoVO = new LogisticsOrderDetailResp.UnitInfoVO();
         KwtLogisticsOrderUnit consignUnit =
                 logOrderIdUnitTypeKeyAndUnitMap.getOrDefault(logisticsOrder.getId() + "-" + NumberConstant.ONE,
                         new KwtLogisticsOrderUnit());
-        unitInfoVO.setConsignUnitId(String.valueOf(consignUnit.getEntId()));
-        unitInfoVO.setConsignUnitName(consignUnit.getFirmName());
-        unitInfoVO.setConsignUnitPhone(consignUnit.getPhone());
+        setConsignUnitInfo(unitInfoVO, orderDetailVo, consignUnit);
+        if (Objects.equals(orderDetailVo.getAgentFlag(), Global.YES) && Objects.nonNull(orderDetailVo.getAgentEntId())) {
+            unitInfoVO.setAgentUnitId(String.valueOf(orderDetailVo.getAgentEntId()));
+            unitInfoVO.setAgentUnitName(orderDetailVo.getAgentFirmName());
+            unitInfoVO.setAgentUnitPhone(orderDetailVo.getAgentPhone());
+        }
         KwtLogisticsOrderUnit carriageUnit =
                 logOrderIdUnitTypeKeyAndUnitMap.getOrDefault(logisticsOrder.getId() + "-" + NumberConstant.TWO,
                         new KwtLogisticsOrderUnit());
@@ -3861,6 +4046,28 @@ public class KwtLogisticsConsignmentService {
         logisticsOrderDetailResp.setUnitInfoVO(unitInfoVO);
     }
 
+    private static void setConsignUnitInfo(LogisticsOrderDetailResp.UnitInfoVO unitInfoVO, OrderDetailVo orderDetailVo,
+                                           KwtLogisticsOrderUnit fallbackConsignUnit) {
+        Long consignEntId = Objects.equals(orderDetailVo.getAgentFlag(), Global.YES) && Objects.nonNull(orderDetailVo.getAgentEntId())
+                ? orderDetailVo.getAgentEntId()
+                : orderDetailVo.getSupplierEntId();
+        String consignFirmName = Objects.equals(orderDetailVo.getAgentFlag(), Global.YES) && Objects.nonNull(orderDetailVo.getAgentEntId())
+                ? orderDetailVo.getAgentFirmName()
+                : orderDetailVo.getSupplierFirmName();
+        String consignPhone = Objects.equals(orderDetailVo.getAgentFlag(), Global.YES) && Objects.nonNull(orderDetailVo.getAgentEntId())
+                ? orderDetailVo.getAgentPhone()
+                : orderDetailVo.getSupplierPhone();
+        if (Objects.nonNull(consignEntId)) {
+            unitInfoVO.setConsignUnitId(String.valueOf(consignEntId));
+            unitInfoVO.setConsignUnitName(consignFirmName);
+            unitInfoVO.setConsignUnitPhone(consignPhone);
+            return;
+        }
+        unitInfoVO.setConsignUnitId(String.valueOf(fallbackConsignUnit.getEntId()));
+        unitInfoVO.setConsignUnitName(fallbackConsignUnit.getFirmName());
+        unitInfoVO.setConsignUnitPhone(fallbackConsignUnit.getPhone());
+    }
+
     private static void setContractInfo(KwtLogisticsOrderContract orderContract, KwcContractLogisticsDto tradeContractResDto, LogisticsOrderDetailResp logisticsOrderDetailResp) {
         LogisticsOrderDetailResp.ContractInfoVO contractInfoVO = new LogisticsOrderDetailResp.ContractInfoVO();
         if (Objects.nonNull(tradeContractResDto)) {

+ 13 - 0
sckw-modules/sckw-transport/src/test/java/com/sckw/transport/service/KwtLogisticsConsignmentServiceTest.java

@@ -39,6 +39,19 @@ public class KwtLogisticsConsignmentServiceTest {
         Assert.assertEquals("煤炭", req.getKeywords());
     }
 
+    /**
+     * 代理单位查询存在时,应自动追加代理属性过滤。
+     */
+    @Test
+    public void applyAgentEntConditionWhenAgentEntIdExists() {
+        QueryLogisticsOrderReq req = new QueryLogisticsOrderReq();
+        req.setAgentEntId("1001");
+
+        KwtLogisticsConsignmentService.applyAgentEntCondition(req);
+
+        Assert.assertEquals(Integer.valueOf(1), req.getAgentFlag());
+    }
+
     /**
      * 无原有物流订单ID范围限制时,关键字段命中的ID作为最终范围。
      */