/// <summary> /// 处理LED报警信息 /// </summary> /// <param name="deviceInfo"></param> /// <param name="alarmRecord"></param> public bool HandleLedItem(string message, string regionCode) { try { // message = GetAlarmText(); if (!string.IsNullOrEmpty(message)) { LEDMsgModel ledMsg = new LEDMsgModel(); ledMsg.message = message; ledMsg.type = (int)EnumClass.PlanHandleTime.确警前; ledMsg.regionCode = regionCode; string msg = JsonHelper.ObjectToString(ledMsg); string url = SubSystemRouteBLL.GetLedControlRoute(); // HttpHelper.PostJsonData(url, msg, Encoding.UTF8); sendLedCmdDele.BeginInvoke(url, msg, Encoding.UTF8, null, null); Log4NetHelp.Info("调用LED接口成功!信息:" + msg); return(true); } else { Log4NetHelp.Info("待发送至LED信息为空!"); return(false); } } catch (Exception ex) { message = ""; Log4NetHelp.Info("调用LED接口失败!" + ex.Message); return(false); } }
/// <summary> /// 处理四色灯 /// </summary> /// <param name="relayId"></param> /// <returns></returns> public bool HandleRelay(string relayId, string regionCode) { try { int id = int.Parse(relayId); //查找四色灯信息 BaseRelayConfigModel baseRelayConfigModel = GetRelayConfigById(id); RelayMsgModel relayMsg = new RelayMsgModel(); relayMsg.regionCode = regionCode; relayMsg.controlId = baseRelayConfigModel.control_id; relayMsg.op = (int)EnumClass.Operation.打开; string message = JsonHelper.ObjectToString(relayMsg); // HttpHelper.PostJsonData(SubSystemRouteBLL.GetRelayControlRoute(), message, Encoding.UTF8); sendRelayCmdDele.BeginInvoke(SubSystemRouteBLL.GetRelayControlRoute(), message, Encoding.UTF8, null, null); Log4NetHelp.Info("调用四色灯接口成功!信息:" + message); return(true); } catch (Exception ex) { Log4NetHelp.Info("调用四色灯接口失败!控制编号:" + relayId + ex.Message); return(false); } }
/// <summary> /// 处理报警数据 /// </summary> /// <param name="alarmRecord"></param> public void HandlePlan(ServAlarmRecordModel alarmRecord) { try { ServExecutionTimeDAL executeTimeDal = new ServExecutionTimeDAL(); ServDeviceInfoModel deviceInfo = GetDeviceInfo(alarmRecord.alarm_code); BaseRegionConfigDAL baseRegionConfigDal = new BaseRegionConfigDAL(); if (deviceInfo != null) { BaseRegionConfigModel regionModel = baseRegionConfigDal.GetEntity(deviceInfo.region_id); //获取设备所在园区 int parentEventId = GetParentEvent(alarmRecord.alarm_event); //获取父级事件ID //查找设备预案 string alarmTime = alarmRecord.alarm_time.ToLocalTime().ToString("HH:mm:ss"); var devicePlans = CheckDevicePlanIsExist(deviceInfo.id, (int)EnumClass.PlanStatus.启用, alarmTime); DevicePlanAndTimeConfig devicePlan = devicePlans == null ? null : devicePlans.FirstOrDefault(); //目前取第一条设备预案 if (devicePlan != null) { #region 检验时间表达式 //if (TimeExpression.TimePointIsExistSpan(alarmRecord.alarm_time.ToLocalTime(), devicePlan.update_time, timeModel.execution_cycle)) //{ //} //else //{ // Log4NetHelp.Info("报警时间未在设置周期内,报警时间:" + alarmRecord.alarm_time.ToLocalTime().ToString() + " 开始时间:" + devicePlan.update_time + " 时间表达式:" + timeModel.execution_cycle); //} #endregion List <ServPlanHandleItemModel> planHandleItemList = GetPlanHandleItem(devicePlan.id, (int)EnumClass.PlanType.设备预案, (int)EnumClass.PlanHandleTime.确警前); if (planHandleItemList != null && planHandleItemList.Count != 0) { //执行设备预案,写入预案执行记录 PlanBLL planBll = new PlanBLL(); int planRecordId = planBll.AddPlanRecord(alarmRecord.id, devicePlan.id, (int)EnumClass.PlanType.设备预案); if (planRecordId > 0) { List <ServDeviceInfoModel> camerasList = null; string ledMessage = ""; HandleDevicePlanItem(planRecordId, parentEventId, regionModel, planHandleItemList, deviceInfo, alarmRecord, out camerasList, out ledMessage); // Hashtable hash = HandleDevicePlanItem(planRecordId, planHandleItemList, deviceInfo, alarmRecord,out camerasList,out ledMessage); if (hash != null && hash.Count != 0) { WebSocketMsgModel webMsg = new WebSocketMsgModel(); DevicePlanMsgModel devicePlanMsg = new DevicePlanMsgModel(); devicePlanMsg.hash = hash; devicePlanMsg.alarm = alarmRecord; devicePlanMsg.deviceInfo = deviceInfo; // devicePlanMsg.videoTime = GetAlarmVideoTime(alarmRecord.alarm_event); devicePlanMsg.videoTime = GetAlarmVideoTime(parentEventId); devicePlanMsg.camerasList = camerasList; devicePlanMsg.ledMessage = ledMessage; //用于页面显示滚动条信息 // string devicePlanMsgStr = JsonHelper.ObjectToString(devicePlanMsg); webMsg.info = devicePlanMsg; webMsg.type = (int)EnumClass.WebSocketMsgType.设备预案; string param = JsonHelper.ObjectToString(webMsg); HttpHelper.PostJsonData(SubSystemRouteBLL.GetToWebsocketRoute(), param, Encoding.UTF8); } } } else { //log:未找到相应设备预案处置项 Log4NetHelp.Info("未找到对应设备预案处置项:" + alarmRecord.alarm_code); } } else { //log 未找到设备预案或者设备预案未启用 //TODO 查找事件预案 Log4NetHelp.Info("未找到当前时间段内配置的设备预案或者设备预案未启用,继续查找事件预案"); //int parentEventId = GetParentEvent(alarmRecord.alarm_event); //获取父级事件ID if (parentEventId != -1) { var eventPlans = CheckEventPlanIsExist(alarmTime, parentEventId, (int)EnumClass.PlanStatus.启用, regionModel.id); EventPlanAndTimeConfig eventPlan = eventPlans == null ? null : eventPlans.FirstOrDefault();//目前取第一条设备预案 if (eventPlan != null) { List <ServPlanHandleItemModel> planHandleItemList = GetPlanHandleItem(eventPlan.id, (int)EnumClass.PlanType.事件预案, (int)EnumClass.PlanHandleTime.确警前);//获取事件预案处置项 if (planHandleItemList != null && planHandleItemList.Count != 0) { //执行事件预案,写入预案执行记录 PlanBLL planBll = new PlanBLL(); int planRecordId = planBll.AddPlanRecord(alarmRecord.id, eventPlan.id, (int)EnumClass.PlanType.事件预案); if (planRecordId > 0) { List <ServDeviceInfoModel> camerasList = null; string ledMessage = ""; HandleEventPlanItem(planRecordId, parentEventId, regionModel, planHandleItemList, deviceInfo, alarmRecord, out camerasList, out ledMessage); // Hashtable hash = HandleDevicePlanItem(planRecordId, planHandleItemList, deviceInfo, alarmRecord,out camerasList,out ledMessage); if (hash != null && hash.Count != 0) { WebSocketMsgModel webMsg = new WebSocketMsgModel(); DevicePlanMsgModel devicePlanMsg = new DevicePlanMsgModel(); devicePlanMsg.hash = hash; devicePlanMsg.alarm = alarmRecord; devicePlanMsg.deviceInfo = deviceInfo; // devicePlanMsg.videoTime = GetAlarmVideoTime(alarmRecord.alarm_event); devicePlanMsg.videoTime = GetAlarmVideoTime(parentEventId); devicePlanMsg.camerasList = camerasList; devicePlanMsg.ledMessage = ledMessage; //用于页面显示滚动条信息 // string devicePlanMsgStr = JsonHelper.ObjectToString(devicePlanMsg); webMsg.info = devicePlanMsg; webMsg.type = (int)EnumClass.WebSocketMsgType.事件预案; string param = JsonHelper.ObjectToString(webMsg); HttpHelper.PostJsonData(SubSystemRouteBLL.GetToWebsocketRoute(), param, Encoding.UTF8); } } } else { Log4NetHelp.Info("未找到对应事件预案处置项,事件ID:" + alarmRecord.alarm_event + " 园区ID:" + regionModel.id + " 报警时间:" + alarmTime); } } else { Log4NetHelp.Info("未找到对应事件预案,事件ID:" + alarmRecord.alarm_event + " 园区ID:" + regionModel.id + " 报警时间:" + alarmTime); } } else { Log4NetHelp.Info("未找到对应事件,事件ID:" + alarmRecord.alarm_event); } } } else { //log:未找到设备alarmRecord.alarm_code Log4NetHelp.Info("未找到设备:" + alarmRecord.alarm_code); } } catch (Exception ex) { // Log4NetHelp.Error("业务层处理报警数据失败!" + ex.Message); Log4NetHelp.Error("业务层处理报警数据失败!" + ex.Message); } }
/// <summary> /// 处理报警数据 /// </summary> /// <param name="message">报警数据</param> /// <param name="mark">驱动标识</param> /// <param name="dataType">数据类型</param> /// <param name="subsystem">子系统类型</param> /// <returns></returns> protected virtual bool HandleAlarmData(object message, string mark, int dataType, int subsystem) { try { AlarmInfoModel alarmInfo = JsonHelper.StringToObject <AlarmInfoModel>(message.ToString()); if (alarmInfo != null) { ServAlarmRecordModel alarmRecord = new ServAlarmRecordModel(); ServAlarmRecordDAL alarmRecordDal = new ServAlarmRecordDAL(); InterfaceData data = new InterfaceData(); alarmRecord.alarm_cache_status = alarmInfo.alarm_cache_status; alarmRecord.alarm_code = alarmInfo.code; #region 旧版 //if (string.IsNullOrEmpty(alarmInfo.alarm_event) || alarmInfo.alarm_event == "") //{ // alarmRecord.alarm_event = -1; //} //else //{ // alarmRecord.alarm_event = GetBaseEventType(alarmInfo.alarm_event); //} #endregion #region 新版 alarmRecord.alarm_event = alarmInfo.alarm_event; #endregion alarmRecord.alarm_level = alarmInfo.alarm_level; alarmRecord.alarm_location = alarmInfo.alarm_location; alarmRecord.alarm_name = alarmInfo.alarm_name; alarmRecord.alarm_subsystem = alarmInfo.alarm_subsystem; alarmRecord.alarm_text = alarmInfo.alarm_text; alarmRecord.alarm_time = alarmInfo.alarm_time.ToLocalTime(); alarmRecord.alarm_type = alarmInfo.alarm_type; alarmRecord.confirm_alarm_text = ""; alarmRecord.confirm_alarm_time = alarmInfo.alarm_time.ToLocalTime();//确警时间为报警时间(表示未确警) alarmRecord.confirm_person_id = -1; alarmRecord.confirm_result = -1; alarmRecord.confirm_state = (int)EnumClass.ConfirmAlarmState.未确警; int id = alarmRecordDal.AddEntity(alarmRecord); if (id > 0) { alarmRecord.id = id; // string paramData = JsonHelper.ObjectToString(alarmRecord); data.data = alarmRecord; data.dataType = dataType; data.mark = mark; data.subSysType = subsystem; string jsonStr = JsonHelper.ObjectToString(data); HttpHelper.PostJsonData(SubSystemRouteBLL.GetToLogicAlarmRoute(), jsonStr, Encoding.UTF8); return(true); } else { //log:报警数据插入数据库失败+message+mark+dataType+subsystem Log4NetHelp.Info("插入报警数据失败!" + "内容:" + message.ToString() + "驱动标识:" + mark + "数据类型:" + dataType + "子系统类型:" + subsystem); return(false); } } else { Log4NetHelp.Info("数据体格式不正确" + message.ToString()); return(false); } } catch (Exception ex) { //log:处理报警数据失败+message+mark+dataType+subsystem+ex.message string msgStr = JsonHelper.ObjectToString(message); Log4NetHelp.Error("处理报警数据失败!" + "内容:" + msgStr + "驱动标识:" + mark + "数据类型:" + dataType + "子系统类型:" + subsystem + "错误信息:" + ex.Message); return(false); } }