From 171e943ac743f7e3278b40616273fd6a3191c064 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期五, 27 三月 2026 12:12:23 +0800
Subject: [PATCH] feat(RouterService): 改造 QueryNextRoutes 两个重载使用缓存
---
Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs | 73 ++++++++++++++++++++++++++++++++++--
1 files changed, 68 insertions(+), 5 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs
index 994ed38..b639e3c 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs
@@ -4,6 +4,8 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.BaseServices;
using WIDESEAWCS_Core.Enums;
@@ -11,7 +13,6 @@
using WIDESEAWCS_DTO.BasicInfo;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Repository;
-using WIDESEAWCS_Common;
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
namespace WIDESEAWCS_QuartzJob.Service
@@ -39,6 +40,22 @@
}
/// <summary>
+ /// 浠庣紦瀛樿幏鍙栨寚瀹氱被鍨嬬殑鍏ㄩ噺璺敱鏁版嵁锛岀紦瀛樹笉瀛樺湪鏃惰嚜鍔ㄤ粠鏁版嵁搴撳姞杞藉苟鍐欏叆缂撳瓨
+ /// </summary>
+ /// <param name="routeType">璺敱绫诲瀷锛堝叆鍙�/鍑哄彛锛�</param>
+ /// <returns>璇ョ被鍨嬬殑鍏ㄩ儴璺敱鍒楄〃</returns>
+ private List<Dt_Router> GetAllRoutersFromCache(int routeType)
+ {
+ // 鏍规嵁璺敱绫诲瀷鏋勫缓缂撳瓨Key锛孖n绫诲瀷瀵瑰簲"In"锛孫ut绫诲瀷瀵瑰簲"Out"
+ string cacheKey = $"Router:AllRouters:{(routeType == RouterInOutType.In.ObjToInt() ? "In" : "Out")}";
+ // 閫氳繃缂撳瓨鏈嶅姟鑾峰彇鏁版嵁锛岀紦瀛樻湭鍛戒腑鏃惰皟鐢ㄥ伐鍘傛柟娉曚粠鏁版嵁搴撴煡璇㈠苟鍐欏叆缂撳瓨
+ return _cacheService.GetOrAdd(
+ cacheKey,
+ _ => BaseDal.QueryData(x => x.InOutType == routeType)
+ );
+ }
+
+ /// <summary>
/// 鏍规嵁璧风偣/褰撳墠浣嶇疆銆佺粓鐐硅幏鍙栦笅涓�涓瓙鑺傜偣銆�
/// </summary>
/// <param name="startPosi">璧风偣/褰撳墠浣嶇疆銆�</param>
@@ -49,8 +66,12 @@
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());
+ // 浠庣紦瀛樺姞杞藉嚭鍙g被鍨嬬殑鎵�鏈夎矾鐢辨暟鎹�
+ List<Dt_Router> outRouters = GetAllRoutersFromCache(RouterInOutType.Out.ObjToInt());
+ // 鍚堝苟鍏ュ彛鍜屽嚭鍙h矾鐢辨暟鎹�
+ allRouters.AddRange(outRouters);
// 鍦ㄥ唴瀛樹腑杩涜璺緞鎼滅储
routers = FindRoutesInMemory(startPosi, endPosi, allRouters, null);
@@ -79,8 +100,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);
@@ -271,6 +292,48 @@
}
/// <summary>
+ /// 鏍规嵁璧风偣銆佺粓鐐规柟鍚戝拰璺敱绫诲瀷鑾峰彇涓嬩竴涓崟涓瓙鑺傜偣璺敱锛堟櫤鑳介�夋嫨鏈濆悜缁堢偣鐨勮矾鐢憋級
+ /// </summary>
+ /// <param name="startPosi">璧风偣/褰撳墠浣嶇疆</param>
+ /// <param name="endPosi">缁堢偣浣嶇疆锛堢敤浜庢柟鍚戝垽鏂級</param>
+ /// <returns>杩斿洖涓嬩竴涓矾鐢辫妭鐐癸紝浼樺厛杩斿洖鏈濆悜缁堢偣鐨勮矾鐢憋紝濡傛灉娌℃湁鍒欒繑鍥瀗ull</returns>
+ public Dt_Router QueryNextRoute(string startPosi, string endPosi)
+ {
+ try
+ {
+ // 鏌ヨ浠庤捣鐐瑰嚭鍙戠殑鎸囧畾绫诲瀷璺敱
+ List<Dt_Router> routes = BaseDal.QueryData(x => x.StartPosi == startPosi,
+ new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } });
+
+ if (routes.Count == 0)
+ return null;
+
+ // 浼樺厛閫夋嫨鐩存帴鎸囧悜缁堢偣鐨勮矾鐢�
+ 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();
+ }
+ catch (Exception ex)
+ {
+ // 璁板綍閿欒淇℃伅
+ return null;
+ }
+ }
+
+ /// <summary>
/// 鑾峰彇浠庤捣鐐瑰埌缁堢偣鐨勫畬鏁磋矾寰勶紙鎸夐『搴忚繑鍥炴瘡涓瓙鑺傜偣璺敱锛�
/// </summary>
/// <param name="startPosi">璧风偣浣嶇疆</param>
--
Gitblit v1.9.3