From a73254a4bd802934c50d9acc0ad7aa92ccdcd31b Mon Sep 17 00:00:00 2001
From: lty <876263681@qq.com>
Date: 星期三, 25 三月 2026 17:04:00 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java |  663 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 660 insertions(+), 3 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 5d8970a..aaf9c42 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -11,17 +11,30 @@
 import com.zy.asrs.entity.result.StockVo;
 import com.zy.asrs.mapper.TagMapper;
 import com.zy.asrs.service.*;
+import com.zy.asrs.service.ErpMatService;
+import com.zy.asrs.service.ErpOrderService;
+import com.zy.asrs.service.ErpOrderDetlService;
 import com.zy.asrs.utils.MatUtils;
 import com.zy.common.model.DetlDto;
+import com.zy.common.utils.HttpHandler;
 import com.zy.common.utils.NodeUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 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;
+import com.alibaba.fastjson.JSONObject;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Created by vincent on 2022/4/9
@@ -48,7 +61,16 @@
     private TagService tagService;
     @Autowired
     private TagMapper tagMapper;
-
+    @Autowired
+    private ErpMatService erpMatService;
+    @Autowired
+    private ErpOrderService erpOrderService;
+    @Autowired
+    private ErpOrderDetlService erpOrderDetlService;
+    @Autowired
+    private ApiLogService apiLogService;
+    @Autowired
+    private PlatformTransactionManager transactionManager;
     @Override
     @Transactional
     public void pakinOrderCreate(OpenOrderPakinParam param) {
@@ -519,7 +541,7 @@
                 } else {
                     tagId = tagService.getTop().getId();
                 }
-                mat.sync(param);
+                mat.sync(matParam);
 //            mat.setMatnr(param.getMatnr());
 //            mat.setMaktx(param.getMaktx());
 //            mat.setSpecs(param.getSpecs());
@@ -535,7 +557,7 @@
                     log.info("鍚屾鏂扮墿鏂橻鍟嗗搧缂栧彿锛歿}]", mat.getMatnr());
                 }
             } else {
-                mat.sync(param);
+                mat.sync(matParam);
                 if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr",matParam.getMatnr()))) {
                     throw new CoolException("鏇存柊宸插瓨鍦ㄥ晢鍝佷俊鎭け璐ワ紝璇疯仈绯荤鐞嗗憳");
                 }
@@ -544,4 +566,639 @@
 
     }
 
+    @Override
+    @Transactional
+    public void syncErpMat(List<Map<String, Object>> body) {
+        if (Cools.isEmpty(body)) {
+            return;
+        }
+        int count = 0;
+        for (Map<String, Object> m : body) {
+            Object matNrObj = m.get("matNr");
+            Object makTxObj = m.get("makTx");
+            if (Cools.isEmpty(matNrObj) || Cools.isEmpty(makTxObj)) {
+                continue;
+            }
+            ErpMat erpMat = new ErpMat();
+            erpMat.setMatNr(String.valueOf(matNrObj));
+            erpMat.setMakTx(String.valueOf(makTxObj));
+            Object groupIdObj = m.get("groupId");
+            if (!Cools.isEmpty(groupIdObj)) {
+                erpMat.setGroupId(String.valueOf(groupIdObj));
+            }
+            Object groupNameObj = m.get("groupName");
+            if (!Cools.isEmpty(groupNameObj)) {
+                erpMat.setGroupName(String.valueOf(groupNameObj));
+            }
+            Object specObj = m.get("spec");
+            if (!Cools.isEmpty(specObj)) {
+                erpMat.setSpec(String.valueOf(specObj));
+            }
+            Object modelObj = m.get("model");
+            if (!Cools.isEmpty(modelObj)) {
+                erpMat.setModel(String.valueOf(modelObj));
+            }
+            Object weightObj = m.get("weight");
+            if (!Cools.isEmpty(weightObj)) {
+                Double w = null;
+                if (weightObj instanceof Number) {
+                    w = ((Number) weightObj).doubleValue();
+                } else {
+                    try {
+                        w = Double.valueOf(String.valueOf(weightObj));
+                    } catch (Exception ignored) {}
+                }
+                erpMat.setWeight(w);
+            }
+            Object colorObj = m.get("color");
+            if (!Cools.isEmpty(colorObj)) {
+                erpMat.setColor(String.valueOf(colorObj));
+            }
+            Object sizeObj = m.get("size");
+            if (!Cools.isEmpty(sizeObj)) {
+                erpMat.setSize(String.valueOf(sizeObj));
+            }
+            Object unitObj = m.get("unit");
+            if (!Cools.isEmpty(unitObj)) {
+                erpMat.setUnit(String.valueOf(unitObj));
+            }
+            Object describleObj = m.get("describle");
+            if (!Cools.isEmpty(describleObj)) {
+                erpMat.setDescribe(String.valueOf(describleObj));
+            }
+            Object wareHouseIdObj = m.get("wareHouseId");
+            if (!Cools.isEmpty(wareHouseIdObj)) {
+                erpMat.setWareHouseId(String.valueOf(wareHouseIdObj));
+            }
+            // 璋冪敤澶栭儴鎺ュ彛鏍¢獙
+            String syncError = null;
+            String whId = erpMat.getWareHouseId();
+            if (!Cools.isEmpty(whId)) {
+                if ("WH01".equals(whId)) {
+                    syncError = syncToWarehouse1(erpMat);
+                } else if ("WH2".equals(whId)) {
+                    syncError = syncToWarehouse2(erpMat);
+                } else if ("WH3".equals(whId)) {
+                    syncError = syncToWarehouse3(erpMat);
+                } else {
+                    callApiLogSave(null, null, "鏈壘鍒板搴斾粨搴撶紪鐮侊紒锛�", true);
+                    throw new CoolException("鍚屾澶栭儴鎺ュ彛澶辫触锛屼粨搴揑D锛�" + whId + "锛岄敊璇俊鎭細鏈壘鍒板搴斾粨搴撶紪鍙�"  );
+                }
+            }
+
+            if (syncError != null) {
+                // 濡傛灉鍚屾澶辫触锛屽垯涓嶆彃鍏ユ暟鎹簱锛屾姏寮傚父鍥炴粴鎴栬�呰烦杩囷紙褰撳墠閫昏緫涓烘姏寮傚父锛屽洜涓烘槸浜嬪姟鏁翠綋锛�
+                // 鑻ヨ閮ㄥ垎鎴愬姛锛岄渶瑕佽皟鏁翠簨鍔$瓥鐣ャ�傝繖閲屽亣璁捐姹傚叏閮ㄦ垚鍔熴��
+                throw new CoolException("鍚屾澶栭儴鎺ュ彛澶辫触锛屼粨搴揑D锛�" + whId + "锛岀墿鏂欙細" + erpMat.getMatNr() + "锛岄敊璇俊鎭細" + syncError);
+            }
+
+            Object operateTypeObj = m.get("operateType");
+            if (!Cools.isEmpty(operateTypeObj)) {
+                Integer ot = null;
+                if (operateTypeObj instanceof Number) {
+                    ot = ((Number) operateTypeObj).intValue();
+                } else {
+                    try {
+                        ot = Integer.valueOf(String.valueOf(operateTypeObj));
+                    } catch (Exception ignored) {}
+                }
+                erpMat.setOperateType(ot);
+            }
+            erpMat.setSendStatus(1);
+            boolean ok = erpMatService.insert(erpMat);
+            if (ok) {
+                count++;
+            }
+        }
+        if (count <= 0) {
+            throw new CoolException("鍚屾鐗╂枡澶辫触锛屾棤鏈夋晥鏁版嵁鎻掑叆");
+        }
+    }
+
+    // 妯℃嫙璋冪敤浠撳簱1鎺ュ彛
+    private String syncToWarehouse1(ErpMat mat) {
+        log.info("Calling Warehouse 1 API for mat: {}", mat.getMatNr());
+        return callMatSyncApi(mat, "http://localhost:8888");
+    }
+
+    // 妯℃嫙璋冪敤浠撳簱2鎺ュ彛
+    private String syncToWarehouse2(ErpMat mat) {
+        log.info("Calling Warehouse 2 API for mat: {}", mat.getMatNr());
+        return callMatSyncApi(mat, "http://localhost:8080");
+    }
+
+    // 妯℃嫙璋冪敤浠撳簱3鎺ュ彛
+    private String syncToWarehouse3(ErpMat mat) {
+        log.info("Calling Warehouse 3 API for mat: {}", mat.getMatNr());
+        return callMatSyncApi(mat, "http://localhost:8080");
+    }
+
+    private String callMatSyncApi(ErpMat mat, String baseUrl) {
+        try {
+            // 鏋勯�犺姹傚弬鏁�
+            MatSyncParam param = new MatSyncParam();
+            List<MatSyncParam.MatParam> list = new ArrayList<>();
+            MatSyncParam.MatParam matParam = new MatSyncParam.MatParam();
+            Date now = new Date();
+
+            // 瀛楁鏄犲皠
+            matParam.setMatnr(mat.getMatNr());
+            matParam.setMaktx(mat.getMakTx());
+            matParam.setSpecs(mat.getSpec());
+            matParam.setModel(mat.getModel());
+            matParam.setWeight(mat.getWeight());
+            matParam.setColor(mat.getColor());
+            matParam.setUnit(mat.getUnit());
+            matParam.setMemo(mat.getDescribe());
+            matParam.setGroupCode(mat.getGroupId());
+            matParam.setGroupName(mat.getGroupName());
+            
+            list.add(matParam);
+            param.setMatDetails(list);
+            param.setCreateTime(String.valueOf(now));
+            String path = "/lfdwms/open/asrs/order/matSync/default/v1";
+            String json = JSON.toJSONString(param);
+
+            Map<String, Object> headers = new HashMap<>();
+            headers.put("appkey", "ea1f0459efc02a79f046f982767939ae");
+            // headers.put("x-acgw-identity", "your_identity");
+            String response = new HttpHandler.Builder()
+                    .setHeaders(headers)
+                    .setUri(baseUrl)
+                    .setPath(path)
+                    .setJson(json)
+                    .build()
+                    .doPost();
+            
+            if (Cools.isEmpty(response)) {
+                return "鎺ュ彛鏃犲搷搴�";
+            }
+            
+            JSONObject jsonResponse = JSON.parseObject(response);
+            if (jsonResponse == null) {
+                return "鎺ュ彛鍝嶅簲鏍煎紡閿欒";
+            }
+            
+            // 鏍规嵁瀹為檯杩斿洖缁撴瀯鍒ゆ柇鎴愬姛澶辫触
+            // 鍋囪 code == 0 鎴� 200 涓烘垚鍔�
+            Integer code = jsonResponse.getInteger("code");
+            if (code != null && (code == 0 || code == 200)) {
+                return null; // 鎴愬姛杩斿洖 null
+            } else {
+                return jsonResponse.getString("msg") != null ? jsonResponse.getString("msg") : "鏈煡閿欒锛宑ode=" + code;
+            }
+
+        } catch (Exception e) {
+            log.error("Call sync api error", e);
+            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("璁㈠崟鍙傛暟涓嶅畬鏁达細" +
+                    "orderNo=" + order.getOrderNo() +
+                    "锛宱rderType=" + order.getOrderType() +
+                    "锛寃kType=" + order.getWkType() +
+                    "锛寃arehouseId=" + order.getWarehouseId());
+        }
+
+        if (Cools.isEmpty(detls)) {
+            throw new CoolException("璁㈠崟鏄庣粏涓虹┖锛�" + order.getOrderNo());
+        }
+
+        for (ErpOrderDetl d : detls) {
+            if (d == null || Cools.isEmpty(d.getLineId())
+                    || Cools.isEmpty(d.getMatNr())
+                    || d.getAnfme() == null) {
+                String lineId = d != null ? d.getLineId() : null;
+                String matnr = d != null ? d.getMatNr() : null;
+                throw new CoolException("鏄庣粏鍙傛暟涓嶅畬鏁达細" +
+                        "orderNo=" + order.getOrderNo() +
+                        "锛宭ineId=" + lineId +
+                        "锛宮atnr=" + matnr);
+            }
+        }
+
+        if (!erpOrderService.insert(order)) {
+            throw new CoolException("璁㈠崟鎻掑叆澶辫触锛�" + order.getOrderNo());
+        }
+
+        if (order.getId() == null) {
+            throw new CoolException("璁㈠崟鎻掑叆澶辫触锛屾湭杩斿洖orderId锛�" + order.getOrderNo());
+        }
+
+        for (ErpOrderDetl detl : detls) {
+            detl.setOrderId(order.getId());
+            if (!erpOrderDetlService.insert(detl)) {
+                throw new CoolException("璁㈠崟鏄庣粏鎻掑叆澶辫触锛�" +
+                        "orderNo=" + order.getOrderNo() +
+                        "锛宭ineId=" + detl.getLineId());
+            }
+        }
+
+        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("鏈壘鍒板搴斾粨搴撶紪鍙凤細" +
+                        "orderNo=" + order.getOrderNo() +
+                        "锛寃arehouseId=" + whId);
+            }
+        }
+
+        if (syncError != null) {
+            throw new CoolException("澶栭儴鎺ュ彛鍚屾澶辫触锛�" +
+                    "orderNo=" + order.getOrderNo() +
+                    "锛寃arehouseId=" + whId +
+                    "锛屽師鍥�=" + syncError);
+        }
+    }
+    @Override
+    public Map<String, Object> addErpOrder(List<OrderDto> orders) {
+
+        if (Cools.isEmpty(orders)) {
+            Map<String, Object> res = new HashMap<>();
+            res.put("result", "FAIL");
+            res.put("successOrders", new ArrayList<>());
+            res.put("failOrders", new ArrayList<>());
+            res.put("successCount", 0);
+            res.put("failCount", 0);
+            return res;
+        }
+
+        List<String> successOrders = new ArrayList<>();
+        List<Map<String, Object>> failOrders = new ArrayList<>();
+
+        for (OrderDto dto : orders) {
+            String orderNo = dto != null ? dto.getOrderNo() : null;
+            try {
+                processOneOrder(dto);
+                successOrders.add(orderNo);
+            } catch (Exception e) {
+                Map<String, Object> fail = new HashMap<>();
+                String whId = dto != null ? dto.getWareHouseId() : null;
+                Integer orderType = dto != null ? dto.getOrderType() : null;
+                fail.put("orderNo", orderNo);
+                fail.put("warehouseId", whId);
+                fail.put("orderType", orderType);
+                fail.put("msg", e.getMessage());
+                fail.put("exception", e.getClass().getSimpleName());
+                Throwable cause = e.getCause();
+                if (cause != null && cause != e) {
+                    fail.put("cause", cause.getClass().getSimpleName() + ":" + cause.getMessage());
+                }
+                failOrders.add(fail);
+            }
+        }
+
+        Map<String, Object> res = new HashMap<>();
+        res.put("successOrders", successOrders);
+        res.put("failOrders", failOrders);
+        res.put("successCount", successOrders.size());
+        res.put("failCount", failOrders.size());
+        res.put("result", failOrders.isEmpty() ? "SUCCESS" : (successOrders.isEmpty() ? "FAIL" : "PART_SUCCESS"));
+
+        return res;
+    }
+
+    @Override
+    public List<Map<String, Object>> mesInventoryDetails(Map<String, Object> param) throws IOException {
+        String wareHouseId = param != null ? String.valueOf(param.get("wareHouseId")) : null;
+        if ("null".equalsIgnoreCase(wareHouseId)) wareHouseId = null;
+
+        List<String> whIds = new ArrayList<>();
+        if (Cools.isEmpty(wareHouseId)) {
+            whIds.add("WH01");
+//            whIds.add("WH02");
+//            whIds.add("WH03");
+        } else {
+            whIds.add(wareHouseId);
+        }
+
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (String whId : whIds) {
+            String baseUrl = getWarehouseBaseUrl(whId);
+            if (Cools.isEmpty(baseUrl)) {
+                throw new CoolException("鏈壘鍒板搴斾粨搴撶紪鍙�");
+            }
+            Map<String, Object> payload = param == null ? new HashMap<>() : new HashMap<>(param);
+            payload.put("wareHouseId", whId);
+            List<Map<String, Object>> data = callMesInventoryApi(baseUrl, "/lfdwms/open/asrs/MES/inventory/details", payload);
+            if (!Cools.isEmpty(data)) {
+                result.addAll(data);
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public List<Map<String, Object>> mesInventorySummary(Map<String, Object> param) throws IOException {
+        String wareHouseId = param != null ? String.valueOf(param.get("wareHouseId")) : null;
+        if ("null".equalsIgnoreCase(wareHouseId)) wareHouseId = null;
+
+        List<String> whIds = new ArrayList<>();
+        if (Cools.isEmpty(wareHouseId)) {
+            whIds.add("WH01");
+//            whIds.add("WH02");
+//            whIds.add("WH03");
+        } else {
+            whIds.add(wareHouseId);
+        }
+
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (String whId : whIds) {
+            String baseUrl = getWarehouseBaseUrl(whId);
+            if (Cools.isEmpty(baseUrl)) {
+                throw new CoolException("鏈壘鍒板搴斾粨搴撶紪鍙�");
+            }
+            Map<String, Object> payload = param == null ? new HashMap<>() : new HashMap<>(param);
+            payload.put("wareHouseId", whId);
+            List<Map<String, Object>> data = callMesInventoryApi(baseUrl, "/lfdwms/open/asrs/MES/inventory/summary", payload);
+            if (!Cools.isEmpty(data)) {
+                result.addAll(data);
+            }
+        }
+        return result;
+    }
+
+    private String getWarehouseBaseUrl(String wareHouseId) {
+        if (Cools.isEmpty(wareHouseId)) {
+            return null;
+        }
+        String wh = wareHouseId.trim();
+        if ("WH01".equalsIgnoreCase(wh) || "WH1".equalsIgnoreCase(wh)) {
+            return "http://localhost:8888";
+        }
+        if ("WH02".equalsIgnoreCase(wh) || "WH2".equalsIgnoreCase(wh)) {
+            return "http://localhost:8080";
+        }
+        if ("WH03".equalsIgnoreCase(wh) || "WH3".equalsIgnoreCase(wh)) {
+            return "http://localhost:8080";
+        }
+        return null;
+    }
+
+    private List<Map<String, Object>> callMesInventoryApi(String baseUrl, String path, Map<String, Object> payload) throws IOException {
+
+        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("鎺ュ彛鏃犲搷搴�");
+            }
+
+            JSONObject jsonResponse = JSON.parseObject(response);
+            if (jsonResponse == null) {
+                callApiLogSave(null, url, "鎺ュ彛鍝嶅簲鏍煎紡閿欒", false);
+                throw new CoolException("鎺ュ彛鍝嶅簲鏍煎紡閿欒");
+            }
+
+            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);
+            }
+
+        } catch (Exception e) {
+
+            log.error("callMesInventoryApi error", e);
+
+            // 鉂� 寮傚父鏃ュ織
+            callApiDetlLogSave("搴撳瓨鏄庣粏鏌ヨ", url, requestJson, e.getMessage(), false);            throw e;
+        }
+    }
+
+    // 妯℃嫙璋冪敤浠撳簱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:8888");
+    }
+
+    // 妯℃嫙璋冪敤浠撳簱2鎺ュ彛
+    private String syncOrderToWarehouse2(ErpOrder order, List<ErpOrderDetl> details, Integer orderType) {
+        log.info("Calling Warehouse 2 API for order: {}", order.getOrderNo());
+        return callOrderSyncApi(order, details, orderType, "http://localhost:8080");
+    }
+
+    // 妯℃嫙璋冪敤浠撳簱3鎺ュ彛
+    private String syncOrderToWarehouse3(ErpOrder order, List<ErpOrderDetl> details, Integer orderType) {
+        log.info("Calling Warehouse 3 API for order: {}", order.getOrderNo());
+        return callOrderSyncApi(order, details, orderType, "http://localhost:8080");
+    }
+
+    private String callOrderSyncApi(ErpOrder order, List<ErpOrderDetl> details, Integer orderType, String baseUrl) {
+
+        String path = null;
+        String json = null;
+        String url = null;
+
+        try {
+
+            // ===== 鏋勯�犺姹� =====
+            if (orderType == 2) {
+                path = "/lfdwms/open/asrs/order/pakin/default/v1";
+
+                OpenOrderPakinParam param = new OpenOrderPakinParam();
+                param.setOrderNo(order.getOrderNo());
+                param.setOrderType(order.getWkType());
+                param.setOrderTime(DateUtils.convert(new Date(order.getBusinessTime())));
+
+                List<DetlDto> detlDtos = new ArrayList<>();
+                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");
+
+                List<DetlDto> detlDtos = new ArrayList<>();
+                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)
+                    .setPath(path)
+                    .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 {
+
+                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();
+        }
+    }
+    public void callApiLogSave(Mat mat, String url, String response, Boolean bool) {
+        apiLogService.save(
+                "ERP鍚屾鐗╂枡淇℃伅",
+                url,
+                null,
+                null,
+                "鐗╂枡缂栧彿锛�" + (mat != null ? mat.getMatnr() : null) +
+                        "銆佺墿鏂欏悕绉帮細" + (mat != null ? mat.getMaktx() : null),
+                response,
+                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