AlarmPointService.cs 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using System.Linq;
  3. using System.Transactions;
  4. using FMSAdmin.Data;
  5. using FMSAdmin.Entities;
  6. using FMSAdmin.Helpers;
  7. using Microsoft.Extensions.Logging;
  8. namespace FMSAdmin.Services {
  9. public class AlarmPointService {
  10. private readonly ILogger<AlarmPointService> _logger;
  11. private readonly FMSContext _context;
  12. private readonly PushHelper _pushHelper;
  13. public AlarmPointService(
  14. ILogger<AlarmPointService> logger,
  15. FMSContext context,
  16. PushHelper pushHelper) {
  17. _logger = logger;
  18. _context = context;
  19. _pushHelper = pushHelper;
  20. }
  21. public void Create(FmsAlarmPoint[] data) {
  22. foreach (var item in data) {
  23. checkName(item);
  24. }
  25. _context.FmsAlarmPoint.AddRange(data);
  26. _context.SaveChanges();
  27. }
  28. public void checkName(FmsAlarmPoint data) {
  29. var check = _context.FmsAlarmPoint.Where(x => x.SiteId == data.SiteId && x.FacilityCode == data.FacilityCode && x.PropertyId == data.PropertyId).Count();
  30. if (check > 0) {
  31. var monitoringPoint = _context.BemsMonitoringPoint.Where(x => x.SiteId == data.SiteId && x.FacilityCode == data.FacilityCode && x.PropertyId == data.PropertyId).FirstOrDefault();
  32. throw new ServiceException("이미 등록되어 있습니다.(" + monitoringPoint.CmFacility.Name + " - " + monitoringPoint.Name + ")");
  33. }
  34. }
  35. public void Delete(int siteId, int facilityCode, int propertyId) {
  36. var data = _context.FmsAlarmPoint.First(x => x.SiteId == siteId && x.FacilityCode == facilityCode && x.PropertyId == propertyId);
  37. _context.FmsAlarmPoint.Remove(data);
  38. _context.SaveChanges();
  39. }
  40. public IQueryable<FmsAlarmPoint> GetAll() {
  41. var query = _context.FmsAlarmPoint;
  42. return query;
  43. }
  44. public IQueryable<FmsAlarmPoint> Get(int siteId, int facilityCode, int propertyId) {
  45. var data = _context.FmsAlarmPoint.Where(x => x.SiteId == siteId && x.FacilityCode == facilityCode && x.PropertyId == propertyId);
  46. return data;
  47. }
  48. public IQueryable<FmsAlarmLog> GetAlarmLog() {
  49. var query = _context.FmsAlarmLog.Where(x => x.AlarmPoint != null);
  50. return query;
  51. }
  52. public IQueryable<BemsMonitoringPointHistory15min> GetPointHistoryList() {
  53. var query = _context.BemsMonitoringPointHistory15min.Where(x => x.FmsAlarmPoint != null && x.CurrentValue == 1);
  54. return query;
  55. }
  56. public void SendPush() {
  57. var list = _context.FmsAlarmLog.Where(
  58. x => x.AlarmPoint != null
  59. && x.CreatedDateTime >= DateTime.Now.Date
  60. && x.IsSendPush == false
  61. ).OrderBy(x => x.CreatedDateTime).ToList();
  62. foreach (var item in list) {
  63. try {
  64. using (var trans = new TransactionScope()) {
  65. var facilityTypeName = Util.V(item, x => x.AlarmPoint.BemsMonitoringPoint.FacilityType.Name);
  66. var monitoringPointName = Util.V(item, x => x.AlarmPoint.BemsMonitoringPoint.Name);
  67. var title = (Math.Abs(item.CurrentValue) <= double.Epsilon ? "경보해제" : "경보발생") + $" [{item.CreatedDateTime.ToString("yyyy-MM-dd HH:mm:ss")}]";
  68. var message = $"{facilityTypeName} - {monitoringPointName}";
  69. _logger.LogInformation($"{item.SiteId} / {item.FacilityCode} / {item.PropertyId} / {item.CreatedDateTime} / {item.FacilityTypeId} / {item.CurrentValue} / {title} / {message}");
  70. _pushHelper.SendToSiteUsers(item.SiteId, title, message, new { });
  71. item.IsSendPush = true;
  72. _context.FmsAlarmLog.Update(item);
  73. _context.SaveChanges();
  74. trans.Complete();
  75. }
  76. } catch (Exception ex) {
  77. _logger.LogError(ex, "");
  78. }
  79. }
  80. }
  81. }
  82. }