From 4b22bcec7226c8a05c27f3c839630a31e1f38ef8 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 27 三月 2026 14:00:31 +0800
Subject: [PATCH] docs: 添加 RouterService 逻辑修复与新方法设计文档

---
 Code/WCS/WIDESEAWCS_Server/docs/superpowers/specs/2026-03-27-router-service-audit-design.md |  104 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 104 insertions(+), 0 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/docs/superpowers/specs/2026-03-27-router-service-audit-design.md b/Code/WCS/WIDESEAWCS_Server/docs/superpowers/specs/2026-03-27-router-service-audit-design.md
new file mode 100644
index 0000000..e0c9072
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Server/docs/superpowers/specs/2026-03-27-router-service-audit-design.md
@@ -0,0 +1,104 @@
+# RouterService 閫昏緫淇涓庢柊鏂规硶璁捐
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:writing-plans to create implementation plan.
+
+**Goal:** 淇 `RouterService` 涓凡鍙戠幇鐨勯�昏緫閿欒锛屾柊澧� 5 涓矾鐢辨煡璇�/绠$悊鏂规硶锛屽苟鏇存柊鎺ュ彛灞傘��
+
+**Architecture:** 鍦ㄧ幇鏈� `RouterService` 鍩虹涓婃柊澧炵紦瀛樼鐞嗘柟娉曞拰璺敱鏌ヨ澧炲己鏂规硶锛屼繚鎸佺幇鏈夌紦瀛樻灦鏋勪笉鍙樸��
+
+**Tech Stack:** ASP.NET Core 6.0, HybridCacheService, SqlSugar ORM
+
+---
+
+## 涓�銆佺幇鏈夐�昏緫闂淇
+
+### 1.1 AddRouters 缂撳瓨涓�鑷存��
+
+**闂**锛歚BaseDal.AddData` 鍜� `_cacheService.AddOrUpdate` 涔嬮棿鏃犱繚鎶ゃ�傚鏋� `AddOrUpdate` 鎶涘紓甯革紝DB 宸插啓鍏ヤ絾缂撳瓨鏈洿鏂帮紝涓嬫鏌ヨ璇诲埌鏃ф暟鎹��
+
+**淇**锛氫娇鐢� try-finally 閫昏緫锛屼繚璇� DB 鍐欏叆鍚庡啀鏇存柊缂撳瓨銆傚鏋滅紦瀛樻洿鏂板け璐ワ紝涓嬫鏌ヨ浼氫粠 DB 鑷姩閲嶅缓缂撳瓨锛坄GetOrAdd` 鎳掑姞杞戒繚璇侊級銆�
+
+### 1.2 QueryAllPositions 绌� catch 鍧�
+
+**闂**锛歝atch 鍧椾粎鏈夋敞閲婏紝鏃犲疄闄呮棩蹇楄褰曘�傚紓甯歌闈欓粯鍚炴帀锛岃皟鐢ㄦ柟鏃犳硶鍖哄垎"娌℃湁鏁版嵁"鍜�"鏌ヨ澶辫触"銆�
+
+**淇**锛氬鍔� `ConsoleHelper.WriteErrorLine` 璁板綍閿欒銆�
+
+### 1.3 鎺ュ彛灞� public 淇グ绗�
+
+**闂**锛歚IRouterService` 涓殑鏂规硶绛惧悕鏈夊浣欑殑 `public` 淇グ绗︺��
+
+**淇**锛氱Щ闄ゆ帴鍙f柟娉曚笂鐨� `public` 淇グ绗︺��
+
+---
+
+## 浜屻�佹柊澧炴柟娉曡璁�
+
+### 2.1 ClearRouterCache()
+
+娓呴櫎 `Router:AllRouters:In` 鍜� `Router:AllRouters:Out` 涓や釜缂撳瓨閿��
+
+**绛惧悕**锛歚void ClearRouterCache()`
+**瀹炵幇**锛�
+```csharp
+_cacheService.Remove("Router:AllRouters:In");
+_cacheService.Remove("Router:AllRouters:Out");
+```
+
+### 2.2 QueryRoutersByDeviceCode(string deviceCode)
+
+鏌ヨ缁忚繃鎸囧畾璁惧鐨勬墍鏈夎矾鐢憋紙鍚堝苟鍏ュ彛/鍑哄彛绫诲瀷锛夈��
+
+**绛惧悕**锛歚List<Dt_Router> QueryRoutersByDeviceCode(string deviceCode)`
+**閫昏緫**锛氫粠缂撳瓨鍔犺浇 In + Out 璺敱锛岀瓫閫� `ChildPosiDeviceCode == deviceCode` 鐨勮矾鐢便��
+**缂撳瓨**锛氫笉鐙崰缂撳瓨锛岀洿鎺ヤ娇鐢ㄧ幇鏈� `GetAllRoutersFromCache` 鑾峰彇鏁版嵁銆�
+
+### 2.3 ExistsRouter锛堜袱涓噸杞斤級
+
+鍒ゆ柇涓ょ偣涔嬮棿鏄惁瀛樺湪璺敱銆�
+
+**绛惧悕**锛�
+- `bool ExistsRouter(string startPosi, string endPosi)` 鈥� 鍏ㄧ被鍨�
+- `bool ExistsRouter(string startPosi, string endPosi, int routeType)` 鈥� 鎸囧畾绫诲瀷
+
+**閫昏緫**锛氳皟鐢� `FindRoutesInMemory`锛岃繑鍥� `routers.Count > 0`銆�
+
+### 2.4 GetRouterCount锛堜袱涓噸杞斤級
+
+杩斿洖璺敱鏁伴噺銆�
+
+**绛惧悕**锛�
+- `int GetRouterCount()` 鈥� 鍚堝苟 In + Out 鎬绘暟
+- `int GetRouterCount(int routeType)` 鈥� 鎸囧畾绫诲瀷鏁伴噺
+
+**瀹炵幇**锛氫粠缂撳瓨鑾峰彇鍚� `.Count`銆�
+
+### 2.5 DeleteRouters(List<long> routerIds)
+
+鎵归噺鍒犻櫎鎸囧畾 ID 鐨勮矾鐢憋紝鍒犻櫎鍚庡悓姝ユ竻闄ゅ搴旂被鍨嬬紦瀛樸��
+
+**绛惧悕**锛歚WebResponseContent DeleteRouters(List<long> routerIds)`
+**閫昏緫**锛�
+1. 鏌ュ嚭寰呭垹闄よ矾鐢卞悇鑷殑 `InOutType`
+2. `BaseDal.DeleteData` 鎵归噺鍒犻櫎
+3. 鏍规嵁娑夊強鐨� `InOutType` 娓呴櫎瀵瑰簲缂撳瓨閿�
+4. 杩斿洖 `WebResponseContent`
+
+---
+
+## 涓夈�佹秹鍙婃枃浠�
+
+| 鏂囦欢 | 鏀瑰姩 |
+|------|------|
+| `WIDESEAWCS_QuartzJob/Service/RouterService.cs` | 淇閫昏緫 + 鏂板鏂规硶瀹炵幇 |
+| `WIDESEAWCS_QuartzJob/Service/IRouterService.cs` | 鎺ュ彛鏂板鏂规硶绛惧悕锛屽幓鎺夊浣� `public` |
+
+---
+
+## 鍥涖�佺紦瀛橀敭姹囨��
+
+| 閿� | 鐢ㄩ�� |
+|----|------|
+| `Router:AllRouters:In` | 鍏ュ彛绫诲瀷鍏ㄩ噺璺敱 |
+| `Router:AllRouters:Out` | 鍑哄彛绫诲瀷鍏ㄩ噺璺敱 |
+| `System:DevicePositions:{deviceCode}` | `QueryAllPositions` 宸叉湁缂撳瓨锛屼笉鍦ㄦ湰鏂规鑼冨洿鍐� |

--
Gitblit v1.9.3