From e23efd75ca74df6b35a0c03b8e8fc0712c9d4544 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期五, 01 五月 2026 15:30:54 +0800
Subject: [PATCH] 多加入参数和修改规则

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/CloudWmsReportServiceImpl.java |  109 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 76 insertions(+), 33 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 8fd8bab..fa6f91e 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
@@ -8,6 +8,7 @@
 import com.vincent.rsf.server.api.feign.CloudWmsErpFeignClient;
 import com.vincent.rsf.server.api.integration.dap.DapIlcwmsResponseNormalizer;
 import com.vincent.rsf.server.api.service.CloudWmsReportService;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,17 +27,24 @@
 @Service
 public class CloudWmsReportServiceImpl implements CloudWmsReportService {
 
+    /** 浜戜粨鍥為锛氶�氱煡鍗� orgNo 涓虹┖鏃剁殑榛樿缁勭粐 */
+    private static final String DEFAULT_CLOUD_ORG_NO = "1";
+    /** 浜戜粨鍥為锛氶�氱煡鍗� inWarehouseNo / outWarehouseNo 涓虹┖鏃剁殑榛樿浠撶紪鐮� */
+    private static final String DEFAULT_CLOUD_WH_NO = "101";
+
     @Autowired
     private RemotesInfoProperties erpApi;
 
     @Autowired
     private CloudWmsErpFeignClient cloudWmsErpFeignClient;
+    @Autowired
+    private ObjectMapper objectMapper;
 
     @Override
     public Map<String, Object> syncMatnrsToCloud(Object body) {
         if (!isCloudWmsConfigured()) {
-            log.warn("ErpApi(浜戜粨WMS) 鏈厤缃� host锛岃烦杩囩墿鏂欏熀纭�淇℃伅鍚屾");
-            return stubSuccess("浜戜粨鍦板潃鏈厤缃紝鏈疄闄呭悓姝�");
+            log.warn("ErpApi(浜戜粨WMS) 鏈厤缃� host/base-url锛岃烦杩囩墿鏂欏熀纭�淇℃伅鍚屾");
+            return stubWithoutUpstream("浜戜粨鍦板潃鏈厤缃紝鏈疄闄呭悓姝�");
         }
         return cloudWmsErpFeignClient.syncMatnrs(body != null ? body : new HashMap<>());
     }
@@ -47,16 +55,42 @@
             return resultMap(400, "鍙傛暟涓嶈兘涓虹┖", null);
         }
         if (!isCloudWmsConfigured()) {
-            log.warn("ErpApi(浜戜粨WMS) 鏈厤缃� host锛岃烦杩� 9.1 鍏�/鍑哄簱缁撴灉涓婃姤锛岃鍗曪細{}", param.getOrderNo());
-            return stubSuccess("浜戜粨鍦板潃鏈厤缃紝鏈疄闄呬笂鎶�");
-        }
-        String err = validateDapBase();
-        if (err != null) {
-            return resultMap(400, err, null);
+            log.warn("ErpApi(浜戜粨WMS) 鏈厤缃� host/base-url锛岃烦杩� 9.1 鍏�/鍑哄簱缁撴灉涓婃姤锛岃鍗曪細{}", param.getOrderNo());
+            return stubWithoutUpstream("浜戜粨鍦板潃鏈厤缃紝鏈疄闄呬笂鎶�");
         }
         boolean inbound = param.getInbound() == null || Boolean.TRUE.equals(param.getInbound());
         DapIlcwmsCompletionRequest req = new DapIlcwmsCompletionRequest()
                 .setData(Collections.singletonList(buildInOutLine(param, inbound)));
+        logOutboundPayload("IN_OUT_RESULT", inbound ? "stockInCompleted" : "stockOutCompleted", req);
+        Map<String, Object> raw = inbound
+                ? cloudWmsErpFeignClient.cusInventoryCompletionReport(req)
+                : cloudWmsErpFeignClient.cusOutboundCompletionReport(req);
+        return DapIlcwmsResponseNormalizer.toNotifyFormat(raw);
+    }
+
+    @Override
+    public Map<String, Object> reportInOutResults(List<InOutResultReportParam> lines) {
+        if (lines == null || lines.isEmpty()) {
+            return resultMap(400, "鏄庣粏涓嶈兘涓虹┖", null);
+        }
+        if (!isCloudWmsConfigured()) {
+            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) {
+                return resultMap(400, "鍚堝苟涓婃姤椤诲悓涓哄叆搴撴垨鍚屼负鍑哄簱", null);
+            }
+        }
+        List<DapIlcwmsCompletionLine> data = new ArrayList<>(lines.size());
+        for (InOutResultReportParam param : lines) {
+            data.add(buildInOutLine(param, inbound));
+        }
+        DapIlcwmsCompletionRequest req = new DapIlcwmsCompletionRequest().setData(data);
+        logOutboundPayload("IN_OUT_RESULT_BATCH", inbound ? "stockInCompleted" : "stockOutCompleted", req);
         Map<String, Object> raw = inbound
                 ? cloudWmsErpFeignClient.cusInventoryCompletionReport(req)
                 : cloudWmsErpFeignClient.cusOutboundCompletionReport(req);
@@ -69,12 +103,8 @@
             return resultMap(400, "鍙傛暟涓嶈兘涓虹┖", null);
         }
         if (!isCloudWmsConfigured()) {
-            log.warn("ErpApi(浜戜粨WMS) 鏈厤缃� host锛岃烦杩� 9.2 搴撳瓨璋冩暣涓婃姤锛岀墿鏂欙細{}", param.getMatNr());
-            return stubSuccess("浜戜粨鍦板潃鏈厤缃紝鏈疄闄呬笂鎶�");
-        }
-        String err = validateDapBase();
-        if (err != null) {
-            return resultMap(400, err, null);
+            log.warn("ErpApi(浜戜粨WMS) 鏈厤缃� host/base-url锛岃烦杩� 9.2 搴撳瓨璋冩暣涓婃姤锛岀墿鏂欙細{}", param.getMatNr());
+            return stubWithoutUpstream("浜戜粨鍦板潃鏈厤缃紝鏈疄闄呬笂鎶�");
         }
         Integer changeType = param.getChangeType();
         if (changeType == null) {
@@ -94,6 +124,7 @@
         } else {
             return resultMap(400, "涓嶆敮鎸佺殑 changeType锛�" + changeType, null);
         }
+        logOutboundPayload("INVENTORY_ADJUST", changeType == 3 ? "stockTransferCompleted" : "reportInventoryAdjust", req);
         Map<String, Object> raw = changeType == 3
                 ? cloudWmsErpFeignClient.stockTransferCompleted(req)
                 : cloudWmsErpFeignClient.reportInventoryAdjust(req);
@@ -103,14 +134,18 @@
     }
 
     private DapIlcwmsCompletionLine buildInOutLine(InOutResultReportParam param, boolean inbound) {
-        RemotesInfoProperties.Dap dap = erpApi.getDap();
         CloudMatnrParts matnrParts = parseCloudMatnr(param.getMatNr());
         String docType = StringUtils.isNotBlank(param.getWkType())
                 ? param.getWkType()
                 : (inbound ? "IN" : "OUT");
-        String unitNo = StringUtils.isNotBlank(param.getUnitNo()) ? param.getUnitNo() : "PCS";
+        String unitNo = StringUtils.isNotBlank(param.getUnitNo()) ? param.getUnitNo().trim() : "PCS";
+        String orgNoLine = StringUtils.isNotBlank(param.getOrgNo()) ? param.getOrgNo().trim() : DEFAULT_CLOUD_ORG_NO;
+        String docWh = StringUtils.trimToNull(param.getDocWarehouseNo());
+        String inWhLine = StringUtils.isNotBlank(param.getInWarehouseNo()) ? param.getInWarehouseNo().trim() : DEFAULT_CLOUD_WH_NO;
+        String outWhLine = StringUtils.isNotBlank(param.getOutWarehouseNo()) ? param.getOutWarehouseNo().trim() : DEFAULT_CLOUD_WH_NO;
         DapIlcwmsCompletionLine line = new DapIlcwmsCompletionLine()
-                .setOrgNo(dap.getOrgNo())
+                .setOrgNo(orgNoLine)
+                .setDocWarehouseNo(docWh)
                 .setDocType(docType)
                 .setDocNo(param.getOrderNo())
                 .setDocSeqNo(StringUtils.isNotBlank(param.getLineId()) ? param.getLineId() : "1")
@@ -121,9 +156,11 @@
                 .setCombinationLotNo(matnrParts.getCombinationLotNo())
                 .setBarcode(matnrParts.getBarcode());
         if (inbound) {
-            line.setInWarehouseNo(param.getWareHouseId()).setInCellNo(param.getLocId());
+            line.setInWarehouseNo(inWhLine).setInCellNo(inWhLine);
+            // line.setInWarehouseNo(inWhLine).setInCellNo(param.getLocId());
         } else {
-            line.setOutWarehouseNo(param.getWareHouseId()).setOutCellNo(param.getLocId());
+            line.setOutWarehouseNo(outWhLine).setOutCellNo(outWhLine);
+            // line.setOutWarehouseNo(outWhLine).setOutCellNo(param.getLocId());
         }
         return line;
     }
@@ -134,7 +171,6 @@
      * @param docSeqOverride 闈炵┖鏃剁敤浣滈」娆★紙绉诲簱绗簩琛岀瓑锛�
      */
     private DapIlcwmsCompletionLine buildAdjustLine(InventoryAdjustReportParam param, boolean fillIn, boolean fillOut, String docSeqOverride) {
-        RemotesInfoProperties.Dap dap = erpApi.getDap();
         String docType = resolveAdjustDocType(param);
         String docNo = StringUtils.isNotBlank(param.getDocNo()) ? param.getDocNo() : "ADJ";
         String docSeq = docSeqOverride != null ? docSeqOverride
@@ -142,7 +178,7 @@
         String unit = StringUtils.isNotBlank(param.getUnitNo()) ? param.getUnitNo() : "PCS";
         CloudMatnrParts matnrParts = parseCloudMatnr(param.getMatNr());
         DapIlcwmsCompletionLine line = new DapIlcwmsCompletionLine()
-                .setOrgNo(dap.getOrgNo())
+                .setOrgNo(DEFAULT_CLOUD_ORG_NO)
                 .setDocType(docType)
                 .setDocNo(docNo)
                 .setDocSeqNo(docSeq)
@@ -249,23 +285,20 @@
         }
     }
 
-    private String validateDapBase() {
-        RemotesInfoProperties.Dap d = erpApi.getDap();
-        if (d == null || StringUtils.isBlank(d.getOrgNo())) {
-            return "鏈厤缃� platform.erp.dap.org-no";
-        }
-        return null;
-    }
-
     private boolean isCloudWmsConfigured() {
         String host = erpApi.getHost();
-        return host != null && !host.trim().isEmpty();
+        if (host != null && !host.trim().isEmpty()) {
+            return true;
+        }
+        String baseUrl = erpApi.getBaseUrl();
+        return baseUrl != null && !baseUrl.trim().isEmpty();
     }
 
-    private Map<String, Object> stubSuccess(String msg) {
+    /** 鏈蛋浜戜粨 HTTP锛宑ode 闈� 200锛岄伩鍏嶈皟搴﹁鍒ゆ垚鍔� */
+    private Map<String, Object> stubWithoutUpstream(String msg) {
         Map<String, Object> data = new HashMap<>();
-        data.put("result", "SUCCESS");
-        return resultMap(200, msg, data);
+        data.put("result", "SKIPPED");
+        return resultMap(503, msg, data);
     }
 
     private Map<String, Object> resultMap(int code, String msg, Map<String, Object> data) {
@@ -275,4 +308,14 @@
         map.put("data", data);
         return map;
     }
+
+    private void logOutboundPayload(String reportType, String endpoint, DapIlcwmsCompletionRequest req) {
+        try {
+            log.info("浜戜粨鐪熷疄璇锋眰鎶ユ枃锛宺eportType={}锛宔ndpoint={}锛宲ayload={}",
+                    reportType, endpoint, objectMapper.writeValueAsString(req));
+        } catch (Exception e) {
+            log.warn("浜戜粨鐪熷疄璇锋眰鎶ユ枃搴忓垪鍖栧け璐ワ紝reportType={}锛宔ndpoint={}锛歿}",
+                    reportType, endpoint, e.getMessage());
+        }
+    }
 }

--
Gitblit v1.9.1