From 7c1b786bbac066decb40ffa2fda8d752efd91f32 Mon Sep 17 00:00:00 2001
From: lty <124567>
Date: 星期三, 25 三月 2026 16:06:39 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java | 374 +++++++++++++++++++++++++++++++++--------------------
1 files changed, 231 insertions(+), 143 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index 783b114..c03e695 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -23,6 +23,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
+import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
import com.alibaba.fastjson.JSON;
@@ -677,7 +678,7 @@
// 妯℃嫙璋冪敤浠撳簱1鎺ュ彛
private String syncToWarehouse1(ErpMat mat) {
log.info("Calling Warehouse 1 API for mat: {}", mat.getMatNr());
- return callMatSyncApi(mat, "http://localhost:8081");
+ return callMatSyncApi(mat, "http://localhost:8888");
}
// 妯℃嫙璋冪敤浠撳簱2鎺ュ彛
@@ -752,9 +753,84 @@
return "鎺ュ彛璋冪敤寮傚父锛�" + e.getMessage();
}
}
+ @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
+ public void processOneOrder(OrderDto dto) {
+ if (dto == null) {
+ throw new CoolException("璁㈠崟鍙傛暟涓嶅畬鏁�");
+ }
+
+ ErpOrder order = new ErpOrder();
+ order.setOrderNo(dto.getOrderNo());
+ order.setOrderType(dto.getOrderType());
+ order.setWkType(dto.getWkType());
+ order.setBusinessTime(dto.getBusinessTime());
+ order.setCreateTime(dto.getCreateTime());
+ order.setWarehouseId(dto.getWareHouseId());
+ order.setOperateType(dto.getOperateType());
+ order.setSendStatus(dto.getSendStatus() != null ? dto.getSendStatus() : 0);
+
+ List<ErpOrderDetl> detls = dto.getOrderItems();
+
+ // ===== 鍙傛暟鏍¢獙 =====
+ if (Cools.isEmpty(order.getOrderNo()) || order.getOrderType() == null
+ || Cools.isEmpty(order.getWkType()) || order.getBusinessTime() == null
+ || order.getCreateTime() == null || Cools.isEmpty(order.getWarehouseId())) {
+ throw new CoolException("璁㈠崟鍙傛暟涓嶅畬鏁�");
+ }
+
+ if (Cools.isEmpty(detls)) {
+ throw new CoolException("璁㈠崟鏄庣粏涓虹┖");
+ }
+
+ // ===== 璋冨閮ㄦ帴鍙� =====
+ String syncError = null;
+ String whId = order.getWarehouseId();
+ Integer orderType = order.getOrderType();
+
+ if (!Cools.isEmpty(whId)) {
+ if ("WH01".equals(whId)) {
+ syncError = syncOrderToWarehouse1(order, detls, orderType);
+ } else if ("WH2".equals(whId)) {
+ syncError = syncOrderToWarehouse2(order, detls, orderType);
+ } else if ("WH3".equals(whId)) {
+ syncError = syncOrderToWarehouse3(order, detls, orderType);
+ } else {
+ throw new CoolException("鏈壘鍒板搴斾粨搴撶紪鍙�");
+ }
+ }
+
+ if (syncError != null) {
+ throw new CoolException(syncError);
+ }
+
+ // ===== 鎻掑叆涓昏〃 =====
+ if (!erpOrderService.insert(order)) {
+ throw new CoolException("璁㈠崟鎻掑叆澶辫触");
+ }
+
+ if (order.getId() == null) {
+ throw new CoolException("璁㈠崟鎻掑叆澶辫触锛屾湭杩斿洖orderId");
+ }
+
+ // ===== 鎻掑叆鏄庣粏锛堣繖閲屽紓甯镐細瑙﹀彂鍥炴粴锛�=====
+ for (ErpOrderDetl detl : detls) {
+ if (detl == null || Cools.isEmpty(detl.getLineId())
+ || Cools.isEmpty(detl.getMatNr())
+ || detl.getAnfme() == null) {
+ throw new CoolException("鏄庣粏鍙傛暟涓嶅畬鏁�");
+ }
+
+ detl.setOrderId(order.getId());
+
+ if (!erpOrderDetlService.insert(detl)) {
+ throw new CoolException("璁㈠崟鏄庣粏鎻掑叆澶辫触");
+ }
+ }
+ }
@Override
public Map<String, Object> addErpOrder(List<OrderDto> orders) {
+
if (Cools.isEmpty(orders)) {
Map<String, Object> res = new HashMap<>();
res.put("result", "FAIL");
@@ -765,79 +841,14 @@
return res;
}
- TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
- transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
-
List<String> successOrders = new ArrayList<>();
List<Map<String, Object>> failOrders = new ArrayList<>();
for (OrderDto dto : orders) {
String orderNo = dto != null ? dto.getOrderNo() : null;
try {
- transactionTemplate.execute(status -> {
- if (dto == null) {
- throw new CoolException("璁㈠崟鍙傛暟涓嶅畬鏁�");
- }
- ErpOrder order = new ErpOrder();
- order.setOrderNo(dto.getOrderNo());
- order.setOrderType(dto.getOrderType());
- order.setWkType(dto.getWkType());
- order.setBusinessTime(dto.getBusinessTime());
- order.setCreateTime(dto.getCreateTime());
- order.setWarehouseId(dto.getWareHouseId());
- order.setOperateType(dto.getOperateType());
- order.setSendStatus(dto.getSendStatus() != null ? dto.getSendStatus() : 0);
-
- List<ErpOrderDetl> detls = dto.getOrderItems();
-
- if (Cools.isEmpty(order.getOrderNo()) || order.getOrderType() == null
- || Cools.isEmpty(order.getWkType()) || order.getBusinessTime() == null || order.getCreateTime() == null
- || Cools.isEmpty(order.getWarehouseId())) {
- throw new CoolException("璁㈠崟鍙傛暟涓嶅畬鏁�");
- }
- if (Cools.isEmpty(detls)) {
- throw new CoolException("璁㈠崟鏄庣粏涓虹┖");
- }
-
- String syncError = null;
- String whId = order.getWarehouseId();
- Integer orderType = order.getOrderType();
-
- if (!Cools.isEmpty(whId)) {
- if ("WH01".equals(whId)) {
- syncError = syncOrderToWarehouse1(order, detls, orderType);
- } else if ("WH2".equals(whId)) {
- syncError = syncOrderToWarehouse2(order, detls, orderType);
- } else if ("WH3".equals(whId)) {
- syncError = syncOrderToWarehouse3(order, detls, orderType);
- } else {
- throw new CoolException("鏈壘鍒板搴斾粨搴撶紪鍙�");
- }
- }
-
- if (syncError != null) {
- throw new CoolException(syncError);
- }
-
- if (!erpOrderService.insert(order)) {
- throw new CoolException("璁㈠崟鎻掑叆澶辫触");
- }
- if (order.getId() == null) {
- throw new CoolException("璁㈠崟鎻掑叆澶辫触锛屾湭杩斿洖orderId");
- }
-
- for (ErpOrderDetl detl : detls) {
- if (detl == null || Cools.isEmpty(detl.getLineId()) || Cools.isEmpty(detl.getMatNr())
- || Cools.isEmpty(detl.getMakTx()) || detl.getAnfme() == null) {
- throw new CoolException("鏄庣粏鍙傛暟涓嶅畬鏁�");
- }
- detl.setOrderId(order.getId());
- if (!erpOrderDetlService.insert(detl)) {
- throw new CoolException("璁㈠崟鏄庣粏鎻掑叆澶辫触");
- }
- }
- return null;
- });
+ // 猸� 璋冪敤鐙珛浜嬪姟鏂规硶
+ processOneOrder(dto);
successOrders.add(orderNo);
} catch (Exception e) {
Map<String, Object> fail = new HashMap<>();
@@ -853,6 +864,7 @@
res.put("successCount", successOrders.size());
res.put("failCount", failOrders.size());
res.put("result", failOrders.isEmpty() ? "SUCCESS" : (successOrders.isEmpty() ? "FAIL" : "PART_SUCCESS"));
+
return res;
}
@@ -864,8 +876,8 @@
List<String> whIds = new ArrayList<>();
if (Cools.isEmpty(wareHouseId)) {
whIds.add("WH01");
- whIds.add("WH02");
- whIds.add("WH03");
+// whIds.add("WH02");
+// whIds.add("WH03");
} else {
whIds.add(wareHouseId);
}
@@ -894,8 +906,8 @@
List<String> whIds = new ArrayList<>();
if (Cools.isEmpty(wareHouseId)) {
whIds.add("WH01");
- whIds.add("WH02");
- whIds.add("WH03");
+// whIds.add("WH02");
+// whIds.add("WH03");
} else {
whIds.add(wareHouseId);
}
@@ -922,7 +934,7 @@
}
String wh = wareHouseId.trim();
if ("WH01".equalsIgnoreCase(wh) || "WH1".equalsIgnoreCase(wh)) {
- return "http://localhost:8081";
+ return "http://localhost:8888";
}
if ("WH02".equalsIgnoreCase(wh) || "WH2".equalsIgnoreCase(wh)) {
return "http://localhost:8080";
@@ -934,48 +946,80 @@
}
private List<Map<String, Object>> callMesInventoryApi(String baseUrl, String path, Map<String, Object> payload) throws IOException {
- String json = JSON.toJSONString(payload == null ? new HashMap<>() : payload);
- Map<String, Object> headers = new HashMap<>();
- headers.put("appkey", "ea1f0459efc02a79f046f982767939ae");
- String response = new HttpHandler.Builder()
- .setHeaders(headers)
- .setUri(baseUrl)
- .setPath(path)
- .setJson(json)
- .build()
- .doPost();
- if (Cools.isEmpty(response)) {
- throw new CoolException("鎺ュ彛鏃犲搷搴�");
- }
- JSONObject jsonResponse = JSON.parseObject(response);
- if (jsonResponse == null) {
- throw new CoolException("鎺ュ彛鍝嶅簲鏍煎紡閿欒");
- }
- Integer code = jsonResponse.getInteger("code");
- if (code != null && (code == 0 || code == 200)) {
- Object data = jsonResponse.get("data");
- if (data == null) {
- return new ArrayList<>();
+ String url = baseUrl + path;
+ String requestJson = JSON.toJSONString(payload == null ? new HashMap<>() : payload);
+
+ try {
+
+ Map<String, Object> headers = new HashMap<>();
+ headers.put("appkey", "ea1f0459efc02a79f046f982767939ae");
+
+ String response = new HttpHandler.Builder()
+ .setHeaders(headers)
+ .setUri(baseUrl)
+ .setPath(path)
+ .setJson(requestJson)
+ .build()
+ .doPost();
+
+ // ===== 鏃犲搷搴� =====
+ if (Cools.isEmpty(response)) {
+ callApiLogSave(null, url, "鎺ュ彛鏃犲搷搴�", false);
+ throw new CoolException("鎺ュ彛鏃犲搷搴�");
}
- if (data instanceof List) {
- return JSON.parseObject(JSON.toJSONString(data), List.class);
+
+ JSONObject jsonResponse = JSON.parseObject(response);
+ if (jsonResponse == null) {
+ callApiLogSave(null, url, "鎺ュ彛鍝嶅簲鏍煎紡閿欒", false);
+ throw new CoolException("鎺ュ彛鍝嶅簲鏍煎紡閿欒");
}
- List<Map<String, Object>> list = new ArrayList<>();
- Map<String, Object> one = JSON.parseObject(JSON.toJSONString(data), Map.class);
- if (one != null) {
- list.add(one);
+
+ Integer code = jsonResponse.getInteger("code");
+
+ if (code != null && (code == 0 || code == 200)) {
+
+ // 鉁� 鎴愬姛鏃ュ織
+ callApiDetlLogSave("搴撳瓨鏄庣粏鏌ヨ", url, requestJson, response, true); Object data = jsonResponse.get("data");
+
+ if (data == null) {
+ return new ArrayList<>();
+ }
+
+ if (data instanceof List) {
+ return JSON.parseObject(JSON.toJSONString(data), List.class);
+ }
+
+ List<Map<String, Object>> list = new ArrayList<>();
+ Map<String, Object> one = JSON.parseObject(JSON.toJSONString(data), Map.class);
+ if (one != null) {
+ list.add(one);
+ }
+ return list;
+
+ } else {
+
+ String msg = jsonResponse.getString("msg");
+ String err = !Cools.isEmpty(msg) ? msg : "鏈煡閿欒锛宑ode=" + code;
+
+ // 鉂� 澶辫触鏃ュ織
+ callApiDetlLogSave("搴撳瓨鏄庣粏鏌ヨ", url, requestJson, response, false);
+ throw new CoolException(err);
}
- return list;
+
+ } catch (Exception e) {
+
+ log.error("callMesInventoryApi error", e);
+
+ // 鉂� 寮傚父鏃ュ織
+ callApiDetlLogSave("搴撳瓨鏄庣粏鏌ヨ", url, requestJson, e.getMessage(), false); throw e;
}
- String msg = jsonResponse.getString("msg");
- throw new CoolException(!Cools.isEmpty(msg) ? msg : "鏈煡閿欒锛宑ode=" + code);
}
// 妯℃嫙璋冪敤浠撳簱1鎺ュ彛
private String syncOrderToWarehouse1(ErpOrder order, List<ErpOrderDetl> details, Integer orderType) {
log.info("Calling Warehouse 1 API for order: {}", order.getOrderNo());
- return callOrderSyncApi(order, details, orderType, "http://localhost:8081");
+ return callOrderSyncApi(order, details, orderType, "http://localhost:8888");
}
// 妯℃嫙璋冪敤浠撳簱2鎺ュ彛
@@ -991,66 +1035,66 @@
}
private String callOrderSyncApi(ErpOrder order, List<ErpOrderDetl> details, Integer orderType, String baseUrl) {
+
+ String path = null;
+ String json = null;
+ String url = null;
+
try {
- // 鏍规嵁 orderType 鍒ゆ柇鎺ュ彛璺緞
- // 鍋囪 1=鍑哄簱锛�2=鍏ュ簱锛堣鏍规嵁瀹為檯涓氬姟璋冩暣锛岃繖閲屾寜鐢ㄦ埛鎻忚堪閫昏緫瀹炵幇锛�
- // 鐢ㄦ埛鎻忚堪锛氳嫢鏄叆搴撳崟鍒欒皟鐢╫rder/pakin/default/v1锛岃嫢鏄嚭搴搊rder/pakout/default/v1
- // 鍋囪 orderType 2 涓哄叆搴擄紝1 鎴� 3 涓哄嚭搴擄紙闇�纭 3 璋冩嫧鍗曞睘浜庡摢绫伙紝鏆傚綊涓哄嚭搴撴垨涓嶅鐞嗭級
-
- String path;
- String json;
-
+
+ // ===== 鏋勯�犺姹� =====
if (orderType == 2) {
- // 鍏ュ簱鍗�
path = "/lfdwms/open/asrs/order/pakin/default/v1";
+
OpenOrderPakinParam param = new OpenOrderPakinParam();
param.setOrderNo(order.getOrderNo());
- // 杩欓噷鍙兘闇�瑕佹槧灏� wkType 鍒� orderType 瀛楃涓诧紝鎴栬�呯洿鎺ョ敤
- param.setOrderType(order.getWkType());
+ param.setOrderType(order.getWkType());
param.setOrderTime(DateUtils.convert(new Date(order.getBusinessTime())));
-
+
List<DetlDto> detlDtos = new ArrayList<>();
- if (!Cools.isEmpty(details)) {
- for (ErpOrderDetl d : details) {
- DetlDto dto = new DetlDto();
- dto.setMatnr(d.getMatNr());
- // 濡傛灉鏈� batch 瀛楁鍒欒缃紝OpenOrderPakinParam 鐨� DetlDto 鍙兘闇�瑕佺‘璁ゅ瓧娈�
- dto.setBatch(d.getBatch());
- dto.setAnfme(d.getAnfme() != null ? d.getAnfme().doubleValue() : 0.0);
- // 鍏朵粬瀛楁鏄犲皠...
- detlDtos.add(dto);
- }
+ for (ErpOrderDetl d : details) {
+ DetlDto dto = new DetlDto();
+ dto.setMatnr(d.getMatNr());
+ dto.setBatch(d.getBatch());
+ dto.setAnfme(d.getAnfme() != null ? d.getAnfme().doubleValue() : 0.0);
+ detlDtos.add(dto);
}
param.setOrderDetails(detlDtos);
+
json = JSON.toJSONString(param);
-
+
} else if (orderType == 1 || orderType == 3) {
- // 鍑哄簱鍗�
+
path = "/lfdwms/open/asrs/order/pakout/default/v1";
+
OpenOrderPakoutParam param = new OpenOrderPakoutParam();
param.setOrderNo(order.getOrderNo());
param.setOrderType(order.getWkType());
param.setOrderTime(DateUtils.convert(new Date(order.getBusinessTime())));
- param.setLgort("5006"); // 蹇呭~鏍¢獙瑕佹眰
-
+ param.setLgort("5006");
+
List<DetlDto> detlDtos = new ArrayList<>();
- if (!Cools.isEmpty(details)) {
- for (ErpOrderDetl d : details) {
- DetlDto dto = new DetlDto();
- dto.setMatnr(d.getMatNr());
- dto.setBatch(d.getBatch());
- dto.setAnfme(d.getAnfme() != null ? d.getAnfme().doubleValue() : 0.0);
- detlDtos.add(dto);
- }
+ for (ErpOrderDetl d : details) {
+ DetlDto dto = new DetlDto();
+ dto.setMatnr(d.getMatNr());
+ dto.setBatch(d.getBatch());
+ dto.setAnfme(d.getAnfme() != null ? d.getAnfme().doubleValue() : 0.0);
+ detlDtos.add(dto);
}
param.setOrderDetails(detlDtos);
+
json = JSON.toJSONString(param);
+
} else {
return "鏈煡鐨勮鍗曠被鍨嬶細" + orderType;
}
+ url = baseUrl + path;
+
+ // ===== 璋冩帴鍙� =====
Map<String, Object> headers = new HashMap<>();
headers.put("appkey", "ea1f0459efc02a79f046f982767939ae");
+
String response = new HttpHandler.Builder()
.setHeaders(headers)
.setUri(baseUrl)
@@ -1058,25 +1102,46 @@
.setJson(json)
.build()
.doPost();
-
+
+ // ===== 鍒ょ┖ =====
if (Cools.isEmpty(response)) {
+ callOrderLogSave(order.getOrderNo(), url, json, "鎺ュ彛鏃犲搷搴�", false);
return "鎺ュ彛鏃犲搷搴�";
}
-
+
JSONObject jsonResponse = JSON.parseObject(response);
if (jsonResponse == null) {
+ callOrderLogSave(order.getOrderNo(), url, json, "鍝嶅簲鏍煎紡閿欒", false);
return "鎺ュ彛鍝嶅簲鏍煎紡閿欒";
}
-
+
Integer code = jsonResponse.getInteger("code");
+
if (code != null && (code == 0 || code == 200)) {
+
+ // 鉁� 鎴愬姛鏃ュ織
+ callOrderLogSave(order.getOrderNo(), url, json, response, true);
+
return null;
+
} else {
- return jsonResponse.getString("msg") != null ? jsonResponse.getString("msg") : "鏈煡閿欒锛宑ode=" + code;
+
+ String msg = jsonResponse.getString("msg");
+ String err = msg != null ? msg : "鏈煡閿欒 code=" + code;
+
+ // 鉂� 澶辫触鏃ュ織
+ callOrderLogSave(order.getOrderNo(), url, json, response, false);
+
+ return err;
}
} catch (Exception e) {
+
log.error("Call order sync api error", e);
+
+ // 鉂� 寮傚父鏃ュ織
+ callOrderLogSave(order.getOrderNo(), url, json, e.getMessage(), false);
+
return "鎺ュ彛璋冪敤寮傚父锛�" + e.getMessage();
}
}
@@ -1092,4 +1157,27 @@
bool
);
}
+ public void callOrderLogSave(String orderNo, String url, String request, String response, Boolean success) {
+ apiLogService.save(
+ "璁㈠崟鏂板鎺ュ彛",
+ url,
+ request,
+ null,
+ "璁㈠崟鍙凤細" + orderNo,
+ response,
+ success
+ );
+ }
+ public void callApiDetlLogSave(String bizDesc, String url, String request, String response, Boolean success) {
+ apiLogService.save(
+ bizDesc,
+ url,
+ request,
+ null,
+ null,
+ response,
+ success
+ );
+ }
+
}
--
Gitblit v1.9.1