Beispiel #1
0
        /// <summary>
        /// 批量添加\更新\删除接口
        /// </summary>
        /// <param name="NetworkModuleRequest"></param>
        /// <returns></returns>
        public BasicResponse BatchOperationManualCrossControls(ManualCrossControlsRequest manualCrossControlRequest)
        {
            BasicResponse        Result = new BasicResponse();
            List <Jc_JcsdkzInfo> ManualCrossControlInfos = manualCrossControlRequest.ManualCrossControlInfos;

            //向网关同步数据
            List <Jc_JcsdkzInfo> SendItemList = ManualCrossControlInfos;
            var resultSync = SynchronousDataToGateway(SendItemList);

            if (!resultSync)
            {
                Result.Code    = 1;
                Result.Message = "向网关同步数据失败!";
                return(Result);
            }
            TransactionsManager.BeginTransaction(() =>
            {
                foreach (Jc_JcsdkzInfo item in ManualCrossControlInfos)
                {
                    if (item.InfoState == InfoState.AddNew)
                    {
                        //数据库操作
                        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);
                    }
                    else if (item.InfoState == InfoState.Modified)
                    {
                        //数据库操作
                        var _jc_Jcsdkz = ObjectConverter.Copy <Jc_JcsdkzInfo, Jc_JcsdkzModel>(item);
                        _Repository.UpdateManualCrossControl(_jc_Jcsdkz);
                        //缓存操作
                        ManualCrossControlCacheUpdateRequest UpdateManualCrossControlCacheRequest = new ManualCrossControlCacheUpdateRequest();
                        UpdateManualCrossControlCacheRequest.ManualCrossControlInfo = item;
                        _ManualCrossControlCacheService.UpdateManualCrossControlCache(UpdateManualCrossControlCacheRequest);
                    }
                    else if (item.InfoState == InfoState.Delete)
                    {
                        //数据库操作
                        _Repository.DeleteManualCrossControl(item.ID);
                        //缓存操作
                        ManualCrossControlCacheDeleteRequest DeleteManualCrossControlCacheRequest = new ManualCrossControlCacheDeleteRequest();
                        DeleteManualCrossControlCacheRequest.ManualCrossControlInfo = item;
                        _ManualCrossControlCacheService.DeleteManualCrossControlCache(DeleteManualCrossControlCacheRequest);
                    }
                }
            });

            //调用驱动重新加载控制信息
            DriverManualCrossControlReLoadRequest reLoadRequest = new DriverManualCrossControlReLoadRequest();

            _DriverManualCrossControlService.ReLoad(reLoadRequest);

            return(Result);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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="items"></param>
        public static bool AddJC_JCSDKZsCache(IList <Jc_JcsdkzInfo> items)
        {
            //IJC_JCSDKZService JCSDKZService = ServiceFactory.CreateService<IJC_JCSDKZService>();
            //return JCSDKZService.AddJC_JCSDKZsCache(items);
            var req = new ManualCrossControlsRequest
            {
                ManualCrossControlInfos = items.ToList()
            };
            var res = ManualCrossControlCacheService.AddManualCrossControls(req);

            if (!res.IsSuccess)
            {
                throw new Exception(res.Message);
            }
            return(res.IsSuccess);
        }
Beispiel #5
0
        /// <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);
            }
        }
Beispiel #6
0
        /// <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());
            }
        }
Beispiel #7
0
        private void OpenThreadToDoWork()
        {
            IManualCrossControlService manualCrossControlService = ServiceFactory.Create <IManualCrossControlService>();
            //数据分析线程
            var startDataAnalysisThread = new Thread(new ThreadStart(() =>
            {
                do
                {
                    try
                    {
                        StartDataAnalysis();//开始数据分析
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Error(string.Format("分析出现错误! 错误消息:{0}", ex.StackTrace));
                    }
                    finally
                    {
                        Thread.Sleep(5000);
                    }
                } while (IsRunning);
            }));

            startDataAnalysisThread.IsBackground = true;
            startDataAnalysisThread.Start();

            //分析结果处理线程
            var asyncAnalysisHandlerThread = new Thread(new ThreadStart(() =>
            {
                do
                {
                    var analysisConfigInfoList = AnalysisModelCache.Instance.Query();
                    for (int i = 0; IsRunning && null != analysisConfigInfoList && i < analysisConfigInfoList.Count; i++)
                    {
                        if (AnalysisReulstHandlerEvent != null)
                        {
                            try
                            {
                                AnalysisReulstHandlerEvent(new AnalysisChangedEventArgs()
                                {
                                    AnalysisConfig = analysisConfigInfoList[i]
                                });
                            }
                            catch (Exception ex)
                            {
                                LogHelper.Error(string.Format("处理分析模型:{0}的输出出错. 错误消息:{1}", analysisConfigInfoList[i].Name, ex.StackTrace));
                            }
                        }
                        Thread.Sleep(100);
                    }
                    try
                    {
                        //判断,如果分级报警交叉控制中存在已删除的模型,则解除控制  20180919
                        //删除已经结束的分级报警传感器  20180919
                        List <Jc_JcsdkzInfo> updatejckzinfos        = new List <Jc_JcsdkzInfo>();
                        List <Jc_JcsdkzInfo> manualCrossControlList = manualCrossControlService.GetAllManualCrossControl().Data.FindAll(a => a.Upflag != "0");
                        foreach (Jc_JcsdkzInfo manualCrossControl in manualCrossControlList)
                        {
                            bool isInanalysisConfigInfo = false;
                            if (analysisConfigInfoList.FindAll(a => a.Id == manualCrossControl.ZkPoint).Count > 0)
                            {
                                isInanalysisConfigInfo = true;
                            }
                            if (!isInanalysisConfigInfo)//如果模型已经删除,则解除传感器分级报警  20180919
                            {
                                manualCrossControl.Upflag = "0";
                                updatejckzinfos.Add(manualCrossControl);
                            }
                        }
                        if (updatejckzinfos.Count > 0)
                        {
                            ManualCrossControlsRequest updaterequest = new ManualCrossControlsRequest();
                            updaterequest.ManualCrossControlInfos    = updatejckzinfos;
                            manualCrossControlService.UpdateManualCrossControls(updaterequest);
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                    Thread.Sleep(500);
                } while (IsRunning);
            }));

            asyncAnalysisHandlerThread.IsBackground = true;
            asyncAnalysisHandlerThread.Start();
        }