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,
}