From 74feb99b1b4e2eb3706bbb503d07fb087ca39d4a Mon Sep 17 00:00:00 2001
From: wangyi <2946747746@qq.com>
Date: 星期四, 02 四月 2026 15:15:02 +0800
Subject: [PATCH] 出运单增加过滤发货通知单和物流状态

---
 src/utils/healthCheck.js |   89 ++++++++++++++++++++++++++++++++------------
 1 files changed, 64 insertions(+), 25 deletions(-)

diff --git a/src/utils/healthCheck.js b/src/utils/healthCheck.js
index 20ab75d..a873856 100644
--- a/src/utils/healthCheck.js
+++ b/src/utils/healthCheck.js
@@ -13,35 +13,75 @@
 ];
 
 /**
- * 妫�娴嬪崟涓湇鍔″仴搴风姸鎬�
+ * 甯﹁秴鏃舵帶鍒剁殑 fetch 璇锋眰灏佽
+ * @param {string} url 璇锋眰鍦板潃
+ * @param {Object} options fetch 閰嶇疆
+ * @param {number} timeout 瓒呮椂鏃堕棿锛堟绉掞級锛岄粯璁� 3000ms
+ * @returns {Promise<Response>} 璇锋眰鍝嶅簲
+ */
+const fetchWithTimeout = async (url, options = {}, timeout = 3000) => {
+    // 1. 鍒涘缓涓鎺у埗鍣紝鐢ㄤ簬瓒呮椂鍙栨秷璇锋眰
+    const controller = new AbortController();
+    const signal = controller.signal;
+
+    // 2. 瓒呮椂瀹氭椂鍣細鍒版椂闂村悗涓璇锋眰骞舵姏鍑洪敊璇�
+    const timeoutTimer = setTimeout(() => {
+        controller.abort();
+        throw new Error(`璇锋眰瓒呮椂锛�${timeout}ms锛塦);
+    }, timeout);
+
+    try {
+        // 3. 缁戝畾涓淇″彿鍒� fetch 璇锋眰
+        const response = await fetch(url, {
+            ...options,
+            signal, // 鍏抽敭锛氬叧鑱斾腑姝㈡帶鍒跺櫒
+        });
+        clearTimeout(timeoutTimer); // 璇锋眰鎴愬姛锛屾竻闄よ秴鏃跺畾鏃跺櫒
+        return response;
+    } catch (error) {
+        clearTimeout(timeoutTimer); // 鍑洪敊/瓒呮椂锛屾竻闄ゅ畾鏃跺櫒
+        // 鍖哄垎涓閿欒锛堣秴鏃讹級鍜屽叾浠栭敊璇�
+        if (error.name === 'AbortError') {
+            throw new Error(`璇锋眰瓒呮椂锛�${url} 瓒呰繃 ${timeout}ms 鏈搷搴擿);
+        }
+        throw error; // 鎶涘嚭鍏朵粬閿欒锛堝缃戠粶閿欒锛�
+    }
+};
+
+/**
+ * 妫�娴嬪崟涓湇鍔″仴搴风姸鎬侊紙鏂板瓒呮椂鎺у埗锛�
  * @param {Object} service - 鏈嶅姟閰嶇疆锛坆aseUrl + healthPath锛�
  * @returns {Promise<String|null>} 鍙敤鐨� baseUrl锛屽け璐ヨ繑鍥� null
  */
 export const checkServiceHealth = async (service) => {
     const { baseUrl, healthPath } = service;
     if (!baseUrl) return null;
-    return new Promise(async (resolve, reject) => {
-        try {
-            // 鍋ュ悍妫�鏌ヨ姹傦紙瓒呮椂 3 绉掞紝涓嶆惡甯� Token锛岄伩鍏嶆湭鐧诲綍鎷︽埅锛�
-            const response = await fetch(`${baseUrl}${healthPath}`, {
+    
+    try {
+        // 鍋ュ悍妫�鏌ヨ姹傦紙浣跨敤灏佽鐨勫甫瓒呮椂鐨� fetch锛�3绉掕秴鏃讹級
+        const response = await fetchWithTimeout(
+            `${baseUrl}${healthPath}`,
+            {
                 method: "GET",
-                timeout: 3000,
                 headers: {
                     "Content-Type": "application/json",
                 },
-            });
-            if (response.ok) {
-                console.log(`鏈嶅姟 ${service.name} 鍋ュ悍锛屽湴鍧�锛�${baseUrl}`);
-                resolve(baseUrl)
-                // return baseUrl;
-            }
-        } catch (error) {
-            console.error(`鏈嶅姟 ${service.name} 杩炴帴澶辫触锛歚, error.message);
-            resolve(null)
-            // return null;
-        }
-    })
+            },
+            3000 // 鏄庣‘閰嶇疆 3 绉掕秴鏃�
+        );
 
+        if (response.ok) {
+            console.log(`鏈嶅姟 ${service.name} 鍋ュ悍锛屽湴鍧�锛�${baseUrl}`);
+            return baseUrl;
+        } else {
+            // 鍝嶅簲鐘舵�佺爜闈� 2xx锛岃涓烘湇鍔′笉鍙敤
+            console.warn(`鏈嶅姟 ${service.name} 鍝嶅簲寮傚父锛岀姸鎬佺爜锛�${response.status}`);
+            return null;
+        }
+    } catch (error) {
+        console.error(`鏈嶅姟 ${service.name} 杩炴帴澶辫触锛歚, error.message);
+        return null;
+    }
 };
 
 /**
@@ -52,21 +92,20 @@
     // 骞惰妫�娴嬫墍鏈夋湇鍔★紙鎻愰珮鏁堢巼锛�
     try {
         const healthCheckPromises = serviceList.map((item) => {
-            return checkServiceHealth(item)
+            return checkServiceHealth(item);
         });
-        const healthResult = await Promise.all(healthCheckPromises); // 妫�娴嬪埌鍋ュ悍鐨勯摼鎺ュ氨绔嬪埢杩斿洖
+        const healthResult = await Promise.all(healthCheckPromises);
         // 绛涢�夊彲鐢ㄧ殑 baseUrl
-        console.log(healthResult)
-        const availableBaseUrl = healthResult.filter((item)=>item!=null)[0]
+        console.log("鍋ュ悍妫�鏌ョ粨鏋滐細", healthResult);
+        const availableBaseUrl = healthResult.filter((item) => item != null)[0];
 
         if (availableBaseUrl) {
             return availableBaseUrl;
         } else {
-            // 鎵�鏈夋湇鍔″潎涓嶅彲鐢紝鎶涘嚭寮傚父锛堝悗缁湪鍒濆鍖栨椂鎹曡幏锛�
+            // 鎵�鏈夋湇鍔″潎涓嶅彲鐢紝鎶涘嚭寮傚父
             throw new Error("鎵�鏈夋湇鍔″仴搴锋鏌ュけ璐ワ紝璇锋鏌ユ湇鍔$姸鎬佹垨缃戠粶閰嶇疆");
         }
-    }catch(err) {
+    } catch (err) {
         throw err;
     }
-    
 };
\ No newline at end of file

--
Gitblit v1.9.1