From ca0a0dffd906162c49c7cefed3846a1bc1b3e6cc Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期一, 09 三月 2026 09:29:16 +0800
Subject: [PATCH] feat: 添加轮询服务类支持多出库口负载均衡

---
 Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Core/RoundRobinService.cs |   42 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Core/RoundRobinService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Core/RoundRobinService.cs
new file mode 100644
index 0000000..24d8c58
--- /dev/null
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_Core/Core/RoundRobinService.cs
@@ -0,0 +1,42 @@
+using System.Collections.Concurrent;
+
+namespace WIDESEA_Core.Core
+{
+    /// <summary>
+    /// 杞鏈嶅姟 - 绾跨▼瀹夊叏鐨勫湴鍧�杞閫夋嫨
+    /// </summary>
+    public class RoundRobinService
+    {
+        /// <summary>
+        /// 杞璁℃暟鍣� - key: 宸烽亾鍓嶇紑, value: 褰撳墠绱㈠紩
+        /// </summary>
+        private readonly ConcurrentDictionary<string, int> _counters = new();
+
+        /// <summary>
+        /// 鑾峰彇涓嬩竴涓湴鍧�锛堣疆璇級
+        /// </summary>
+        /// <param name="key">宸烽亾鍓嶇紑鏍囪瘑</param>
+        /// <param name="addresses">鍊欓�夊湴鍧�鍒楄〃</param>
+        /// <returns>閫変腑鐨勭洰鏍囧湴鍧�</returns>
+        public string GetNextAddress(string key, List<string> addresses)
+        {
+            // 绌哄垪琛ㄦ鏌�
+            if (addresses == null || addresses.Count == 0)
+                return "10080";
+
+            // 鍗曚釜鍦板潃锛岀洿鎺ヨ繑鍥�
+            if (addresses.Count == 1)
+                return addresses[0];
+
+            // 澶氫釜鍦板潃锛屼娇鐢ㄨ疆璇㈤�夋嫨
+            // AddOrUpdate 鏄師瀛愭搷浣滐紝绾跨▼瀹夊叏
+            int index = _counters.AddOrUpdate(
+                key,
+                0,                                      // 棣栨浣跨敤锛屼粠 0 寮�濮�
+                (k, oldValue) => (oldValue + 1) % addresses.Count  // 杞锛氶�掑鍚庡彇妯�
+            );
+
+            return addresses[index];
+        }
+    }
+}

--
Gitblit v1.9.3