| | |
| | | List<Dt_Router> routers = new List<Dt_Router>(); |
| | | try |
| | | { |
| | | // 从缓存加载入口类型的所有路由数据 |
| | | List<Dt_Router> allRouters = GetAllRoutersFromCache(RouterInOutType.In.ObjToInt()); |
| | | // 从缓存加载出口类型的所有路由数据 |
| | | List<Dt_Router> outRouters = GetAllRoutersFromCache(RouterInOutType.Out.ObjToInt()); |
| | | // 合并入口和出口路由数据 |
| | | allRouters.AddRange(outRouters); |
| | | // 从缓存加载入口类型和出口类型的路由数据并合并(创建新列表,避免修改缓存引用) |
| | | List<Dt_Router> allRouters = GetAllRoutersFromCache(RouterInOutType.In.ObjToInt()) |
| | | .Concat(GetAllRoutersFromCache(RouterInOutType.Out.ObjToInt())) |
| | | .ToList(); |
| | | |
| | | // 在内存中进行路径搜索 |
| | | routers = FindRoutesInMemory(startPosi, endPosi, allRouters, null); |
| | |
| | | { |
| | | try |
| | | { |
| | | // 查询从起点出发的所有路由 |
| | | List<Dt_Router> routes = BaseDal.QueryData(x => x.StartPosi == startPosi, |
| | | new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } }); |
| | | // 从缓存获取入口类型的所有路由数据,基于起点筛选后按IsEnd降序排序 |
| | | List<Dt_Router> routes = GetAllRoutersFromCache(RouterInOutType.In.ObjToInt()) |
| | | .Where(x => x.StartPosi == startPosi) |
| | | .ToList(); |
| | | routes = routes.OrderByDescending(x => x.IsEnd).ToList(); |
| | | |
| | | // 返回第一个路由 |
| | | return routes.FirstOrDefault(); |
| | |
| | | { |
| | | try |
| | | { |
| | | // 查询从起点出发的指定类型路由 |
| | | List<Dt_Router> routes = BaseDal.QueryData(x => x.StartPosi == startPosi && x.InOutType == routeType, |
| | | new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } }); |
| | | // 从缓存获取指定类型的所有路由数据,筛选起点后按IsEnd降序排列 |
| | | List<Dt_Router> routes = GetAllRoutersFromCache(routeType) |
| | | .Where(x => x.StartPosi == startPosi) |
| | | .ToList(); |
| | | routes = routes.OrderByDescending(x => x.IsEnd).ToList(); |
| | | |
| | | // 返回第一个路由 |
| | | return routes.FirstOrDefault(); |
| | |
| | | { |
| | | try |
| | | { |
| | | // 查询从起点出发的指定类型路由 |
| | | List<Dt_Router> routes = BaseDal.QueryData(x => x.StartPosi == startPosi && x.InOutType == routeType, |
| | | new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } }); |
| | | // 从缓存获取指定类型的所有路由数据,筛选起点后按IsEnd降序排列 |
| | | List<Dt_Router> routes = GetAllRoutersFromCache(routeType) |
| | | .Where(x => x.StartPosi == startPosi) |
| | | .ToList(); |
| | | routes = routes.OrderByDescending(x => x.IsEnd).ToList(); |
| | | |
| | | if (routes.Count == 0) |
| | | return null; |
| | |
| | | if (directRoute != null) |
| | | return directRoute; |
| | | |
| | | // 如果没有直接路由,使用查找算法找到朝向终点的路由 |
| | | List<Dt_Router> allRouters = BaseDal.QueryData(x => x.InOutType == routeType); |
| | | // 如果没有直接路由,使用缓存中的全量路由数据查找朝向终点的路由 |
| | | List<Dt_Router> allRouters = GetAllRoutersFromCache(routeType); |
| | | foreach (var route in routes) |
| | | { |
| | | // 检查从这个路由的下一个位置是否能到达终点 |
| | |
| | | { |
| | | try |
| | | { |
| | | // 查询从起点出发的指定类型路由 |
| | | List<Dt_Router> routes = BaseDal.QueryData(x => x.StartPosi == startPosi, |
| | | new Dictionary<string, OrderByType> { { nameof(Dt_Router.IsEnd), OrderByType.Desc } }); |
| | | // 从缓存获取入口和出口类型的所有路由数据,筛选起点后按IsEnd降序排序 |
| | | List<Dt_Router> inRoutes = GetAllRoutersFromCache(RouterInOutType.In.ObjToInt()); |
| | | List<Dt_Router> outRoutes = GetAllRoutersFromCache(RouterInOutType.Out.ObjToInt()); |
| | | List<Dt_Router> routes = inRoutes.Concat(outRoutes) |
| | | .Where(x => x.StartPosi == startPosi) |
| | | .ToList(); |
| | | routes = routes.OrderByDescending(x => x.IsEnd).ToList(); |
| | | |
| | | if (routes.Count == 0) |
| | | return null; |