From 17e4c7e3e7b3ef60d9da6de3b2a39a14a53c38a0 Mon Sep 17 00:00:00 2001 From: z8018 <1282578289@qq.com> Date: 星期三, 12 三月 2025 14:11:33 +0800 Subject: [PATCH] 1 --- WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs | 81 ++++++++++++++++++++++++++++++++++++---- 1 files changed, 72 insertions(+), 9 deletions(-) diff --git a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs index 5f21f92..423ae6d 100644 --- a/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs +++ b/WIDESEAWCS_Server/WIDESEAWCS_QuartzJob/Service/RouterService.cs @@ -7,17 +7,27 @@ using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Enums; +using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.BasicInfo; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_QuartzJob.Repository; -using WIDESEAWCS_QuartzJob.Service; -namespace WIDESEAWCS_BasicInfoService +namespace WIDESEAWCS_QuartzJob.Service { + /// <summary> + /// 璺敱閰嶇疆涓氬姟灞� + /// </summary> public class RouterService : ServiceBase<Dt_Router, IRouterRepository>, IRouterService { private readonly IDeviceProtocolRepository _deviceProtocolRepository; private readonly IDeviceInfoRepository _deviceInfoRepository; + + /// <summary> + /// 璺敱閰嶇疆涓氬姟灞� + /// </summary> + /// <param name="BaseDal"></param> + /// <param name="deviceProtocolRepository"></param> + /// <param name="deviceInfoRepository"></param> public RouterService(IRouterRepository BaseDal, IDeviceProtocolRepository deviceProtocolRepository, IDeviceInfoRepository deviceInfoRepository) : base(BaseDal) { _deviceProtocolRepository = deviceProtocolRepository; @@ -37,7 +47,7 @@ try { //鏌ヨ涓嬩竴涓矾鐢变俊鎭� - List<Dt_Router> dt_Routers = BaseDal.QueryData(x => x.NextPosi == endPosi || x.ChildPosi == endPosi, new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } }); + List<Dt_Router> dt_Routers = BaseDal.QueryData(x => (x.NextPosi == endPosi || x.ChildPosi == endPosi), new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } }); if (dt_Routers.Count > 0) { foreach (var item in dt_Routers) @@ -77,6 +87,59 @@ } /// <summary> + /// 鏍规嵁璧风偣/褰撳墠浣嶇疆銆佺粓鐐硅幏鍙栦笅涓�涓瓙鑺傜偣銆� + /// </summary> + /// <param name="startPosi">璧风偣/褰撳墠浣嶇疆銆�</param> + /// <param name="endPosi">缁堢偣銆�</param> + /// <param name="routeType">璺敱绫诲瀷銆�</param> + /// <returns>杩斿洖璺敱瀹炰綋闆嗗悎銆�</returns> + public List<Dt_Router> QueryNextRoutes(string startPosi, string endPosi, int routeType) + { + //todo 鏂规硶闇�浼樺寲 + List<Dt_Router> routers = new List<Dt_Router>(); + try + { + //鏌ヨ涓嬩竴涓矾鐢变俊鎭� + List<Dt_Router> dt_Routers = BaseDal.QueryData(x => (x.NextPosi == endPosi || x.ChildPosi == endPosi) && x.InOutType == routeType, new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } }); + if (dt_Routers.Count > 0) + { + foreach (var item in dt_Routers) + { + //濡傛灉涓嬩竴涓矾鐢辩殑璧风偣鍜岀粓鐐归兘鍖归厤锛屽垯娣诲姞鍒拌矾鐢卞垪琛ㄤ腑 + if (item.StartPosi == startPosi && !routers.Any(x => x.Id == item.Id)) + { + routers.Add(item); + } + else + { + //鍚﹀垯锛岄�掑綊鏌ヨ涓嬩竴涓矾鐢辩殑璧风偣 + List<Dt_Router> tempRouters = QueryNextRoutes(startPosi, item.StartPosi, routeType); + foreach (var router in tempRouters) + { + //濡傛灉涓嬩竴涓矾鐢辩殑璧风偣鍜岀粓鐐归兘鍖归厤锛屽垯娣诲姞鍒拌矾鐢卞垪琛ㄤ腑 + if (router.StartPosi == startPosi && !routers.Any(x => x.Id == router.Id)) + { + routers.Add(router); + } + } + } + } + } + else + { + //濡傛灉鏌ヨ涓嶅埌涓嬩竴涓矾鐢变俊鎭紝鍒欐姏鍑哄紓甯� + throw new Exception($"璇ヨ矾寰勬湭閰嶇疆鎴栭厤缃敊璇�,璇锋鏌ヨ澶囪矾鐢变俊鎭�,璧风偣:銆恵startPosi}銆�,缁堢偣:銆恵endPosi}銆�"); + } + } + catch (Exception ex) + { + //throw new Exception(ex.Message); + //璁板綍閿欒淇℃伅 + } + return routers; + } + + /// <summary> /// 鏍规嵁璁惧缂栧彿鑾峰彇瀵瑰簲鐨勮矾鐢辩偣浣嶇紪鍙�(杈撻�佺嚎绔欏彴缂栧彿)淇℃伅 /// </summary> /// <param name="deviceCode">璁惧缂栧彿</param> @@ -89,10 +152,10 @@ try { // 鏌ヨ鎵�鏈夎繘鍏ヨ矾鐢卞櫒鐨勪綅缃� - List<string> inRouterPositions = BaseDal.QueryData(x => x.ChildPosiDeviceCode == deviceCode && x.InOutType == RouterInOutType.In).GroupBy(x => x.StartPosi).Select(x => x.Key).ToList(); + List<string> inRouterPositions = BaseDal.QueryData(x => x.ChildPosiDeviceCode == deviceCode && x.InOutType == RouterInOutType.In.ObjToInt()).GroupBy(x => x.StartPosi).Select(x => x.Key).ToList(); // 鏌ヨ鎵�鏈夌寮�璺敱鍣ㄧ殑浣嶇疆 - List<string> outRouterPositions = BaseDal.QueryData(x => x.ChildPosiDeviceCode == deviceCode && x.InOutType == RouterInOutType.Out).GroupBy(x => x.ChildPosi).Select(x => x.Key).ToList(); + List<string> outRouterPositions = BaseDal.QueryData(x => x.ChildPosiDeviceCode == deviceCode && x.InOutType == RouterInOutType.Out.ObjToInt()).GroupBy(x => x.ChildPosi).Select(x => x.Key).ToList(); // 灏嗚繘鍏ュ拰绂诲紑璺敱鍣ㄧ殑浣嶇疆娣诲姞鍒板垪琛ㄤ腑 positions.AddRange(inRouterPositions); @@ -136,7 +199,7 @@ routes += str; } // 濡傛灉褰撳墠璺敱鏄叆鍙� - if (item.InOutType == RouterInOutType.In) + if (item.InOutType == RouterInOutType.In.ObjToInt()) { // 灏嗗瓙璺敱鍙嶈浆骞舵坊鍔犲埌data涓� List<string> itemRouters = routes.Split(",").Reverse().ToList(); @@ -157,7 +220,7 @@ return data; } - private string GetPreviousRoutes(string startPosi, List<Dt_Router> allRouters, RouterInOutType routerType) + private string GetPreviousRoutes(string startPosi, List<Dt_Router> allRouters, int routerType) { // 瀹氫箟涓�涓┖瀛楃涓瞨outers string routers = string.Empty; @@ -230,7 +293,7 @@ ChildPosi = routersAddDTOs[i + 1].PositionCode, ChildPosiDeviceCode = obj.DeviceCode, Depth = 1, - InOutType = (RouterInOutType)routerType, + InOutType = routerType, NextPosi = routersAddDTOs[i + 1].PositionCode, SrmColumn = string.IsNullOrEmpty(routersAddDTOs[i].SCColumn) ? int.TryParse(routersAddDTOs[i + 1].SCColumn, out int col) ? col : null : int.TryParse(routersAddDTOs[i].SCColumn, out int col2) ? col2 : null, SrmLayer = string.IsNullOrEmpty(routersAddDTOs[i].SCLayer) ? int.TryParse(routersAddDTOs[i + 1].SCLayer, out int lay) ? lay : null : int.TryParse(routersAddDTOs[i].SCLayer, out int lay2) ? lay2 : null, @@ -258,7 +321,7 @@ return content = WebResponseContent.Instance.Error("杈撳叆鏁版嵁璧风偣浣嶇疆缂栧彿涓庣粓鐐逛綅缃紪鍙风浉鍚�"); } // 鏌ヨ鏁版嵁搴撲腑宸叉湁鐨勮矾鐢变俊鎭� - List<Dt_Router> dt_Routers = BaseDal.QueryData(x => x.InOutType == (RouterInOutType)routerType); + List<Dt_Router> dt_Routers = BaseDal.QueryData(x => x.InOutType == routerType); // 绉婚櫎閲嶅鐨勮矾鐢变俊鎭� dt_Routers.ForEach(x => -- Gitblit v1.9.3