コード例 #1
0
        /// <summary>
        /// 添加若干个相同间隔时间和持续时间的拥堵事件
        /// </summary>
        /// <param name="context"></param>
        /// <param name="region"></param>
        /// <param name="time"></param>
        /// <param name="durationMinutes"></param>
        /// <param name="count"></param>
        /// <param name="intervalMinutes"></param>
        /// <returns></returns>
        private DateTime AddInterval(DensityContext context, TrafficRegion region, DateTime time, int durationMinutes, int count, int intervalMinutes)
        {
            DateTime temp = time;

            for (int i = 0; i < count; ++i)
            {
                AddDuration(context, region, temp, durationMinutes);
                temp = temp.AddMinutes(durationMinutes + intervalMinutes);
            }
            return(temp.AddMinutes(-intervalMinutes));
        }
コード例 #2
0
        /// <summary>
        /// 添加一个持续时长拥堵事件
        /// </summary>
        /// <param name="context"></param>
        /// <param name="region"></param>
        /// <param name="time"></param>
        /// <param name="durationMinutes"></param>
        /// <returns></returns>
        private DateTime AddDuration(DensityContext context, TrafficRegion region, DateTime time, int durationMinutes)
        {
            TrafficEvent trafficEvent = new TrafficEvent
            {
                DataId   = region.DataId,
                DateTime = time,
                EndTime  = time.AddMinutes(durationMinutes)
            };

            context.Events.Add(trafficEvent);
            return(time.AddMinutes(durationMinutes));
        }
コード例 #3
0
 /// <summary>
 /// 填充密度集合缓存
 /// </summary>
 /// <param name="memoryCache">缓存</param>
 /// <param name="density">密度数据</param>
 /// <returns>密度数据</returns>
 public static TrafficDensity FillDensity(this IMemoryCache memoryCache, TrafficDensity density)
 {
     if (density != null)
     {
         TrafficRegion region = memoryCache.GetRegion(density.DataId);
         if (region != null)
         {
             density.RegionName = region.RegionName;
         }
     }
     return(density);
 }
コード例 #4
0
 /// <summary>
 /// 填充事件缓存
 /// </summary>
 /// <param name="memoryCache">缓存</param>
 /// <param name="trafficEvent">事件数据</param>
 /// <returns>事件</returns>
 public static TrafficEvent FillEvent(this IMemoryCache memoryCache, TrafficEvent trafficEvent)
 {
     if (trafficEvent != null)
     {
         TrafficRegion region = memoryCache.GetRegion(trafficEvent.DataId);
         if (region != null)
         {
             trafficEvent.RegionName   = region.RegionName;
             trafficEvent.CrossingId   = region.Channel.CrossingId ?? 0;
             trafficEvent.CrossingName = region.Channel.RoadCrossing?.CrossingName;
         }
     }
     return(trafficEvent);
 }
コード例 #5
0
ファイル: EventsController.cs プロジェクト: lulzzz/Kakegurui
        public List <TrafficChart <string, int> > StatisticsByRegion([FromRoute] string dataId, [FromQuery] DateTime startTime, [FromQuery] DateTime endTime)
        {
            dataId = Uri.UnescapeDataString(dataId);

            TrafficRegion region = _memoryCache.GetRegion(dataId);

            string remark = region == null?string.Empty:region.RegionName;

            DateTimeLevel level      = DateTimeLevel.Hour;
            string        timeFormat = TimePointConvert.TimeFormat(level);

            return(_context.Events
                   .Where(e => e.DataId == dataId && e.DateTime >= startTime && e.DateTime <= endTime)
                   .GroupBy(e => TimePointConvert.CurrentTimePoint(level, e.DateTime))
                   .OrderBy(g => g.Key)
                   .Select(g => new TrafficChart <string, int>
            {
                Axis = g.Key.ToString(timeFormat),
                Value = g.Count(),
                Remark = remark
            }).ToList());
        }
コード例 #6
0
ファイル: DeviceCache.cs プロジェクト: lulzzz/Kakegurui
 /// <summary>
 /// 获取区域
 /// </summary>
 /// <param name="memoryCache">缓存</param>
 /// <param name="dataId">数据编号</param>
 /// <param name="defaultRegion">区域</param>
 /// <returns>区域</returns>
 public static TrafficRegion GetRegion(this IMemoryCache memoryCache, string dataId, TrafficRegion defaultRegion)
 {
     return(memoryCache.TryGetValue(GetRegionKey(dataId), out TrafficRegion region)
         ? region
         : defaultRegion);
 }
コード例 #7
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));
                }
            }
        }