using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Enums; using WIDESEAWCS_IBasicInfoRepository; using WIDESEAWCS_IBasicInfoService; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_BasicInfoService { public class RouterService : ServiceBase, IRouterService { public RouterService(IRouterRepository BaseDal) : base(BaseDal) { } public List QueryNextRoutes(string startPosi, string endPosi) { List routers = new List(); try { List dt_Routers = BaseDal.QueryData(x => x.NextPosi == endPosi || x.ChildPosi == endPosi, new Dictionary { { 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 tempRouters = QueryNextRoutes(startPosi, item.StartPosi); 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; } public List QueryAllPositions(string deviceCode) { List positions = new List(); try { List inRouterPositions = BaseDal.QueryData(x => x.ChildPosiDeviceCode == deviceCode && x.InOutType == RouterInOutType.In).GroupBy(x => x.StartPosi).Select(x => x.Key).ToList(); List outRouterPositions = BaseDal.QueryData(x => x.ChildPosiDeviceCode == deviceCode && x.InOutType == RouterInOutType.Out).GroupBy(x => x.ChildPosi).Select(x => x.Key).ToList(); positions.AddRange(inRouterPositions); positions.AddRange(outRouterPositions); return positions.GroupBy(x => x).Select(x => x.Key).ToList(); } catch { } return positions; } public WebResponseContent GetAllWholeRouters() { WebResponseContent content = new(); try { List data = new List(); List dt_Routers = BaseDal.QueryData(x => x.IsEnd, new Dictionary { { nameof(Dt_Router.IsEnd), OrderByType.Desc } }); foreach (var item in dt_Routers) { string routes = $"{item.ChildPosi},"; string str = GetPreviousRoutes(item.StartPosi); if (!string.IsNullOrEmpty(str)) { if (str.EndsWith(",")) str = str.Substring(0, str.Length - 1); routes += str; } if (item.InOutType == RouterInOutType.In) { List itemRouters = routes.Split(",").Reverse().ToList(); object obj = new { type = RouterInOutType.In, routes = itemRouters }; data.Add(obj); } else { List itemRouters = routes.Split(",").Reverse().ToList(); object obj = new { type = RouterInOutType.Out, routes = itemRouters }; data.Add(obj); } } content = WebResponseContent.Instance.OK(data: data); } catch (Exception ex) { } return content; } public string GetPreviousRoutes(string startPosi) { string routers = string.Empty; if (!string.IsNullOrEmpty(startPosi)) { if (!routers.EndsWith(",")) routers += $"{startPosi},"; else routers += $"{startPosi}"; } List preRouters = BaseDal.QueryData(x => x.NextPosi == startPosi, new Dictionary { { nameof(Dt_Router.IsEnd), OrderByType.Desc } }); foreach (var item in preRouters) { string str = GetPreviousRoutes(item.StartPosi); if (!string.IsNullOrEmpty(str)) { if (routers.EndsWith(",")) routers += $"{str}"; else routers += $"{str},"; } } return routers; } } }