Преглед изворни кода

提交修改修改物流订单代理商

chenxiaofei пре 2 часа
родитељ
комит
d570128138

+ 5 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/TradeContractResDto.java

@@ -92,4 +92,9 @@ public class TradeContractResDto implements Serializable {
      * 计量方式
      */
     private Integer measurementWay;
+
+    /**
+     * 是否代理属性:0-否,1-是。
+     */
+    private Integer agentFlag;
 }

+ 21 - 30
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -2320,13 +2320,12 @@ public class KwoTradeOrderService {
      * <p>
      * 逻辑说明:
      * 1. 校验贸易合同ID是否为空。
-     * 2. 调用远程服务查询该合同下的所有单位信息。
-     * 3. 筛选出类型为“供应方”(unitType="1")的单位,并获取其企业ID。
-     * 4. 根据供应方企业ID,进一步查询该企业是否具备“代理”属性。
+     * 2. 查询贸易合同自身的代理属性标识。
+     * 3. 贸易订单代理属性跟随贸易合同标识,不再根据合同企业类型二次判断。
      *
      * @param tradeContractId 贸易合同ID
      * @return 代理属性标识:1-是代理,0-非代理
-     * @throws BusinessException 当合同ID为空、未找到供应单位或查询过程异常时抛出
+     * @throws BusinessException 当合同ID为空、合同不存在或查询过程异常时抛出
      */
     private Integer queryOrderAgentFlag(Long tradeContractId) {
         // 参数校验:贸易合同ID不能为空
@@ -2335,33 +2334,15 @@ public class KwoTradeOrderService {
         }
 
         try {
-            // 记录开始查询日志
-            log.debug("开始查询贸易合同代理属性,tradeContractId={}", tradeContractId);
-
-            // 1. 调用远程服务获取合同关联的单位列表
-            List<TradeContractUnitDto> unitList = remoteContractService.queryContractUnitByContractId(tradeContractId);
-
-            // 2. 从单位列表中筛选出供应方(unitType="1")的企业ID
-            Long supplyEntId = Optional.ofNullable(unitList)
-                    .orElseGet(Collections::emptyList)
-                    .stream()
-                    .filter(Objects::nonNull)
-                    // 过滤出单位类型为供应方的记录 (假设 "1" 代表供应方)
-                    .filter(item -> StrUtil.equals("1", item.getUnitType()))
-                    .map(TradeContractUnitDto::getEntId)
-                    .filter(Objects::nonNull)
-                    .findFirst()
-                    .orElseThrow(() -> {
-                        log.warn("贸易合同中未找到有效的供应单位,tradeContractId={}", tradeContractId);
-                        return new BusinessException("贸易合同供应单位不存在");
-                    });
-
-            log.debug("找到供应单位ID,supplyEntId={},准备查询代理属性", supplyEntId);
-
-            // 3. 根据供应方企业ID查询其是否具备代理属性
-            Integer agentFlag = querySupplyAgentFlag(supplyEntId);
+            log.debug("开始查询贸易合同代理标识,tradeContractId={}", tradeContractId);
+            TradeContractResDto tradeContract = remoteContractService.queryTradeContract(tradeContractId, null);
+            if (Objects.isNull(tradeContract)) {
+                log.warn("贸易合同不存在,tradeContractId={}", tradeContractId);
+                throw new BusinessException("贸易合同不存在");
+            }
+            Integer agentFlag = normalizeContractAgentFlag(tradeContract.getAgentFlag());
             
-            log.debug("贸易合同代理属性查询完成,tradeContractId={}, agentFlag={}", tradeContractId, agentFlag);
+            log.debug("贸易合同代理标识查询完成,tradeContractId={}, agentFlag={}", tradeContractId, agentFlag);
             return agentFlag;
 
         } catch (Exception e) {
@@ -2371,6 +2352,16 @@ public class KwoTradeOrderService {
         }
     }
 
+    /**
+     * 归一化贸易合同代理标识。
+     *
+     * @param agentFlag 贸易合同代理标识
+     * @return 1-代理,0-非代理
+     */
+    static Integer normalizeContractAgentFlag(Integer agentFlag) {
+        return Objects.equals(agentFlag, Global.YES) ? Global.YES : Global.NO;
+    }
+
 
     /**
      * 查询供应单位企业类型,判断是否包含代理属性。

+ 10 - 0
sckw-modules/sckw-order/src/test/java/com/sckw/order/serivce/KwoTradeOrderServiceTest.java

@@ -136,4 +136,14 @@ public class KwoTradeOrderServiceTest {
 
         Assert.assertEquals(Integer.valueOf(1), dto.getAgentFlag());
     }
+
+    /**
+     * 贸易订单代理属性应跟随贸易合同代理标识。
+     */
+    @Test
+    public void normalizeContractAgentFlagOnlyYesMeansAgent() {
+        Assert.assertEquals(Integer.valueOf(1), KwoTradeOrderService.normalizeContractAgentFlag(1));
+        Assert.assertEquals(Integer.valueOf(0), KwoTradeOrderService.normalizeContractAgentFlag(0));
+        Assert.assertEquals(Integer.valueOf(0), KwoTradeOrderService.normalizeContractAgentFlag(null));
+    }
 }

+ 70 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -3432,10 +3432,80 @@ public class KwtLogisticsConsignmentService {
             keywordLogOrderIds.addAll(goodsOrderIds);
             log.debug("通过商品名称匹配到 {} 个订单", goodsOrderIds.size());
         }
+
+        // 3. 根据贸易订单代理商名称模糊查询
+        Set<Long> agentOrderIds = queryLogisticsOrderIdsByAgentFirmName(keywords);
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(agentOrderIds)) {
+            keywordLogOrderIds.addAll(agentOrderIds);
+            log.debug("通过贸易订单代理商名称匹配到 {} 个物流订单", agentOrderIds.size());
+        }
         
         return keywordLogOrderIds;
     }
 
+    /**
+     * 根据贸易订单代理商名称模糊查询物流订单ID。
+     *
+     * @param keywords 代理商名称关键字
+     * @return 命中的物流订单ID集合
+     */
+    private Set<Long> queryLogisticsOrderIdsByAgentFirmName(String keywords) {
+        if (org.apache.commons.lang3.StringUtils.isBlank(keywords)) {
+            return Sets.newHashSet();
+        }
+        try {
+            List<OrderUnitInfoDetailVO> orderUnits = tradeOrderInfoService.queryOrderUnitInfByEntName(keywords);
+            if (org.apache.commons.collections4.CollectionUtils.isEmpty(orderUnits)) {
+                return Sets.newHashSet();
+            }
+
+            Set<Long> tradeOrderIds = orderUnits.stream()
+                    .filter(Objects::nonNull)
+                    .filter(unit -> Objects.equals(unit.getUnitType(), String.valueOf(NumberConstant.TWO)))
+                    .map(OrderUnitInfoDetailVO::getTOrderId)
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toSet());
+            if (org.apache.commons.collections4.CollectionUtils.isEmpty(tradeOrderIds)) {
+                return Sets.newHashSet();
+            }
+
+            List<OrderDetailVo> tradeOrderDetails = tradeOrderInfoService.queryByTradeOrderIds(tradeOrderIds);
+            Set<Long> agentTradeOrderIds = extractAgentTradeOrderIdsByAgentName(tradeOrderDetails, keywords);
+            if (org.apache.commons.collections4.CollectionUtils.isEmpty(agentTradeOrderIds)) {
+                return Sets.newHashSet();
+            }
+
+            return logisticsOrderRepository.queryByTradeOrderIds(agentTradeOrderIds).stream()
+                    .map(KwtLogisticsOrder::getId)
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toSet());
+        } catch (Exception e) {
+            log.warn("通过代理商名称关键字查询物流订单失败,keywords={}", keywords, e);
+            return Sets.newHashSet();
+        }
+    }
+
+    /**
+     * 从贸易订单详情中过滤代理商名称命中的代理订单ID。
+     *
+     * @param tradeOrderDetails 贸易订单详情集合
+     * @param keywords          代理商名称关键字
+     * @return 代理商名称命中的贸易订单ID集合
+     */
+    static Set<Long> extractAgentTradeOrderIdsByAgentName(List<OrderDetailVo> tradeOrderDetails, String keywords) {
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(tradeOrderDetails)
+                || org.apache.commons.lang3.StringUtils.isBlank(keywords)) {
+            return Sets.newHashSet();
+        }
+        return tradeOrderDetails.stream()
+                .filter(Objects::nonNull)
+                .filter(order -> Objects.equals(order.getAgentFlag(), Global.YES))
+                .filter(order -> org.apache.commons.lang3.StringUtils.contains(order.getAgentFirmName(), keywords))
+                .map(OrderDetailVo::getId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+    }
+
     /**
      * 合并关键字段命中的物流订单ID。
      * 合并策略:

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

@@ -1,9 +1,11 @@
 package com.sckw.transport.service;
 
+import com.sckw.order.api.model.OrderDetailVo;
 import com.sckw.transport.model.param.QueryLogisticsOrderReq;
 import org.junit.Assert;
 import org.junit.Test;
 
+import java.util.List;
 import java.util.Set;
 
 /**
@@ -84,4 +86,30 @@ public class KwtLogisticsConsignmentServiceTest {
 
         Assert.assertTrue(result.isEmpty());
     }
+
+    /**
+     * 代理商名称关键字只应命中代理订单。
+     */
+    @Test
+    public void extractAgentTradeOrderIdsByAgentNameOnlyMatchesAgentOrders() {
+        OrderDetailVo agentOrder = new OrderDetailVo();
+        agentOrder.setId(1001L);
+        agentOrder.setAgentFlag(1);
+        agentOrder.setAgentFirmName("测试代理商");
+
+        OrderDetailVo normalOrder = new OrderDetailVo();
+        normalOrder.setId(1002L);
+        normalOrder.setAgentFlag(0);
+        normalOrder.setAgentFirmName("测试代理商");
+
+        OrderDetailVo otherAgentOrder = new OrderDetailVo();
+        otherAgentOrder.setId(1003L);
+        otherAgentOrder.setAgentFlag(1);
+        otherAgentOrder.setAgentFirmName("其他单位");
+
+        Set<Long> result = KwtLogisticsConsignmentService.extractAgentTradeOrderIdsByAgentName(
+                List.of(agentOrder, normalOrder, otherAgentOrder), "代理商");
+
+        Assert.assertEquals(Set.of(1001L), result);
+    }
 }