示例#1
0
 public int Delete(AlarmLog entityToInsert)
 {
     using (Conn)
     {
         return(Conn.Delete(entityToInsert));
     }
 }
示例#2
0
 public int Update(AlarmLog entityToInsert)
 {
     using (Conn)
     {
         return(Conn.Update(entityToInsert));
     }
 }
示例#3
0
 public IActionResult Remove(Guid id)
 {
     using (var db = new AllInOneContext.AllInOneContext())
     {
         try
         {
             AlarmLog delObj = db.AlarmLog.FirstOrDefault(s => s.AlarmLogId.Equals(id));
             if (delObj == null || !delObj.AlarmLogId.Equals(id))
             {
                 return(NotFound());
             }
             db.AlarmLog.Remove(delObj);
             db.SaveChanges();
             return(NoContent());
         }
         catch (Exception ex)
         {
             _logger.LogError("删除报警日志{0}异常,Message:{1}\r\n,StackTrace{2}", id, ex.Message, ex.StackTrace);
             return(BadRequest(new ApplicationException()
             {
                 ErrorCode = "Unknow", ErrorMessage = ex.Message
             }));
         }
     }
 }
示例#4
0
 public int Insert(AlarmLog entityToInsert)
 {
     using (Conn)
     {
         return(Conn.Insert <int>(entityToInsert));
     }
 }
示例#5
0
 /// <summary>
 /// 新增要上传到上级系统的报警消息
 /// </summary>
 /// <param name="log"></param>
 public void ForwardAlarmLog(AlarmLog log)
 {
     lock (m_logLockObj)
     {
         m_alarmLogList.Add(log);
         m_forwardWaiter.Set();
     }
 }
示例#6
0
        /// <summary>
        /// 获取设备报警配置
        /// </summary>
        /// <param name="db"></param>
        /// <param name="alarmLog"></param>
        /// <returns></returns>
        private AlarmSetting GetAlarmSetting(AllInOneContext.AllInOneContext db, AlarmLog alarmLog)
        {
            AlarmSetting setting = db.AlarmSetting.Include(t => t.Schedule).ThenInclude(t => t.ScheduleCycle).ThenInclude(t => t.DayPeriods).ThenInclude(t => t.TimePeriods).
                                   Include(t => t.Schedule).ThenInclude(t => t.ScheduleCycle).ThenInclude(t => t.CycleType).
                                   Include(t => t.AlarmSource).ThenInclude(t => t.Organization).Include(t => t.AlarmType).
                                   FirstOrDefault(p => p.AlarmSourceId.Equals(alarmLog.AlarmSourceId) &&
                                                  p.AlarmTypeId.Equals(alarmLog.AlarmTypeId));

            return(setting);
        }
示例#7
0
 public void Validate(AlarmLog obj)
 {
     if (!obj.Title.IsValidLength(1, 200))
     {
         throw new Exception(Resources.Error_AlarmLogTitleInvalid);
     }
     if (!obj.Note.IsValidLength(-1, 500))
     {
         throw new Exception(Resources.Error_AlarmLogNoteInvalid);
     }
 }
示例#8
0
        public IActionResult Add([FromBody] AlarmLog alarmLog)
        {
            if (alarmLog == null)
            {
                return(BadRequest("alarm log is null"));
            }
            using (var db = new AllInOneContext.AllInOneContext())
            {
                try
                {
                    _logger.LogInformation("收到报警日志....\r\n{0}", JsonConvert.SerializeObject(alarmLog));
                    if (alarmLog.AlarmLogId.Equals(Guid.Empty))
                    {
                        alarmLog.AlarmLogId = Guid.NewGuid();
                    }

                    alarmLog.AlarmLevelId  = Guid.Parse("A0002016-E009-B019-E001-ABCD12900001");
                    alarmLog.ApplicationId = Guid.Parse("8DB3D774-5F99-4AA5-BA30-73E401137837");
                    alarmLog.AlarmStatusId = Guid.Parse("A0002016-E009-B019-E001-ABCD13100001");
                    alarmLog.AlarmStatus   = db.SystemOption.FirstOrDefault(t => t.SystemOptionId.Equals(alarmLog.AlarmStatusId));
                    alarmLog.TimeCreated   = DateTime.Now;
                    db.AlarmLog.Add(alarmLog);
                    db.SaveChanges();
                    _logger.LogInformation("完成保存报警日志......");

                    //报警类型 //报警设备
                    alarmLog.AlarmType   = db.SystemOption.FirstOrDefault(t => t.SystemOptionId.Equals(alarmLog.AlarmTypeId));
                    alarmLog.AlarmSource = db.IPDeviceInfo.Include(t => t.Organization).FirstOrDefault(t => t.IPDeviceInfoId.Equals(alarmLog.AlarmSourceId));

                    //将报警日志加入队列
                    AlarmProcessExecutor.Instance.AddAlarmLogAction(alarmLog);
                    _logger.LogInformation("完成报警日志处理....");
                    //启动应急预案
                    return(CreatedAtAction("", alarmLog));
                }
                catch (DbUpdateException ex)
                {
                    _logger.LogError("添加报警日志异常,Message:{0}\r\nStackTrace:{1}\r\n{2}", ex.Message, ex.StackTrace, ex.InnerException);
                    return(BadRequest(new ApplicationException()
                    {
                        ErrorCode = "DbUpdate", ErrorMessage = ex.Message
                    }));
                }
                catch (Exception ex)
                {
                    _logger.LogError("添加报警日志异常,Message:{0}\r\nStackTrace:{1}", ex.Message, ex.StackTrace);
                    return(BadRequest(new ApplicationException()
                    {
                        ErrorCode = "Unknow", ErrorMessage = ex.Message
                    }));
                }
            }
        }
示例#9
0
        /// <summary>
        /// 转发报警到上级
        /// </summary>
        /// <param name="alarmLog"></param>
        private void ForwardAlarmToTopOrganization(AlarmLog alarmLog)
        {
            Task.Run(() =>
            {
                using (var db = new AllInOneContext.AllInOneContext())
                {
                    string error             = "";
                    var topApplicationCenter = db.Organization.Include(t => t.Center).
                                               OrderBy(t => t.OrganizationFullName).
                                               Select(t => t.Center).
                                               FirstOrDefault();

                    if (topApplicationCenter != null &&
                        topApplicationCenter.EndPoints != null &&
                        topApplicationCenter.EndPoints.Count > 0)
                    {
                        _logger.LogInformation("开始推送{1}发生的{2}报警消息到上级系统...", alarmLog.AlarmSource.IPDeviceName, alarmLog.AlarmType.SystemOptionName);
                        EndPointInfo endPoint = topApplicationCenter.EndPoints.First();
                        string url            = string.Format("http://{0}:{1}/Alarm/AlarmLog/Publish", endPoint.IPAddress, endPoint.Port);
                        _logger.LogInformation("推送URL:{0}...", url);
                        var result = HttpClientHelper.Post <AlarmLog>(alarmLog, url, false);
                        if (result.Success)
                        {
                            alarmLog.UploadStatus = 1;
                            db.SaveChanges();
                            _logger.LogInformation("报警消息推送到上级系统成功");
                        }
                        else
                        {
                            _logger.LogInformation("报警消息推送到上级系统失败,原因:{0},将推送添加到报警转发队列", result);
                            ForwardAlarmLogTask.Instance.ForwardAlarmLog(alarmLog);
                        }
                    }
                    else
                    {
                        error = "未配置上级应用服务";
                    }

                    if (!string.IsNullOrEmpty(error))
                    {
                        error = string.Format("由于{0},推送{1}发生的{2}报警消息到上级系统失败!", error,
                                              alarmLog.AlarmSource.IPDeviceName, alarmLog.AlarmType.SystemOptionName);
                        ForwardAlarmLogError forwardErr = new ForwardAlarmLogError()
                        {
                            ErrorDesc  = error,
                            CreateTime = DateTime.Now
                        };
                        MQPulish.PublishMessage("ForwardAlarmLogError", forwardErr);  //改为提示.....
                    }
                }
            });
        }
示例#10
0
 public RepositoryActionResult <AlarmLog> AddAlarmLogValue(AlarmLog alarmvalue)
 {
     try
     {
         context.AlarmLog.Add(alarmvalue);
         context.SaveChanges();
         return(new RepositoryActionResult <AlarmLog>(alarmvalue, RepositoryActionStatus.Created));
     }
     catch (Exception)
     {
         return(new RepositoryActionResult <AlarmLog>(null, RepositoryActionStatus.Error));
     }
 }
示例#11
0
        public IActionResult Post([FromBody] AlarmLog alarmlogvalue)
        {
            var newAlarmLogValue = repo.AddAlarmLogValue(alarmlogvalue);

            if (newAlarmLogValue.Status == RepositoryActionStatus.Created)
            {
                PushNotifications.AlarmNotification(alarmlogvalue);
                return(Ok());
            }
            else
            {
                return(BadRequest());
            }
        }
示例#12
0
 private void logGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
 {
     if (logGridView.SelectedRows.Count == 0)
     {
         MessageBox.Show(Resources.Warning_NoRecordSelected);
         return;
     }
     _editingLog = AlarmBLL.Current.GetByID(logGridView.SelectedRows[0].Cells["AlarmLogID"].Value.ToInt32TryParse());
     if (_editingLog != null)
     {
         noteTextBox.Text   = _editingLog.Note;
         saveButton.Enabled = true;
     }
 }
示例#13
0
 public bool Insert(AlarmLog obj)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         Validate(obj);
         if (AppContext.Current.OpenProject != null)
         {
             obj.ProjectID = AppContext.Current.OpenProject.ProjectID;
         }
         obj.IsEnded = false;
         entityConntext.AlarmLogs.AddObject(obj);
         return(entityConntext.SaveChanges() > 0);
     }
 }
示例#14
0
 public bool Update(AlarmLog obj)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         SecurityBLL.Current.CheckPermissionThrowException(new string[]
         {
             SecurityBLL.ROLE_ALARM_EDIT,
             SecurityBLL.ROLE_ALARM_MANAGE
         });
         Validate(obj);
         obj.LastEditedDate = DateTime.Now;
         obj.LastEditedUser = AppContext.Current.LogedInUser.Username;
         entityConntext.AttachUpdatedObject(obj);
         return(entityConntext.SaveChanges() > 0);
     }
 }
示例#15
0
        void AddAlarmLog(byte alarmType, DateTime date, bool testOnly)
        {
            if (testOnly)
            {
                LogService.Logger.Debug(string.Format("AddAlarm({0},{1})", alarmType, date.ToString("HH:mm:ss")));
                return;
            }

            using (var ctx = new NovaAlertContext())
            {
                var al = new AlarmLog()
                {
                    AlarmType = alarmType, AlarmTime = date
                };
                ctx.AlarmLogs.Add(al);
                ctx.SaveChanges();
            }
        }
示例#16
0
        public static void Main(string[] args)
        {
            AlarmLog al = new AlarmLog()
            {
                AlarmLogId    = Guid.NewGuid(),
                AlarmSourceId = Guid.NewGuid(),
                Description   = "移动侦测报警.....",
                AlarmTypeId   = Guid.Parse("A0002016-E009-B019-E001-ABCD00001001"),
                TimeCreated   = DateTime.Now,
                AlarmLevelId  = Guid.Parse("A0002016-E009-B019-E001-ABCD12900001"),
            };

            Console.WriteLine(JsonConvert.SerializeObject(al));
            Console.ReadLine();

            var host = new WebHostBuilder()
                       .UseKestrel()
                       .UseStartup <Startup>()
                       .Build();

            host.Run();
        }
示例#17
0
 public IActionResult GetById(Guid id)
 {
     using (var db = new AllInOneContext.AllInOneContext())
     {
         try
         {
             AlarmLog alarmLog = db.AlarmLog.FirstOrDefault(t => t.AlarmLogId.Equals(id));
             if (alarmLog == null || !alarmLog.AlarmLogId.Equals(id))
             {
                 return(NotFound());
             }
             return(new OkObjectResult(alarmLog));
         }
         catch (Exception ex)
         {
             _logger.LogError("获取报警日志记录{0}异常,Message:{1}\r\n,StackTrace:{2}.", id, ex.Message, ex.StackTrace);
             return(BadRequest(new ApplicationException()
             {
                 ErrorCode = "Unknow", ErrorMessage = ex.Message
             }));
         }
     }
 }
示例#18
0
        public void Run()
        {
            Task.Factory.StartNew(() =>
            {
                _logger.LogInformation("Start forward alarmlog task......");
                while (true)
                {
                    if (m_alarmLogList.Count == 0)
                    {
                        m_forwardWaiter.WaitOne(-1);
                    }
                    using (var db = new AllInOneContext.AllInOneContext())
                    {
                        //默认第一个为本地应用中心节点()
                        var topApplicationCenter = db.Organization.Include(t => t.Center).
                                                   OrderBy(t => t.OrganizationFullName).Select(t => t.Center).
                                                   FirstOrDefault();

                        if (topApplicationCenter == null || topApplicationCenter.EndPoints == null || topApplicationCenter.EndPoints.Count == 0)
                        {
                            _logger.LogInformation("未配置上级服务器IP,报警上传等待10 min后再检测......");
                            m_forwardWaiter.WaitOne(10 * 60000);
                            continue;
                        }

                        EndPointInfo endPoint = topApplicationCenter.EndPoints.First();
                        string url            = string.Format("http://{0}:{1}/Alarm/AlarmLog/Publish", endPoint.IPAddress, endPoint.Port);
                        //上传报警记录
                        string error = "";
                        lock (m_logLockObj)
                        {
                            for (int i = m_alarmLogList.Count - 1; i >= 0; i--)
                            {
                                AlarmLog log = m_alarmLogList[i];
                                if (log.UploadCount < 10)
                                {
                                    var result = HttpClientHelper.Post <AlarmLog>(log, url);
                                    if (result.Success)
                                    {
                                        log.UploadStatus = 1;  //上传完成
                                    }
                                    else
                                    {
                                        log.UploadCount++;
                                    }
                                    db.AlarmLog.Update(log);
                                    db.SaveChanges();
                                    m_alarmLogList.RemoveAt(i);
                                }
                                else if (log.UploadCount == 10)
                                {
                                    //上传次数达到10次,记录....
                                    log.UploadCount++;
                                    db.AlarmLog.Update(log);
                                    db.SaveChanges();
                                    m_alarmLogList.Remove(log);
                                    //广播消息
                                    error = string.Format("多次尝试推送报警失败,取消推送{0}发生的{1}报警消息到上级系统!",
                                                          log.AlarmSource.IPDeviceName, log.AlarmType.SystemOptionName);
                                    ForwardAlarmLogError forwardErr = new ForwardAlarmLogError()
                                    {
                                        ErrorDesc  = error,
                                        CreateTime = DateTime.Now
                                    };
                                    MQPulish.PublishMessage("ForwardAlarmLogError", forwardErr);
                                }
                            }
                        }
                    }
                    // m_uploadWaiter.WaitOne(10 * 1000);
                }
            });
        }
示例#19
0
 public static int Update(AlarmLog t)
 {
     return(BaseDA.Update <AlarmLog>("UpdateAlarmLog", t));
 }
示例#20
0
 public static object Insert(AlarmLog t)
 {
     return(BaseDA.Insert <AlarmLog>("InsertAlarmLog", t));
 }
示例#21
0
        private void InsertSensorData(Equipment ex, Sensor sx, DateTime dt, Alarm al)
        {
            try
            {
                decimal        value  = 0;
                List <decimal> allVal = new List <decimal>();

                List <SensorData> dr = new List <SensorData>();

                DateTime dstart = new DateTime(dt.Year, dt.Month, dt.Day);

                DateTime dend = dt.AddHours(24);
                Random   rx   = new Random();
                while (dstart < dend)
                {
                    double v = 0;
                    if (sx.Sensor_Category.Equals("Efficiency"))
                    {
                        v = rx.NextDouble() * 100;
                        if (v < 50)
                        {
                            v += 40;
                        }
                        if (v > 90)
                        {
                            v = 90;
                        }
                    }
                    else if (sx.Sensor_Category.Equals("Up Time"))
                    {
                        v = rx.NextDouble() * 3;
                        if (v < 1)
                        {
                            v += 1;
                        }
                        if (v > 3)
                        {
                            v = 3;
                        }
                    }
                    else if (sx.Sensor_Category.Equals("Power Consumed"))
                    {
                        v = (0.3 + rx.NextDouble()) * 15;
                    }
                    else if (sx.Sensor_Category.Equals("Cost"))
                    {
                        v = rx.NextDouble() * 10;
                    }
                    else
                    {
                        v = (0.3 + rx.NextDouble()) * 20;
                    }
                    SensorData sxx = new SensorData();
                    sxx.Related_Equipment  = ex.Record_ID.ToString();
                    sxx.Related_Sensor     = sx.Record_ID.ToString();
                    sxx.TimeStamp          = dstart.ToString("s") + "Z";
                    sxx.TimeStampDt        = DateTime.SpecifyKind(dstart, DateTimeKind.Utc);
                    sxx.Sensor_Name_Lookup = sx.Tag.ToLower().Replace("/", "_");
                    sxx.Value    = Math.Round(v, 4).ToString();
                    sxx.DecValue = Math.Round(v, 4);

                    sxx.Site   = ex.Site_Name_Lookup;
                    sxx.SiteId = ex.Related_Site;

                    sxx.EquipmentName = ex.Equipment_Name;

                    allVal.Add((decimal)sxx.DecValue);
                    dr.Add(sxx);
                    dstart = dstart.AddHours(3);
                }

                InfluxConnector conn = new InfluxConnector(envconfiguration.GetSection("InfluxServer").Value,
                                                           envconfiguration.GetSection("InfluxToken").Value,
                                                           envconfiguration.GetSection("InfluxBucket").Value,
                                                           envconfiguration.GetSection("InfluxOrg").Value);
                conn.WriteData(dr);

                SensorData s = new SensorData();
                s.Related_Equipment  = ex.Record_ID.ToString();
                s.Related_Sensor     = sx.Record_ID.ToString();
                s.TimeStamp          = dt.ToString("s") + "Z";
                s.TimeStampDt        = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
                s.Sensor_Name_Lookup = sx.Tag.ToLower().Replace("/", "_");


                if (sx.Sensor_Category.Equals("Efficiency"))
                {
                    value = allVal.Average();
                }
                else
                {
                    value = allVal.Sum();
                }

                s.Value = value.ToString();


                List <SensorData> dx = UpsertData <SensorData>("SensorData", s, SensorData.fieldIds);
                if (dx.Count > 0)
                {
                    // Alarm
                    if (al != null)
                    {
                        bool    isAlarm = false;
                        decimal alVal   = Decimal.Parse(al.Formula_Value);
                        if (al.Formula_Operator.Equals(">"))
                        {
                            if (value > alVal)
                            {
                                isAlarm = true;
                            }
                        }
                        else if (al.Formula_Operator.Equals("<"))
                        {
                            if (value < alVal)
                            {
                                isAlarm = true;
                            }
                        }
                        else if (al.Formula_Operator.Equals(">="))
                        {
                            if (value >= alVal)
                            {
                                isAlarm = true;
                            }
                        }
                        else if (al.Formula_Operator.Equals("<="))
                        {
                            if (value <= alVal)
                            {
                                isAlarm = true;
                            }
                        }
                        else if (al.Formula_Operator.Equals("=="))
                        {
                            if (value == alVal)
                            {
                                isAlarm = true;
                            }
                        }

                        if (isAlarm)
                        {
                            AlarmLog a = new AlarmLog();
                            a.Alarm_Text           = al.Alarm_Name + " Raised - " + al.Priority + " for " + ex.Site_Name_Lookup + "-" + ex.Equipment_Name;
                            a.Related_Equipment    = ex.Record_ID.ToString();
                            a.Related_Sensor_Datum = dx[0].Record_ID.ToString();
                            a.Related_Alarm        = al.Record_ID.ToString();

                            List <AlarmLog> da = UpsertData <AlarmLog>("AlarmLog", a, AlarmLog.fieldIds);
                        }
                    }
                }
            }
            catch (Exception exx)
            { }
        }
示例#22
0
        private void InsertMQQTSensorData(Equipment ex, Sensor sx, DateTime dt, Alarm al, String value)
        {
            try
            {
                List <decimal> allVal = new List <decimal>();

                List <SensorData> dr = new List <SensorData>();


                double v = 0;
                Double.TryParse(value, out v);

                SensorData sxx = new SensorData();
                sxx.Related_Equipment  = ex.Record_ID.ToString();
                sxx.Related_Sensor     = sx.Record_ID.ToString();
                sxx.TimeStamp          = dt.ToString("s") + "Z";
                sxx.TimeStampDt        = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
                sxx.Sensor_Name_Lookup = sx.Tag.ToLower().Replace("/", "_");
                sxx.Value    = Math.Round(v, 4).ToString();
                sxx.DecValue = Math.Round(v, 4);

                sxx.Site   = ex.Site_Name_Lookup;
                sxx.SiteId = ex.Related_Site;

                sxx.EquipmentName = ex.Equipment_Name;

                allVal.Add((decimal)sxx.DecValue);
                dr.Add(sxx);

                //Write to Influx
                InfluxConnector conn = new InfluxConnector(envconfiguration.GetSection("InfluxServer").Value,
                                                           envconfiguration.GetSection("InfluxToken").Value,
                                                           envconfiguration.GetSection("InfluxBucket").Value,
                                                           envconfiguration.GetSection("InfluxOrg").Value);

                conn.WriteData(dr);

                String measure = sx.Tag.Replace("/", "_");

                // Get data for current day from influx
                List <FluxTable> tab = conn.ReadData(ex.Record_ID.ToString(), dt, measure).Result;

                //Get data for current day from QB
                if (tab != null)
                {
                    if (tab.Count > 0)
                    {
                        FluxTable ft = tab[0];
                        if (ft.Records.Count > 0)
                        {
                            foreach (var rec in ft.Records)
                            {
                                String  cx  = rec.GetValue().ToString();
                                decimal dxm = 0;
                                if (Decimal.TryParse(cx, out dxm))
                                {
                                    allVal.Add(dxm);
                                }
                            }
                        }
                    }
                }
                DateTime   start = new DateTime(dt.Year, dt.Month, dt.Day);
                SensorData s     = new SensorData();
                s.Related_Equipment  = ex.Record_ID.ToString();
                s.Related_Sensor     = sx.Record_ID.ToString();
                s.TimeStamp          = start.ToString("s") + "Z";
                s.TimeStampDt        = DateTime.SpecifyKind(start, DateTimeKind.Utc);
                s.Sensor_Name_Lookup = sx.Tag.ToLower().Replace("/", "_");

                decimal sensorValue = 0;

                if (sx.Sensor_Category.Equals("Efficiency"))
                {
                    sensorValue = allVal.Average();
                }
                else
                {
                    sensorValue = allVal.Sum();
                }

                s.Value = sensorValue.ToString();

                List <SensorData> sensorData = GetData <SensorData>("SensorData", SensorData.fieldIds, "{15.EX.'" + ex.Record_ID + "'}AND{8.EX." +
                                                                    sx.Record_ID + "}AND{11.OBF.'" + dt.ToString("yyyy-MM-dd") + "'}AND{11.AF.'" + dt.AddDays(-2).ToString("yyyy-MM-dd") + "'}");
                var ext = sensorData.Where(u => u.TimeStamp.Equals(dt.ToString("MM/dd/yyyy") + " 12:00:00 AM")).FirstOrDefault();

                if (ext != null)
                {
                    s.Record_ID = ext.Record_ID;
                }

                List <SensorData> dx = UpsertData <SensorData>("SensorData", s, SensorData.fieldIds);
                if (dx.Count > 0)
                {
                    // Alarm
                    if (al != null)
                    {
                        bool    isAlarm = false;
                        decimal alVal   = Decimal.Parse(al.Formula_Value);
                        if (al.Formula_Operator.Equals(">"))
                        {
                            if (sensorValue > alVal)
                            {
                                isAlarm = true;
                            }
                        }
                        else if (al.Formula_Operator.Equals("<"))
                        {
                            if (sensorValue < alVal)
                            {
                                isAlarm = true;
                            }
                        }
                        else if (al.Formula_Operator.Equals(">="))
                        {
                            if (sensorValue >= alVal)
                            {
                                isAlarm = true;
                            }
                        }
                        else if (al.Formula_Operator.Equals("<="))
                        {
                            if (sensorValue <= alVal)
                            {
                                isAlarm = true;
                            }
                        }
                        else if (al.Formula_Operator.Equals("=="))
                        {
                            if (sensorValue == alVal)
                            {
                                isAlarm = true;
                            }
                        }

                        if (isAlarm)
                        {
                            AlarmLog a = new AlarmLog();
                            a.Alarm_Text           = al.Alarm_Name + " Raised - " + al.Priority + " for " + ex.Site_Name_Lookup + "-" + ex.Equipment_Name;
                            a.Related_Equipment    = ex.Record_ID.ToString();
                            a.Related_Sensor_Datum = dx[0].Record_ID.ToString();
                            a.Related_Alarm        = al.Record_ID.ToString();

                            List <AlarmLog> da = UpsertData <AlarmLog>("AlarmLog", a, AlarmLog.fieldIds);
                        }
                    }
                }
            }
            catch (Exception exx)
            { }
        }
示例#23
0
        /// <summary>
        /// Check sensor value and auto add alarm log if it is out of range.
        /// Non auto save changed to database, you must call entityConntext.SaveChanges() to save changed.
        /// </summary>
        /// <param name="sensorValue"></param>
        /// <returns></returns>
        public bool CheckAlarm(SensorValue sensorValue)
        {
            var sensor = sensorValue.Sensor;

            if (sensor.AlarmEnabled)
            {
                if ((sensor.MinValue != null && sensor.MinValue > sensorValue.CalcValue) || (sensor.MaxValue != null && sensor.MaxValue < sensorValue.CalcValue))
                {
                    if (sensor.AlarmFlag)
                    {
                        var lastAlarm =
                            sensor.AlarmLogs.LastOrDefault(
                                ent => !ent.IsEnded && ent.StartAlarmDatetime <= sensorValue.MeaTime);
                        if (lastAlarm == null || lastAlarm.CalcValue == sensorValue.CalcValue)
                        {
                            return(false);
                        }
                    }
                    // Add Alarm
                    var alarm = new AlarmLog();
                    alarm.SensorID = sensor.SensorID;
                    // Set project ID
                    alarm.ProjectID = sensor.ProjectID;

                    alarm.CalcValue          = sensorValue.CalcValue;
                    alarm.IsEnded            = false;
                    alarm.StartAlarmDatetime = sensorValue.MeaTime;
                    alarm.Title = sensor.Logger.Name + " - " + sensor.Name;
                    // Edited by binhpro 23/11/2012
                    decimal range = sensor.MaxValue.Value - sensor.MinValue.Value;
                    if (range == 0)
                    {
                        range = sensor.MaxValue.Value;
                    }

                    if (alarm.CalcValue < sensor.MinValue && range != 0)
                    {
                        alarm.Title += " - dưới ngưỡng " + Math.Round(Math.Abs((decimal)((sensor.MinValue - alarm.CalcValue) / range * 100)), 0) + " %";
                    }
                    else if (alarm.CalcValue > sensor.MaxValue && range != 0)
                    {
                        alarm.Title += " - vượt ngưỡng " + Math.Round(Math.Abs((decimal)((alarm.CalcValue - sensor.MaxValue) / range * 100)), 0) + " %";
                    }
                    alarm.Title += " - " + alarm.StartAlarmDatetime;
                    // Set Alarm Flag Of Sensor TRUE
                    sensor.AlarmFlag = true;
                    sensor.AlarmLogs.Add(alarm);
                    return(true);
                }
                if (sensor.AlarmFlag)
                {
                    // Set Alarm Flag Of Sensor FALSE
                    sensor.AlarmFlag = false;
                    // Close All Alarm Log Before
                    var logs =
                        sensor.AlarmLogs.Where(ent => !ent.IsEnded && ent.StartAlarmDatetime <= sensorValue.MeaTime);
                    foreach (var alarmLog in logs)
                    {
                        alarmLog.IsEnded          = true;
                        alarmLog.EndAlarmDatetime = sensorValue.MeaTime;
                    }
                    // entityConntext.SaveChanges();
                }
                return(false);
            }
            return(false);
        }
示例#24
0
        private void Run()
        {
            while (WaitHandle.WaitAny(m_WaitHandles) == 0)
            {
                if (m_alarmLogQueue.Count == 0)
                {
                    m_queueThreadSemaphore.Reset();
                }

                //出列,处理
                AlarmLog alarmLog  = null;
                bool     dequeueOk = m_alarmLogQueue.TryDequeue(out alarmLog);
                if (dequeueOk)
                {
                    //报警联动
                    using (var db = new AllInOneContext.AllInOneContext())
                    {
                        try
                        {
                            var setting = GetAlarmSetting(db, alarmLog);
                            if (setting != null)
                            {
                                int code = 0;
                                if (Int32.TryParse(setting.AlarmSource.Organization.OrganizationCode, out code))
                                {
                                    setting.AlarmSource.IPDeviceCode = code;
                                }
                                Plan plan = null;
                                DeviceAlarmStatus status = null;
                                //本地广播报警消息
                                MQPulish.PublishMessage("AlarmLog", alarmLog);
                                if (alarmLog.AlarmStatusId.Equals(Guid.Parse("A0002016-E009-B019-E001-ABCD13100001"))) //执行预案,状态未确认
                                {
                                    if (ScheduleUtility.IsValidSchedule(setting.Schedule, DateTime.Now))               //符合当前排班的情况
                                    {
                                        ////本地广播报警消息
                                        //MQPulish.PublishMessage("AlarmLog", alarmLog);
                                        plan = db.Plan.Include(t => t.Actions).ThenInclude(t => t.PlanActions).ThenInclude(t => t.Action).FirstOrDefault(t => t.PlanId.Equals(setting.BeforePlanId));
                                    }
                                }
                                else if (alarmLog.AlarmStatusId.Equals(Guid.Parse("A0002016-E009-B019-E001-ABCD13100002")))  //执行应急预案
                                {
                                    //预案确认
                                    plan = db.Plan.Include(t => t.Actions).ThenInclude(t => t.PlanActions).ThenInclude(t => t.Action).FirstOrDefault(t => t.PlanId.Equals(setting.EmergencyPlanId));

                                    //哨位报警,确认需推送报警确认/取消到哨位中心服务
                                    status = GetDeviceAlarmStatus(db, setting, true);
                                }
                                else if (alarmLog.AlarmStatusId.Equals(Guid.Parse("A0002016-E009-B019-E001-ABCD13100003"))) //报警取消,停止联动动作
                                {
                                    //哨位报警,取消需推送报警确认/取消到哨位中心服务
                                    status = GetDeviceAlarmStatus(db, setting, false);
                                    StopPlan(setting);
                                }
                                else if (alarmLog.AlarmStatusId.Equals(Guid.Parse("A0002016-E009-B019-E001-ABCD13100004"))) //停止联动动作,已关闭
                                {
                                    status = GetDeviceAlarmStatus(db, setting, false);
                                    StopPlan(setting);
                                }

                                //找到满足条件的预案,发送到任务服务,启动预案
                                if (plan != null)
                                {
                                    plan.PlanTrigger = new PlanTriggerSource()
                                    {
                                        AlarmSource     = setting.AlarmSource,
                                        AlarmType       = setting.AlarmType,
                                        BeforePlanId    = setting.BeforePlanId,
                                        EmergencyPlanId = setting.EmergencyPlanId,
                                        AlarmLogId      = alarmLog.AlarmLogId
                                    };
                                    StartPlan(plan);
                                }
                                if (status != null)
                                {
                                    SendAlarmStatusToASCS(status, setting.AlarmSource.OrganizationId);
                                }
                            }
                            else
                            {
                                _logger.LogInformation("未配置报警,没有任务联动响应!!!!");
                            }
                        }
                        catch (Exception ex)
                        {
                            _logger.LogError("报警处理异常,Message:{0}\r\nStackTrace:{1}", ex.Message, ex.StackTrace);
                        }
                    }
                }
            }
        }
示例#25
0
 public void AddAlarmLogAction(AlarmLog alarmLog)
 {
     m_alarmLogQueue.Enqueue(alarmLog);
     m_queueThreadSemaphore.Set();
 }
 public void CreateAlarmLog(AlarmLog alarmLog)
 {
     _alarmRepository.AddAlarmLog(alarmLog);
 }
 public void AddAlarmLog(AlarmLog alarmLog)
 {
     _ctx.AlarmLogs.Add(alarmLog);
     _ctx.SaveChanges();
 }
示例#28
0
 public IActionResult publish([FromBody] AlarmLog alarmLog)
 {
     MQPulish.PublishMessage("ForwardAlarmProcessed", alarmLog);
     return(Ok());
 }