From dfca73284ec549bf83a2c7d59b37cdcdb44800e0 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期五, 24 十月 2025 13:05:22 +0800
Subject: [PATCH] 111

---
 src/main/java/com/gs/xiaomi/service/XM104Service.java |  125 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 110 insertions(+), 15 deletions(-)

diff --git a/src/main/java/com/gs/xiaomi/service/XM104Service.java b/src/main/java/com/gs/xiaomi/service/XM104Service.java
index 6c15296..dfa014a 100644
--- a/src/main/java/com/gs/xiaomi/service/XM104Service.java
+++ b/src/main/java/com/gs/xiaomi/service/XM104Service.java
@@ -5,9 +5,12 @@
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 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;
@@ -20,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;
@@ -38,24 +46,41 @@
     private final LogisticsPackageService logisticsPackageService;
 
     public void getDb() {
-
         String format = DateUtil.format(new Date(), "yyyy-MM-dd");
+        getXM104Save(format);
+    }
+
+    private void getXM104Save(String format) {
+
+        BizDocument doc = new BizDocument();
+        doc.setBizDate(format);
+        doc.setLifnr(DataAcquisitionConfiguration.LIFNR);
+
+        getXM104(doc);
+    }
+
+    private void getXM104(BizDocument doc) {
 
         ZfmWsApiRequest req = new ZfmWsApiRequest();
         req.setIvCode(DataAcquisitionConfiguration.IV_CODEXM104);
         req.setIvEvent("");
         req.setIvFlag("");
-        BizDocument doc = new BizDocument();
-        doc.setBizDate(format);
-        doc.setLifnr(DataAcquisitionConfiguration.LIFNR);
         req.setIvInfo(doc);
         req.setIvPass(DataAcquisitionConfiguration.getIvPass(DataAcquisitionConfiguration.IV_CODEXM104));
         req.setIvUser(DataAcquisitionConfiguration.IV_USER);
 
         try {
-            BizDocumentResult deliveryNo = getDeliveryNo(req);
+            SoapApiResponse<BizDocumentResult> response = getDeliveryNo(req);
 
-            if (CollUtil.isNotEmpty(deliveryNo.getEtHeaders())) {
+            // 妫�鏌ュ搷搴旀槸鍚︽垚鍔�
+            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銆戣繑鍥炲垪琛ㄤ负绌猴紝璺宠繃澶勭悊");
                 log.info("鑾峰彇鎺ュ彛鍒楄〃杩斿洖: {}", deliveryNo.getEvMessage());
                 return;
@@ -64,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());
 
@@ -73,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銆戣幏鍙栭�佽揣鍗曡鎯呬俊鎭负绌猴紝璺宠繃澶勭悊");
@@ -96,20 +132,48 @@
             log.error("銆愯鍙栧垪琛ㄥ紓甯搞�戝弬鏁�: {} 寮傚父: {}", JSON.toJSONString(req), e.getMessage(), e);
             throw new RuntimeException(e);
         }
-
     }
 
-    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) {
         List<EtHeader> etHeaders = result.getEtHeaders();
 
         etHeaders.forEach(etHeader -> {
+
+            LambdaQueryWrapper<DeliveryMain> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(DeliveryMain::getZzasn, etHeader.getZzasn());
+
+            DeliveryMain one = deliveryMainService.getOne(queryWrapper, false);
+
+            if (one != null) {
+                deliveryMainService.removeById(one.getId());
+
+                LambdaUpdateWrapper<DeliveryDetail> updateWrapper = new LambdaUpdateWrapper<>();
+                updateWrapper.eq(DeliveryDetail::getPid, one.getId());
+                deliveryDetailService.remove(updateWrapper);
+
+                //PackageDetail
+                LambdaUpdateWrapper<PackageDetail> updateWrapper1 = new LambdaUpdateWrapper<>();
+                updateWrapper1.eq(PackageDetail::getPid, one.getId());
+                packageDetailService.remove(updateWrapper1);
+
+                //LogisticsPackage
+                LambdaUpdateWrapper<LogisticsPackage> updateWrapper2 = new LambdaUpdateWrapper<>();
+                updateWrapper2.eq(LogisticsPackage::getPid, one.getId());
+                logisticsPackageService.remove(updateWrapper2);
+            }
+
             DeliveryMain deliveryMain = new DeliveryMain();
 
             BeanUtil.copyProperties(etHeader, deliveryMain);
@@ -162,6 +226,37 @@
 
             }
 
+            deliveryMainService.callPdaReceiptBtn("閫佽揣鍗曠鏀禰BTNOK[PL017[" + etHeader.getZzasn(), "");
         });
     }
-}
\ No newline at end of file
+
+    public String manualSynchronization(NumbericalDto numbericalDto) {
+        try {
+            String[] asns = numbericalDto.getAsn().split(",");
+            for (String asn : asns) {
+                BizDocument doc = new BizDocument();
+                doc.setLifnr(DataAcquisitionConfiguration.LIFNR);
+                doc.setZzasn(asn);
+                getXM104(doc);
+            }
+            return null; // 杩斿洖null琛ㄧず鎴愬姛
+        } catch (Exception e) {
+            log.error("銆愭墜鍔ㄨ鍙朅SN寮傚父銆� 寮傚父: {}", e.getMessage(), e);
+            // 杩斿洖鍏蜂綋鐨勯敊璇俊鎭�
+            return e.getMessage() != null ? e.getMessage() : "鍚屾澶辫触: 鏈煡閿欒";
+        }
+    }
+
+    public boolean manualSynchronizationByDate(NumbericalDto numbericalDto) {
+        try {
+            BizDocument doc = new BizDocument();
+            doc.setLifnr(DataAcquisitionConfiguration.LIFNR);
+            doc.setBizDate(numbericalDto.getDate());
+            getXM104(doc);
+            return true;
+        } catch (Exception e) {
+            log.error("銆愭墜鍔ㄨ鍙朅SN寮傚父銆� 寮傚父: {}", e.getMessage(), e);
+            return false;
+        }
+    }
+}

--
Gitblit v1.9.3