/// <summary> /// 获取未确警信息 /// </summary> /// <returns></returns> public List <ServAlarmRecordModel> GetNotPoliceNum() { ServAlarmRecordModel servAlarmRecordModel = new ServAlarmRecordModel(); servAlarmRecordModel.confirm_state = (int)EnumClass.ConfirmAlarmState.未确警; return(_servAlarmRecordDal.GetNotPoliceNum(servAlarmRecordModel)); }
/// <summary> /// 处理预案关联人 /// </summary> /// <param name="handleItemId"></param> /// <param name="planRecordId"></param> /// <param name="planType"></param> /// <param name="confirmType"></param> /// <returns></returns> public bool HandlePlanPerson(int handleItemId, ServAlarmRecordModel alarmRecord, int handleRecordId) { try { List <ServPlanPersonModel> personList = GetPlanPersonList(handleItemId); if (personList != null) { for (int i = 0; i < personList.Count; i++) { if (personList[i].is_message == 1)//判断是否发短信 { //TODO调用发短信接口,并记录到数据库 //1:获取短信模板和短信内容(模板应该固定) //2:调用发送短信接口 //3:将短信记录数据库(短信记录及关联记录) } } } return(true); } catch (Exception ex) { Log4NetHelp.Error("处理预案关联人失败!预案处置项ID:" + handleItemId + "预案处置项记录ID:" + handleRecordId + "错误信息:" + ex.Message); return(false); } }
/// <summary> /// 查找预案处置项执行结果记录 /// 先根据报警ID查找预案执行记录planRecordId,再通过planRecordId查找Serv_Plan_ItemResult /// </summary> /// <param name="alarmId"></param> /// <returns></returns> private PlanItemHandledInfo PlanItemResultList(ServAlarmRecordModel alarmRecord) { PlanItemHandledInfo handleInfoModel = new PlanItemHandledInfo(); try { ServPlanRecordDAL planRecordDal = new ServPlanRecordDAL(); ServPlanItemResultDAL planItemResultDal = new ServPlanItemResultDAL(); ServPlanHandleItemDAL planHandleItemDal = new ServPlanHandleItemDAL(); ServPlanHandleItemCameraDAL planHandleItemCameraDal = new ServPlanHandleItemCameraDAL(); // ServAlarmRecordModel alarmRecord = _servAlarmRecordDal.GetEntity(alarmId); //查找预案执行记录 ServPlanRecordModel planRecord = planRecordDal.GetEntityByAlarmId(alarmRecord.id); if (planRecord != null) { //查找预案处置项记录 List <ServPlanItemResultModel> planItemRecordList = planItemResultDal.GetEntitiesByPlanRecordId(planRecord.id); if (planItemRecordList != null) { handleInfoModel = TranPlanItemRecord(planRecord.plan_type, planItemRecordList, alarmRecord.alarm_event, alarmRecord.alarm_time); } else { //log 根据预案执行记录ID未找到预案处置项记录 } //查找关联摄像头信息(事件预案无关联摄像头) //if (planRecord.plan_type == (int)EnumClass.PlanType.事件预案) //{ // ServPlanHandleItemModel planHandleItemModel = planHandleItemDal.GetPlanHandleItemByTypeAndId(planRecord.plan_id, planRecord.plan_type, (int)EnumClass.EventPlanDefaultOptions.关联摄像头); // if (planHandleItemModel != null) // { // handleInfoModel.cameraList = planHandleItemCameraDal.GetHandledCameras(planHandleItemModel.id); // } //} if (planRecord.plan_type == (int)EnumClass.PlanType.设备预案) { ServPlanHandleItemModel planHandleItemModel = planHandleItemDal.GetPlanHandleItemByTypeAndId(planRecord.plan_id, planRecord.plan_type, (int)EnumClass.DevicePlanDefaultOptions.关联摄像头); if (planHandleItemModel != null) { handleInfoModel.cameraList = planHandleItemCameraDal.GetHandledCameras(planHandleItemModel.id); } } } else { //log 根据alarmId查找预案执行记录为null } handleInfoModel.alarmRecord = alarmRecord; } catch (Exception ex) { throw ex; } return(handleInfoModel); }
/// <summary> /// 获取指定报警预案执行结果 /// </summary> /// <param name="alarmId"></param> /// <returns></returns> public PlanItemHandledInfo GetPlanItemResultList(int alarmId) { try { ServAlarmRecordModel model = _servAlarmRecordDal.GetEntity(alarmId); return(PlanItemResultList(model)); } catch (Exception ex) { throw ex; } }
/// <summary> /// 获取最新报警预案执行结果 /// </summary> /// <returns></returns> public PlanItemHandledInfo GetLastPlanItemResultList() { try { ServAlarmRecordModel model = _servAlarmRecordDal.GetLastAlarmRecord(); return(PlanItemResultList(model)); } catch (Exception ex) { throw ex; } }
/// <summary> /// 获取未确警条数 /// </summary> /// <param name="newentity"></param> /// <returns></returns> public List <ServAlarmRecordModel> GetNotPoliceNum(ServAlarmRecordModel newentity) { try { List <ServAlarmRecordModel> list = mapContext.QueryForList <ServAlarmRecordModel>("GetNotPoliceNum", newentity).ToList(); return(list); } catch (Exception ex) { throw ex; } }
/// <summary> /// 获取今日报警数 /// </summary> /// <returns></returns> public List <ServAlarmRecordModel> GetAlarmNumToday() { try { ServAlarmRecordModel model = new ServAlarmRecordModel(); List <ServAlarmRecordModel> list = mapContext.QueryForList <ServAlarmRecordModel>("GetAlarmNumToday", model).ToList(); return(list); } catch (Exception ex) { throw ex; } }
/// <summary> /// 获取前几条报警 /// </summary> /// <param name="num"></param> /// <returns></returns> public List <ServAlarmRecordModel> GetFirstFewAlarm(int num) { try { ServAlarmRecordModel model = new ServAlarmRecordModel(); model.alarm_level = num; List <ServAlarmRecordModel> list = mapContext.QueryForList <ServAlarmRecordModel>("GetFirstFewAlarm", model).ToList(); return(list); } catch (Exception ex) { throw ex; } }
//根据告警ID获取一条确警信息 public AlarmRecordModel GetEntity(int id) { try { ServAlarmRecordModel alarm = _servAlarmRecordDal.GetEntity(id); AlarmRecordModel model = new AlarmRecordModel(); model.confirmAlarmText = alarm.confirm_alarm_text; //创建人 var a = servPersonInfoDAL.GetPersonInfoBySSOId(alarm.confirm_person_id); model.confirmPersonName = a == null ? "未知" : a.alias; model.confirmResult = Enum.GetName(typeof(EnumClass.ConfirmAlarmResult), alarm.confirm_result); model.alarmLocation = alarm.alarm_location; return(model); } catch (Exception ex) { throw ex; } }
/// <summary> /// 更新一条数据 /// </summary> /// <param name="model"></param> public bool UpdateAlarmRecordById(ServAlarmRecordModel model) { try { int res = mapContext.Update("UpdateAlarmRecord", model); if (res > 0) { return(true); } else { return(false); } } catch (Exception ex) { throw ex; } }
/// <summary> /// 将报警记录转入卷宗 /// </summary> /// <param name="alarmId"></param> private void GotoArchive(int alarmId, int ssoId, ServAlarmRecordModel alarmRecord, int handleItemId, int itemType) { try { ServVideoInfoDAL videoDal = new ServVideoInfoDAL(); ServPlanRecordDAL planRecordDal = new ServPlanRecordDAL(); ServArchiveInfoBLL archiveInfoBll = new ServArchiveInfoBLL(); ServPlanItemResultDAL planItemResultDal = new ServPlanItemResultDAL(); List <ServVideoInfoModel> videoList = videoDal.GetVideoInfoByAlarmId(alarmId);//获取下载的视频 List <ServFileInfoModel> fileInfoList = new List <ServFileInfoModel>(); ServFileInfoModel fileInfo = null; for (int i = 0; i < videoList.Count; i++) { fileInfo = new ServFileInfoModel(); fileInfo.content = "确警后转入"; fileInfo.create_time = DateTime.Now; fileInfo.file_address = videoList[i].video_path; fileInfo.file_ext_name = Path.GetExtension(videoList[i].video_path); fileInfo.file_name = videoList[i].video_name; fileInfo.file_type = (int)EnumClass.FileType.视频; fileInfo.person_id = ssoId; fileInfoList.Add(fileInfo); } bool bl = archiveInfoBll.AddservArchiveInfo(alarmRecord.alarm_name, 7, ssoId, alarmRecord.alarm_code, "", alarmRecord.id.ToString(), fileInfoList, (int)EnumClass.ArchiveStatus.新建); //插入数据库 ServPlanRecordModel planRecord = planRecordDal.GetEntityByAlarmId(alarmId); ServPlanItemResultModel result = new ServPlanItemResultModel(); result.confirm_type = (int)EnumClass.PlanHandleTime.确警后; result.content = ""; result.execute_time = DateTime.Now; result.handleitem_id = handleItemId; result.item_result = bl == true ? (int)EnumClass.PlanItemResult.成功 : (int)EnumClass.PlanItemResult.失败; result.item_type = itemType; result.plan_record_id = planRecord == null ? -1 : planRecord.id; planItemResultDal.AddEntity(result); //插入处置项处理记录 } catch (Exception ex) { throw ex; } }
/// <summary> /// 处理预案 /// </summary> /// <param name="info"></param> /// <returns></returns> public bool HandleBusiness(InterfaceData info) { try { // InterfaceData interfaceData = JsonHelper.StringToObject<InterfaceData>(info); if (info != null) { if (info.dataType == 1) //报警数据(默认类型1) { ServAlarmRecordModel alarmRecord = JsonHelper.StringToObject <ServAlarmRecordModel>(info.data.ToString()); if (alarmRecord != null) { //Log4NetHelp.Info("业务层开始处理预案!"); HandlePlan(alarmRecord); // Log4NetHelp.Info("业务层预案处理完成!"); } else { //log:报警数据转换失败 Log4NetHelp.Info("数据类型转换失败!数据:" + info.data.ToString()); } } else { //log:非报警数据 Log4NetHelp.Info("非报警数据"); } } else { //log:HandleBusiness转换子系统数据失败 Log4NetHelp.Info("业务层接收数据为空"); } return(true); } catch (Exception ex) { //log 数据处理失败+ex.message Log4NetHelp.Error("预案处理出现异常!" + ex.Message); return(false); } }
/// <summary> /// 确警 /// </summary> /// <param name="alarmId"></param> /// <param name="ssoid"></param> /// <param name="confirmResult"></param> /// <param name="location"></param> /// <param name="content"></param> /// <returns></returns> public bool ConfirmAlarm(int alarmId, int ssoid, int confirmResult, string location, string content) { try { ServAlarmRecordModel alarmRecord = _servAlarmRecordDal.GetEntity(alarmId); ServPlanRecordModel planRecord = _servPlanRecordDal.GetEntityByAlarmId(alarmId); if (alarmRecord != null) { alarmRecord.alarm_location = location; alarmRecord.confirm_alarm_text = content; alarmRecord.confirm_alarm_time = DateTime.Now; alarmRecord.confirm_person_id = ssoid; if (confirmResult == (int)EnumClass.ConfirmAlarmResult.真警执行预案) { //执行确警后预案处置项 //ServAlarmRecordModel model = _servAlarmRecordDal.GetEntity(alarmId); //string deviceCode = model.alarm_code; //DateTime alarmTime = model.alarm_time; //查找预案(获取确警后的处置项) #region 确警后操作 HandleConfirmAlarm(alarmId, ssoid, alarmRecord, planRecord); #endregion } alarmRecord.confirm_result = confirmResult; alarmRecord.confirm_state = (int)EnumClass.ConfirmAlarmState.确警; return(_servAlarmRecordDal.UpdateAlarmRecordById(alarmRecord)); } else { //log未找到报警记录,确警失败!+"alarmId"=alarmId+"ssoid"=ssoid return(false); } } catch (Exception ex) { throw ex; } }
/// <summary> /// 修改报警记录 /// </summary> /// <param name="alarmId"></param> /// <param name="location"></param> /// <param name="content"></param> /// <returns></returns> public bool UpdateAlarm(int alarmId, string location, string content) { try { ServAlarmRecordModel alarmRecord = _servAlarmRecordDal.GetEntity(alarmId); if (alarmRecord != null) { alarmRecord.alarm_location = location; alarmRecord.confirm_alarm_text = content; return(_servAlarmRecordDal.UpdateAlarmRecordById(alarmRecord)); } else { //log未找到报警记录,确警失败!+"alarmId"=alarmId+"ssoid"=ssoid return(false); } } catch (Exception ex) { throw ex; } }
public bool UpdateEntity(int id, ServAlarmRecordModel newentity) { throw new NotImplementedException(); }
/// <summary> /// 增加一条数据 /// </summary> /// <param name="entity"></param> public int AddEntity(ServAlarmRecordModel entity) { int id = (int)mapContext.Insert("InsertAlarmRecord", entity); return(id); }
/// <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="itemList"></param> /// <returns></returns> public void HandleDevicePlanItem(int planRecordId, int eventId, BaseRegionConfigModel regionModel, List <ServPlanHandleItemModel> itemList, ServDeviceInfoModel deviceInfo, ServAlarmRecordModel alarmRecord, out List <ServDeviceInfoModel> camerasList, out string ledMessage) { try { PlanItemBLL planItemBll = new PlanItemBLL(); ServPlanHandleItemModel handleItemModel = itemList.FirstOrDefault(n => n.item_type == (int)EnumClass.DevicePlanDefaultOptions.关联摄像头); if (handleItemModel != null) { HandleCamerasBLL camerasbll = new HandleCamerasBLL(); camerasList = camerasbll.GetCameras(handleItemModel.id); } else { camerasList = null; } LEDHandle ledHandle = new LEDHandle(deviceInfo, alarmRecord); ledMessage = ledHandle.GetAlarmText(); foreach (ServPlanHandleItemModel item in itemList) { switch (item.item_type) { case (int)EnumClass.DevicePlanDefaultOptions.中控室LED信息显示: // string content = ""; // LEDHandle ledHandle = new LEDHandle(deviceInfo, alarmRecord); bool ledResult = ledHandle.HandleLedItem(ledMessage, regionModel.region_code); //处理LED planItemBll.AddItemRecord((int)EnumClass.PlanHandleTime.确警前, item.id, (int)EnumClass.PlanItemResult.成功, item.item_type, planRecordId, ledMessage); //if (!ht.ContainsKey(item.item_type)) //{ // ht.Add(item.item_type, new { status = 1, info = "" });//已执行 //} //else //{ // Log4NetHelp.Info("处置项重复:" + Enum.Parse(typeof(EnumClass.DevicePlanDefaultOptions), item.item_type.ToString()).ToString()); //} AddHashTable(item.item_type, new { status = 1, info = "" }); break; case (int)EnumClass.DevicePlanDefaultOptions.关联摄像头: // ht.Add(item.item_type, new { status = 0, itemid = item.id, itemType = item.item_type, planRecordId = planRecordId });//未执行 AddHashTable(item.item_type, new { status = 0, itemid = item.id, itemType = item.item_type, planRecordId = planRecordId }); break; case (int)EnumClass.DevicePlanDefaultOptions.告警视频下载: int handleDownloadRecordId = planItemBll.AddItemRecord((int)EnumClass.PlanHandleTime.确警前, item.id, (int)EnumClass.PlanItemResult.成功, item.item_type, planRecordId, ""); if (handleDownloadRecordId > 0) //插入处置项记录成功,开始执行处置项 { VideoDownloadBLL videoDownloadBll = new VideoDownloadBLL(); bool bl = videoDownloadBll.VideoDownload(handleDownloadRecordId, eventId, alarmRecord.alarm_time.ToLocalTime(), camerasList); } // ht.Add(item.item_type, new { status = 1, info = "" });//已执行 AddHashTable(item.item_type, new { status = 1, info = "" }); break; case (int)EnumClass.DevicePlanDefaultOptions.打开告警设备附近视频: // ht.Add(item.item_type, new { status = 0, itemid = item.id, itemType = item.item_type, planRecordId = planRecordId, info = "" });//未执行 AddHashTable(item.item_type, new { status = 0, itemid = item.id, itemType = item.item_type, planRecordId = planRecordId, info = "" }); break; case (int)EnumClass.DevicePlanDefaultOptions.控制中心声光蜂鸣器开启: HandleRelayBLL handleRelayBll = new HandleRelayBLL(); handleRelayBll.HandleRelay(item.ext1, regionModel.region_code); planItemBll.AddItemRecord((int)EnumClass.PlanHandleTime.确警前, item.id, (int)EnumClass.PlanItemResult.成功, item.item_type, planRecordId, ""); // ht.Add(item.item_type, new { status = 1, info = "" });//已执行 AddHashTable(item.item_type, new { status = 1, info = "" }); break; case (int)EnumClass.DevicePlanDefaultOptions.相关摄像头上大屏: // ht.Add(item.item_type, new { status = 0, itemid = item.id, itemType = item.item_type, planRecordId = planRecordId, info = "" });//未执行 AddHashTable(item.item_type, new { status = 0, itemid = item.id, itemType = item.item_type, planRecordId = planRecordId, info = "" }); break; case (int)EnumClass.DevicePlanDefaultOptions.通知其他负责人: PlanPersonBLL planPersonBll = new PlanPersonBLL(); int handlePersonRecordId = planItemBll.AddItemRecord((int)EnumClass.PlanHandleTime.确警前, item.id, (int)EnumClass.PlanItemResult.失败, item.item_type, planRecordId, "暂未设置短信平台"); if (handlePersonRecordId > 0) //插入处置项记录成功,开始执行处置项 { bool bl = planPersonBll.HandlePlanPerson(item.id, alarmRecord, handlePersonRecordId); } // ht.Add(item.item_type, new { status = 1, info = "" }); AddHashTable(item.item_type, new { status = 1, info = "" }); break; case (int)EnumClass.DevicePlanDefaultOptions.通知设备网格第一负责人: //查找第一负责人,发送短信,记录短信记录与执行结果 // planItemBll.AddItemRecord((int)EnumClass.PlanHandleTime.确警前, item.id, item.item_type, planRecordId, ""); // ht.Add(item.item_type, new { status = 1, info = "" }); int dutyPersonRecordId = planItemBll.AddItemRecord((int)EnumClass.PlanHandleTime.确警前, item.id, (int)EnumClass.PlanItemResult.失败, item.item_type, planRecordId, "暂未设置短信平台"); AddHashTable(item.item_type, new { status = 1, info = "" }); break; default: break; } } } catch (Exception ex) { camerasList = null; ledMessage = ""; Log4NetHelp.Info("处理设备预案失败!报警记录ID:" + planRecordId + " " + ex.Message); } // return ht; }
/// <summary> /// 查找事件预案并处理 /// </summary> public void HandleEventPlanItem(int planRecordId, int eventId, BaseRegionConfigModel regionModel, List <ServPlanHandleItemModel> planHandleItemList, ServDeviceInfoModel deviceInfo, ServAlarmRecordModel alarmRecord, out List <ServDeviceInfoModel> camerasList, out string ledMessage) { try { PlanItemBLL planItemBll = new PlanItemBLL(); //ServPlanHandleItemModel handleItemModel = planHandleItemList.FirstOrDefault(n => n.item_type == (int)EnumClass.EventPlanDefaultOptions.打开周围摄像头); //if (handleItemModel != null) //{ // HandleCamerasBLL camerasbll = new HandleCamerasBLL(); // camerasList = camerasbll.GetEventPlanCameras(deviceInfo.id, int.Parse(handleItemModel.ext2), int.Parse(handleItemModel.ext3), int.Parse(handleItemModel.ext4)); //} //else //{ // camerasList = null; //} camerasList = null; LEDHandle ledHandle = new LEDHandle(deviceInfo, alarmRecord); ledMessage = ledHandle.GetAlarmText(); //单独处理打开周围摄像头 var cameraEventList = planHandleItemList.Where(n => n.item_type == (int)EnumClass.EventPlanDefaultOptions.打开周围摄像头); if (cameraEventList != null && cameraEventList.Count() > 0) { AddEventHashTable((int)EnumClass.EventPlanDefaultOptions.打开周围摄像头, new { status = 0, planRecordId = planRecordId, model = cameraEventList.ToList() }); } foreach (ServPlanHandleItemModel item in planHandleItemList) { switch (item.item_type) { case (int)EnumClass.EventPlanDefaultOptions.中控室LED信息显示: bool ledResult = ledHandle.HandleLedItem(ledMessage, regionModel.region_code); //处理LED planItemBll.AddItemRecord((int)EnumClass.PlanHandleTime.确警前, item.id, (int)EnumClass.PlanItemResult.成功, item.item_type, planRecordId, ledMessage); AddHashTable(item.item_type, new { status = 1, info = "" }); break; case (int)EnumClass.EventPlanDefaultOptions.告警视频下载: //int handleDownloadRecordId = planItemBll.AddItemRecord((int)EnumClass.PlanHandleTime.确警前, item.id, item.item_type, planRecordId, ""); //if (handleDownloadRecordId > 0) //插入处置项记录成功,开始执行处置项 //{ // VideoDownloadBLL videoDownloadBll = new VideoDownloadBLL(); // bool bl = videoDownloadBll.VideoDownload(handleDownloadRecordId, eventId, alarmRecord.alarm_time.ToLocalTime(), camerasList); //} //AddHashTable(item.item_type, new { status = 1, info = "" }); AddHashTable(item.item_type, new { status = 0, itemid = item.id, itemType = item.item_type, planRecordId = planRecordId }); break; //case (int)EnumClass.EventPlanDefaultOptions.打开周围摄像头: // AddEventHashTable(item.item_type, new { status = 0, itemid = item.id, itemType = item.item_type, planRecordId = planRecordId, model = item }); // break; case (int)EnumClass.EventPlanDefaultOptions.控制中心声光蜂鸣器开启: HandleRelayBLL handleRelayBll = new HandleRelayBLL(); handleRelayBll.HandleRelay(item.ext1, regionModel.region_code); planItemBll.AddItemRecord((int)EnumClass.PlanHandleTime.确警前, item.id, (int)EnumClass.PlanItemResult.成功, item.item_type, planRecordId, ""); // ht.Add(item.item_type, new { status = 1, info = "" });//已执行 AddHashTable(item.item_type, new { status = 1, info = "" }); break; case (int)EnumClass.EventPlanDefaultOptions.相关摄像头上大屏: AddHashTable(item.item_type, new { status = 0, itemid = item.id, itemType = item.item_type, planRecordId = planRecordId, info = "" }); break; case (int)EnumClass.EventPlanDefaultOptions.通知其他负责人: PlanPersonBLL planPersonBll = new PlanPersonBLL(); int handlePersonRecordId = planItemBll.AddItemRecord((int)EnumClass.PlanHandleTime.确警前, item.id, (int)EnumClass.PlanItemResult.失败, item.item_type, planRecordId, "暂未设置短信平台"); if (handlePersonRecordId > 0) //插入处置项记录成功,开始执行处置项 { bool bl = planPersonBll.HandlePlanPerson(item.id, alarmRecord, handlePersonRecordId); } // ht.Add(item.item_type, new { status = 1, info = "" }); AddHashTable(item.item_type, new { status = 1, info = "" }); break; case (int)EnumClass.EventPlanDefaultOptions.通知设备网格第一负责人: int firstDutyRecordId = planItemBll.AddItemRecord((int)EnumClass.PlanHandleTime.确警前, item.id, (int)EnumClass.PlanItemResult.失败, item.item_type, planRecordId, "暂未设置短信平台"); AddHashTable(item.item_type, new { status = 1, info = "" }); break; default: break; } } } catch (Exception ex) { camerasList = null; ledMessage = ""; Log4NetHelp.Info("处理事件预案失败!预案执行记录ID:" + planRecordId + " " + ex.Message); } }
public LEDHandle(ServDeviceInfoModel deviceInfo, ServAlarmRecordModel alarmRecord) { _deviceInfo = deviceInfo; _alarmRecord = alarmRecord; }
/// <summary> /// 处理确警后预案处置项 /// </summary> /// <param name="alarmId"></param> public void HandleConfirmAlarm(int alarmId, int ssoId, ServAlarmRecordModel alarmRecord, ServPlanRecordModel planRecord) { try { ServPlanHandleItemDAL planHandleDal = new ServPlanHandleItemDAL(); List <ServPlanHandleItemModel> handleList = planHandleDal.GetConfirmPlanHandleItemByAlarmId(alarmId);//根据报警ID获取确警后处置项 if (handleList != null) { for (int i = 0; i < handleList.Count; i++) { switch (handleList[i].plan_type) { case (int)EnumClass.PlanType.设备预案: switch (handleList[i].item_type) { case (int)EnumClass.DevicePlanConfirmOptions.启动户外LED信息提示系统: AddPlanItemRecord(planRecord, handleList[i].item_type, (int)EnumClass.PlanItemResult.失败, DateTime.Now, "暂无设备", handleList[i].confirm_type, handleList[i].id); break; case (int)EnumClass.DevicePlanConfirmOptions.是否转到卷宗: GotoArchive(alarmId, ssoId, alarmRecord, handleList[i].id, handleList[i].item_type); break; case (int)EnumClass.DevicePlanConfirmOptions.通知其他负责人: AddPlanItemRecord(planRecord, handleList[i].item_type, (int)EnumClass.PlanItemResult.失败, DateTime.Now, "暂无设备", handleList[i].confirm_type, handleList[i].id); break; case (int)EnumClass.DevicePlanConfirmOptions.通知设备网格第一负责人: AddPlanItemRecord(planRecord, handleList[i].item_type, (int)EnumClass.PlanItemResult.失败, DateTime.Now, "暂无设备", handleList[i].confirm_type, handleList[i].id); break; default: break; } break; case (int)EnumClass.PlanType.事件预案: switch (handleList[i].item_type) { case (int)EnumClass.EventPlanConfirmOptions.启动户外LED信息提示系统: AddPlanItemRecord(planRecord, handleList[i].item_type, (int)EnumClass.PlanItemResult.失败, DateTime.Now, "暂无设备", handleList[i].confirm_type, handleList[i].id); break; case (int)EnumClass.EventPlanConfirmOptions.是否转到卷宗: GotoArchive(alarmId, ssoId, alarmRecord, handleList[i].id, handleList[i].item_type); break; case (int)EnumClass.EventPlanConfirmOptions.通知其他负责人: AddPlanItemRecord(planRecord, handleList[i].item_type, (int)EnumClass.PlanItemResult.失败, DateTime.Now, "暂无设备", handleList[i].confirm_type, handleList[i].id); break; case (int)EnumClass.EventPlanConfirmOptions.通知设备网格第一负责人: AddPlanItemRecord(planRecord, handleList[i].item_type, (int)EnumClass.PlanItemResult.失败, DateTime.Now, "暂无设备", handleList[i].confirm_type, handleList[i].id); break; default: break; } break; default: break; } } } } catch (Exception ex) { throw ex; } }
/// <summary> /// 获取卷宗信息 /// </summary> /// <param name="id"></param> /// <returns></returns> public ArchiveInfoList GetDossierInfo(int id) { try { //根据id 获取卷宗信息 ServArchiveInfoModel ArchiveInfo = servArchiveInfoDAL.GetEntity(id); List <AlarmRecordModel> AlarmRecorInfoList = new List <AlarmRecordModel>(); //获取报警信息 if (ArchiveInfo != null) { ServAlarmRecordModel AlarmRecorInfo = new ServAlarmRecordModel(); if (!string.IsNullOrEmpty(ArchiveInfo.alarm_id)) { string[] alarmArray = ArchiveInfo.alarm_id.Split(','); for (int i = 0; i < alarmArray.Length; i++) { AlarmRecordModel AlarmRecordModel = new AlarmRecordModel(); AlarmRecorInfo = servAlarmRecordDAL.GetEntity(Convert.ToInt32(alarmArray[i])); AlarmRecordModel.id = AlarmRecorInfo.id; // var e= baseEventTypeDAL.GetEntity(AlarmRecorInfo.alarm_event); if (AlarmRecorInfo.alarm_event != "" && !string.IsNullOrEmpty(AlarmRecorInfo.alarm_event)) { var e = baseEventTypeDAL.GetEntityByCode(AlarmRecorInfo.alarm_event); AlarmRecordModel.alarmEvent = e == null ? "未知" : e.event_name; } else { AlarmRecordModel.alarmEvent = "未知"; } AlarmRecordModel.alarmLocation = AlarmRecorInfo.alarm_location; AlarmRecordModel.subSystem = Enum.GetName(typeof(EnumClass.SubSystem), AlarmRecorInfo.alarm_subsystem); AlarmRecordModel.alarmTime = AlarmRecorInfo.alarm_time; AlarmRecorInfoList.Add(AlarmRecordModel); } } } //获取关联文件 List <ServArchiveFileModel> archiveFile = servArchiveFileDAL.GetArchiveFile(id); //获取文件信息 List <ServFileInfoModel> FileInfoList = new List <ServFileInfoModel>(); for (var i = 0; i < archiveFile.Count; i++) { ServFileInfoModel fileInfo = servFileInfoDAL.GetEntity(archiveFile[i].relate_id); FileInfoList.Add(fileInfo); } //获取更改日志 List <ServArhiveUpdateLogModel> ServArhiveUpdateLogList = servArhiveUpdateLogDAL.GetArhiveUpdateLogInfo(id); ArchiveInfoList archiveInfoList = new ArchiveInfoList(); ArchiveInfo archiveInfo = new Model.CustomModel.ArchiveInfo(); archiveInfo.id = ArchiveInfo.id; archiveInfo.archive_num = ArchiveInfo.archive_num; archiveInfo.archive_name = ArchiveInfo.archive_name; archiveInfo.create_time = ArchiveInfo.create_time; archiveInfo.update_time = ArchiveInfo.update_time; archiveInfo.archive_decription = ArchiveInfo.archive_decription; archiveInfo.report_person = ArchiveInfo.report_person; archiveInfo.archive_status = ArchiveInfo.archive_status; archiveInfo.report_type = ArchiveInfo.report_type; archiveInfo.create_persson_id = ArchiveInfo.create_persson_id; //获取卷宗类别类型 var u = baseReportTypeDAL.GetEntity(ArchiveInfo.report_type); archiveInfo.report_name = u == null ? "未知" : u.type_name; //创建人 var a = servPersonInfoDAL.GetPersonInfoBySSOId(ArchiveInfo.create_persson_id); archiveInfo.create_name = a == null ? "未知" : a.alias; archiveInfo.status_name = Enum.GetName(typeof(EnumClass.ArchiveStatus), ArchiveInfo.archive_status); archiveInfo.alarm_id = ArchiveInfo.alarm_id; archiveInfoList.archiveInfo = archiveInfo; archiveInfoList.alarmRecord = AlarmRecorInfoList; archiveInfoList.fileInfo = FileInfoList; archiveInfoList.arhiveUpdateLog = ServArhiveUpdateLogList; return(archiveInfoList); } catch (Exception ex) { throw ex; } }
/// <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); } }