Ver código fonte

数据按照dc进行转发

lizw 3 anos atrás
pai
commit
560af8649b

+ 103 - 143
soap-gateway/src/main/java/com/galaxis/soap/wms/WMSServiceImpl.java

@@ -8,7 +8,6 @@ import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.core.io.ClassPathResource;
-import org.springframework.util.Assert;
 
 import javax.jws.WebService;
 import javax.xml.namespace.QName;
@@ -16,8 +15,13 @@ import javax.xml.ws.Service;
 import java.io.File;
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.*;
+import java.util.function.BiFunction;
+import java.util.function.Function;
 
 @WebService(serviceName = "WMSService", // 与接口中指定的name一致
         targetNamespace = "http://service.jztd.com", // 与接口中的命名空间一致,一般是接口的包名倒
@@ -27,20 +31,14 @@ import java.util.concurrent.*;
 public class WMSServiceImpl implements WMSService {
     private static final String errorMsg = "当前下传数据中存在多个仓库的业务数据下传失败,请检查数据,一次只能下传一个仓库的业务数据";
 
-    private static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(
-            512,
-            512,
-            1,
-            TimeUnit.SECONDS,
-            new LinkedBlockingQueue<>(4096)
-    );
+    private static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(512, 512, 1, TimeUnit.SECONDS, new LinkedBlockingQueue<>(4096));
 
     private static final String API = "/wms/api";
     // 山西
     private static final String SX = "http://127.0.0.1:8082";
     // 重庆
     private static final String CQ = "http://127.0.0.1:8182";
-//    // 广西
+    //    // 广西
 //    private static final String GX = "http://127.0.0.1:8282";
     // 四川
     private static final String SC = "http://127.0.0.1:8382";
@@ -71,8 +69,8 @@ public class WMSServiceImpl implements WMSService {
         final String wsdl = IOUtils.toString(new ClassPathResource("WMSService.xml").getInputStream(), StandardCharsets.UTF_8);
         final String usrHome = System.getProperty("user.home");
         for (Map.Entry<String, String> entry : WMS_MAPPING.entrySet()) {
-            String bwkey = entry.getKey();
-            String host = entry.getValue();
+            final String bwkey = entry.getKey();
+            final String host = entry.getValue();
             if (StringUtils.isBlank(host)) {
                 continue;
             }
@@ -89,171 +87,133 @@ public class WMSServiceImpl implements WMSService {
         }
     }
 
-    @SneakyThrows
-    @Override
-    public List<DT_KUNNR_IN_RT_01> MT_KUNNR_IN_WMS01(List<DT_KUNNR_IN_01> params) {
-        logs("MT_KUNNR_IN_WMS01", params);
-        List<Future<List<DT_KUNNR_IN_RT_01>>> futureList = new ArrayList<>(SERVICE_MAPPING.size());
-        for (WMSService wmsService : SERVICE_MAPPING.values()) {
-            Future<List<DT_KUNNR_IN_RT_01>> future = EXECUTOR.submit(() -> wmsService.MT_KUNNR_IN_WMS01(params));
-            futureList.add(future);
+    private <P, R> List<R> distribute(final String method, List<P> params, Function<P, String> getBWKEY, BiFunction<WMSService, List<P>, List<R>> execute) {
+        log.info("method={} | params={}", method, params);
+        if (params == null) {
+            params = new ArrayList<>();
+        }
+        // 拆分参数
+        final Map<String, List<P>> paramsMap = new HashMap<>();
+        for (P param : params) {
+            paramsMap.computeIfAbsent(getBWKEY.apply(param), bwkey -> new ArrayList<>()).add(param);
+        }
+        // 分发数据
+        Map<String, Future<List<R>>> futureMap = new HashMap<>(paramsMap.size());
+        for (Map.Entry<String, List<P>> entry : paramsMap.entrySet()) {
+            final String bwkey = entry.getKey();
+            final List<P> list = entry.getValue();
+            final WMSService wmsService = SERVICE_MAPPING.get(bwkey);
+            if (wmsService == null || list == null || list.isEmpty()) {
+                log.error("不能分发数据:method={} | bwkey={} | params={}", method, bwkey, list);
+                continue;
+            }
+            Future<List<R>> future = EXECUTOR.submit(() -> {
+                log.info("分发数据:method={} | bwkey={} | params={}", method, bwkey, list);
+                return execute.apply(wmsService, list);
+            });
+            futureMap.put(bwkey, future);
         }
-        List<DT_KUNNR_IN_RT_01> res = null;
-        for (Future<List<DT_KUNNR_IN_RT_01>> future : futureList) {
-            res = future.get();
+        // 收集返回数据
+        final List<R> res = new ArrayList<>(params.size());
+        for (Map.Entry<String, Future<List<R>>> entry : futureMap.entrySet()) {
+            final String bwkey = entry.getKey();
+            final Future<List<R>> future = entry.getValue();
+            try {
+                res.addAll(future.get());
+            } catch (Exception e) {
+                log.info("分发数据失败:method={} | bwkey={}", method, bwkey, e);
+            }
         }
         return res;
     }
 
-    @SneakyThrows
+    @Override
+    public List<DT_KUNNR_IN_RT_01> MT_KUNNR_IN_WMS01(List<DT_KUNNR_IN_01> params) {
+        return distribute(
+                "MT_KUNNR_IN_WMS01",
+                params,
+                DT_KUNNR_IN_01::getBWKEY,
+                WMSService::MT_KUNNR_IN_WMS01
+        );
+    }
+
     @Override
     public List<DT_KUNNR_IN_RT_02> MT_KUNNR_IN_WMS02(List<DT_KUNNR_IN_02> params) {
-        logs("MT_KUNNR_IN_WMS02", params);
-        List<Future<List<DT_KUNNR_IN_RT_02>>> futureList = new ArrayList<>(SERVICE_MAPPING.size());
-        for (WMSService wmsService : SERVICE_MAPPING.values()) {
-            Future<List<DT_KUNNR_IN_RT_02>> future = EXECUTOR.submit(() -> wmsService.MT_KUNNR_IN_WMS02(params));
-            futureList.add(future);
-        }
-        List<DT_KUNNR_IN_RT_02> res = null;
-        for (Future<List<DT_KUNNR_IN_RT_02>> future : futureList) {
-            res = future.get();
-        }
-        return res;
+        return distribute(
+                "MT_KUNNR_IN_WMS02",
+                params,
+                DT_KUNNR_IN_02::getBWKEY,
+                WMSService::MT_KUNNR_IN_WMS02
+        );
     }
 
-    @SneakyThrows
     @Override
     public List<DT_KUNNR_IN_RT_03> MT_KUNNR_IN_WMS03(List<DT_KUNNR_IN_03> params) {
-        logs("MT_KUNNR_IN_WMS03", params);
-        List<Future<List<DT_KUNNR_IN_RT_03>>> futureList = new ArrayList<>(SERVICE_MAPPING.size());
-        for (WMSService wmsService : SERVICE_MAPPING.values()) {
-            Future<List<DT_KUNNR_IN_RT_03>> future = EXECUTOR.submit(() -> wmsService.MT_KUNNR_IN_WMS03(params));
-            futureList.add(future);
-        }
-        List<DT_KUNNR_IN_RT_03> res = null;
-        for (Future<List<DT_KUNNR_IN_RT_03>> future : futureList) {
-            res = future.get();
-        }
-        return res;
+        return distribute(
+                "MT_KUNNR_IN_WMS03",
+                params,
+                DT_KUNNR_IN_03::getBWKEY,
+                WMSService::MT_KUNNR_IN_WMS03
+        );
     }
 
-    // -------------------------------------------------------------------------------------------
-
     @Override
     public List<DT_KUNNR_IN_RT_04> MT_KUNNR_IN_WMS04(List<DT_KUNNR_IN_04> params) {
-        logs("MT_KUNNR_IN_WMS04", params);
-        Set<String> bwkeySet = new HashSet<>();
-        params.forEach(item -> bwkeySet.add(item.getBWKEY()));
-        Assert.isTrue(bwkeySet.size() <= 1, errorMsg);
-        for (String bwkey : bwkeySet) {
-            if (StringUtils.isBlank(bwkey)) {
-                continue;
-            }
-            WMSService wmsService = SERVICE_MAPPING.get(bwkey);
-            if (wmsService == null) {
-                throw new UnsupportedOperationException("未配置物流中心编码[" + bwkey + "]的服务端映射");
-            }
-            return wmsService.MT_KUNNR_IN_WMS04(params);
-        }
-        return new ArrayList<>();
+        return distribute(
+                "MT_KUNNR_IN_WMS04",
+                params,
+                DT_KUNNR_IN_04::getBWKEY,
+                WMSService::MT_KUNNR_IN_WMS04
+        );
     }
 
     @Override
     public List<DT_KUNNR_IN_RT_06> MT_KUNNR_IN_WMS06(List<DT_KUNNR_IN_06> params) {
-        logs("MT_KUNNR_IN_WMS06", params);
-        Set<String> bwkeySet = new HashSet<>();
-        params.forEach(item -> bwkeySet.add(item.getBWKEY()));
-        Assert.isTrue(bwkeySet.size() <= 1, errorMsg);
-        for (String bwkey : bwkeySet) {
-            if (StringUtils.isBlank(bwkey)) {
-                continue;
-            }
-            WMSService wmsService = SERVICE_MAPPING.get(bwkey);
-            if (wmsService == null) {
-                throw new UnsupportedOperationException("未配置物流中心编码[" + bwkey + "]的服务端映射");
-            }
-            return wmsService.MT_KUNNR_IN_WMS06(params);
-        }
-        return new ArrayList<>();
+        return distribute(
+                "MT_KUNNR_IN_WMS06",
+                params,
+                DT_KUNNR_IN_06::getBWKEY,
+                WMSService::MT_KUNNR_IN_WMS06
+        );
     }
 
     @Override
     public List<DT_KUNNR_IN_RT_08> MT_KUNNR_IN_WMS08(List<DT_KUNNR_IN_08> params) {
-        logs("MT_KUNNR_IN_WMS08", params);
-        Set<String> bwkeySet = new HashSet<>();
-        params.forEach(item -> bwkeySet.add(item.getBWKEY()));
-        Assert.isTrue(bwkeySet.size() <= 1, errorMsg);
-        for (String bwkey : bwkeySet) {
-            if (StringUtils.isBlank(bwkey)) {
-                continue;
-            }
-            WMSService wmsService = SERVICE_MAPPING.get(bwkey);
-            if (wmsService == null) {
-                throw new UnsupportedOperationException("未配置物流中心编码[" + bwkey + "]的服务端映射");
-            }
-            return wmsService.MT_KUNNR_IN_WMS08(params);
-        }
-        return new ArrayList<>();
+        return distribute(
+                "MT_KUNNR_IN_WMS08",
+                params,
+                DT_KUNNR_IN_08::getBWKEY,
+                WMSService::MT_KUNNR_IN_WMS08
+        );
     }
 
     @Override
     public List<DT_KUNNR_IN_RT_09> MT_KUNNR_IN_WMS09(List<DT_KUNNR_IN_09> params) {
-        logs("MT_KUNNR_IN_WMS09", params);
-        Set<String> bwkeySet = new HashSet<>();
-        params.forEach(item -> bwkeySet.add(item.getBWKEY()));
-        Assert.isTrue(bwkeySet.size() <= 1, errorMsg);
-        for (String bwkey : bwkeySet) {
-            if (StringUtils.isBlank(bwkey)) {
-                continue;
-            }
-            WMSService wmsService = SERVICE_MAPPING.get(bwkey);
-            if (wmsService == null) {
-                throw new UnsupportedOperationException("未配置物流中心编码[" + bwkey + "]的服务端映射");
-            }
-            return wmsService.MT_KUNNR_IN_WMS09(params);
-        }
-        return new ArrayList<>();
+        return distribute(
+                "MT_KUNNR_IN_WMS09",
+                params,
+                DT_KUNNR_IN_09::getBWKEY,
+                WMSService::MT_KUNNR_IN_WMS09
+        );
     }
 
     @Override
     public List<DT_KUNNR_IN_RT_14> MT_KUNNR_IN_WMS14(List<DT_KUNNR_IN_14> params) {
-        logs("MT_KUNNR_IN_WMS14", params);
-        Set<String> bwkeySet = new HashSet<>();
-        params.forEach(item -> bwkeySet.add(item.getBWKEY()));
-        Assert.isTrue(bwkeySet.size() <= 1, errorMsg);
-        for (String bwkey : bwkeySet) {
-            if (StringUtils.isBlank(bwkey)) {
-                continue;
-            }
-            WMSService wmsService = SERVICE_MAPPING.get(bwkey);
-            if (wmsService == null) {
-                throw new UnsupportedOperationException("未配置物流中心编码[" + bwkey + "]的服务端映射");
-            }
-            return wmsService.MT_KUNNR_IN_WMS14(params);
-        }
-        return new ArrayList<>();
+        return distribute(
+                "MT_KUNNR_IN_WMS14",
+                params,
+                DT_KUNNR_IN_14::getBWKEY,
+                WMSService::MT_KUNNR_IN_WMS14
+        );
     }
 
     @Override
     public List<DT_KUNNR_IN_RT_10_2> MT_KUNNR_IN_WMS10_2(List<DT_KUNNR_IN_10_2> params) {
-        logs("MT_KUNNR_IN_WMS10_2", params);
-        Set<String> bwkeySet = new HashSet<>();
-        params.forEach(item -> bwkeySet.add(item.getBWKEY()));
-        Assert.isTrue(bwkeySet.size() <= 1, errorMsg);
-        for (String bwkey : bwkeySet) {
-            if (StringUtils.isBlank(bwkey)) {
-                continue;
-            }
-            WMSService wmsService = SERVICE_MAPPING.get(bwkey);
-            if (wmsService == null) {
-                throw new UnsupportedOperationException("未配置物流中心编码[" + bwkey + "]的服务端映射");
-            }
-            return wmsService.MT_KUNNR_IN_WMS10_2(params);
-        }
-        return new ArrayList<>();
-    }
-
-    private void logs(String msg, Object params) {
-        log.info("{} -> {}", msg, params);
+        return distribute(
+                "MT_KUNNR_IN_WMS10_2",
+                params,
+                DT_KUNNR_IN_10_2::getBWKEY,
+                WMSService::MT_KUNNR_IN_WMS10_2
+        );
     }
 }