平安校园
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

WarnInfoController.cs 13 KiB

před 8 měsíci
před 8 měsíci
před 8 měsíci
před 8 měsíci
před 8 měsíci
před 8 měsíci
před 8 měsíci
před 7 měsíci
před 8 měsíci
před 8 měsíci
před 7 měsíci
před 8 měsíci
před 8 měsíci
před 8 měsíci
před 8 měsíci
před 8 měsíci
před 8 měsíci
před 8 měsíci
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. using MoYu.RemoteRequest.Extensions;
  2. using Newtonsoft.Json.Linq;
  3. using SafeCampus.Application.Manager.DeepelephManager;
  4. using SafeCampus.Application.Services.Business.Warn.Dto;
  5. using SafeCampus.Application.Services.Business.Warn.Service;
  6. using SimpleTool;
  7. using SafeCampus.Core.Extension;
  8. using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
  9. using SafeCampus.Application.Services.Business;
  10. using SafeCampus.Web.Core.Controllers.Application.Business.Dto;
  11. using System.Collections.Generic;
  12. namespace SafeCampus.Web.Core.Controllers.Application.Business;
  13. /// <summary>
  14. /// 预警事件查询接口
  15. /// </summary>
  16. [ApiDescriptionSettings(ApiGroupConsts.SYSTEM_Business, Order = 92, Tag = "预警事件")]
  17. [Route("/business/warn")]
  18. [RolePermission]
  19. public class WarnInfoController
  20. {
  21. private readonly IWarnInfoService _warnInfoService;
  22. private readonly IDeepelephManager _deepelephManager;
  23. private readonly ISimpleCacheService _simpleCacheService;
  24. private readonly IConfigService _configService;
  25. public WarnInfoController(IWarnInfoService warnInfoService, IDeepelephManager deepelephManager, ISimpleCacheService simpleCacheService, IConfigService configService)
  26. {
  27. _warnInfoService = warnInfoService;
  28. _deepelephManager = deepelephManager;
  29. _simpleCacheService = simpleCacheService;
  30. _configService = configService;
  31. }
  32. /// <summary>
  33. /// 删除预警信息
  34. /// </summary>
  35. /// <param name="Id"></param>
  36. /// <returns></returns>
  37. public async Task<bool> DeleteInfoD(long Id)
  38. {
  39. return await _warnInfoService.Delete(Id);
  40. }
  41. /// <summary>
  42. /// 编辑预警信息
  43. /// </summary>
  44. /// <param name="input"></param>
  45. /// <returns></returns>
  46. public async Task<bool> UpdateInfoU(WarnInfoDto input)
  47. {
  48. return await _warnInfoService.Update(input);
  49. }
  50. /// <summary>
  51. /// 获取预警信息
  52. /// </summary>
  53. /// <param name="Id"></param>
  54. /// <returns></returns>
  55. public async Task<WarnInfoDto> GetInfo(long Id)
  56. {
  57. var model = await _warnInfoService.GetInfo(Id);
  58. if (!string.IsNullOrEmpty(model.Extend))
  59. {
  60. var extend = JsonConvert.DeserializeObject<JObject>(model.Extend);
  61. model.Extend = extend["age"]!=null?$"年龄:{extend["age"]};年龄置信度:{extend["ageProb"]};":"";
  62. }
  63. try
  64. {
  65. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  66. var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/alarm/query"
  67. .SetBody(new
  68. {
  69. token = _deepelephManager.GetToken(),
  70. tenantCode = appSettings.TenantCode,
  71. poiId = appSettings.PoiId,
  72. alarmId = model.AlarmId
  73. })
  74. .SetContentType("application/json")
  75. .PostAsAsync<string>();
  76. var json = JsonConvert.DeserializeObject<JObject>(str);
  77. if ((bool)json["success"])
  78. {
  79. if (json["data"]["videoUrl"] != null)
  80. {
  81. model.VideoUrl = json["data"]["videoUrl"].ToString();
  82. }
  83. }
  84. }
  85. catch (SystemException)
  86. {
  87. }
  88. return model;
  89. }
  90. /// <summary>
  91. /// 获取预警信息列表
  92. /// </summary>
  93. /// <param name="input"></param>
  94. /// <returns></returns>
  95. [AllowAnonymous]
  96. public async Task<SqlSugarPagedList<WarnInfoList>> GetList([FromQuery] WarnInfoSearch input)
  97. {
  98. return await _warnInfoService.GetList(input);
  99. }
  100. /// <summary>
  101. /// 获取告警分组
  102. /// </summary>
  103. /// <returns></returns>
  104. public async Task<dynamic> GetWarnGroup(string cameraId)
  105. {
  106. var list = new List<WarnGroupInfo>();
  107. list = _simpleCacheService.Get<List<WarnGroupInfo>>(SafeCampusConst.WarnGroup);
  108. if (list != null)
  109. {
  110. if (!string.IsNullOrEmpty(cameraId))
  111. {
  112. return list.Where(x => x.CameraId.Contains(cameraId)).ToList();
  113. }
  114. return list;
  115. }
  116. var basePath = AppContext.BaseDirectory;//获取项目目录
  117. var json = basePath.CombinePath("SeedData", "Json", "WarnGroup.json");//获取文件路径
  118. var dataString = FileHelper.ReadFile(json);//读取文件
  119. list = JsonConvert.DeserializeObject<List<WarnGroupInfo>>(dataString);
  120. _simpleCacheService.Set(SafeCampusConst.WarnGroup, list);
  121. return list.Where(x=>x.CameraId.Contains(cameraId)).ToList();
  122. }
  123. /// <summary>
  124. /// 设置场景开关
  125. /// </summary>
  126. /// <returns></returns>
  127. public async Task<bool> SetWarnGroupDevice(ConfigJsonInput input)
  128. {
  129. var jsonList = JsonConvert.DeserializeObject<List<WarnGroupInfo>>(input.ConfigJson);
  130. _simpleCacheService.Set(SafeCampusConst.WarnGroup, jsonList);
  131. return true;
  132. }
  133. /// <summary>
  134. /// 关联摄像头和告警分组
  135. /// </summary>
  136. /// <param name="input"></param>
  137. /// <returns></returns>
  138. public async Task<bool> SetWarnGroupCamera(ConfigJsonCamera input)
  139. {
  140. var list = _simpleCacheService.Get<List<WarnGroupInfo>>(SafeCampusConst.WarnGroup);
  141. var model = list.FirstOrDefault(x => x.Code == input.Code);
  142. if (model != null)
  143. {
  144. model.CameraId = input.CameraList;
  145. }
  146. _simpleCacheService.Set(SafeCampusConst.WarnGroup, list);
  147. return true;
  148. }
  149. /// <summary>
  150. /// 设置预警推送设置
  151. /// </summary>
  152. /// <returns></returns>
  153. public async Task<bool> SetWarnPushSetting(ConfigPush push)
  154. {
  155. var sysConfig=await _configService.GetByConfigKey(CateGoryConst.CONFIG_BIZ_DEFINE, BizConfigConst.BIZ_SMS_STATES);
  156. if (sysConfig != null)
  157. {
  158. await _configService.Edit(new ConfigEditInput
  159. {
  160. Category = CateGoryConst.CONFIG_BIZ_DEFINE,
  161. ConfigKey = BizConfigConst.BIZ_SMS_STATES,
  162. ConfigValue = push.PushState.ToString()
  163. });
  164. }
  165. else
  166. {
  167. await _configService.Add(new ConfigAddInput
  168. {
  169. Category = CateGoryConst.CONFIG_BIZ_DEFINE,
  170. ConfigKey = BizConfigConst.BIZ_SMS_STATES,
  171. ConfigValue = push.PushState.ToString()
  172. });
  173. }
  174. var sysConfigDay = await _configService.GetByConfigKey(CateGoryConst.CONFIG_BIZ_DEFINE, BizConfigConst.BIZ_SMS_STATES_DAY);
  175. if (sysConfigDay != null)
  176. {
  177. await _configService.Edit(new ConfigEditInput
  178. {
  179. Category = CateGoryConst.CONFIG_BIZ_DEFINE,
  180. ConfigKey = BizConfigConst.BIZ_SMS_STATES_DAY,
  181. ConfigValue = push.DaySum.ToString()
  182. });
  183. }
  184. else
  185. {
  186. await _configService.Add(new ConfigAddInput
  187. {
  188. Category = CateGoryConst.CONFIG_BIZ_DEFINE,
  189. ConfigKey = BizConfigConst.BIZ_SMS_STATES_DAY,
  190. ConfigValue = push.DaySum.ToString()
  191. });
  192. }
  193. return true;
  194. }
  195. /// <summary>
  196. /// 获取预警推送内容
  197. /// </summary>
  198. /// <returns></returns>
  199. public async Task<dynamic> GetWarnPushSetting()
  200. {
  201. var configPush = new ConfigPush
  202. {
  203. PushState = (await _configService.GetByConfigKey(CateGoryConst.CONFIG_BIZ_DEFINE, BizConfigConst.BIZ_SMS_STATES))
  204. .ConfigValue.ToBoolean(),
  205. DaySum = (await _configService.GetByConfigKey(CateGoryConst.CONFIG_BIZ_DEFINE, BizConfigConst.BIZ_SMS_STATES_DAY))
  206. .ConfigValue.ToInt()
  207. };
  208. return configPush;
  209. }
  210. /// <summary>
  211. /// 预警统计-饼图 Alarm 今日告警情况,Hand今日处理情况
  212. /// </summary>
  213. /// <returns></returns>
  214. public async Task<dynamic> GetWarnStatistics()
  215. {
  216. //今日告警情况饼图
  217. //今日处理情况
  218. var startTime = DateTime.Now.Date;
  219. var entTime = DateTime.Now;
  220. var list = await _warnInfoService.GetListNoPage(new WarnInfoSearch
  221. {
  222. StartTick = startTime,
  223. EndTick = entTime
  224. });
  225. var warnType = typeof(AlarmType).EnumToEnumModel();
  226. var alarmStatistics = warnType.Select(x => new
  227. {
  228. Name = x.Description,
  229. Code=x.Name,
  230. Count = list.Count(xx => xx.AlarmType == x.Name)
  231. }).Where(x => x.Count > 0).ToList();
  232. var numbers = new Dictionary<int, string> { { 0, "未处理" }, { 1, "已处理" } };
  233. var handStatistics = numbers.Select(x => new
  234. {
  235. Name = x.Value,
  236. Count = list.Count(xx => xx.WarnHand == x.Key)
  237. }).ToList();
  238. return new { Alarm = alarmStatistics, Hand = handStatistics };
  239. }
  240. /// <summary>
  241. /// 获取七天统计柱状图
  242. /// </summary>
  243. /// <returns></returns>
  244. public async Task<dynamic> GetWeekWarnStatistics()
  245. {
  246. var result = new StatistionModel
  247. {
  248. DataX = new List<string>(),
  249. DataY = new List<SeriesData>()
  250. };
  251. var startTime = DateTime.Now.AddDays(-7).Date;
  252. var entTime = DateTime.Now;
  253. var list = await _warnInfoService.GetListNoPage(new WarnInfoSearch
  254. {
  255. StartTick = startTime,
  256. EndTick = entTime
  257. });
  258. //var warnType = typeof(AlarmType).EnumToEnumModel();
  259. var climb_over = new List<int>();
  260. var crowd = new List<int>();
  261. var fire_smoke = new List<int>();
  262. var visual_fence = new List<int>();
  263. var wander = new List<int>();
  264. for (DateTime i = startTime; i <= entTime;)
  265. {
  266. var itemList = list.Where(x =>
  267. x.Tick.Year == i.Year && x.Tick.Month == i.Month && x.Tick.Day == i.Day)
  268. .ToList();
  269. //var alarmStatistics = warnType.Where(x=>x.Value<=4).Select(x => new StatistionFunModel
  270. //{
  271. // Name = x.Description,
  272. // Code=x.Name,
  273. // Count = itemList.Count(xx => xx.AlarmType == x.Name),
  274. // Date = i.ToString("MM-dd")
  275. //}).ToList();
  276. result.DataX.Add(i.ToString("MM-dd"));
  277. climb_over.Add(itemList.Count(x=>x.AlarmType== "climb_over"));
  278. crowd.Add(itemList.Count(x=>x.AlarmType== "crowd"));
  279. fire_smoke.Add(itemList.Count(x=>x.AlarmType== "fire_smoke"));
  280. visual_fence.Add(itemList.Count(x=>x.AlarmType== "visual_fence"));
  281. wander.Add(itemList.Count(x=>x.AlarmType== "wander"));
  282. //result.Add(new StatistionModel
  283. //{
  284. // Date = i.ToString("MM-dd"),
  285. // visual_fence =
  286. // //FunList = alarmStatistics
  287. //});
  288. i = i.AddDays(1);
  289. }
  290. result.DataY.Add(new SeriesData
  291. {
  292. Name = AlarmType.climb_over.GetDescription(),
  293. Data = climb_over
  294. });
  295. result.DataY.Add(new SeriesData
  296. {
  297. Name = AlarmType.crowd.GetDescription(),
  298. Data = crowd
  299. });
  300. result.DataY.Add(new SeriesData
  301. {
  302. Name = AlarmType.fire_smoke.GetDescription(),
  303. Data = fire_smoke
  304. });
  305. result.DataY.Add(new SeriesData
  306. {
  307. Name = AlarmType.visual_fence.GetDescription(),
  308. Data = visual_fence
  309. });
  310. result.DataY.Add(new SeriesData
  311. {
  312. Name = AlarmType.wander.GetDescription(),
  313. Data = wander
  314. });
  315. return result ;
  316. }
  317. /// <summary>
  318. /// 获取告警枚举列表
  319. /// </summary>
  320. /// <returns></returns>
  321. public async Task<List<WarnType>> GetAlarmType()
  322. {
  323. return await _warnInfoService.GetWarnType();
  324. }
  325. /// <summary>
  326. /// 根据监控id获取大屏告警数据
  327. /// </summary>
  328. /// <returns></returns>
  329. [AllowAnonymous]
  330. public async Task<dynamic> GetLargeScreenData(string cameraId)
  331. {
  332. var startTime = DateTime.Now.AddDays(-7).Date;
  333. var entTime = DateTime.Now;
  334. var list=await _warnInfoService.GetListNoPage(new WarnInfoSearch
  335. {
  336. StartTick = startTime,
  337. EndTick = entTime,
  338. PageNum = 1,
  339. PageSize = 20,
  340. CameraId = cameraId
  341. });
  342. var warnType = typeof(AlarmType).EnumToEnumModel();
  343. var alarmStatistics = warnType.Select(x => new StatistionFunModel
  344. {
  345. Name = x.Description,
  346. Code = x.Name,
  347. Count = list.Count(xx => xx.AlarmType == x.Name),
  348. }).Where(x=>x.Count>0).ToList();
  349. return new { item = list, statistion = alarmStatistics };
  350. }
  351. /// <summary>
  352. /// 处理预警
  353. /// </summary>
  354. /// <returns></returns>
  355. public async Task<bool> HandWarn(HandWarnInput input)
  356. {
  357. return await _warnInfoService.HandWarn(input);
  358. }
  359. }