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/service/XM104Service.java | 54 +++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 43 insertions(+), 11 deletions(-)
diff --git a/src/main/java/com/gs/xiaomi/service/XM104Service.java b/src/main/java/com/gs/xiaomi/service/XM104Service.java
index 1fd4385..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;
@@ -22,13 +23,18 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
@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;
@@ -64,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銆戣繑鍥炲垪琛ㄤ负绌猴紝璺宠繃澶勭悊");
@@ -75,7 +89,9 @@
//鑾峰彇鎵�鏈夌殑ASN鍙�
List<EtHeader> etHeaders = deliveryNo.getEtHeaders();
- etHeaders.forEach(etHeader -> {
+ List<EtHeader> collect = etHeaders.stream().filter(distinctByKey(EtHeader::getZzasn)).collect(Collectors.toList());
+
+ collect.forEach(etHeader -> {
log.info("1.鑾峰彇鍒伴�佽揣鍗曞彿: {}", etHeader.getZzasn());
@@ -84,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銆戣幏鍙栭�佽揣鍗曡鎯呬俊鎭负绌猴紝璺宠繃澶勭悊");
@@ -109,11 +134,16 @@
}
}
- 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) {
+ Map<Object, Boolean> seen = new ConcurrentHashMap<>();
+ return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
private void setDeliveryMain(BizDocumentResult result) {
@@ -196,10 +226,11 @@
}
+ deliveryMainService.callPdaReceiptBtn("閫佽揣鍗曠鏀禰BTNOK[PL017[" + etHeader.getZzasn(), "");
});
}
- public boolean manualSynchronization(NumbericalDto numbericalDto) {
+ public String manualSynchronization(NumbericalDto numbericalDto) {
try {
String[] asns = numbericalDto.getAsn().split(",");
for (String asn : asns) {
@@ -208,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() : "鍚屾澶辫触: 鏈煡閿欒";
}
}
--
Gitblit v1.9.3