From 71403dd5e730c6966b2754f94b8a2df50729bfd3 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 27 三月 2026 14:10:04 +0800
Subject: [PATCH] fix(RouterService): AddRouters 缓存更新用 try-catch 保护

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs |   78 ++++++++++++++++++++++++---------------
 1 files changed, 48 insertions(+), 30 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs
index 3b6fed5..e0259be 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs
@@ -66,8 +66,10 @@
             List<Dt_Router> routers = new List<Dt_Router>();
             try
             {
-                // 涓�娆℃�ф煡璇㈡墍鏈夎矾鐢辨暟鎹埌鍐呭瓨
-                List<Dt_Router> allRouters = BaseDal.QueryData(x => true);
+                // 浠庣紦瀛樺姞杞藉叆鍙g被鍨嬪拰鍑哄彛绫诲瀷鐨勮矾鐢辨暟鎹苟鍚堝苟锛堝垱寤烘柊鍒楄〃锛岄伩鍏嶄慨鏀圭紦瀛樺紩鐢級
+                List<Dt_Router> allRouters = GetAllRoutersFromCache(RouterInOutType.In.ObjToInt())
+                    .Concat(GetAllRoutersFromCache(RouterInOutType.Out.ObjToInt()))
+                    .ToList();
 
                 // 鍦ㄥ唴瀛樹腑杩涜璺緞鎼滅储
                 routers = FindRoutesInMemory(startPosi, endPosi, allRouters, null);
@@ -96,8 +98,8 @@
             List<Dt_Router> routers = new List<Dt_Router>();
             try
             {
-                // 涓�娆℃�ф煡璇㈡寚瀹氱被鍨嬬殑鎵�鏈夎矾鐢辨暟鎹埌鍐呭瓨
-                List<Dt_Router> allRouters = BaseDal.QueryData(x => x.InOutType == routeType);
+                // 浠庣紦瀛樺姞杞芥寚瀹氱被鍨嬬殑鎵�鏈夎矾鐢辨暟鎹�
+                List<Dt_Router> allRouters = GetAllRoutersFromCache(routeType);
 
                 // 鍦ㄥ唴瀛樹腑杩涜璺緞鎼滅储
                 routers = FindRoutesInMemory(startPosi, endPosi, allRouters, routeType);
@@ -206,9 +208,11 @@
         {
             try
             {
-                // 鏌ヨ浠庤捣鐐瑰嚭鍙戠殑鎵�鏈夎矾鐢�
-                List<Dt_Router> routes = BaseDal.QueryData(x => x.StartPosi == startPosi,
-                    new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } });
+                // 浠庣紦瀛樿幏鍙栧叆鍙g被鍨嬬殑鎵�鏈夎矾鐢辨暟鎹紝鍩轰簬璧风偣绛涢�夊悗鎸塈sEnd闄嶅簭鎺掑簭
+                List<Dt_Router> routes = GetAllRoutersFromCache(RouterInOutType.In.ObjToInt())
+                    .Where(x => x.StartPosi == startPosi)
+                    .ToList();
+                routes = routes.OrderByDescending(x => x.IsEnd).ToList();
 
                 // 杩斿洖绗竴涓矾鐢�
                 return routes.FirstOrDefault();
@@ -230,9 +234,11 @@
         {
             try
             {
-                // 鏌ヨ浠庤捣鐐瑰嚭鍙戠殑鎸囧畾绫诲瀷璺敱
-                List<Dt_Router> routes = BaseDal.QueryData(x => x.StartPosi == startPosi && x.InOutType == routeType,
-                    new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } });
+                // 浠庣紦瀛樿幏鍙栨寚瀹氱被鍨嬬殑鎵�鏈夎矾鐢辨暟鎹紝绛涢�夎捣鐐瑰悗鎸塈sEnd闄嶅簭鎺掑垪
+                List<Dt_Router> routes = GetAllRoutersFromCache(routeType)
+                    .Where(x => x.StartPosi == startPosi)
+                    .ToList();
+                routes = routes.OrderByDescending(x => x.IsEnd).ToList();
 
                 // 杩斿洖绗竴涓矾鐢�
                 return routes.FirstOrDefault();
@@ -255,9 +261,11 @@
         {
             try
             {
-                // 鏌ヨ浠庤捣鐐瑰嚭鍙戠殑鎸囧畾绫诲瀷璺敱
-                List<Dt_Router> routes = BaseDal.QueryData(x => x.StartPosi == startPosi && x.InOutType == routeType,
-                    new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } });
+                // 浠庣紦瀛樿幏鍙栨寚瀹氱被鍨嬬殑鎵�鏈夎矾鐢辨暟鎹紝绛涢�夎捣鐐瑰悗鎸塈sEnd闄嶅簭鎺掑垪
+                List<Dt_Router> routes = GetAllRoutersFromCache(routeType)
+                    .Where(x => x.StartPosi == startPosi)
+                    .ToList();
+                routes = routes.OrderByDescending(x => x.IsEnd).ToList();
 
                 if (routes.Count == 0)
                     return null;
@@ -267,8 +275,8 @@
                 if (directRoute != null)
                     return directRoute;
 
-                // 濡傛灉娌℃湁鐩存帴璺敱锛屼娇鐢ㄦ煡鎵剧畻娉曟壘鍒版湞鍚戠粓鐐圭殑璺敱
-                List<Dt_Router> allRouters = BaseDal.QueryData(x => x.InOutType == routeType);
+                // 濡傛灉娌℃湁鐩存帴璺敱锛屼娇鐢ㄧ紦瀛樹腑鐨勫叏閲忚矾鐢辨暟鎹煡鎵炬湞鍚戠粓鐐圭殑璺敱
+                List<Dt_Router> allRouters = GetAllRoutersFromCache(routeType);
                 foreach (var route in routes)
                 {
                     // 妫�鏌ヤ粠杩欎釜璺敱鐨勪笅涓�涓綅缃槸鍚﹁兘鍒拌揪缁堢偣
@@ -297,9 +305,13 @@
         {
             try
             {
-                // 鏌ヨ浠庤捣鐐瑰嚭鍙戠殑鎸囧畾绫诲瀷璺敱
-                List<Dt_Router> routes = BaseDal.QueryData(x => x.StartPosi == startPosi,
-                    new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } });
+                // 浠庣紦瀛樿幏鍙栧叆鍙e拰鍑哄彛绫诲瀷鐨勬墍鏈夎矾鐢辨暟鎹紝绛涢�夎捣鐐瑰悗鎸塈sEnd闄嶅簭鎺掑簭
+                List<Dt_Router> inRoutes = GetAllRoutersFromCache(RouterInOutType.In.ObjToInt());
+                List<Dt_Router> outRoutes = GetAllRoutersFromCache(RouterInOutType.Out.ObjToInt());
+                List<Dt_Router> routes = inRoutes.Concat(outRoutes)
+                    .Where(x => x.StartPosi == startPosi)
+                    .ToList();
+                routes = routes.OrderByDescending(x => x.IsEnd).ToList();
 
                 if (routes.Count == 0)
                     return null;
@@ -308,16 +320,6 @@
                 Dt_Router directRoute = routes.FirstOrDefault(x => x.NextPosi == endPosi || x.ChildPosi == endPosi);
                 if (directRoute != null)
                     return directRoute;
-
-                //// 濡傛灉娌℃湁鐩存帴璺敱锛屼娇鐢ㄦ煡鎵剧畻娉曟壘鍒版湞鍚戠粓鐐圭殑璺敱
-                //List<Dt_Router> allRouters = BaseDal.QueryData(x => x.InOutType == routeType);
-                //foreach (var route in routes)
-                //{
-                //    // 妫�鏌ヤ粠杩欎釜璺敱鐨勪笅涓�涓綅缃槸鍚﹁兘鍒拌揪缁堢偣
-                //    var pathToEnd = FindRoutesInMemory(route.NextPosi, endPosi, allRouters, routeType);
-                //    if (pathToEnd.Count > 0)
-                //        return route;
-                //}
 
                 // 濡傛灉閮戒笉鑳藉埌杈剧粓鐐癸紝杩斿洖绗竴涓矾鐢�
                 return routes.FirstOrDefault();
@@ -428,8 +430,10 @@
         public List<object> GetAllWholeRouters()
         {
             List<object> data = new List<object>();
-            // 鏌ヨ鎵�鏈夎矾鐢�
-            List<Dt_Router> allRouters = BaseDal.QueryData(x => true);
+            // 浠庣紦瀛樺姞杞藉叆鍙g被鍨嬪拰鍑哄彛绫诲瀷鐨勫叏閲忚矾鐢辨暟鎹苟鍚堝苟
+            List<Dt_Router> inRouters = GetAllRoutersFromCache(RouterInOutType.In.ObjToInt());
+            List<Dt_Router> outRouters = GetAllRoutersFromCache(RouterInOutType.Out.ObjToInt());
+            List<Dt_Router> allRouters = inRouters.Concat(outRouters).ToList();
             // 鏌ヨ鎵�鏈夌粨鏉熺殑璺敱锛屽苟鎸塈d鎺掑簭
             List<Dt_Router> dt_Routers = allRouters.Where(x => x.IsEnd).OrderBy(x => x.Id).ToList();
 
@@ -600,6 +604,20 @@
 
                 // 娣诲姞鏂扮殑璺敱淇℃伅
                 BaseDal.AddData(routers);
+
+                // 閲嶆柊鏌ヨ鍏ㄩ噺璺敱锛堟鏃舵墠鍖呭惈鏂板鐨勮矾鐢憋級锛屽啀鍐欏叆缂撳瓨
+                List<Dt_Router> updatedRouters = BaseDal.QueryData(x => x.InOutType == routerType);
+                string cacheKey = $"Router:AllRouters:{(routerType == RouterInOutType.In.ObjToInt() ? "In" : "Out")}";
+
+                try
+                {
+                    _cacheService.AddOrUpdate(cacheKey, updatedRouters);
+                }
+                catch
+                {
+                    // 缂撳瓨鏇存柊澶辫触鏃堕潤榛樺拷鐣ワ紝涓嬫鏌ヨ浼氫粠DB鑷姩閲嶅缓缂撳瓨
+                }
+
                 content = WebResponseContent.Instance.OK();
             }
             catch (Exception ex)

--
Gitblit v1.9.3