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