| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 清除所有路由缓存(入口和出口类型) |
| | | /// </summary> |
| | | public void ClearRouterCache() |
| | | { |
| | | _cacheService.Remove("Router:AllRouters:In"); |
| | | _cacheService.Remove("Router:AllRouters:Out"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据设备编号查询经过该设备的所有路由(合并入口+出口类型) |
| | | /// </summary> |
| | | /// <param name="deviceCode">设备编号</param> |
| | | /// <returns>经过该设备的路由列表</returns> |
| | | public List<Dt_Router> QueryRoutersByDeviceCode(string deviceCode) |
| | | { |
| | | // 从缓存获取入口类型和出口类型的全量路由数据 |
| | | List<Dt_Router> inRouters = GetAllRoutersFromCache(RouterInOutType.In.ObjToInt()); |
| | | List<Dt_Router> outRouters = GetAllRoutersFromCache(RouterInOutType.Out.ObjToInt()); |
| | | // 合并后筛选出经过指定设备的路由(ChildPosiDeviceCode匹配) |
| | | return inRouters.Concat(outRouters) |
| | | .Where(x => x.ChildPosiDeviceCode == deviceCode) |
| | | .ToList(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 判断两点之间是否存在路由(全类型) |
| | | /// </summary> |
| | | public bool ExistsRouter(string startPosi, string endPosi) |
| | | { |
| | | // 从缓存获取入口类型和出口类型的全量路由数据并合并 |
| | | List<Dt_Router> inRouters = GetAllRoutersFromCache(RouterInOutType.In.ObjToInt()); |
| | | List<Dt_Router> outRouters = GetAllRoutersFromCache(RouterInOutType.Out.ObjToInt()); |
| | | var allRouters = inRouters.Concat(outRouters).ToList(); |
| | | // 在内存中查找从起点到终点的路由 |
| | | var routes = FindRoutesInMemory(startPosi, endPosi, allRouters, null); |
| | | return routes.Count > 0; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 判断两点之间是否存在指定类型的路由 |
| | | /// </summary> |
| | | public bool ExistsRouter(string startPosi, string endPosi, int routeType) |
| | | { |
| | | // 从缓存获取指定类型的全量路由数据 |
| | | List<Dt_Router> allRouters = GetAllRoutersFromCache(routeType); |
| | | // 在内存中查找从起点到终点的路由 |
| | | var routes = FindRoutesInMemory(startPosi, endPosi, allRouters, routeType); |
| | | return routes.Count > 0; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据起点/当前位置、终点获取下一个子节点。 |
| | | /// </summary> |
| | | /// <param name="startPosi">起点/当前位置。</param> |
| | |
| | | // 返回去重后的位置列表 |
| | | return positions.GroupBy(x => x).Select(x => x.Key).ToList(); |
| | | } |
| | | catch |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | ConsoleHelper.WriteErrorLine($"RouterService.QueryAllPositions 查询失败: {ex.Message}"); |
| | | } |
| | | finally |
| | | { |