Procházet zdrojové kódy

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

zxfqwert před 1 týdnem
rodič
revize
acf90eac5c

+ 114 - 42
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/JDLogisticsService.java

@@ -131,23 +131,7 @@ public class JDLogisticsService  implements LogisticsService {
             //产品信息
             com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo productInfo = new com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo();
             productInfo.setProductCode(bizWaybillOrder.getProductCode());
-
-            if (StringUtils.isNotEmpty(bizWaybillOrder.getAddedService())) {
-                JSONObject addedJson = JSON.parseObject(bizWaybillOrder.getAddedService());
-                List<com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo> addedProducts = new ArrayList<>();
-                if (!addedJson.isEmpty()) {
-                    addedJson.keySet().forEach(key -> {
-                        com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo addedProduct = new com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo();
-                        addedProduct.setProductCode(key);
-
-                        addedProduct.setProductAttrs(getProductAttrs(requestDTO.getOrderOrigin(), key, addedJson.getString(key)));
-
-                        addedProducts.add(addedProduct);
-                    });
-                }
-
-                productInfo.setAddedProducts(addedProducts);
-            }
+            productInfo.setAddedProducts(getAddedProducts(requestDTO.getOrderOrigin(), bizWaybillOrder.getAddedService()));
 
 
             //货物信息
@@ -295,40 +279,128 @@ public class JDLogisticsService  implements LogisticsService {
         return orderOrigin;
     }
 
+    // 增值服务配置映射表
+    private static final Map<Integer, Map<String, ProductConfig>> SERVICE_CONFIG_MAP = new HashMap<>();
+    
+    static {
+        // 订单来源为1的配置
+        Map<String, ProductConfig> origin1Config = new HashMap<>();
+        origin1Config.put("isPack", new ProductConfig("ed-a-0002", true));
+        origin1Config.put("guaranteeMoney", new ProductConfig("ed-a-0010", true));
+        origin1Config.put("isReceiptCollect", new ProductConfig("ed-a-0011", false));
+        SERVICE_CONFIG_MAP.put(1, origin1Config);
+        
+        // 订单来源为4的配置
+        Map<String, ProductConfig> origin4Config = new HashMap<>();
+        origin4Config.put("isPack", new ProductConfig("fr-a-0002", true));
+        origin4Config.put("guaranteeMoney", new ProductConfig("fr-a-0007", true));
+        origin4Config.put("isReceiptCollect", new ProductConfig("fr-a-0005", false));
+        SERVICE_CONFIG_MAP.put(4, origin4Config);
+    }
+    
+    /**
+     * 产品配置类
+     */
+    private static class ProductConfig {
+        private final String productCode;
+        private final boolean hasAttrs;
+        
+        public ProductConfig(String productCode, boolean hasAttrs) {
+            this.productCode = productCode;
+            this.hasAttrs = hasAttrs;
+        }
+        
+        public String getProductCode() {
+            return productCode;
+        }
+        
+        public boolean isHasAttrs() {
+            return hasAttrs;
+        }
+    }
+    
     /**
      * 封装增值服务参数
-     * @param addedProductCode
-     * @return
+     * @param orderOrigin 订单来源
+     * @param addedService 增值服务JSON字符串
+     * @return 增值服务产品列表
      */
-    private Map<String, String> getProductAttrs(Integer orderOrigin, String addedProductCode, String value) {
-        if (StringUtils.isBlank(addedProductCode)) {
+    private List<com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo> getAddedProducts(Integer orderOrigin, String addedService) {
+        if (StringUtils.isBlank(addedService)) {
             return null;
         }
+
+        JSONObject addedJson = JSON.parseObject(addedService);
+        List<com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo> addedProducts = new ArrayList<>();
+        
+        // 获取当前订单来源的配置
+        Map<String, ProductConfig> configMap = SERVICE_CONFIG_MAP.get(orderOrigin);
+        if (configMap == null) {
+            return addedProducts;
+        }
+        
+        // 遍历配置中的所有增值服务键
+        for (Map.Entry<String, ProductConfig> entry : configMap.entrySet()) {
+            String serviceKey = entry.getKey();
+            ProductConfig config = entry.getValue();
+            
+            // 检查JSON中是否包含该增值服务
+            if (addedJson.containsKey(serviceKey)) {
+                com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo addedProduct = 
+                    createProductInfo(config.getProductCode(), config.isHasAttrs() ? 
+                        addedJson.getString(serviceKey) : null);
+                addedProducts.add(addedProduct);
+            }
+        }
+
+        return addedProducts;
+    }
+    
+    /**
+     * 创建产品信息对象
+     * @param productCode 产品编码
+     * @param attrValue 属性值(可为空)
+     * @return 产品信息对象
+     */
+    private com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo 
+        createProductInfo(String productCode, String attrValue) {
+        com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo addedProduct = 
+            new com.lop.open.api.sdk.domain.ECAP.CommonCreateOrderApi.commonCreateOrderV1.CommonProductInfo();
+        addedProduct.setProductCode(productCode);
+        
+        // 如果需要设置属性,则添加属性
+        if (attrValue != null) {
+            addedProduct.setProductAttrs(getProductAttrs(productCode, attrValue));
+        }
+        
+        return addedProduct;
+    }
+
+    /**
+     * 获取产品属性
+     * @param productCode 产品编码
+     * @param value 属性值
+     * @return 产品属性映射
+     */
+    private Map<String, String> getProductAttrs(String productCode, String value) {
         Map<String, String> productAttrs = new HashMap<>();
-        if (orderOrigin == 1) {
-            if (addedProductCode.equals("ed-a-0002")) {
+        
+        switch (productCode) {
+            case "ed-a-0002":
+            case "fr-a-0002":
                 productAttrs.put("guaranteeMoney", value);
-                return productAttrs;
-            } else if (addedProductCode.equals("ed-a-0010")) {
+                break;
+            case "ed-a-0010":
                 productAttrs.put("reReceiveMode", "[\"electronic\"]");
                 productAttrs.put("reReceiveType", "[\"electronicStubForm\"]");
-                return productAttrs;
-            } else if (addedProductCode.equals("ed-a-0011")) {
-                productAttrs.put("packagingType", value);
-                return productAttrs;
-            }
-        } else if (orderOrigin == 4) {
-            if (addedProductCode.equals("fr-a-0002")) {
-                productAttrs.put("guaranteeMoney", value);
-                return productAttrs;
-            } else if (addedProductCode.equals("fr-a-0007")) {
-                productAttrs.put("reReceiveMode", value);
-                return productAttrs;
-            } else if (addedProductCode.equals("fr-a-0005")) {
-                productAttrs.put("packagingType", value);
-                return productAttrs;
-            }
+                break;
+            case "fr-a-0007":
+                productAttrs.put("reReceiveMode", "[\"electronic\"]");
+                break;
+            default:
+                return null;
         }
-        return null;
+        
+        return productAttrs;
     }
 }