using MoYu.RemoteRequest.Extensions; using Newtonsoft.Json.Linq; using SafeCampus.Application.Manager.DeepelephManager; using SafeCampus.Application.Services.Business.Warn.Dto; using SafeCampus.Application.Services.Business.Warn.Service; using SimpleTool; using SafeCampus.Core.Extension; using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using SafeCampus.Application.Services.Business; using SafeCampus.Web.Core.Controllers.Application.Business.Dto; namespace SafeCampus.Web.Core.Controllers.Application.Business; /// /// 预警事件查询接口 /// [ApiDescriptionSettings(ApiGroupConsts.SYSTEM_Business, Order = 92, Tag = "预警事件")] [Route("/business/warn")] [RolePermission] public class WarnInfoController { private readonly IWarnInfoService _warnInfoService; private readonly IDeepelephManager _deepelephManager; private readonly ISimpleCacheService _simpleCacheService; public WarnInfoController(IWarnInfoService warnInfoService, IDeepelephManager deepelephManager, ISimpleCacheService simpleCacheService) { _warnInfoService = warnInfoService; _deepelephManager = deepelephManager; _simpleCacheService = simpleCacheService; } /// /// 删除预警信息 /// /// /// public async Task DeleteInfoD(long Id) { return await _warnInfoService.Delete(Id); } /// /// 编辑预警信息 /// /// /// public async Task UpdateInfoU(WarnInfoDto input) { return await _warnInfoService.Update(input); } /// /// 获取预警信息 /// /// /// public async Task GetInfo(long Id) { var model = await _warnInfoService.GetInfo(Id); if (!string.IsNullOrEmpty(model.Extend)) { var extend = JsonConvert.DeserializeObject(model.Extend); var sex = "男性"; if (extend["genderScore"] != null) { if ((float)extend["genderScore"][0] > 0.6) { sex = "男性"; } else if ((float)extend["genderScore"][1] > 0.6) { sex = "女性"; } else if ((float)extend["genderScore"][2] > 0.6) { sex = "不确定"; } } model.Extend = $"年龄:{extend["age"]};年龄置信度:{extend["ageProb"]};性别:{sex}"; } if (!Enum.TryParse(model.CameraId, out CameraType cameraType)) { cameraType = CameraType.SXT001; } model.CameraName = cameraType.GetDescription(); try { var appSettings = App.GetOptionsMonitor(); var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/alarm/query" .SetBody(new { token = _deepelephManager.GetToken(), tenantCode = appSettings.TenantCode, poiId = appSettings.PoiId, alarmId = model.AlarmId }) .SetContentType("application/json") .PostAsAsync(); var json = JsonConvert.DeserializeObject(str); if ((bool)json["success"]) { if (json["data"]["videoUrl"] != null) { model.VideoUrl = json["data"]["videoUrl"].ToString(); } } } catch (SystemException) { } return model; } /// /// 获取预警信息列表 /// /// /// [AllowAnonymous] public async Task> GetList([FromQuery] WarnInfoSearch input) { return await _warnInfoService.GetList(input); } /// /// 获取告警分组 /// /// public async Task GetWarnGroup() { var list = new List(); list = _simpleCacheService.Get>(SafeCampusConst.WarnGroup); if (list != null) { return list; } var basePath = AppContext.BaseDirectory;//获取项目目录 var json = basePath.CombinePath("SeedData", "Json", "WarnGroup.json");//获取文件路径 var dataString = FileHelper.ReadFile(json);//读取文件 list = JsonConvert.DeserializeObject>(dataString); _simpleCacheService.Set(SafeCampusConst.WarnGroup, list); return list; } /// /// 关联摄像头和告警分组 /// /// public async Task SetWarnGroupDevice(ConfigJsonInput input) { var jsonList = JsonConvert.DeserializeObject>(input.ConfigJson); _simpleCacheService.Set(SafeCampusConst.WarnGroup, jsonList); return true; } /// /// 预警统计-饼图 Alarm 今日告警情况,Hand今日处理情况 /// /// public async Task GetWarnStatistics() { //今日告警情况饼图 //今日处理情况 var startTime = DateTime.Now.Date; var entTime = DateTime.Now; var list = await _warnInfoService.GetListNoPage(new WarnInfoSearch { StartTick = startTime, EndTick = entTime }); var warnType = typeof(AlarmType).EnumToEnumModel(); var alarmStatistics = warnType.Select(x => new { Name = x.Description, Code=x.Name, Count = list.Count(xx => xx.AlarmType == x.Name) }).Where(x => x.Count > 0).ToList(); var numbers = new Dictionary { { 0, "未处理" }, { 1, "已处理" } }; var handStatistics = numbers.Select(x => new { Name = x.Value, Count = list.Count(xx => xx.WarnHand == x.Key) }).ToList(); return new { Alarm = alarmStatistics, Hand = handStatistics }; } /// /// 获取七天统计柱状图 /// /// public async Task GetWeekWarnStatistics() { var result = new StatistionModel { DataX = new List(), DataY = new List() }; var startTime = DateTime.Now.AddDays(-7).Date; var entTime = DateTime.Now; var list = await _warnInfoService.GetListNoPage(new WarnInfoSearch { StartTick = startTime, EndTick = entTime }); //var warnType = typeof(AlarmType).EnumToEnumModel(); var climb_over = new List(); var crowd = new List(); var fire_smoke = new List(); var visual_fence = new List(); var wander = new List(); for (DateTime i = startTime; i <= entTime;) { var itemList = list.Where(x => x.Tick.Year == i.Year && x.Tick.Month == i.Month && x.Tick.Day == i.Day) .ToList(); //var alarmStatistics = warnType.Where(x=>x.Value<=4).Select(x => new StatistionFunModel //{ // Name = x.Description, // Code=x.Name, // Count = itemList.Count(xx => xx.AlarmType == x.Name), // Date = i.ToString("MM-dd") //}).ToList(); result.DataX.Add(i.ToString("MM-dd")); climb_over.Add(itemList.Count(x=>x.AlarmType== "climb_over")); crowd.Add(itemList.Count(x=>x.AlarmType== "crowd")); fire_smoke.Add(itemList.Count(x=>x.AlarmType== "fire_smoke")); visual_fence.Add(itemList.Count(x=>x.AlarmType== "visual_fence")); wander.Add(itemList.Count(x=>x.AlarmType== "wander")); //result.Add(new StatistionModel //{ // Date = i.ToString("MM-dd"), // visual_fence = // //FunList = alarmStatistics //}); i = i.AddDays(1); } result.DataY.Add(new SeriesData { Name = AlarmType.climb_over.GetDescription(), Data = climb_over }); result.DataY.Add(new SeriesData { Name = AlarmType.crowd.GetDescription(), Data = crowd }); result.DataY.Add(new SeriesData { Name = AlarmType.fire_smoke.GetDescription(), Data = fire_smoke }); result.DataY.Add(new SeriesData { Name = AlarmType.visual_fence.GetDescription(), Data = visual_fence }); result.DataY.Add(new SeriesData { Name = AlarmType.wander.GetDescription(), Data = wander }); return result ; } /// /// 获取告警枚举列表 /// /// public async Task> GetAlarmType() { return await _warnInfoService.GetWarnType(); } /// /// 根据监控id获取大屏告警数据 /// /// [AllowAnonymous] public async Task GetLargeScreenData(string cameraId) { var startTime = DateTime.Now.AddDays(-7).Date; var entTime = DateTime.Now; var list=await _warnInfoService.GetListNoPage(new WarnInfoSearch { StartTick = startTime, EndTick = entTime, PageNum = 1, PageSize = 20, CameraId = cameraId }); var warnType = typeof(AlarmType).EnumToEnumModel(); var alarmStatistics = warnType.Select(x => new StatistionFunModel { Name = x.Description, Code = x.Name, Count = list.Count(xx => xx.AlarmType == x.Name), }).Where(x=>x.Count>0).ToList(); return new { item = list, statistion = alarmStatistics }; } }