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