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