示例#1
0
文件: ASCSApi.cs 项目: wpmyj/Server-1
        /// <summary>
        /// 确认/取消哨位报警
        /// </summary>
        /// <returns></returns>
        public HttpRequestResult SendDeviceAlarmStatus(DeviceAlarmStatus status)
        {
            string url = string.Format(@"http://{0}:{1}/ASCS/SentinelAlarmStatus", ASCS.EndPoints[0].IPAddress, ASCS.EndPoints[0].Port);

            _logger.LogInformation("发送报警状态确认 Begin.\r\nUrl:{0},\r\n Protocol:{1}...", url, JsonUtility.CamelCaseSerializeObject(status));
            var result = HttpClientHelper.Put(status, url);

            _logger.LogInformation("发送报警状态确认 End,retur {0}...", result);
            return(result);
        }
示例#2
0
        /// <summary>
        /// 获取报警推送到哨位中心的状态
        /// </summary>
        /// <param name="db"></param>
        /// <param name="setting"></param>
        /// <param name="alarmStatus"></param>
        /// <returns></returns>
        private DeviceAlarmStatus GetDeviceAlarmStatus(AllInOneContext.AllInOneContext db, AlarmSetting setting, bool alarmStatus)
        {
            DeviceAlarmStatus status = null;
            var deviceType           = db.SystemOption.FirstOrDefault(t => t.SystemOptionId.Equals(setting.AlarmSource.DeviceTypeId));

            if (deviceType != null)
            {
                if (deviceType.ParentSystemOptionId.Equals(Guid.Parse("A0002016-E009-B019-E001-ABCD11000004")))
                {
                    var sentinel = db.Sentinel.Include(t => t.DeviceInfo).FirstOrDefault(t => t.DeviceInfoId.Equals(setting.AlarmSource.IPDeviceInfoId));
                    status = new DeviceAlarmStatus()
                    {
                        DeviceCode   = sentinel.DeviceInfo.IPDeviceCode,
                        SentinelCode = sentinel.DeviceInfo.IPDeviceCode,
                        //DeviceCode = Int32.Parse(sentinel.DeviceInfo.Organization.OrganizationCode),
                        //SentinelCode = Int32.Parse(sentinel.DeviceInfo.Organization.OrganizationCode),
                        AlarmType   = setting.AlarmTypeId,
                        AlarmStatus = alarmStatus
                    };
                }
                else if (deviceType.ParentSystemOptionId.Equals(Guid.Parse("A0002016-E009-B019-E001-ABCDEF000110")))
                {
                    //获取防区设备关联的哨位台
                    var defenceDevice = db.DefenseDevice.Include(t => t.Sentinel).ThenInclude(t => t.DeviceInfo).ThenInclude(t => t.Organization)
                                        .Include(t => t.DeviceInfo)
                                        .First(t => t.DeviceInfoId.Equals(setting.AlarmSource.IPDeviceInfoId));
                    status = new DeviceAlarmStatus()
                    {
                        DeviceCode = defenceDevice.DeviceInfo.IPDeviceCode,
                        // SentinelCode = defenceDevice.Sentinel.DeviceInfo.IPDeviceCode,
                        SentinelCode = Int32.Parse(defenceDevice.Sentinel.DeviceInfo.Organization.OrganizationCode),
                        AlarmType    = setting.AlarmTypeId,
                        AlarmStatus  = alarmStatus
                    };
                }
            }
            return(status);
        }
示例#3
0
        /// <summary>
        /// 发送报警状态到哨位中心服务
        /// </summary>
        /// <param name="db"></param>
        /// <param name="status"></param>
        /// <param name="deviceOrgId"></param>
        private void SendAlarmStatusToASCS(DeviceAlarmStatus status, Guid deviceOrgId)
        {
            Task.Run(new Action(() =>
            {
                using (var db = new AllInOneContext.AllInOneContext())
                {
                    _logger.LogInformation("推送报警状态到哨位心...");
                    Guid ascsServerType = Guid.Parse("A0002016-E009-B019-E001-ABCD11300206");

                    //哨位台挂在哨位节点上面
                    var org     = db.Organization.FirstOrDefault(t => t.OrganizationId.Equals(deviceOrgId));
                    var service = db.ServiceInfo.Include(t => t.ServerInfo).
                                  FirstOrDefault(t => t.ServiceTypeId.Equals(ascsServerType) && (
                                                     t.ServerInfo.OrganizationId.Equals(org.ParentOrganizationId) || t.ServerInfo.OrganizationId.Equals(deviceOrgId)));

                    //var service = new ServiceInfo() {
                    //    EndPointsJson = "[{\"IPAddress\":\"192.168.18.76\",\"Port\":5002}]"
                    //};
                    if (service != null)
                    {
                        try
                        {
                            ASCSApi ascs = new ASCSApi(service);
                            var r        = ascs.SendDeviceAlarmStatus(status);
                            _logger.LogInformation("推送报警状态到哨位中心结果:{0}...", r.Success);
                        }
                        catch (Exception ex)
                        {
                            _logger.LogError("发送报警状态到哨位中心异常:{0}\r\n{1}", ex.Message, ex.StackTrace);
                        }
                        return;
                    }
                }
                _logger.LogInformation("未配置哨位中心服务,取消推送....");
            }));
        }
示例#4
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);
                        }
                    }
                }
            }
        }