From 0c2bb6236abf11a654a9c99d2c9cdba2fee5b227 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期五, 08 五月 2026 12:19:26 +0800
Subject: [PATCH] 重发优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CloudWmsNotifyLogServiceImpl.java |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CloudWmsNotifySchedule.java          |   23 +++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/CloudWmsReportServiceImpl.java        |   56 +++++++++++++++++++++------
 3 files changed, 66 insertions(+), 15 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/CloudWmsReportServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/CloudWmsReportServiceImpl.java
index fa6f91e..17116cf 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/CloudWmsReportServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/CloudWmsReportServiceImpl.java
@@ -12,6 +12,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -31,6 +32,11 @@
     private static final String DEFAULT_CLOUD_ORG_NO = "1";
     /** 浜戜粨鍥為锛氶�氱煡鍗� inWarehouseNo / outWarehouseNo 涓虹┖鏃剁殑榛樿浠撶紪鐮� */
     private static final String DEFAULT_CLOUD_WH_NO = "101";
+    /** 涓� CloudWmsErpFeignClient.stockTransferCompleted 璺緞涓�鑷� */
+    private static final String PATH_STOCK_TRANSFER_COMPLETED = "/dapilc/restful/service/ilcwmsplus/ICusStockService/stockTransferCompleted";
+
+    @Value("${platform.erp.base-url:http://127.0.0.1:8080}")
+    private String cloudWmsErpBaseUrl;
 
     @Autowired
     private RemotesInfoProperties erpApi;
@@ -58,10 +64,14 @@
             log.warn("ErpApi(浜戜粨WMS) 鏈厤缃� host/base-url锛岃烦杩� 9.1 鍏�/鍑哄簱缁撴灉涓婃姤锛岃鍗曪細{}", param.getOrderNo());
             return stubWithoutUpstream("浜戜粨鍦板潃鏈厤缃紝鏈疄闄呬笂鎶�");
         }
-        boolean inbound = param.getInbound() == null || Boolean.TRUE.equals(param.getInbound());
+        if (param.getInbound() == null) {
+            return resultMap(400, "inbound 涓嶈兘涓虹┖", null);
+        }
+        boolean inbound = param.getInbound();
         DapIlcwmsCompletionRequest req = new DapIlcwmsCompletionRequest()
                 .setData(Collections.singletonList(buildInOutLine(param, inbound)));
-        logOutboundPayload("IN_OUT_RESULT", inbound ? "stockInCompleted" : "stockOutCompleted", req);
+        String path = inbound ? erpApi.getApi().getStockInCompletedPath() : erpApi.getApi().getStockOutCompletedPath();
+        logOutboundPayload("IN_OUT_RESULT", inbound ? "stockInCompleted" : "stockOutCompleted", buildCloudWmsUrl(path), req);
         Map<String, Object> raw = inbound
                 ? cloudWmsErpFeignClient.cusInventoryCompletionReport(req)
                 : cloudWmsErpFeignClient.cusOutboundCompletionReport(req);
@@ -77,11 +87,15 @@
             log.warn("ErpApi(浜戜粨WMS) 鏈厤缃� host/base-url锛岃烦杩� 9.1 鍏ュ嚭搴撳悎骞朵笂鎶�");
             return stubWithoutUpstream("浜戜粨鍦板潃鏈厤缃紝鏈疄闄呬笂鎶�");
         }
-        InOutResultReportParam first = lines.get(0);
-        boolean inbound = first.getInbound() == null || Boolean.TRUE.equals(first.getInbound());
         for (InOutResultReportParam param : lines) {
-            boolean rowIn = param.getInbound() == null || Boolean.TRUE.equals(param.getInbound());
-            if (rowIn != inbound) {
+            if (param.getInbound() == null) {
+                return resultMap(400, "inbound 涓嶈兘涓虹┖", null);
+            }
+        }
+        InOutResultReportParam first = lines.get(0);
+        boolean inbound = first.getInbound();
+        for (InOutResultReportParam param : lines) {
+            if (param.getInbound() != inbound) {
                 return resultMap(400, "鍚堝苟涓婃姤椤诲悓涓哄叆搴撴垨鍚屼负鍑哄簱", null);
             }
         }
@@ -90,7 +104,8 @@
             data.add(buildInOutLine(param, inbound));
         }
         DapIlcwmsCompletionRequest req = new DapIlcwmsCompletionRequest().setData(data);
-        logOutboundPayload("IN_OUT_RESULT_BATCH", inbound ? "stockInCompleted" : "stockOutCompleted", req);
+        String path = inbound ? erpApi.getApi().getStockInCompletedPath() : erpApi.getApi().getStockOutCompletedPath();
+        logOutboundPayload("IN_OUT_RESULT_BATCH", inbound ? "stockInCompleted" : "stockOutCompleted", buildCloudWmsUrl(path), req);
         Map<String, Object> raw = inbound
                 ? cloudWmsErpFeignClient.cusInventoryCompletionReport(req)
                 : cloudWmsErpFeignClient.cusOutboundCompletionReport(req);
@@ -124,7 +139,8 @@
         } else {
             return resultMap(400, "涓嶆敮鎸佺殑 changeType锛�" + changeType, null);
         }
-        logOutboundPayload("INVENTORY_ADJUST", changeType == 3 ? "stockTransferCompleted" : "reportInventoryAdjust", req);
+        String adjPath = changeType == 3 ? PATH_STOCK_TRANSFER_COMPLETED : erpApi.getApi().getInventoryAdjustPath();
+        logOutboundPayload("INVENTORY_ADJUST", changeType == 3 ? "stockTransferCompleted" : "reportInventoryAdjust", buildCloudWmsUrl(adjPath), req);
         Map<String, Object> raw = changeType == 3
                 ? cloudWmsErpFeignClient.stockTransferCompleted(req)
                 : cloudWmsErpFeignClient.reportInventoryAdjust(req);
@@ -309,13 +325,27 @@
         return map;
     }
 
-    private void logOutboundPayload(String reportType, String endpoint, DapIlcwmsCompletionRequest req) {
+    private String buildCloudWmsUrl(String path) {
+        String root = cloudWmsErpBaseUrl != null ? cloudWmsErpBaseUrl.trim() : "";
+        if (root.endsWith("/")) {
+            root = root.substring(0, root.length() - 1);
+        }
+        if (StringUtils.isBlank(path)) {
+            return root;
+        }
+        if (!path.startsWith("/")) {
+            path = "/" + path;
+        }
+        return root + path;
+    }
+
+    private void logOutboundPayload(String reportType, String endpoint, String requestUrl, DapIlcwmsCompletionRequest req) {
         try {
-            log.info("浜戜粨鐪熷疄璇锋眰鎶ユ枃锛宺eportType={}锛宔ndpoint={}锛宲ayload={}",
-                    reportType, endpoint, objectMapper.writeValueAsString(req));
+            log.info("浜戜粨鐪熷疄璇锋眰鎶ユ枃锛宺eportType={}锛宔ndpoint={}锛寀rl={}锛宲ayload={}",
+                    reportType, endpoint, requestUrl, objectMapper.writeValueAsString(req));
         } catch (Exception e) {
-            log.warn("浜戜粨鐪熷疄璇锋眰鎶ユ枃搴忓垪鍖栧け璐ワ紝reportType={}锛宔ndpoint={}锛歿}",
-                    reportType, endpoint, e.getMessage());
+            log.warn("浜戜粨鐪熷疄璇锋眰鎶ユ枃搴忓垪鍖栧け璐ワ紝reportType={}锛宔ndpoint={}锛寀rl={}锛歿}",
+                    reportType, endpoint, requestUrl, e.getMessage());
         }
     }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CloudWmsNotifySchedule.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CloudWmsNotifySchedule.java
index 875b320..ce8ec98 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CloudWmsNotifySchedule.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CloudWmsNotifySchedule.java
@@ -249,7 +249,11 @@
         List<InOutResultReportParam> lines = new ArrayList<>();
         try {
             for (CloudWmsNotifyLog row : group) {
-                lines.addAll(cloudWmsNotifyLogService.parseInOutLinesFromRequestBody(row.getRequestBody()));
+                List<InOutResultReportParam> sub = cloudWmsNotifyLogService.parseInOutLinesFromRequestBody(row.getRequestBody());
+                for (InOutResultReportParam line : sub) {
+                    applyInboundFromNotifyLogRow(row, line);
+                }
+                lines.addAll(sub);
             }
         } catch (IOException e) {
             String msg = "鍙嶅簭鍒楀寲澶辫触: " + e.getMessage();
@@ -292,6 +296,17 @@
                 int nextRetry = (row.getRetryCount() == null ? 0 : row.getRetryCount()) + 1;
                 setFailResult(row, mergedBody, "璇锋眰寮傚父: " + e.getMessage(), nextRetry, now, row.getMaxRetryCount());
             }
+        }
+    }
+
+    /** 浠ヨ〃瀛楁 inbound_flag 涓哄噯锛岄伩鍏� request_body 涓庤惤搴撲笉涓�鑷存椂璇皟 stockInCompleted */
+    private static void applyInboundFromNotifyLogRow(CloudWmsNotifyLog row, InOutResultReportParam param) {
+        if (row == null || param == null) {
+            return;
+        }
+        Integer flag = row.getInboundFlag();
+        if (flag != null) {
+            param.setInbound(flag == 1);
         }
     }
 
@@ -346,9 +361,15 @@
                 Map<String, Object> res;
                 if (root.has("lines") && root.get("lines").isArray()) {
                     InOutResultBatchPayload batch = objectMapper.readValue(requestBody, InOutResultBatchPayload.class);
+                    if (batch.getLines() != null) {
+                        for (InOutResultReportParam line : batch.getLines()) {
+                            applyInboundFromNotifyLogRow(logRecord, line);
+                        }
+                    }
                     res = cloudWmsReportService.reportInOutResults(batch.getLines());
                 } else {
                     InOutResultReportParam param = objectMapper.readValue(requestBody, InOutResultReportParam.class);
+                    applyInboundFromNotifyLogRow(logRecord, param);
                     res = cloudWmsReportService.reportInOutResult(param);
                 }
                 updateAfterNotify(logRecord, requestBody, res, nextRetry, now, effectiveMaxRetry);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CloudWmsNotifyLogServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CloudWmsNotifyLogServiceImpl.java
index 7f4e5a7..d70ef81 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CloudWmsNotifyLogServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CloudWmsNotifyLogServiceImpl.java
@@ -306,7 +306,7 @@
                 return null;
             }
             String wh = textNode(first, "wareHouseId");
-            boolean inbound = !first.has("inbound") || first.get("inbound").isNull() || first.get("inbound").asBoolean();
+            boolean inbound = first.has("inbound") && !first.get("inbound").isNull() && first.get("inbound").asBoolean();
             return orderNo + "\t" + inbound + "\t" + StringUtils.defaultString(wh);
         } catch (Exception e) {
             return null;

--
Gitblit v1.9.1