public void QueryList() { DateTime startDate = new DateTime(2019, 5, 10); DateTime endDate = new DateTime(2019, 5, 11); int days = Convert.ToInt32((endDate - startDate).TotalDays + 1); int months = startDate.Month == endDate.Month ? 1 : 2; List <DensityDevice> devices = DensityDbSimulator.CreateDensityDevice(TestInit.ServiceProvider, 1, 1, 2, "127.0.0.1", true); DensityDbSimulator.CreateData(TestInit.ServiceProvider, devices, DataCreateMode.Sequence, startDate, endDate, true); DensitiesManager manager = TestInit.ServiceProvider.GetRequiredService <DensitiesManager>(); int average = 720; foreach (DensityDevice device in devices) { foreach (var relation in device.DensityDevice_DensityChannels) { foreach (TrafficRegion region in relation.Channel.Regions) { var oneMinuteList = manager.QueryList(region.DataId, DateTimeLevel.Minute, startDate, endDate.AddDays(1).AddMinutes(-1)); //验证查询数量 Assert.AreEqual(24 * 60 * days, oneMinuteList.Count); //验证平均密度 Assert.AreEqual(average, Convert.ToInt32(oneMinuteList.Average(d => d.Value))); var fiveMinuteList = manager.QueryList(region.DataId, DateTimeLevel.FiveMinutes, startDate, endDate.AddDays(1).AddMinutes(-5)); Assert.AreEqual(24 * 60 / 5 * days, fiveMinuteList.Count); Assert.AreEqual(average, Convert.ToInt32(fiveMinuteList.Average(d => d.Value))); var fifteenMinuteList = manager.QueryList(region.DataId, DateTimeLevel.FifteenMinutes, startDate, endDate.AddDays(1).AddMinutes(-15)); Assert.AreEqual(24 * 60 / 15 * days, fifteenMinuteList.Count); Assert.AreEqual(average, Convert.ToInt32(fifteenMinuteList.Average(d => d.Value))); var sixtyMinuteList = manager.QueryList(region.DataId, DateTimeLevel.Hour, startDate, endDate.AddDays(1).AddHours(-1)); Assert.AreEqual(24 * days, sixtyMinuteList.Count); Assert.AreEqual(average, Convert.ToInt32(sixtyMinuteList.Average(d => d.Value))); var dayList = manager.QueryList(region.DataId, DateTimeLevel.Day, startDate, endDate); Assert.AreEqual(days, dayList.Count); Assert.AreEqual(average, Convert.ToInt32(dayList.Average(d => d.Value))); var monthList = manager.QueryList(region.DataId, DateTimeLevel.Month, TimePointConvert.CurrentTimePoint(DateTimeLevel.Month, startDate), TimePointConvert.CurrentTimePoint(DateTimeLevel.Month, endDate)); Assert.AreEqual(months, monthList.Count); Assert.AreEqual(average, Convert.ToInt32(monthList.Average(d => d.Value))); } } } }
public List <TrafficDensity> QueryList([FromRoute] string dataId, [FromQuery] DateTime startTime, [FromQuery] DateTime endTime) { return(_manager.QueryList(dataId, DateTimeLevel.Minute, startTime, endTime)); }
/// <summary> /// 初始化缓存 /// </summary> /// <returns>设备集合</returns> private List <DensityDevice> InitCache() { _logger.LogInformation((int)LogEvent.系统, "初始化缓存"); DensityCache.DensitiesCache.Clear(); EventCache.LastEventsCache.Clear(); WebSocketMiddleware.ClearUrl(); WebSocketMiddleware.AddUrl(EventWebSocketBlock.EventUrl); DateTime now = DateTime.Now; DateTime yesterday = now.Date.AddDays(-1); IMemoryCache memoryCache = _serviceProvider.GetRequiredService <IMemoryCache>(); using (IServiceScope serviceScope = _serviceProvider.CreateScope()) { CodesManager codesManager = serviceScope.ServiceProvider.GetRequiredService <CodesManager>(); memoryCache.InitSystemCache(codesManager.GetList()); DevicesManager devicesManager = serviceScope.ServiceProvider.GetRequiredService <DevicesManager>(); List <DensityDevice> devices = devicesManager.GetList(null, 0, 0, null, null, 0, 0).Datas; memoryCache.InitDeviceCache(devices); RoadCrossingsManager roadCrossingsManager = serviceScope.ServiceProvider.GetRequiredService <RoadCrossingsManager>(); memoryCache.InitCrossingCache(roadCrossingsManager.GetList(null, 0, 0).Datas); DensitiesManager densitiesManager = serviceScope.ServiceProvider.GetRequiredService <DensitiesManager>(); foreach (DensityDevice device in devices) { foreach (var relation in device.DensityDevice_DensityChannels) { foreach (TrafficRegion region in relation.Channel.Regions) { DensityCache.DensitiesCache.TryAdd(region.DataId, new ConcurrentQueue <TrafficDensity>(densitiesManager.QueryList(region.DataId, DateTimeLevel.Minute, yesterday, now))); WebSocketMiddleware.AddUrl($"{DensityWebSocketBlock.DensityUrl}{region.DataId}"); } } } return(devices); } }