コード例 #1
0
        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)));
                    }
                }
            }
        }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
        public void QueryComparison()
        {
            //创建某天的模拟数据
            DateTime             startDate = new DateTime(2019, 7, 1);
            List <DensityDevice> devices   = DensityDbSimulator.CreateDensityDevice(TestInit.ServiceProvider, 1, 1, 2, "", true);
            List <DateTime>      dates     = new List <DateTime>
            {
                startDate.AddYears(-1),
                startDate.AddMonths(-1),
                startDate.AddDays(-1),
                startDate
            };

            DensityDbSimulator.CreateData(TestInit.ServiceProvider, devices, DataCreateMode.Sequence, dates, true);
            DensitiesManager manager = TestInit.ServiceProvider.GetRequiredService <DensitiesManager>();

            foreach (DensityDevice device in devices)
            {
                foreach (var relation in device.DensityDevice_DensityChannels)
                {
                    foreach (TrafficRegion region in relation.Channel.Regions)
                    {
                        //验证5分钟
                        var fiveCharts = manager.QueryComparison(region.DataId, DateTimeLevel.FiveMinutes, startDate, startDate.AddDays(1).AddMinutes(-5));
                        for (int i = 0; i < fiveCharts.Count; ++i)
                        {
                            fiveCharts[i] = fiveCharts[i].OrderBy(c => c.Axis).ToList();
                        }
                        //验证同比环比的图表时间对其到第一个时间段
                        Assert.AreEqual(startDate, fiveCharts[0][0].Axis);
                        Assert.AreEqual(startDate, fiveCharts[1][0].Axis);
                        Assert.AreEqual(startDate, fiveCharts[2][0].Axis);

                        //验证同比环比的remark是真实的时间
                        Assert.AreEqual(startDate.ToString("yyyy-MM-dd HH:mm"), fiveCharts[0][0].Remark);
                        Assert.AreEqual(startDate.AddDays(-1).ToString("yyyy-MM-dd HH:mm"), fiveCharts[1][0].Remark);
                        Assert.AreEqual(startDate.AddMinutes(-5).ToString("yyyy-MM-dd HH:mm"), fiveCharts[2][0].Remark);
                        //验证图表中的数据数量
                        foreach (List <TrafficChart <DateTime, int> > charts in fiveCharts)
                        {
                            Assert.AreEqual(24 * 60 / 5, charts.Count);
                        }

                        var fifteenCharts = manager.QueryComparison(region.DataId, DateTimeLevel.FifteenMinutes, startDate, startDate.AddDays(1).AddMinutes(-15));
                        for (int i = 0; i < fifteenCharts.Count; ++i)
                        {
                            fifteenCharts[i] = fifteenCharts[i].OrderBy(c => c.Axis).ToList();
                        }
                        Assert.AreEqual(startDate, fifteenCharts[0][0].Axis);
                        Assert.AreEqual(startDate, fifteenCharts[1][0].Axis);
                        Assert.AreEqual(startDate, fifteenCharts[2][0].Axis);

                        Assert.AreEqual(startDate.ToString("yyyy-MM-dd HH:mm"), fifteenCharts[0][0].Remark);
                        Assert.AreEqual(startDate.AddDays(-1).ToString("yyyy-MM-dd HH:mm"), fifteenCharts[1][0].Remark);
                        Assert.AreEqual(startDate.AddMinutes(-15).ToString("yyyy-MM-dd HH:mm"), fifteenCharts[2][0].Remark);

                        foreach (List <TrafficChart <DateTime, int> > charts in fifteenCharts)
                        {
                            Assert.AreEqual(24 * 60 / 15, charts.Count);
                        }

                        var hourCharts = manager.QueryComparison(region.DataId, DateTimeLevel.Hour, startDate, startDate.AddDays(1).AddHours(-1));
                        for (int i = 0; i < hourCharts.Count; ++i)
                        {
                            hourCharts[i] = hourCharts[i].OrderBy(c => c.Axis).ToList();
                        }
                        Assert.AreEqual(startDate, hourCharts[0][0].Axis);
                        Assert.AreEqual(startDate, hourCharts[1][0].Axis);
                        Assert.AreEqual(startDate, hourCharts[2][0].Axis);

                        Assert.AreEqual(startDate.ToString("yyyy-MM-dd HH"), hourCharts[0][0].Remark);
                        Assert.AreEqual(startDate.AddDays(-1).ToString("yyyy-MM-dd HH"), hourCharts[1][0].Remark);
                        Assert.AreEqual(startDate.AddHours(-1).ToString("yyyy-MM-dd HH"), hourCharts[2][0].Remark);

                        foreach (List <TrafficChart <DateTime, int> > charts in hourCharts)
                        {
                            Assert.AreEqual(24, charts.Count);
                        }

                        var dayCharts = manager.QueryComparison(region.DataId, DateTimeLevel.Day, startDate, startDate);

                        for (int i = 0; i < dayCharts.Count; ++i)
                        {
                            dayCharts[i] = dayCharts[i].OrderBy(c => c.Axis).ToList();
                        }
                        Assert.AreEqual(startDate, dayCharts[0][0].Axis);
                        Assert.AreEqual(startDate, dayCharts[1][0].Axis);
                        Assert.AreEqual(startDate, dayCharts[2][0].Axis);

                        Assert.AreEqual(startDate.ToString("yyyy-MM-dd"), dayCharts[0][0].Remark);
                        Assert.AreEqual(startDate.AddMonths(-1).ToString("yyyy-MM-dd"), dayCharts[1][0].Remark);
                        Assert.AreEqual(startDate.AddDays(-1).ToString("yyyy-MM-dd"), dayCharts[2][0].Remark);

                        foreach (List <TrafficChart <DateTime, int> > charts in dayCharts)
                        {
                            Assert.AreEqual(1, charts.Count);
                        }

                        var monthCharts = manager.QueryComparison(region.DataId, DateTimeLevel.Month, TimePointConvert.CurrentTimePoint(DateTimeLevel.Month, startDate), TimePointConvert.CurrentTimePoint(DateTimeLevel.Month, startDate));
                        for (int i = 0; i < monthCharts.Count; ++i)
                        {
                            monthCharts[i] = monthCharts[i].OrderBy(c => c.Axis).ToList();
                        }
                        Assert.AreEqual(TimePointConvert.CurrentTimePoint(DateTimeLevel.Month, startDate), monthCharts[0][0].Axis);
                        Assert.AreEqual(TimePointConvert.CurrentTimePoint(DateTimeLevel.Month, startDate), monthCharts[1][0].Axis);
                        Assert.AreEqual(TimePointConvert.CurrentTimePoint(DateTimeLevel.Month, startDate), monthCharts[2][0].Axis);

                        Assert.AreEqual(startDate.ToString("yyyy-MM"), monthCharts[0][0].Remark);
                        Assert.AreEqual(startDate.AddYears(-1).ToString("yyyy-MM"), monthCharts[1][0].Remark);
                        Assert.AreEqual(startDate.AddMonths(-1).ToString("yyyy-MM"), monthCharts[2][0].Remark);

                        foreach (List <TrafficChart <DateTime, int> > charts in monthCharts)
                        {
                            Assert.AreEqual(1, charts.Count);
                        }
                    }
                }
            }
        }
コード例 #4
0
        public void QueryVipRegions()
        {
            List <DensityDevice> devices = new List <DensityDevice>();
            int deviceCount       = 1;
            int channelCount      = 1;
            int regionCount       = 12;
            HashSet <string> vips = new HashSet <string>();
            //随机创建重点区域
            Random random = new Random();

            using (IServiceScope serviceScope = TestInit.ServiceProvider.CreateScope())
            {
                using (DensityContext context = serviceScope.ServiceProvider.GetRequiredService <DensityContext>())
                {
                    context.Database.EnsureDeleted();
                    context.Database.EnsureCreated();

                    int deviceId   = 1;
                    int crossingId = 1;
                    int regionId   = 1;
                    int channelId  = 1;
                    for (int i = 0; i < deviceCount; ++i)
                    {
                        DensityDevice densityDevice = new DensityDevice
                        {
                            DeviceId = deviceId++,
                            Ip       = "192.168.200.204",
                            Port     = 18000 + i
                        };
                        densityDevice.DeviceName = "设备" + densityDevice.Port;
                        densityDevice.DensityDevice_DensityChannels = new List <DensityDevice_DensityChannel>();
                        for (int j = 0; j < channelCount; ++j)
                        {
                            RoadCrossing roadCrossing = new RoadCrossing
                            {
                                CrossingId   = crossingId,
                                CrossingName = "路口" + crossingId
                            };
                            DensityChannel channel = new DensityChannel()
                            {
                                ChannelId    = channelId.ToString(),
                                ChannelName  = $"通道 {densityDevice.DeviceId} {j+1}",
                                ChannelIndex = j + 1,
                                CrossingId   = crossingId,
                                Regions      = new List <TrafficRegion>(),
                                RoadCrossing = roadCrossing
                            };
                            DensityDevice_DensityChannel relation = new DensityDevice_DensityChannel
                            {
                                ChannelId = channel.ChannelId,
                                DeviceId  = densityDevice.DeviceId,
                                Channel   = channel
                            };
                            channelId++;
                            crossingId++;
                            densityDevice.DensityDevice_DensityChannels.Add(relation);

                            for (int k = 0; k < regionCount; ++k)
                            {
                                int           value  = random.Next(1, 2);
                                TrafficRegion region = new TrafficRegion
                                {
                                    ChannelId   = channel.ChannelId,
                                    Channel     = channel,
                                    Region      = "1",
                                    RegionIndex = k + 1,
                                    RegionName  = "区域" + regionId++,
                                    IsVip       = value == 1
                                };
                                if (value == 1)
                                {
                                    vips.Add(region.DataId);
                                }
                                channel.Regions.Add(region);
                            }
                        }
                        context.Devices.Add(densityDevice);
                        devices.Add(densityDevice);
                    }
                    context.SaveChanges();
                }
                DensityDbSimulator.CreateData(TestInit.ServiceProvider, devices, DataCreateMode.Fixed, DateTime.Today, DateTime.Today);
                TestInit.RefreshDensityCache(devices);
                DensitiesManager manager = TestInit.ServiceProvider.GetRequiredService <DensitiesManager>();

                var v = manager.QueryVipRegions();
                foreach (TrafficDensity density in v)
                {
                    Assert.IsTrue(vips.Contains(density.DataId));
                }
            }
        }
コード例 #5
0
        public void QueryDayTop10()
        {
            DateTime now   = DateTime.Now;
            DateTime today = now.Date;

            List <DensityDevice> devices = DensityDbSimulator.CreateDensityDevice(TestInit.ServiceProvider, 1, 1, 12, "", true);

            DensityDbSimulator.ResetDatabase(TestInit.ServiceProvider);
            TestInit.RefreshDensityCache(devices);
            DensitiesManager manager = TestInit.ServiceProvider.GetRequiredService <DensitiesManager>();

            var regions = DensityDbSimulator.CreateData(TestInit.ServiceProvider, devices
                                                        , new List <DataCreateMode> {
                DataCreateMode.Fixed, DataCreateMode.Fixed, DataCreateMode.Random
            }
                                                        , new List <DateTime> {
                today.AddDays(-1), now.AddHours(-2).AddMinutes(30), now.AddHours(-1).AddMinutes(30)
            }
                                                        , new List <DateTime> {
                today.AddDays(-1).AddMinutes(1), now.AddHours(-2).AddMinutes(31), now.AddHours(-1).AddMinutes(31)
            }
                                                        , true);

            var densities = regions.OrderByDescending(p => p.Value).ToList();

            var dayTop10 = manager.QueryTop10(today);

            for (int i = 0; i < dayTop10.Count; ++i)
            {
                Assert.AreEqual(densities[i].Key.DataId, dayTop10[i].DataId);
                //今天
                Assert.AreEqual(Math.Ceiling((densities[i].Value + 1) / 2.0), dayTop10[i].Value);
            }
            DateTime time = DateTime.Now.AddHours(-1);

            var hourTop10 = manager.QueryTop10(time);

            for (int i = 0; i < hourTop10.Count; ++i)
            {
                Assert.AreEqual(densities[i].Key.DataId, hourTop10[i].DataId);
                //本小时
                Assert.AreEqual(densities[i].Value, hourTop10[i].Value);
            }

            var dayChangeTop10 = manager.QueryChangeTop10(today, today.AddDays(-1), today.AddDays(-1).Add(now.TimeOfDay));

            for (int i = 0; i < dayChangeTop10.Count; ++i)
            {
                Assert.AreEqual(densities[i].Key.DataId, dayChangeTop10[i].DataId);
                //今天
                Assert.AreEqual(Math.Ceiling((densities[i].Value + 1) / 2.0), dayChangeTop10[i].Value);
                //昨天
                Assert.AreEqual(1, dayChangeTop10[i].LastValue);
            }

            var hourChangeTop10 = manager.QueryChangeTop10(now.AddHours(-1), now.AddHours(-2), now.AddHours(-1));

            for (int i = 0; i < hourChangeTop10.Count; ++i)
            {
                Assert.AreEqual(densities[i].Key.DataId, hourChangeTop10[i].DataId);
                //本小时
                Assert.AreEqual(hourTop10[i].Value, hourChangeTop10[i].Value);
                //上小时
                Assert.AreEqual(1, hourChangeTop10[i].LastValue);
            }
        }
コード例 #6
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="manager">密度查询实例</param>
 public DensitiesController(DensitiesManager manager)
 {
     _manager = manager;
 }