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<Dt_Router, IRouterRepository>, IRouterService
|
{
|
public RouterService(IRouterRepository BaseDal) : base(BaseDal)
|
{
|
}
|
|
public List<Dt_Router> QueryNextRoutes(string startPosi, string endPosi)
|
{
|
List<Dt_Router> routers = new List<Dt_Router>();
|
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 } });
|
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);
|
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<string> QueryAllPositions(string deviceCode)
|
{
|
List<string> positions = new List<string>();
|
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> 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<object> data = new List<object>();
|
List<Dt_Router> dt_Routers = BaseDal.QueryData(x => x.IsEnd, new Dictionary<string, OrderByType> { { 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<string> itemRouters = routes.Split(",").Reverse().ToList();
|
object obj = new { type = RouterInOutType.In, routes = itemRouters };
|
data.Add(obj);
|
}
|
else
|
{
|
List<string> 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<Dt_Router> preRouters = BaseDal.QueryData(x => x.NextPosi == startPosi, new Dictionary<string, OrderByType> { { 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;
|
}
|
}
|
}
|