From 85bf5da2bc06053c5e8ac03688c0d7e5ddf57703 Mon Sep 17 00:00:00 2001 From: yanghongwei Date: Sat, 12 Apr 2025 17:46:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=BE=E5=A4=87=E5=8A=A0?= =?UTF-8?q?=E5=85=A5=E6=98=AF=E5=90=A6=E7=A7=BB=E5=8A=A8=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=EF=BC=8C=E8=BF=87=E6=BB=A4=E6=8E=89=E7=99=BD=E5=90=8D=E5=8D=95?= =?UTF-8?q?=EF=BC=8C=E5=8A=A0=E5=85=A5=E6=97=A0=E4=BA=BA=E6=9C=BA=E8=B7=9F?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=9A=84=E8=B7=9D=E7=A6=BB=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Model/Alarm.cs | 6 +++++- Model/DeviceEntity.cs | 7 +++++++ Program.cs | 2 +- Service/AlarmService.cs | 33 ++++++++++++++++++++++++++++++--- appsettings.json | 3 +++ 5 files changed, 46 insertions(+), 5 deletions(-) diff --git a/Model/Alarm.cs b/Model/Alarm.cs index 0d54033..6a002ce 100644 --- a/Model/Alarm.cs +++ b/Model/Alarm.cs @@ -43,7 +43,11 @@ namespace LY.App.Model /// [SugarColumn(IsIgnore = true)] public double distance { get; set; } - + /// + /// 是否白名单 + /// + [SugarColumn(ColumnName = "is_whitelist", ColumnDescription = "是否白名单")] + public bool IsWhitelist { get; set; } /// /// ,#东向速度 /// diff --git a/Model/DeviceEntity.cs b/Model/DeviceEntity.cs index f933daf..7e8f76b 100644 --- a/Model/DeviceEntity.cs +++ b/Model/DeviceEntity.cs @@ -69,6 +69,12 @@ namespace LY.App.Model /// 图片icon /// public string icon { get; set; } + /// + /// 是否是移动设备 + /// + [SugarColumn(ColumnName = "is_move", ColumnDescription = "是否移动设备", IsNullable = true)] + + public bool isMove { get; set; } } @@ -89,6 +95,7 @@ namespace LY.App.Model public string GraphQlEndpoint { get; set; } public string BrokerAddress { get; set; } // MQTT Broker 地址 public string Topic { get; set; } // MQTT 主题 + public bool isMove { get; set; } /// /// 机型 /// diff --git a/Program.cs b/Program.cs index 3bc9740..64a2896 100644 --- a/Program.cs +++ b/Program.cs @@ -125,7 +125,7 @@ app.UseCors("CorsPolicy"); //쳣м app.UseMiddleware(); //token֤м -app.UseMiddleware(); + app.UseMiddleware(); //ִƥĶ˵ app.UseEndpoints(endpoints => { diff --git a/Service/AlarmService.cs b/Service/AlarmService.cs index dfdfa19..cc5b0a3 100644 --- a/Service/AlarmService.cs +++ b/Service/AlarmService.cs @@ -6,6 +6,7 @@ using LY.App.Model; using Mapster; using Microsoft.AspNetCore.SignalR; using NetTopologySuite.Geometries; +using NetTopologySuite.Index.HPRtree; using NetTopologySuite.IO; using SqlSugar; using StackExchange.Redis; @@ -51,6 +52,7 @@ namespace LY.App.Service await _redisService.SetAsync(key, deviceinfo, TimeSpan.FromDays(1)); } var entity = input.data.Adapt>(); + entity = entity.Where(s => checkDistance(s.drone_lat, s.drone_lon, deviceinfo.Lat, deviceinfo.Lon) == true).ToList(); if (entity.Any()) { foreach (var item in entity) @@ -63,6 +65,7 @@ namespace LY.App.Service item.Time = input.time; item.distance = GisHelper.HaversineDistance(item.drone_lat, item.drone_lon, item.app_lat, item.app_lon); item.alarmLevel = await GetAlarmLevel(deviceinfo.PositionId, item.drone_lon, item.drone_lat); + item.IsWhitelist = Iswhitlist(item.serial_number); } await _db.CopyNew().Insertable(entity).SplitTable().ExecuteReturnSnowflakeIdListAsync(); //推送报警信息 @@ -71,6 +74,30 @@ namespace LY.App.Service return new ApiResult(); } + /// + /// 判断 距离是否在范围内 + /// + /// + /// + /// + /// + /// + private bool checkDistance(double lat, double lon, double d_lat, double d_lon) + { + var maxDistance = Convert.ToDouble(_config["MaxDistance"]); + var distance = GisHelper.HaversineDistance(lat, lon, d_lat, d_lon); + return distance < maxDistance; + } + + private bool Iswhitlist(string serial_number) + { + var whitelist = _config["Whitelist"].Split(','); + if (whitelist.Any()) + { + return whitelist.Contains(serial_number); + } + return false; + } /// /// 计算入侵级别 @@ -125,7 +152,7 @@ namespace LY.App.Service //更新 设备缓存 var key = RedisKeyList.DeviceInfo(input.product_ad_id); var deviceinfo = await _redisService.GetAsync(key); - if (deviceinfo != null) + if (deviceinfo != null && deviceinfo.isMove) { deviceinfo.Lat = input.product_lat; deviceinfo.Lon = input.product_lon; @@ -186,7 +213,7 @@ namespace LY.App.Service DateTime endDate = currentDate.Date.AddDays(1).AddTicks(-1); //计算当天 var todaywaring = await _db.Queryable().SplitTable() - .Where(s => s.alarmLevel > 0) + .Where(s => s.alarmLevel > 0 && s.IsWhitelist == false) .Where(s => s.CreateTime >= startDate && s.CreateTime <= endDate) .GroupBy(s => s.BatchId) .Select(s => s.BatchId).CountAsync(); @@ -196,7 +223,7 @@ namespace LY.App.Service // .Where(s => s.CreateTime >= startDate && s.CreateTime <= endDate); //计算总数 var totalcount = _db.Queryable().SplitTable() - .Where(s => s.alarmLevel > 0) + .Where(s => s.alarmLevel > 0 && s.IsWhitelist == false) .GroupBy(s => s.BatchId) .Select(s => s.BatchId); //计算处理总数 diff --git a/appsettings.json b/appsettings.json index 16eb2fd..62673e6 100644 --- a/appsettings.json +++ b/appsettings.json @@ -29,5 +29,8 @@ "Weather": "https://weather.cma.cn/api/now/54511", //天气预报地址,中国气象 "Vertify": 5, //登录失败次数 "BatchId": 60, //无人机批次连续时间,如果超过这个时间,则变成下一个批次 + "Whitelist": "sn123,sn234", //白名单sn,用逗号分隔 + "MaxDistance": 3000, //最大距离,如果超过这个距离,探测到的无人机数据会被丢弃 单位:米 + "SnowFlakeWordId": 1 //雪花算法的wordId,多台服务器时,需要配置不同的wordId, }