From f1665083644aaccbaccf8a5352c2c4f161f28645 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期五, 24 十月 2025 11:54:03 +0800
Subject: [PATCH] 111

---
 src/main/java/com/gs/xiaomi/controller/KMController.java |   13 ++++--
 src/main/java/com/gs/xiaomi/service/SoapApiService.java  |   28 ++++++++++---
 src/main/java/com/gs/xiaomi/service/BCS101Service.java   |    2 
 src/main/java/com/gs/xiaomi/service/XM104Service.java    |   39 ++++++++++++++-----
 src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java  |    4 +-
 src/main/java/com/gs/xiaomi/task/ScheduledTasks.java     |    4 +-
 6 files changed, 63 insertions(+), 27 deletions(-)

diff --git a/src/main/java/com/gs/xiaomi/controller/KMController.java b/src/main/java/com/gs/xiaomi/controller/KMController.java
index 7aa0aea..2cf9868 100644
--- a/src/main/java/com/gs/xiaomi/controller/KMController.java
+++ b/src/main/java/com/gs/xiaomi/controller/KMController.java
@@ -3,7 +3,7 @@
 
 import com.gs.xiaomi.config.ResultMessage;
 import com.gs.xiaomi.dto.NumbericalDto;
-import com.gs.xiaomi.service.XM104Service;
+import com.gs.xiaomi.service.Xm104Service;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
@@ -14,7 +14,7 @@
 public class KMController {
 
 
-    private final XM104Service xm104Service;
+    private final Xm104Service xm104Service;
 
     @PostMapping("/manualSynByASN")
     public ResultMessage manualSynByASN(@RequestBody NumbericalDto barcode) {
@@ -24,12 +24,15 @@
         }
 
         try {
-            if (!xm104Service.manualSynchronization(barcode)) {
-                return ResultMessage.error("鍚屾澶辫触");
+            String errorMessage = xm104Service.manualSynchronization(barcode);
+            if (errorMessage != null) {
+                // 鏈夐敊璇俊鎭�,杩斿洖鍏蜂綋鐨勯敊璇�
+                return ResultMessage.error(errorMessage);
             }
             return ResultMessage.ok();
         } catch (Exception e) {
-            return ResultMessage.error(e);
+            // 鎹曡幏鍏朵粬鏈鏈熺殑寮傚父
+            return ResultMessage.error(e.getMessage() != null ? e.getMessage() : "鍚屾澶辫触: 绯荤粺寮傚父");
         }
     }
 
diff --git a/src/main/java/com/gs/xiaomi/service/BCS101Service.java b/src/main/java/com/gs/xiaomi/service/BCS101Service.java
index d7e6eed..11f37ba 100644
--- a/src/main/java/com/gs/xiaomi/service/BCS101Service.java
+++ b/src/main/java/com/gs/xiaomi/service/BCS101Service.java
@@ -12,5 +12,5 @@
 @RequiredArgsConstructor
 public class BCS101Service {
 
-    private static final Logger log = LoggerFactory.getLogger(XM104Service.class);
+    private static final Logger log = LoggerFactory.getLogger(Xm104Service.class);
 }
diff --git a/src/main/java/com/gs/xiaomi/service/SoapApiService.java b/src/main/java/com/gs/xiaomi/service/SoapApiService.java
index e563848..f7285ef 100644
--- a/src/main/java/com/gs/xiaomi/service/SoapApiService.java
+++ b/src/main/java/com/gs/xiaomi/service/SoapApiService.java
@@ -3,6 +3,7 @@
 
 import com.gs.xiaomi.config.DataAcquisitionConfiguration;
 import com.gs.xiaomi.dto.BizDocumentResult;
+import com.gs.xiaomi.dto.SoapApiResponse;
 import com.gs.xiaomi.dto.ZfmWsApiRequest;
 import com.gs.xiaomi.util.SoapXmlBuilder;
 import com.gs.xiaomi.util.X5StringUtils;
@@ -26,7 +27,7 @@
                 .build();
     }
 
-    public BizDocumentResult callAndParse(String url, ZfmWsApiRequest request) throws Exception {
+    public SoapApiResponse<BizDocumentResult> callAndParse(String url, ZfmWsApiRequest request) throws Exception {
         String soapXml = SoapXmlBuilder.build(request);
         Response response = sendRequest(url, soapXml);
 
@@ -34,18 +35,24 @@
             String bodyStr = response.body().string();
 
             String evCode = extractEvCode(bodyStr);
-            if (!"Y".equalsIgnoreCase(evCode)) {
-                throw new RuntimeException("SOAP business failed, EV_CODE: " + evCode);
-            }
-
             String decodedXml = decodeXmlEntities(bodyStr);
 
+            if (!"Y".equalsIgnoreCase(evCode)) {
+                // 浠� decodedXml 涓彁鍙栭敊璇彁绀轰俊鎭�
+                String evMessage = extractEvMessage(decodedXml);
+                return SoapApiResponse.fail(evCode, evMessage != null ? evMessage : "SOAP涓氬姟澶勭悊澶辫触, EV_CODE: " + evCode);
+            }
+
             String innerXml = extractCdata(decodedXml);
-            if (innerXml == null) throw new RuntimeException("No CDATA <document> found in response");
+            if (innerXml == null) {
+                throw new RuntimeException("No CDATA <document> found in response");
+            }
 
             JAXBContext context = JAXBContext.newInstance(BizDocumentResult.class);
             Unmarshaller unmarshaller = context.createUnmarshaller();
-            return (BizDocumentResult) unmarshaller.unmarshal(new StringReader(innerXml));
+            BizDocumentResult result = (BizDocumentResult) unmarshaller.unmarshal(new StringReader(innerXml));
+
+            return SoapApiResponse.success(evCode, result);
         } else {
             throw new RuntimeException("SOAP request failed: " + response.code() + " - " + response.message());
         }
@@ -77,6 +84,13 @@
         return xml.substring(start + 9, end).trim();
     }
 
+    private String extractEvMessage(String xml) {
+        int start = xml.indexOf("<EV_MESSAGE>");
+        int end = xml.indexOf("</EV_MESSAGE>", start);
+        if (start == -1 || end == -1) return null;
+        return xml.substring(start + 12, end).trim();
+    }
+
     private String decodeXmlEntities(String xml) {
         return xml.replace("&#60;", "<")
                 .replace("&#62;", ">")
diff --git a/src/main/java/com/gs/xiaomi/service/XM104Service.java b/src/main/java/com/gs/xiaomi/service/XM104Service.java
index c02b80f..c29ea08 100644
--- a/src/main/java/com/gs/xiaomi/service/XM104Service.java
+++ b/src/main/java/com/gs/xiaomi/service/XM104Service.java
@@ -10,6 +10,7 @@
 import com.gs.xiaomi.config.DataAcquisitionConfiguration;
 import com.gs.xiaomi.dto.*;
 import com.gs.xiaomi.entity.DeliveryDetail;
+import com.gs.xiaomi.dto.SoapApiResponse;
 import com.gs.xiaomi.entity.DeliveryMain;
 import com.gs.xiaomi.entity.LogisticsPackage;
 import com.gs.xiaomi.entity.PackageDetail;
@@ -31,9 +32,9 @@
 @Service
 @Transactional(rollbackFor = Exception.class)
 @RequiredArgsConstructor
-public class XM104Service {
+public class Xm104Service {
 
-    private static final Logger log = LoggerFactory.getLogger(XM104Service.class);
+    private static final Logger log = LoggerFactory.getLogger(Xm104Service.class);
     private final SoapApiService soapApiService;
 
     private final DeliveryMainService deliveryMainService;
@@ -69,7 +70,15 @@
         req.setIvUser(DataAcquisitionConfiguration.IV_USER);
 
         try {
-            BizDocumentResult deliveryNo = getDeliveryNo(req);
+            SoapApiResponse<BizDocumentResult> response = getDeliveryNo(req);
+
+            // 妫�鏌ュ搷搴旀槸鍚︽垚鍔�
+            if (!response.isSuccess()) {
+                log.error("銆愯幏鍙栭�佽揣鍗曞垪琛ㄥけ璐ャ�慐V_CODE: {}, 鎻愮ず淇℃伅: {}", response.getEvCode(), response.getMessage());
+                throw new RuntimeException("鑾峰彇閫佽揣鍗曞垪琛ㄥけ璐�: " + response.getMessage());
+            }
+
+            BizDocumentResult deliveryNo = response.getData();
 
             if (CollUtil.isEmpty(deliveryNo.getEtHeaders())) {
                 log.info("銆怋izDocumentResult銆戣繑鍥炲垪琛ㄤ负绌猴紝璺宠繃澶勭悊");
@@ -91,7 +100,16 @@
                 req.setIvInfo(doc);
 
                 try {
-                    BizDocumentResult result = getDeliveryNo(req);
+                    SoapApiResponse<BizDocumentResult> detailResponse = getDeliveryNo(req);
+
+                    // 妫�鏌ュ搷搴旀槸鍚︽垚鍔�
+                    if (!detailResponse.isSuccess()) {
+                        log.error("銆愯幏鍙栭�佽揣鍗曡鎯呭け璐ャ�戦�佽揣鍗�: {}, EV_CODE: {}, 鎻愮ず淇℃伅: {}",
+                                etHeader.getZzasn(), detailResponse.getEvCode(), detailResponse.getMessage());
+                        throw new RuntimeException("鑾峰彇閫佽揣鍗曡鎯呭け璐�: " + detailResponse.getMessage());
+                    }
+
+                    BizDocumentResult result = detailResponse.getData();
 
                     if (result == null) {
                         log.info("銆怋izDocumentResult銆戣幏鍙栭�佽揣鍗曡鎯呬俊鎭负绌猴紝璺宠繃澶勭悊");
@@ -116,11 +134,11 @@
         }
     }
 
-    private BizDocumentResult getDeliveryNo(ZfmWsApiRequest request) throws Exception {
+    private SoapApiResponse<BizDocumentResult> getDeliveryNo(ZfmWsApiRequest request) throws Exception {
 
-        BizDocumentResult bizDocumentResult = soapApiService.callAndParse(DataAcquisitionConfiguration.XM104_URL, request);
+        SoapApiResponse<BizDocumentResult> response = soapApiService.callAndParse(DataAcquisitionConfiguration.XM104_URL, request);
 
-        return bizDocumentResult;
+        return response;
     }
 
     private <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
@@ -212,7 +230,7 @@
         });
     }
 
-    public boolean manualSynchronization(NumbericalDto numbericalDto) {
+    public String manualSynchronization(NumbericalDto numbericalDto) {
         try {
             String[] asns = numbericalDto.getAsn().split(",");
             for (String asn : asns) {
@@ -221,10 +239,11 @@
                 doc.setZzasn(asn);
                 getXM104(doc);
             }
-            return true;
+            return null; // 杩斿洖null琛ㄧず鎴愬姛
         } catch (Exception e) {
             log.error("銆愭墜鍔ㄨ鍙朅SN寮傚父銆� 寮傚父: {}", e.getMessage(), e);
-            return false;
+            // 杩斿洖鍏蜂綋鐨勯敊璇俊鎭�
+            return e.getMessage() != null ? e.getMessage() : "鍚屾澶辫触: 鏈煡閿欒";
         }
     }
 
diff --git a/src/main/java/com/gs/xiaomi/task/ScheduledTasks.java b/src/main/java/com/gs/xiaomi/task/ScheduledTasks.java
index 8122b84..7d49140 100644
--- a/src/main/java/com/gs/xiaomi/task/ScheduledTasks.java
+++ b/src/main/java/com/gs/xiaomi/task/ScheduledTasks.java
@@ -1,7 +1,7 @@
 package com.gs.xiaomi.task;
 
 
-import com.gs.xiaomi.service.XM104Service;
+import com.gs.xiaomi.service.Xm104Service;
 import lombok.RequiredArgsConstructor;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -13,7 +13,7 @@
 public class ScheduledTasks {
 
 
-    private final XM104Service xm104Service;
+    private final Xm104Service xm104Service;
 
     /**
      * 姣忎簲鍒嗛挓鎵ц涓�娆�
diff --git a/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java b/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java
index 9c48a48..bfbb38d 100644
--- a/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java
+++ b/src/test/java/com/gs/xiaomi/XiaomiApplicationTests.java
@@ -4,7 +4,7 @@
 import com.gs.xiaomi.dto.BCS101Request;
 import com.gs.xiaomi.dto.NumbericalDto;
 import com.gs.xiaomi.service.BCS101ApiService;
-import com.gs.xiaomi.service.XM104Service;
+import com.gs.xiaomi.service.Xm104Service;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -13,7 +13,7 @@
 class XiaomiApplicationTests {
 
     @Autowired
-    private XM104Service xm104Service;
+    private Xm104Service xm104Service;
 
     @Autowired
     private BCS101ApiService bcs101ApiService;

--
Gitblit v1.9.3