/// <summary> /// 批量删除手动/交叉控制 /// </summary> /// <param name="ManualCrossControlRequest"></param> /// <returns></returns> public BasicResponse DeleteManualCrossControls(ManualCrossControlsRequest ManualCrossControlRequest) { BasicResponse Result = new BasicResponse(); List <Jc_JcsdkzInfo> DeleteManualCrossControlInfos = ManualCrossControlRequest.ManualCrossControlInfos; ManualCrossControlCacheGetAllRequest manualCrossControlCacheRequest = new ManualCrossControlCacheGetAllRequest(); var result = _ManualCrossControlCacheService.GetAllManualCrossControlCache(manualCrossControlCacheRequest); List <Jc_JcsdkzInfo> DeleteManualCrossControlCaches = result.Data; if (DeleteManualCrossControlInfos.Count < 1) { Result.Code = 1; Result.Message = "当前删除列表中无数据!"; return(Result); } foreach (Jc_JcsdkzInfo item in DeleteManualCrossControlInfos) { Jc_JcsdkzInfo olditem = DeleteManualCrossControlCaches.Find(a => a.ID == item.ID); //增加重复判断 if (olditem == null) { //缓存中存在此测点 Result.Code = 1; Result.Message = "当前删除列表中的数据不存在!"; return(Result); } } //向网关同步数据 List <Jc_JcsdkzInfo> SendItemList = DeleteManualCrossControlInfos; var resultSync = SynchronousDataToGateway(SendItemList); if (!resultSync) { Result.Code = 1; Result.Message = "向网关同步数据失败!"; return(Result); } TransactionsManager.BeginTransaction(() => { foreach (Jc_JcsdkzInfo item in DeleteManualCrossControlInfos) { //数据库操作 _Repository.DeleteManualCrossControl(item.ID); //缓存操作 ManualCrossControlCacheDeleteRequest DeleteManualCrossControlCacheRequest = new ManualCrossControlCacheDeleteRequest(); DeleteManualCrossControlCacheRequest.ManualCrossControlInfo = item; _ManualCrossControlCacheService.DeleteManualCrossControlCache(DeleteManualCrossControlCacheRequest); } }); //调用驱动重新加载控制信息 DriverManualCrossControlReLoadRequest reLoadRequest = new DriverManualCrossControlReLoadRequest(); _DriverManualCrossControlService.ReLoad(reLoadRequest); return(Result); }
/// <summary> /// 批量添加 /// </summary> /// <param name="ManualCrossControlRequest"></param> /// <returns></returns> public BasicResponse AddManualCrossControls(ManualCrossControlsRequest ManualCrossControlRequest) { BasicResponse Result = new BasicResponse(); List <Jc_JcsdkzInfo> items = ManualCrossControlRequest.ManualCrossControlInfos; List <Jc_JcsdkzInfo> ManualCrossControlCaches = new List <Jc_JcsdkzInfo>(); ManualCrossControlCacheGetAllRequest manualCrossControlCacheRequest = new ManualCrossControlCacheGetAllRequest(); var result = _ManualCrossControlCacheService.GetAllManualCrossControlCache(manualCrossControlCacheRequest); ManualCrossControlCaches = result.Data; foreach (Jc_JcsdkzInfo item in items) { Jc_JcsdkzInfo itemCache = ManualCrossControlCaches.Find(a => a.ID == item.ID); if (itemCache != null) { //缓存中存在此测点 Result.Code = 1; Result.Message = "当前添加的手动/交叉控制信息已存在!"; return(Result); } } //向网关同步数据 List <Jc_JcsdkzInfo> SendItemList = items; var resultSync = SynchronousDataToGateway(SendItemList); if (!resultSync) { Result.Code = 1; Result.Message = "向网关同步数据失败!"; return(Result); } TransactionsManager.BeginTransaction(() => { foreach (Jc_JcsdkzInfo item in items) { //数据库操作 var _jc_Jcsdkz = ObjectConverter.Copy <Jc_JcsdkzInfo, Jc_JcsdkzModel>(item); var resultjc_Jcsdkz = _Repository.AddManualCrossControl(_jc_Jcsdkz); //缓存操作 ManualCrossControlCacheAddRequest AddManualCrossControlCacheRequest = new ManualCrossControlCacheAddRequest(); AddManualCrossControlCacheRequest.ManualCrossControlInfo = item; _ManualCrossControlCacheService.AddManualCrossControlCache(AddManualCrossControlCacheRequest); } }); //调用驱动重新加载控制信息 DriverManualCrossControlReLoadRequest reLoadRequest = new DriverManualCrossControlReLoadRequest(); _DriverManualCrossControlService.ReLoad(reLoadRequest); return(Result); }
/// <summary> /// 删除手动/交叉控制 /// </summary> /// <param name="ManualCrossControlRequest"></param> /// <returns></returns> public BasicResponse DeleteManualCrossControl(ManualCrossControlDeleteRequest ManualCrossControlRequest) { BasicResponse Result = new BasicResponse(); ManualCrossControlCacheGetByKeyRequest manualCrossControlCacheRequest = new ManualCrossControlCacheGetByKeyRequest(); manualCrossControlCacheRequest.ManualCrosControlId = ManualCrossControlRequest.Id; var result = _ManualCrossControlCacheService.GetByKeyManualCrossControlCache(manualCrossControlCacheRequest); if (result.Data == null) { //缓存中存在此测点 Result.Code = 1; Result.Message = "当前删除的手动/交叉控制不存在!"; return(Result); } //向网关同步数据 Jc_JcsdkzInfo item = result.Data; item.InfoState = InfoState.Delete; List <Jc_JcsdkzInfo> SendItemList = new List <Jc_JcsdkzInfo>(); SendItemList.Add(item); var resultSync = SynchronousDataToGateway(SendItemList); if (!resultSync) { Result.Code = 1; Result.Message = "向网关同步数据失败!"; return(Result); } //数据库操作 _Repository.DeleteManualCrossControl(ManualCrossControlRequest.Id); //缓存操作 ManualCrossControlCacheDeleteRequest DeleteManualCrossControlCacheRequest = new ManualCrossControlCacheDeleteRequest(); DeleteManualCrossControlCacheRequest.ManualCrossControlInfo = item; _ManualCrossControlCacheService.DeleteManualCrossControlCache(DeleteManualCrossControlCacheRequest); //调用驱动重新加载控制信息 DriverManualCrossControlReLoadRequest reLoadRequest = new DriverManualCrossControlReLoadRequest(); _DriverManualCrossControlService.ReLoad(reLoadRequest); return(Result); }
/// <summary> /// 更新手动/交叉控制 /// </summary> /// <param name="ManualCrossControlRequest"></param> /// <returns></returns> public BasicResponse UpdateManualCrossControl(ManualCrossControlUpdateRequest ManualCrossControlRequest) { BasicResponse Result = new BasicResponse(); Jc_JcsdkzInfo item = ManualCrossControlRequest.ManualCrossControlInfo; ManualCrossControlCacheGetByKeyRequest manualCrossControlCacheRequest = new ManualCrossControlCacheGetByKeyRequest(); manualCrossControlCacheRequest.ManualCrosControlId = item.ID; var result = _ManualCrossControlCacheService.GetByKeyManualCrossControlCache(manualCrossControlCacheRequest); if (result.Data == null) { //缓存中存在此测点 Result.Code = 1; Result.Message = "当前更新的手动/交叉控制信息不存在!"; return(Result); } //向网关同步数据 List <Jc_JcsdkzInfo> SendItemList = new List <Jc_JcsdkzInfo>(); SendItemList.Add(item); var resultSync = SynchronousDataToGateway(SendItemList); if (!resultSync) { Result.Code = 1; Result.Message = "向网关同步数据失败!"; return(Result); } //数据库操作 var _jc_Jcsdkz = ObjectConverter.Copy <Jc_JcsdkzInfo, Jc_JcsdkzModel>(ManualCrossControlRequest.ManualCrossControlInfo); _Repository.UpdateManualCrossControl(_jc_Jcsdkz); //缓存操作 ManualCrossControlCacheUpdateRequest UpdateManualCrossControlCacheRequest = new ManualCrossControlCacheUpdateRequest(); UpdateManualCrossControlCacheRequest.ManualCrossControlInfo = item; _ManualCrossControlCacheService.UpdateManualCrossControlCache(UpdateManualCrossControlCacheRequest); //调用驱动重新加载控制信息 DriverManualCrossControlReLoadRequest reLoadRequest = new DriverManualCrossControlReLoadRequest(); _DriverManualCrossControlService.ReLoad(reLoadRequest); return(Result); }
/// <summary> /// 添加控制配置缓存对象 包括更新 /// </summary> /// <param name="item"></param> /// public static bool AddJC_JCSDKZCache(Jc_JcsdkzInfo item) { //IJC_JCSDKZService JCSDKZService = ServiceFactory.CreateService<IJC_JCSDKZService>(); //return JCSDKZService.AddJC_JCSDKZCache(item); var req = new ManualCrossControlAddRequest { ManualCrossControlInfo = item }; var res = ManualCrossControlService.AddManualCrossControl(req); if (!res.IsSuccess) { throw new Exception(res.Message); } return(res.IsSuccess); }
/// <summary> /// 保存数据 /// </summary> private void SaveControl(string Station, int type) { if (string.IsNullOrEmpty(Station)) { return; } var fzh = 0; if (Station.Length > 0) { fzh = Convert.ToInt32(Station.Substring(0, 3)); } if (fzh <= 0) { return; } if (windowsUIButtonPanel2.Buttons.Count <= 0) { return; } IList <Jc_JcsdkzInfo> temp; Jc_JcsdkzInfo tempControl; Jc_DefInfo tempStation; tempStation = DEFServiceModel.QueryPointByCodeCache(Station); if (null == tempStation) { return; } var DelJckzList = new List <Jc_JcsdkzInfo>(); var AddJckzList = new List <Jc_JcsdkzInfo>(); for (var i = 0; i < windowsUIButtonPanel2.Buttons.Count; i++) { temp = new List <Jc_JcsdkzInfo>(); if (tempStation.Devid == "228") { if (null != windowsUIButtonPanel2.Buttons[i].Properties.Tag) { temp = JCSDKZServiceModel.QueryJCSDKZbyInf(6666, "3015|" + windowsUIButtonPanel2.Buttons[i].Properties.Tag + "=FF"); } } else { temp = JCSDKZServiceModel.QueryJCSDKZbyInf(type, windowsUIButtonPanel2.Buttons[i].Properties.Caption); } if (null == temp) { continue; } if (temp.Count > 0) //原来有控制 { if (windowsUIButtonPanel2.Buttons[i].Properties.Checked) //现在没有控制 { foreach (var item in temp) { DelJckzList.Add(item); //添加到交叉控制删除列表中 20170323 //Basic.CBF.Common.Util.OperateLogHelper.InsertOperateLog(4, "取消控制:主控【" + item.ZkPoint + "】-【" + item.Bkpoint + "】", ""); OperateLogHelper.InsertOperateLog(4, "取消控制:主控【" + item.ZkPoint + "】-【" + item.Bkpoint + "】", ""); } } } else //原来没有控制 { if (!windowsUIButtonPanel2.Buttons[i].Properties.Checked) //现在有控制 { tempControl = new Jc_JcsdkzInfo(); //tempControl.ID = Basic.Framework.Utils.Date.DateTimeUtil.GetDateTimeNowToInt64();//ID tempControl.ID = IdHelper.CreateLongId().ToString(); //ID if (type == 13) { if (windowsUIButtonPanel1.Buttons[i].Properties.Checked) { continue; //只有在设备被控制时,才能进行强制解除控制操作 } tempControl.Type = (short)ControlType.RemoveLocalControl; //强制解控 } else { tempControl.Type = (short)ControlType.LocalControl; //手动控制 } tempControl.ZkPoint = "0000000"; //主控测点 tempControl.Bkpoint = windowsUIButtonPanel2.Buttons[i].Properties.Caption; //被控测点 tempControl.InfoState = InfoState.AddNew; //Model.JCSDKZServiceModel.AddJC_JCSDKZCache(tempControl); AddJckzList.Add(tempControl); //添加到交叉控制添加列表中 20170323 OperateLogHelper.InsertOperateLog(4, "添加控制:主控【" + tempControl.ZkPoint + "】-【" + tempControl.Bkpoint + "】", ""); } } } //在最后统一调用服务端进行处理 20170323 // 20170623 try { if (DelJckzList.Count > 0) { JCSDKZServiceModel.DoDoJCSDKZ(DelJckzList); } if (AddJckzList.Count > 0) { JCSDKZServiceModel.AddJC_JCSDKZsCache(AddJckzList); } } catch (Exception ex) { XtraMessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } //JCSDKZServiceModel.SaveData(); //执行控制 barStaticItem2.Caption = "执行成功"; }
/// <summary> /// 风电闭锁解锁 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void icbUnlock_Click(object sender, EventArgs e) { try { var node = treeViewInterlockedCircuitBreaker.SelectedNode; if (node == null) { XtraMessageBox.Show("请先选择需操作的项。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (icbUnlock.Text == "三分风电闭锁解锁") { if (XtraMessageBox.Show("点击三分强制解锁后,需要手动取消,否则设备一直处于强制解锁状态,是否继续?", "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } } var point = node.Name.PadLeft(3, '0') + "0000"; var tempControls = ChargeMrg.QueryJCSDKZbyInf((int)ControlType.GasThreeUnlockControl, point); if (tempControls.Count > 0) //处于解锁状态 { if (icbUnlock.Text == "取消三分风电闭锁解锁") { for (var i = 0; i < tempControls.Count; i++) { tempControls[i].InfoState = InfoState.Delete; OperateLogHelper.InsertOperateLog(4, "取消三分风电闭锁解锁:主控【" + tempControls[i].ZkPoint + "】-【" + tempControls[i].Bkpoint + "】-【" + DateTime.Now + "】", ""); } ChargeMrg.DelJC_JCSDKZCache(tempControls.ToList()); icbUnlock.Text = "三分风电闭锁解锁"; icbUnlock.ForeColor = Color.Green; } else if (icbUnlock.Text == "三分风电闭锁解锁") { icbUnlock.Text = "取消三分风电闭锁解锁"; icbUnlock.ForeColor = Color.Red; } } else //未处于解锁状态 { if (icbUnlock.Text == "三分风电闭锁解锁") { var tempControlAdd = new Jc_JcsdkzInfo { ID = IdHelper.CreateLongId().ToString(), Type = (int)ControlType.GasThreeUnlockControl, ZkPoint = "0000000", Bkpoint = point, InfoState = InfoState.AddNew }; ChargeMrg.AddJC_JCSDKZCache(tempControlAdd); OperateLogHelper.InsertOperateLog(4, "三分风电闭锁解锁:主控【" + tempControlAdd.ZkPoint + "】-【" + tempControlAdd.Bkpoint + "】-【" + DateTime.Now + "】", ""); icbUnlock.Text = "取消三分风电闭锁解锁"; icbUnlock.ForeColor = Color.Red; } else if (icbUnlock.Text == "取消三分风电闭锁解锁") { icbUnlock.Text = "三分风电闭锁解锁"; icbUnlock.ForeColor = Color.Green; } } } catch (Exception exc) { XtraMessageBox.Show(exc.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
private void simpleButton1_Click(object sender, EventArgs e) { try { var node = treeViewInterlockedCircuitBreaker.SelectedNode; if (node == null) { XtraMessageBox.Show("请先选择需操作的项。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } var point = node.Name.PadLeft(3, '0') + "0000"; var tempControls = ChargeMrg.QueryJCSDKZbyInf((int)ControlType.StationHisDataClear, point); if (tempControls.Count > 0) //处于解锁状态 { if (simpleButton1.Text == "取消清除分站历史数据") { for (var i = 0; i < tempControls.Count; i++) { tempControls[i].InfoState = InfoState.Delete; OperateLogHelper.InsertOperateLog(4, "取消清除分站历史数据:主控【" + tempControls[i].ZkPoint + "】-【" + tempControls[i].Bkpoint + "】-【" + DateTime.Now + "】", ""); } ChargeMrg.DelJC_JCSDKZCache(tempControls.ToList()); simpleButton1.Text = "清除分站历史数据"; simpleButton1.ForeColor = Color.Green; } else if (simpleButton1.Text == "清除分站历史数据") { simpleButton1.Text = "取消清除分站历史数据"; simpleButton1.ForeColor = Color.Red; } } else //未处于解锁状态 { if (simpleButton1.Text == "清除分站历史数据") { var tempControlAdd = new Jc_JcsdkzInfo { ID = IdHelper.CreateLongId().ToString(), Type = (int)ControlType.StationHisDataClear, ZkPoint = "0000000", Bkpoint = point, InfoState = InfoState.AddNew }; ChargeMrg.AddJC_JCSDKZCache(tempControlAdd); OperateLogHelper.InsertOperateLog(4, "清除分站历史数据:主控【" + tempControlAdd.ZkPoint + "】-【" + tempControlAdd.Bkpoint + "】-【" + DateTime.Now + "】", ""); simpleButton1.Text = "取消清除分站历史数据"; simpleButton1.ForeColor = Color.Red; } else if (simpleButton1.Text == "取消清除分站历史数据") { simpleButton1.Text = "清除分站历史数据"; simpleButton1.ForeColor = Color.Green; } } } catch (Exception exc) { XtraMessageBox.Show(exc.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
/// <summary> /// 传感器分级报警输出 /// </summary> /// <param name="analysisConfigInfo"></param> /// <param name="analysistemplatealarmlevelInfo"></param> private void AnalysistemplateAlarmLevelHandle(JC_LargedataAnalysisConfigInfo analysisConfigInfo, Jc_AnalysistemplatealarmlevelInfo analysistemplatealarmlevelInfo) { try { //如果分析配置成立,则添加手动控制 if (analysisConfigInfo.AnalysisResult == 2) { string level = analysistemplatealarmlevelInfo.Level.ToString(); if (analysisConfigInfo.AnalysisSuccessfulPointList.Count > 0) { List <Jc_JcsdkzInfo> jckzinfos = new List <Jc_JcsdkzInfo>(); List <Jc_JcsdkzInfo> updatejckzinfos = new List <Jc_JcsdkzInfo>(); analysisConfigInfo.AnalysisSuccessfulPointList.ForEach(point => { //判断是否存在同一配置被控测点的控制缓存,如果不存在则新增一条控制 ManualCrossControlGetByTypeZkPointBkPointRequest mcrequest = new ManualCrossControlGetByTypeZkPointBkPointRequest(); mcrequest.Type = 12; mcrequest.ZkPoint = analysisConfigInfo.Id; mcrequest.BkPoint = point.Point; var kzinfo = manualCrossControlService.GetManualCrossControlByTypeZkPointBkPoint(mcrequest).Data.FirstOrDefault(); if (kzinfo == null) { Jc_JcsdkzInfo JkInfo = new Jc_JcsdkzInfo(); JkInfo.ID = IdHelper.CreateLongId().ToString(); JkInfo.Type = 12; JkInfo.ZkPoint = analysisConfigInfo.Id; JkInfo.Bkpoint = point.Point; JkInfo.Upflag = level; jckzinfos.Add(JkInfo); } else if (kzinfo.Upflag != level) { kzinfo.Upflag = level; updatejckzinfos.Add(kzinfo); } }); //删除已经结束的分级报警传感器 20180919 List <Jc_JcsdkzInfo> manualCrossControlList = manualCrossControlService.GetAllManualCrossControl().Data.FindAll(a => a.Upflag != "0"); foreach (Jc_JcsdkzInfo manualCrossControl in manualCrossControlList) { bool isInanalysisConfigInfo = false; foreach (AnalysisSuccessfulPointInfo point in analysisConfigInfo.AnalysisSuccessfulPointList) { if (point.Point == manualCrossControl.Bkpoint) { isInanalysisConfigInfo = true; break; } } if (!isInanalysisConfigInfo)//如果在当前成立的表达式中没有找到对应交叉控制测点的表达式,则清除传感器分级报警 { manualCrossControl.Upflag = "0"; updatejckzinfos.Add(manualCrossControl); } } if (jckzinfos.Count > 0) { ManualCrossControlsRequest batchinsertrequest = new ManualCrossControlsRequest(); batchinsertrequest.ManualCrossControlInfos = jckzinfos; manualCrossControlService.AddManualCrossControls(batchinsertrequest); } if (updatejckzinfos.Count > 0) { ManualCrossControlsRequest updaterequest = new ManualCrossControlsRequest(); updaterequest.ManualCrossControlInfos = updatejckzinfos; manualCrossControlService.UpdateManualCrossControls(updaterequest); } } } //如果分析不成立,则修改报警等级为0 else { ManualCrossControlGetByTypeZkPointRequest mcrequest = new ManualCrossControlGetByTypeZkPointRequest(); mcrequest.Type = 12; mcrequest.ZkPoint = analysisConfigInfo.Id; var kzinfo = manualCrossControlService.GetManualCrossControlByTypeZkPoint(mcrequest).Data; if (kzinfo.Count > 0) { kzinfo.ForEach(kz => kz.Upflag = "0"); ManualCrossControlsRequest updaterequest = new ManualCrossControlsRequest(); updaterequest.ManualCrossControlInfos = kzinfo; manualCrossControlService.UpdateManualCrossControls(updaterequest); } } } catch (Exception ex) { LogHelper.Info("传感器分级报警输出出错!" + ex.Message); } }
/// <summary> /// 报警,应急联动 /// </summary> /// <param name="args"></param> private void DataAnalysisService_AnalysisReulstHandlerEvent(AnalysisChangedEventArgs args) { try { JC_LargedataAnalysisConfigInfo analysisConfigInfo = args.AnalysisConfig; string analysisModelId = analysisConfigInfo.Id; List <JC_AlarmNotificationPersonnelConfigInfo> responseAlarmConfigList; JC_EmergencyLinkageConfigInfo responseEmergencyLinkageConfig; List <JC_RegionOutageConfigInfo> responseRegionOutageConfigList; //多系统融合应急联动 SysEmergencyLinkageInfo responsesysEmergencyLinkInfo; //分析模板传感器分级报警配置 Jc_AnalysistemplatealarmlevelInfo analysistemplatealarmlevelInfo; try { responseAlarmConfigList = AlarmConfigCache.Instance.Query(q => q.AnalysisModelId == analysisModelId); responseEmergencyLinkageConfig = EmergencyLinkageConfigCache.Instance.Query(q => q.AnalysisModelId == analysisModelId).FirstOrDefault(); responseRegionOutageConfigList = RegionOutageConfigCache.Instance.Query(q => q.AnalysisModelId == analysisModelId); // //responsesysEmergencyLinkInfos = SysEmergencyLinkageCache.Instance.Query(o => o.MasterModelId == analysisModelId && o.Type == 2).FirstOrDefault(); responsesysEmergencyLinkInfo = sysEmergencyLinkageService.GetAllSysEmergencyLinkageList().Data.FirstOrDefault(o => o.MasterModelId == analysisModelId && o.Type == 2); AnalysistemplatealarmlevelGetByAnalysistemplateIdRequest cacherequest = new AnalysistemplatealarmlevelGetByAnalysistemplateIdRequest(); cacherequest.AnalysistemplateId = analysisModelId; analysistemplatealarmlevelInfo = analysistemplatealarmlevelService.GetAnalysistemplatealarmlevelByAnalysistemplateId(cacherequest).Data; } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("获取输出配置信息出错:{0}", ex.StackTrace)); return; } #region 报警配置 //存在报警配置 if (responseAlarmConfigList != null && responseAlarmConfigList.Count > 0) { try { //报警 BasicResponse <JC_AlarmHandleInfo> alarmHandleResponse = alarmHandleService.GetUnclosedAlarmByAnalysisModelId(new AlarmHandleGetByAnalysisModelIdRequest() { AnalysisModelId = analysisModelId }); if (analysisConfigInfo.AnalysisResult == 2) { if (alarmHandleResponse.Data == null) { //报警消息格式: 测点号+安装位置+分析模型名称+输出结果 StringBuilder alarmMessage = new StringBuilder(); var analysisSuccessfulPointList = ObjectConverter.CopyList <AnalysisSuccessfulPointInfo, AnalysisSuccessfulPointInfo>(analysisConfigInfo.AnalysisSuccessfulPointList); foreach (var item in analysisSuccessfulPointList) { alarmMessage.Append(string.Format("{0} {1} {2} {3}", item.Point, item.Wz, analysisConfigInfo.Name, analysisConfigInfo.TrueDescription)).Append(Environment.NewLine); } alarmHandleService.AddJC_AlarmHandle(new AlarmHandleAddRequest() { JC_AlarmHandleInfo = new JC_AlarmHandleInfo() { Id = IdHelper.CreateLongId().ToString(), AnalysisModelId = analysisModelId, AnalysisResult = alarmMessage.ToString(), StartTime = DateTime.Now, AlarmType = responseAlarmConfigList[0].AlarmType, AlarmColor = responseAlarmConfigList[0].AlarmColor, EndTime = new DateTime(1900, 1, 1, 0, 0, 0) } }); } } else { //不成立或未知更新报警结束时间 if (alarmHandleResponse.Data != null) { alarmHandleResponse.Data.EndTime = DateTime.Now; alarmHandleService.UpdateJC_AlarmHandle(new AlarmHandleUpdateRequest() { JC_AlarmHandleInfo = alarmHandleResponse.Data }); } } } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("添加或更新报警信息出错:{0}", ex.StackTrace)); } } #endregion #region 应急联动 //应急联动 if (analysisConfigInfo.AnalysisResult == 2 && responseEmergencyLinkageConfig != null) { analysisConfigInfo.IsEmergencyLinkage = true; analysisConfigInfo.EmergencyLinkageConfig = responseEmergencyLinkageConfig.Coordinate; } else { //不成立或未知解除应急联动 analysisConfigInfo.IsEmergencyLinkage = false; analysisConfigInfo.EmergencyLinkageConfig = string.Empty; } try { largeDataAnalysisCacheClientService.UpdateLargeDataAnalysisConfigCahce(new LargeDataAnalysisConfigCacheUpdateRequest() { //LargeDataAnalysisConfigInfo = ObjectConverter.DeepCopy<JC_LargedataAnalysisConfigInfo>(analysisConfigInfo) LargeDataAnalysisConfigInfo = analysisConfigInfo }); } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("更新应急联动配置信息到缓存出错:{0}", ex.StackTrace)); } #endregion #region 区域断电 //存在区域断电配置 if (responseRegionOutageConfigList != null && responseRegionOutageConfigList.Count > 0) { //分析成立时 if (analysisConfigInfo.AnalysisResult == 2) { //要控制的列表 List <Jc_JcsdkzInfo> controlList = new List <Jc_JcsdkzInfo>(); //要解控的列表 List <Jc_JcsdkzInfo> removeControlList = new List <Jc_JcsdkzInfo>(); foreach (var item in responseRegionOutageConfigList) { BasicResponse <List <Jc_JcsdkzInfo> > analysisBKResponse; try { BasicResponse <bool> controlPointLegalResponse = pointDefineService.ControlPointLegal(new Sys.Safety.Request.PointDefine.PointDefineGetByPointIDRequest() { PointID = item.PointId }); if (!controlPointLegalResponse.Data) { //风电闭锁控制口或者甲烷风电闭锁控制口,数据分析这边不处理.如果风电闭锁和甲烷风电闭锁后定义并且当前控制口已被控制则解除控制。 analysisBKResponse = manualCrossControlService.GetManualCrossControlByTypeZkPointBkPoint(new ManualCrossControlGetByTypeZkPointBkPointRequest() { ZkPoint = analysisModelId, BkPoint = item.Point, Type = (short)Enums.ControlType.LargeDataAnalyticsAreaPowerOff }); if (analysisBKResponse.Data != null && analysisBKResponse.Data.Count > 0) { try { manualCrossControlService.DeleteManualCrossControls(new ManualCrossControlsRequest() { ManualCrossControlInfos = analysisBKResponse.Data }); } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("解除控制出错:{0}", ex.StackTrace)); } } continue; } } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("风电闭锁控制口或者甲烷风电闭锁控制口,数据分析这边不处理:{0}", ex.StackTrace)); } try { //查询测点为item.Point的被控列表 analysisBKResponse = manualCrossControlService.GetManualCrossControlByBkPoint(new ManualCrossControlGetByBkPointRequest() { BkPoint = item.Point }); } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("查询测点为item.Point的被控列表出错:{0}", ex.StackTrace)); continue; } //控制 if (item.ControlStatus == 1) { //删除此处判断,添加了模型成立后,再添加区域断电,不会控制 20180919 ////如果上一次也是分析成立,则不再添加控制,为了避免一边添加控制一边解除控制这种情况。 //if (analysisConfigInfo.PrevAnalysisResult == analysisConfigInfo.AnalysisResult) // continue; if (analysisBKResponse.Data != null && analysisBKResponse.Data.Count > 0) { //被控测点 item.Point 已经存在控制,不能再控. continue; } else { //向 jc_jcsdkz 插入数据 if (!controlList.Exists(p => p.ZkPoint == item.AnalysisModelId && p.Bkpoint == item.Point)) { controlList.Add(new Jc_JcsdkzInfo() { ID = IdHelper.CreateLongId().ToString(), ZkPoint = item.AnalysisModelId, Type = (short)Enums.ControlType.LargeDataAnalyticsAreaPowerOff, Upflag = "0", Bkpoint = item.Point }); } } } //解除控制 if (item.ControlStatus == 0) { //表 jc_jcsdkz 存在被控测点为当前解控测点的记录. if (analysisBKResponse.Data != null && analysisBKResponse.Data.Count > 0) { //如果表 jc_jcsdkz 存在和当前解控模型和当前解控测点有关的控制则解除. Jc_JcsdkzInfo JkInfo = analysisBKResponse.Data.FirstOrDefault(q => q.ZkPoint == item.RemoveModelId && q.Bkpoint == item.Point && q.Type == (short)Enums.ControlType.LargeDataAnalyticsAreaPowerOff); if (JkInfo != null) { removeControlList.Add(new Jc_JcsdkzInfo() { ID = JkInfo.ID, ZkPoint = JkInfo.ZkPoint, Bkpoint = JkInfo.Bkpoint, Type = JkInfo.Type, Upflag = JkInfo.Upflag }); } } } } if (controlList.Count > 0) { try { manualCrossControlService.AddManualCrossControls(new ManualCrossControlsRequest() { ManualCrossControlInfos = controlList }); } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("添加控制出错:{0}", ex.StackTrace)); } } if (removeControlList.Count > 0) { try { manualCrossControlService.DeleteManualCrossControls(new ManualCrossControlsRequest() { ManualCrossControlInfos = removeControlList }); } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("解除控制出错:{0}", ex.StackTrace)); } } } else { BasicResponse <List <Jc_JcsdkzInfo> > analysisZKResponse = null; try { //查询主控为analysisModelId的列表 analysisZKResponse = manualCrossControlService.GetManualCrossControlByTypeZkPoint(new ManualCrossControlGetByTypeZkPointRequest() { ZkPoint = analysisModelId, Type = (short)Enums.ControlType.LargeDataAnalyticsAreaPowerOff }); } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("查询主控为{0}的列表出错:{1}", analysisModelId, ex.StackTrace)); } if (analysisZKResponse != null && analysisZKResponse.Data != null && analysisZKResponse.Data.Count > 0) { //不成立或未知时,首先看表达式测点是否还存在。 如果不存在, 分析模型控制的测点全部解除控制. foreach (var modelPoint in analysisConfigInfo.AnalysisModelPointRecordInfoList) { Jc_DefInfo definedPoint = null; try { definedPoint = PointCache.Instance.Query(q => q.PointID == modelPoint.PointId, false).FirstOrDefault(); } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("获取测点缓存信息出错, 错误消息:{0}", ex.StackTrace)); } if (PointCache.Instance.Count > 0 && definedPoint == null /*测点不存在*/) { try { manualCrossControlService.DeleteManualCrossControls(new ManualCrossControlsRequest() { ManualCrossControlInfos = analysisZKResponse.Data }); } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("解除控制出错:{0}", ex.StackTrace)); } return; } } //不成立或未知时解除分析成立时所加的控制 List <Jc_JcsdkzInfo> removeControlList = new List <Jc_JcsdkzInfo>(); foreach (var item in responseRegionOutageConfigList) { try { BasicResponse <bool> controlPointLegalResponse = pointDefineService.ControlPointLegal(new Sys.Safety.Request.PointDefine.PointDefineGetByPointIDRequest() { PointID = item.PointId }); if (!controlPointLegalResponse.Data) { //风电闭锁控制口或者甲烷风电闭锁控制口,数据分析这边不处理.如果风电闭锁和甲烷风电闭锁后定义并且当前控制口已被控制则解除控制。 BasicResponse <List <Jc_JcsdkzInfo> > analysisBKResponse = manualCrossControlService.GetManualCrossControlByTypeZkPointBkPoint(new ManualCrossControlGetByTypeZkPointBkPointRequest() { ZkPoint = analysisModelId, BkPoint = item.Point, Type = (short)Enums.ControlType.LargeDataAnalyticsAreaPowerOff }); if (analysisBKResponse.Data != null && analysisBKResponse.Data.Count > 0) { try { manualCrossControlService.DeleteManualCrossControls(new ManualCrossControlsRequest() { ManualCrossControlInfos = analysisBKResponse.Data }); } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("解除控制出错:{0}", ex.StackTrace)); } } continue; } } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("风电闭锁控制口或者甲烷风电闭锁控制口,数据分析这边不处理:{0}", ex.StackTrace)); } //是否配置当分析不成立时解除分析成立时所加的控制. 1-解除控制 if (item.ControlStatus == 1 && item.IsRemoveControl == 1) { Jc_JcsdkzInfo JkInfo = analysisZKResponse.Data.FirstOrDefault(q => q.ZkPoint == item.AnalysisModelId && q.Bkpoint == item.Point && q.Type == (short)Enums.ControlType.LargeDataAnalyticsAreaPowerOff); if (JkInfo != null) { removeControlList.Add(new Jc_JcsdkzInfo() { ID = JkInfo.ID, ZkPoint = JkInfo.ZkPoint, Bkpoint = JkInfo.Bkpoint, Type = JkInfo.Type, Upflag = JkInfo.Upflag }); } } } if (removeControlList.Count > 0) { try { manualCrossControlService.DeleteManualCrossControls(new ManualCrossControlsRequest() { ManualCrossControlInfos = removeControlList }); } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("解除控制出错:{0}", ex.StackTrace)); } } } } } else { try { //没有区域断电配置. BasicResponse <List <Jc_JcsdkzInfo> > analysisZKResponse = manualCrossControlService.GetManualCrossControlByTypeZkPoint(new ManualCrossControlGetByTypeZkPointRequest() { ZkPoint = analysisModelId, Type = (short)Enums.ControlType.LargeDataAnalyticsAreaPowerOff }); if (analysisZKResponse != null && analysisZKResponse.Data != null && analysisZKResponse.Data.Count > 0) { manualCrossControlService.DeleteManualCrossControls(new ManualCrossControlsRequest() { ManualCrossControlInfos = analysisZKResponse.Data }); } } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(string.Format("没有区域断电配置时删除控制出错:{0}", ex.StackTrace)); } } #endregion #region 多系统融合应急联动 if (responsesysEmergencyLinkInfo != null && !string.IsNullOrEmpty(responsesysEmergencyLinkInfo.Id)) { SysEmergencyLinkHandle(analysisConfigInfo, responsesysEmergencyLinkInfo); } #endregion #region 感器分级报警 if (analysistemplatealarmlevelInfo != null) { AnalysistemplateAlarmLevelHandle(analysisConfigInfo, analysistemplatealarmlevelInfo); } //如果报警配置等级不存在,则更新模型关联传感器报警等级为0 else { ManualCrossControlGetByTypeZkPointRequest mcrequest = new ManualCrossControlGetByTypeZkPointRequest(); mcrequest.Type = 12; mcrequest.ZkPoint = analysisConfigInfo.Id; var kzinfo = manualCrossControlService.GetManualCrossControlByTypeZkPoint(mcrequest).Data; if (kzinfo.Count > 0) { kzinfo.ForEach(kz => kz.Upflag = "0"); ManualCrossControlsRequest updaterequest = new ManualCrossControlsRequest(); updaterequest.ManualCrossControlInfos = kzinfo; manualCrossControlService.UpdateManualCrossControls(updaterequest); } } #endregion //更新上一次的分析结果 Dictionary <string, object> upddateitems = new Dictionary <string, object>(); upddateitems.Add("PrevAnalysisResult", analysisConfigInfo.AnalysisResult); if (analysisConfigInfo.AnalysisTime != null) { upddateitems.Add("PrevAnalysisTime", analysisConfigInfo.AnalysisTime.Value); } AnalysisModelCache.Instance.UpdateProperties(analysisConfigInfo.Id, upddateitems); } catch (Exception ex) { Basic.Framework.Logging.LogHelper.Error(ex.ToString()); } }
/// <summary> /// 批量新增区域断点设置 /// </summary> /// <param name="jC_RegionOutageConfigListAddRequest"></param> /// <returns></returns> public BasicResponse <List <JC_RegionOutageConfigInfo> > AddJC_RegionOutageConfigList(RegionOutageConfigListAddRequest jC_RegionOutageConfigListAddRequest) { string analysisModelId = jC_RegionOutageConfigListAddRequest.AnalysisModelId; var _jC_RegionOutageConfig = ObjectConverter.CopyList <JC_RegionOutageConfigInfo, JC_RegionoutageconfigModel>(jC_RegionOutageConfigListAddRequest.JC_RegionOutageConfigInfoList); List <JC_RegionoutageconfigModel> updateList = _jC_RegionOutageConfig == null ? new List <JC_RegionoutageconfigModel>() : _jC_RegionOutageConfig.ToList(); List <JC_RegionoutageconfigModel> regionOutageByModelList = _Repository.GetRegionOutageConfigListByAnalysisModelId(analysisModelId); List <JC_RegionoutageconfigModel> removeList = new List <JC_RegionoutageconfigModel>(); List <Jc_JcsdkzInfo> removeSDKZControlList = new List <Jc_JcsdkzInfo>(); if (regionOutageByModelList != null && regionOutageByModelList.Count > 0) { var oriControlList = regionOutageByModelList.Where(q => q.ControlStatus == 1).ToList(); //var oriRemoveControlList = regionOutageByModelList.Where(q => q.ControlStatus == 0).ToList(); foreach (var item in oriControlList) { if (!updateList.Where(q => q.ControlStatus == 1).ToList().Exists(q => q.PointId == item.PointId)) { removeList.Add(item); } } /* * foreach (var item in oriRemoveControlList) * { * if (!updateList.Where(q => q.ControlStatus == 0).ToList().Exists(q => q.PointId == item.PointId)) * { * var switchModelId = ObjectConverter.Copy<JC_RegionoutageconfigModel, JC_RegionoutageconfigModel>(item); * switchModelId.AnalysisModelId = switchModelId.RemoveModelId; * removeList.Add(switchModelId); * } * } */ } if (removeList.Count > 0) { IEnumerable <IGrouping <string, JC_RegionoutageconfigModel> > removeSDKZModelGroup = removeList.GroupBy(p => p.AnalysisModelId); foreach (var removeSDKZModelList in removeSDKZModelGroup) { string queryAnalysisModelId = removeSDKZModelList.FirstOrDefault().AnalysisModelId; BasicResponse <List <Jc_JcsdkzInfo> > analysisZKResponse = manualCrossControlService.GetManualCrossControlByTypeZkPoint(new ManualCrossControlGetByTypeZkPointRequest() { ZkPoint = queryAnalysisModelId, Type = (short)Enums.ControlType.LargeDataAnalyticsAreaPowerOff }); if (analysisZKResponse != null && analysisZKResponse.Data != null && analysisZKResponse.Data.Count > 0) { foreach (var removeSDKZModel in removeSDKZModelList) { BasicResponse <Jc_DefInfo> cachedPoint = pointDefineCacheService.PointDefineCacheByPointIdRequeest(new Sys.Safety.Request.Cache.PointDefineCacheByPointIdRequeest() { PointID = removeSDKZModel.PointId }); if (null != cachedPoint && cachedPoint.Data != null) { Jc_JcsdkzInfo removeSDKZInfo = analysisZKResponse.Data.FirstOrDefault(q => q.Bkpoint == cachedPoint.Data.Point); if (null != removeSDKZInfo) { removeSDKZControlList.Add(removeSDKZInfo); } } } } } } TransactionsManager.BeginTransaction(() => { if (removeSDKZControlList.Count > 0) { manualCrossControlService.DeleteManualCrossControls(new ManualCrossControlsRequest() { ManualCrossControlInfos = removeSDKZControlList }); } _Repository.DeleteUserRoleByAnalysisModelId(analysisModelId); _Repository.AddJC_RegionOutageConfigList(_jC_RegionOutageConfig.ToList()); }); if (Basic.Framework.Data.PlatRuntime.Items.ContainsKey(DataContract.UserRoleAuthorize.KeyConst.RegionOutageChangedKey)) { Basic.Framework.Data.PlatRuntime.Items[DataContract.UserRoleAuthorize.KeyConst.RegionOutageChangedKey] = DateTime.Now; } else { Basic.Framework.Data.PlatRuntime.Items.Add(DataContract.UserRoleAuthorize.KeyConst.RegionOutageChangedKey, DateTime.Now); } var jC_RegionOutageConfig = new BasicResponse <List <JC_RegionOutageConfigInfo> >(); jC_RegionOutageConfig.Data = jC_RegionOutageConfigListAddRequest.JC_RegionOutageConfigInfoList; return(jC_RegionOutageConfig); }