private void editLoadForm()
        {
            editModel = largedataAnalysisConfigBusiness.GetLargeDataAnalysisConfigById(largedataAnalysisId);

            StringBuilder sbText = new StringBuilder();

            //分析模型名称:选择分析模板:分析周期(秒):满足条件输出: 不满足条件输出:
            sbText.Append("分析模型名称:");
            sbText.Append(editModel.Name);
            sbText.Append(" ");
            sbText.Append("分析周期(秒):");
            sbText.Append(editModel.AnalysisInterval.ToString());
            sbText.Append(" ");
            sbText.Append("满足条件输出:");
            sbText.Append(editModel.TrueDescription);
            sbText.Append(" ");
            sbText.Append("不满足条件输出:");
            sbText.Append(editModel.FalseDescription);

            lblContent.Text = sbText.ToString();
            if (null != editModel.AnalysisModelPointRecordInfoList && editModel.AnalysisModelPointRecordInfoList.Count > 0)
            {
                editModel.AnalysisModelPointRecordInfoList = editModel.AnalysisModelPointRecordInfoList.OrderBy(q => q.ExpressionId).ThenBy(q => q.ParameterName).ToList();
                setViewList(editModel.AnalysisModelPointRecordInfoList);
            }
            //gridControlData.DataSource = editModel.AnalysisModelPointRecordInfoList;
            gridControlData.DataSource = viewList;

            gridView1.Columns["ExpressionId"].SortOrder = DevExpress.Data.ColumnSortOrder.Ascending;
            gridView1.BestFitColumns();
        }
Exemplo n.º 2
0
        /// <summary>
        /// 保存大数据分析模型
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void simpleBtnSave_Click(object sender, EventArgs e)
        {
            if (dataSource.Count > 0)
            {
                //1.数据验证
                string strError = ValidateData();
                if (strError != "100")
                {
                    XtraMessageBox.Show(strError, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                LargedataAnalysisConfigBusinessModel largedataAnalysisConfigBusinessModel = new LargedataAnalysisConfigBusinessModel();
                //2.获取界面数据
                largedataAnalysisConfigBusinessModel.LargedataAnalysisConfigInfo = CreateModel();

                //3.提交数据
                if (isEidt)
                {
                    string responseMessage = largedataAnalysisConfigBusiness.EditLargedataAnalysisConfig(largedataAnalysisConfigBusinessModel);
                    if (string.IsNullOrEmpty(responseMessage))
                    {
                        XtraMessageBox.Show("保存成功", "保存消息框", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        OperateLogHelper.InsertOperateLog(16, "大数据分析模型-修改【" + largedataAnalysisConfigBusinessModel.LargedataAnalysisConfigInfo.Name + "】," + string.Format("内容:{0}", JSONHelper.ToJSONString(largedataAnalysisConfigBusinessModel.LargedataAnalysisConfigInfo)), "大数据分析模型-修改");
                        returnModel       = largedataAnalysisConfigBusinessModel.LargedataAnalysisConfigInfo; //将添加成功的对象返回主窗体
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                    }
                    else
                    {
                        XtraMessageBox.Show(responseMessage, "保存消息框", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                else
                {
                    string responseMessage = largedataAnalysisConfigBusiness.AddLargedataAnalysisConfig(largedataAnalysisConfigBusinessModel);
                    if (string.IsNullOrEmpty(responseMessage))
                    {
                        XtraMessageBox.Show("保存成功", "保存消息框", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        OperateLogHelper.InsertOperateLog(16, "大数据分析模型-新增【" + largedataAnalysisConfigBusinessModel.LargedataAnalysisConfigInfo.Name + "】," + string.Format("内容:{0}", JSONHelper.ToJSONString(largedataAnalysisConfigBusinessModel.LargedataAnalysisConfigInfo)), "大数据分析模型-新增");
                        returnModel       = largedataAnalysisConfigBusinessModel.LargedataAnalysisConfigInfo; //将添加成功的对象返回主窗体
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                        //当前窗口变为编辑模式
                        //this.largedataAnalysisId = largedataAnalysisConfigBusinessModel.LargedataAnalysisConfigInfo.Id;
                    }
                    else
                    {
                        XtraMessageBox.Show(responseMessage, "保存消息框", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
            else
            {
                XtraMessageBox.Show("请选择分析模板,并配置表达式测点。", "提示消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 单个分析模型的分析.
        /// </summary>
        /// <param name="dataAnalysisInfo">分析模型</param>
        /// <returns>表达式分析结果列表</returns>
        private List <ExpressionRealTimeResultInfo> DataAnalysis(JC_LargedataAnalysisConfigInfo dataAnalysisInfo)
        {
            List <ExpressionRealTimeResultInfo>       returnResult     = new List <ExpressionRealTimeResultInfo>();
            List <JC_SetAnalysisModelPointRecordInfo> pointMappingList = dataAnalysisInfo.AnalysisModelPointRecordInfoList;

            if (pointMappingList == null || pointMappingList.Count == 0)
            {
                return(returnResult);
            }

            dataAnalysisInfo.AnalysisSuccessfulPointList.Clear();
            //group by ExpressionId
            IEnumerable <IGrouping <string, JC_SetAnalysisModelPointRecordInfo> > expressionGroup = pointMappingList.GroupBy(p => p.ExpressionId);

            foreach (IGrouping <string, JC_SetAnalysisModelPointRecordInfo> expressionParameterList in expressionGroup)
            {
                var firstPointBindingInfo = expressionParameterList.FirstOrDefault();
                int devTypeId             = firstPointBindingInfo.DevTypeId;
                if (devTypeId > -1)
                {
                    //模型绑定类型的情况
                    List <PointAnalysisInfo> pointAnalysisInfoList = GetPointByDevType(devTypeId);
                    foreach (var item in pointAnalysisInfoList)
                    {
                        ExpressionAnalysis(dataAnalysisInfo, expressionParameterList, returnResult, item);
                        //绑定类型的情况,只要一个表达式成立就更新分析模型状态.

                        //计算结束时间 edit by  2018-02-02
                        bool isAnalysisSuccessful = returnResult.Any(q => q.AnalysisResult == 2 && ((q.MaxContinueTime == 0 && q.ActualContinueTime >= q.ContinueTime) || (q.MaxContinueTime > 0 && q.ActualContinueTime >= q.ContinueTime && q.ActualContinueTime <= q.MaxContinueTime)));
                        if (isAnalysisSuccessful)
                        {
                            AnalysisResultHandler(dataAnalysisInfo, returnResult);
                        }
                        if (isCallForStop)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    //模型绑定测点的情况.
                    ExpressionAnalysis(dataAnalysisInfo, expressionParameterList, returnResult);
                }
            }
            return(returnResult);
        }
Exemplo n.º 4
0
        private void editLoadForm()
        {
            editModel = largedataAnalysisConfigBusiness.GetLargeDataAnalysisConfigById(largedataAnalysisId);

            txtTempleteName.Text               = editModel.Name;
            lookUpEditName.EditValue           = editModel.TempleteId;
            lookUpEditName.Properties.ReadOnly = true;
            txtAnalysisInterval.EditValue      = editModel.AnalysisInterval;
            txtTrueDescription.EditValue       = editModel.TrueDescription;
            txtFalseDescription.EditValue      = editModel.FalseDescription;

            dataSource = editModel.AnalysisModelPointRecordInfoList;
            dataSource = dataSource.OrderBy(q => q.ExpressionId).ThenBy(q => q.ParameterName).ToList();
            setViewList(dataSource);
            //gridControlData.DataSource = dataSource;
            gridControlData.DataSource = viewList;
            gridView1.Columns["ExpressionId"].SortOrder = DevExpress.Data.ColumnSortOrder.Ascending;
            gridView1.BestFitColumns();
        }
Exemplo n.º 5
0
        /// <summary>
        /// 创建分析线程
        /// </summary>
        /// <returns>分析线程</returns>
        private Thread CreateAnalysisThread()
        {
            Thread newAnalysisThread = new Thread(new ParameterizedThreadStart((item) =>
            {
                JC_LargedataAnalysisConfigInfo toDoItem = item as JC_LargedataAnalysisConfigInfo;
                if (toDoItem == null)
                {
                    return;
                }
                if (isCallForStop)
                {
                    lock (threadPoolLock)
                    {
                        if (threadPool.ContainsKey(toDoItem.Id))
                        {
                            threadPool.Remove(toDoItem.Id);
                            AnalysisModelCache.Instance.DeleteItem(toDoItem);
                        }
                    }
                    return;
                }
                try
                {
                    List <ExpressionRealTimeResultInfo> result = DataAnalysis(toDoItem);
                    AnalysisResultHandler(toDoItem, result);
                }
                catch (Exception ex)
                {
                    LogHelper.Error(string.Format("分析模型:({0})分析出错! 错误消息:{1}", toDoItem.Name, ex.StackTrace));
                }
                lock (threadPoolLock)
                {
                    if (threadPool.ContainsKey(toDoItem.Id))
                    {
                        threadPool.Remove(toDoItem.Id);
                    }
                }
            }));

            return(newAnalysisThread);
        }
Exemplo n.º 6
0
        private void RefreshData()
        {
            while (!StaticClass.SystemOut)
            {
                try
                {
                    Basic.Framework.Web.BasicResponse <List <JC_LargedataAnalysisConfigInfo> > response = largeDataAnalysisCacheClientService.GetAllLargeDataAnalysisConfigCache(new Sys.Safety.Request.LargeDataAnalysisCacheClientGetAllRequest());
                    if (response.Data != null)
                    {
                        //var dataSource = from q in response.Data.AsQueryable()
                        //                 select new
                        //                 {
                        //                     Name = q.Name,
                        //                     AnalysisTime = q.AnalysisTime.HasValue ? q.AnalysisTime.Value.ToString("yyyy/MM/dd HH:mm:ss") : string.Empty,
                        //                     AnalysisResultText = q.AnalysisResultText,
                        //                     ExpressionRealTimeResultList = (
                        //                     from rt in q.ExpressionRealTimeResultList
                        //                     select new { AnalysisModelName = rt.AnalysisModelName,
                        //                         ExpressionText = rt.ExpressionText,
                        //                         FirstSuccessfulTime = rt.FirstSuccessfulTime == DateTime.MinValue ? string.Empty : rt.FirstSuccessfulTime.ToString("yyyy/MM/dd HH:mm:ss"),
                        //                         LastAnalysisTime = rt.LastAnalysisTime == DateTime.MinValue ? string.Empty : rt.LastAnalysisTime.ToString("yyyy/MM/dd HH:mm:ss"),
                        //                         AnalysisResultText = rt.AnalysisResultText,
                        //                         ActualContinueTime = string.Format("{0}:{1}:{2}", (rt.ActualContinueTime / 3600).ToString().PadLeft(2, '0'),
                        //                         (rt.ActualContinueTime % 3600 / 60).ToString().PadLeft(2, '0'), (rt.ActualContinueTime % 3600 % 60).ToString().PadLeft(2, '0')) }).ToList()
                        //                 };

                        //gridList.Clear();
                        foreach (var item in response.Data)
                        {
                            bool isHaveModel = false;
                            foreach (var itemGrid in gridList)
                            {     //old列表
                                if (itemGrid.Id == item.Id)
                                { //分析模型已存在
                                    isHaveModel                 = true;
                                    itemGrid.AnalysisTime       = item.AnalysisTime;
                                    itemGrid.AnalysisResultText = item.AnalysisResultText;
                                    itemGrid.Name               = item.Name;

                                    #region 分析列表
                                    if (item.ExpressionRealTimeResultList != null)
                                    {         //old列表
                                        if (itemGrid.ExpressionRealTimeResultList != null && itemGrid.ExpressionRealTimeResultList.Count > 0)
                                        {     //追加
                                            foreach (var itemExpression in item.ExpressionRealTimeResultList)
                                            { //新分析数据
                                                bool isAdd = true;
                                                foreach (var itemResult in itemGrid.ExpressionRealTimeResultList)
                                                {//old列表
                                                    if (itemResult.ExpressionId == itemExpression.ExpressionId)
                                                    {
                                                        isAdd = false;
                                                        itemResult.ShowFirstSuccessfulTime = itemExpression.FirstSuccessfulTime == DateTime.MinValue ? string.Empty : itemExpression.FirstSuccessfulTime.ToString("yyyy/MM/dd HH:mm:ss");
                                                        itemResult.ShowLastAnalysisTime    = itemExpression.LastAnalysisTime == DateTime.MinValue ? string.Empty : itemExpression.LastAnalysisTime.ToString("yyyy/MM/dd HH:mm:ss");
                                                        itemResult.AnalysisResultText      = itemExpression.AnalysisResultText;

                                                        itemResult.ShowActualContinueTime = string.Format("{0}:{1}:{2}", (itemExpression.ActualContinueTime / 3600).ToString().PadLeft(2, '0'),
                                                                                                          (itemExpression.ActualContinueTime % 3600 / 60).ToString().PadLeft(2, '0'), (itemExpression.ActualContinueTime % 3600 % 60).ToString().PadLeft(2, '0'));

                                                        break;
                                                    }
                                                }

                                                if (isAdd)
                                                {
                                                    ExpressionRealTimeResultInfo modelInfo = new ExpressionRealTimeResultInfo();
                                                    modelInfo.ExpressionText          = itemExpression.ExpressionText;
                                                    modelInfo.ExpressionId            = itemExpression.ExpressionId;
                                                    modelInfo.ShowFirstSuccessfulTime = itemExpression.FirstSuccessfulTime == DateTime.MinValue ? string.Empty : itemExpression.FirstSuccessfulTime.ToString("yyyy/MM/dd HH:mm:ss");
                                                    modelInfo.ShowLastAnalysisTime    = itemExpression.LastAnalysisTime == DateTime.MinValue ? string.Empty : itemExpression.LastAnalysisTime.ToString("yyyy/MM/dd HH:mm:ss");
                                                    modelInfo.AnalysisResultText      = itemExpression.AnalysisResultText;

                                                    modelInfo.ShowActualContinueTime = string.Format("{0}:{1}:{2}", (itemExpression.ActualContinueTime / 3600).ToString().PadLeft(2, '0'),
                                                                                                     (itemExpression.ActualContinueTime % 3600 / 60).ToString().PadLeft(2, '0'), (itemExpression.ActualContinueTime % 3600 % 60).ToString().PadLeft(2, '0'));

                                                    itemGrid.ExpressionRealTimeResultList.Add(modelInfo);
                                                }
                                            }
                                        }
                                        else
                                        {//新增
                                            List <ExpressionRealTimeResultInfo> expressionRealTimeResultList = new List <ExpressionRealTimeResultInfo>();

                                            foreach (var itemExpression in item.ExpressionRealTimeResultList)
                                            {
                                                ExpressionRealTimeResultInfo modelInfo = new ExpressionRealTimeResultInfo();
                                                modelInfo.ExpressionText          = itemExpression.ExpressionText;
                                                modelInfo.ExpressionId            = itemExpression.ExpressionId;
                                                modelInfo.ShowFirstSuccessfulTime = itemExpression.FirstSuccessfulTime == DateTime.MinValue ? string.Empty : itemExpression.FirstSuccessfulTime.ToString("yyyy/MM/dd HH:mm:ss");
                                                modelInfo.ShowLastAnalysisTime    = itemExpression.LastAnalysisTime == DateTime.MinValue ? string.Empty : itemExpression.LastAnalysisTime.ToString("yyyy/MM/dd HH:mm:ss");
                                                modelInfo.AnalysisResultText      = itemExpression.AnalysisResultText;

                                                modelInfo.ShowActualContinueTime = string.Format("{0}:{1}:{2}", (itemExpression.ActualContinueTime / 3600).ToString().PadLeft(2, '0'),
                                                                                                 (itemExpression.ActualContinueTime % 3600 / 60).ToString().PadLeft(2, '0'), (itemExpression.ActualContinueTime % 3600 % 60).ToString().PadLeft(2, '0'));

                                                expressionRealTimeResultList.Add(modelInfo);
                                            }
                                            itemGrid.ExpressionRealTimeResultList = expressionRealTimeResultList;
                                        }
                                    }

                                    #endregion
                                }
                            }

                            if (isHaveModel == false)
                            {
                                JC_LargedataAnalysisConfigInfo model = new JC_LargedataAnalysisConfigInfo();
                                model.Id                 = item.Id;
                                model.Name               = item.Name;
                                model.AnalysisTime       = item.AnalysisTime;
                                model.AnalysisResultText = item.AnalysisResultText;

                                List <ExpressionRealTimeResultInfo> expressionRealTimeResultList = new List <ExpressionRealTimeResultInfo>();
                                if (item.ExpressionRealTimeResultList != null)
                                {
                                    foreach (var itemExpression in item.ExpressionRealTimeResultList)
                                    {
                                        ExpressionRealTimeResultInfo modelInfo = new ExpressionRealTimeResultInfo();
                                        modelInfo.ExpressionText          = itemExpression.ExpressionText;
                                        modelInfo.ExpressionId            = itemExpression.ExpressionId;
                                        modelInfo.ShowFirstSuccessfulTime = itemExpression.FirstSuccessfulTime == DateTime.MinValue ? string.Empty : itemExpression.FirstSuccessfulTime.ToString("yyyy/MM/dd HH:mm:ss");
                                        modelInfo.ShowLastAnalysisTime    = itemExpression.LastAnalysisTime == DateTime.MinValue ? string.Empty : itemExpression.LastAnalysisTime.ToString("yyyy/MM/dd HH:mm:ss");
                                        modelInfo.AnalysisResultText      = itemExpression.AnalysisResultText;

                                        modelInfo.ShowActualContinueTime = string.Format("{0}:{1}:{2}", (itemExpression.ActualContinueTime / 3600).ToString().PadLeft(2, '0'),
                                                                                         (itemExpression.ActualContinueTime % 3600 / 60).ToString().PadLeft(2, '0'), (itemExpression.ActualContinueTime % 3600 % 60).ToString().PadLeft(2, '0'));

                                        expressionRealTimeResultList.Add(modelInfo);
                                    }
                                }
                                model.ExpressionRealTimeResultList = expressionRealTimeResultList;
                                gridList.Add(model);
                            }
                        }
                        MethodInvoker In = new MethodInvoker(() =>
                        {
                            if (gridList != null)
                            {
                                int topRowIndex = gridView1.TopRowIndex;
                                gridView1.RefreshData();
                                for (int i = 0; i < gridView1.RowCount; i++)
                                {
                                    //默认展开所有子项
                                    //gridView1.ExpandMasterRow(i);
                                    DevExpress.XtraGrid.Views.Base.BaseView childView = gridView1.GetVisibleDetailView(i);
                                    if (childView != null)
                                    {
                                        childView.RefreshData();
                                    }
                                }
                                gridView1.TopRowIndex = topRowIndex;
                            }
                        });
                        if (gridControlData.InvokeRequired)
                        {
                            gridControlData.Invoke(In);
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.Error(ex.Message);
                }
                Thread.Sleep(4000);
            }
        }
Exemplo n.º 7
0
        private void gridLookUpEdit_EditValueChanged(object sender, EventArgs e)
        {
            try
            {
                string daID = this.gridLookUpEdit.EditValue.ToString();  //是ookUpEdit.Properties.ValueMember的值
                string xm   = this.gridLookUpEdit.Text.Trim();

                gridControlLargedataData.DataSource = largedataAnalysisConfigBusiness.GetLargedataAnalysisConfigDetailById(daID);

                List <JC_RegionOutageConfigInfo> regionOutageConfigInfoList = regionOutageBusiness.GetRegionOutage(daID);

                CrossControlList  = new List <CrossControlItem>();
                DeControlItemList = new List <DeControlItem>();
                bool isRemoveControl = false;
                if (regionOutageConfigInfoList != null && regionOutageConfigInfoList.Count > 0)
                {
                    foreach (var item in regionOutageConfigInfoList)
                    {
                        if (item.ControlStatus == 1)
                        {
                            isRemoveControl = item.IsRemoveControl == 1 ? true : false;
                            CrossControlItem crossControlItem = new CrossControlItem();
                            crossControlItem.PointId = item.PointId;
                            crossControlItem.Point   = item.Point;
                            if (item.ControlStatus == 1)
                            {
                                crossControlItem.ControlType = "控制";
                            }
                            else
                            {
                                crossControlItem.ControlType = "解除控制";
                            }
                            crossControlItem.DelInfBtnStr = "删除";
                            CrossControlList.Add(crossControlItem);
                        }
                        else
                        {
                            DeControlItem DeControlItem = new DeControlItem();
                            DeControlItem.PointId           = item.PointId;
                            DeControlItem.Point             = item.Point;
                            DeControlItem.RemoveModelId     = item.RemoveModelId;
                            DeControlItem.RemoveModelName   = item.RemoveModelName;
                            DeControlItem.DelInfBtnStrFalse = "删除";
                            DeControlItemList.Add(DeControlItem);
                        }
                    }
                }
                checkEditRemoveControl.Checked = isEdit ? isRemoveControl : true;
                CdgControl.DataSource          = ToDataTable(CrossControlList);
                gridControlFalse.DataSource    = ToDataTable(DeControlItemList);

                if (DeControlItemList.Count > 0)
                {
                    checkEditRemoveControl.Enabled = false;
                }

                List <JC_LargedataAnalysisConfigInfo> JC_LargedataAnalysisConfigInfoList = largedataAnalysisConfigBusiness.GetLargeDataAnalysisConfigWithRegionOutage(string.Empty);
                if (!string.IsNullOrEmpty(daID) && JC_LargedataAnalysisConfigInfoList != null && JC_LargedataAnalysisConfigInfoList.Count > 0)
                {
                    JC_LargedataAnalysisConfigInfo selectedAnalysisModel = JC_LargedataAnalysisConfigInfoList.FirstOrDefault(q => q.Id == daID);
                    if (null != selectedAnalysisModel)
                    {
                        JC_LargedataAnalysisConfigInfoList.Remove(selectedAnalysisModel);
                    }
                }
                lookUpEditAnalysisTemplate.Properties.DataSource = JC_LargedataAnalysisConfigInfoList;
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex.Message);
            }
        }
Exemplo n.º 8
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);
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 多系统融合应急联动输出
        /// </summary>
        /// <param name="responsesysEmergencyLinkInfos"></param>
        private void SysEmergencyLinkHandle(JC_LargedataAnalysisConfigInfo analysisConfigInfo, SysEmergencyLinkageInfo responsesysEmergencyLinkInfo)
        {
            try
            {
                //如果模型成立则1.添加控制 2.更新配置缓存 3.写运行记录
                if (analysisConfigInfo.AnalysisResult == 2)
                {
                    //如果不是强制结束则立即执行,如果是强制结束则在大于延迟时间时执行
                    var      isforceend = responsesysEmergencyLinkInfo.IsForceEnd;
                    TimeSpan span       = DateTime.Now - responsesysEmergencyLinkInfo.EndTime;

                    if (!isforceend || (isforceend && span.TotalSeconds > responsesysEmergencyLinkInfo.DelayTime))
                    {
                        #region 1.更新控制缓存

                        string bpointlist  = string.Empty;
                        string rpointlist  = string.Empty;
                        string rpersonlist = string.Empty;

                        //如果应急联动配置存在被控区域,则获取此区域的人员设备和广播设备
                        if (responsesysEmergencyLinkInfo.PassiveAreas != null && responsesysEmergencyLinkInfo.PassiveAreas.Count > 0)
                        {
                            responsesysEmergencyLinkInfo.PassiveAreas.ForEach(area =>
                            {
                                //处理区域广播呼叫
                                var bdefinfos = b_defCacheService.GetPointDefineCacheByAreaID(new PointDefineGetByAreaIDRequest {
                                    AreaId = area.AreaId
                                }).Data;
                                bdefinfos.ForEach(b => { bpointlist += b.PointID + ","; });

                                //处理区域人员呼叫
                                var rdefinfos = rdefCacheService.GetPointDefineCacheByAreaID(new PointDefineGetByAreaIDRequest {
                                    AreaId = area.AreaId
                                }).Data;
                                rdefinfos.ForEach(r => { rpointlist += r.Point + ","; });
                            });
                        }

                        //如果应急联动配置存在被控人员,则获取被控人员列表
                        if (responsesysEmergencyLinkInfo.PassivePersons != null && responsesysEmergencyLinkInfo.PassivePersons.Count > 0)
                        {
                            responsesysEmergencyLinkInfo.PassivePersons.ForEach(p =>
                            {
                                RPersoninfCacheGetByKeyRequest persongetrequest = new RPersoninfCacheGetByKeyRequest();
                                var person = personService.GetPersoninfCache(new R_PersoninfGetRequest()
                                {
                                    Id = p.PersonId
                                }).Data;
                                if (person != null)
                                {
                                    rpersonlist += person.Bh + ",";
                                }
                            });
                        }

                        //如果应急联动配置存在被控设备,则根据类型获取被控测点
                        if (responsesysEmergencyLinkInfo.PassivePoints != null && responsesysEmergencyLinkInfo.PassivePoints.Count > 0)
                        {
                            responsesysEmergencyLinkInfo.PassivePoints.ForEach(p =>
                            {
                                //人员定位
                                if (p.Sysid == (int)SystemEnum.Personnel)
                                {
                                    var rdef = rdefCacheService.GetPointDefineCacheByPointID(new PointDefineGetByPointIDRequest {
                                        PointID = p.PointId
                                    }).Data;
                                    if (rdef != null && !string.IsNullOrEmpty(rdef.PointID))
                                    {
                                        rpointlist += rdef.Point + "|";
                                    }
                                }
                                //广播
                                else if (p.Sysid == (int)SystemEnum.Broadcast)
                                {
                                    var bdef = b_defCacheService.GetPointDefineCacheByPointID(new PointDefineGetByPointIDRequest {
                                        PointID = p.PointId
                                    }).Data;
                                    if (bdef != null && !string.IsNullOrEmpty(bdef.PointID))
                                    {
                                        bpointlist += bdef.PointID + "|";
                                    }
                                }
                            });
                        }

                        //添加广播呼叫
                        if (bpointlist.Length > 0)
                        {
                            BCallInfoGetByMasterIDRequest b_defExistsRequest = new BCallInfoGetByMasterIDRequest();
                            b_defExistsRequest.MasterId = analysisConfigInfo.Id;
                            b_defExistsRequest.CallType = 1;
                            var bcallinfo = bCallService.GetBCallInfoByMasterID(b_defExistsRequest).Data.FirstOrDefault();
                            if (bcallinfo == null)
                            {
                                bpointlist = bpointlist.Substring(0, bpointlist.Length - 1);

                                var bpointarr = bpointlist.Split('|');

                                B_CallInfo bcalladdinfo = new B_CallInfo();
                                string     callid       = IdHelper.CreateLongId().ToString();
                                bcalladdinfo.Id       = callid;
                                bcalladdinfo.CallType = 1;
                                bcalladdinfo.CallTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                                bcalladdinfo.MasterId = analysisConfigInfo.Id;
                                bcalladdinfo.Message  = analysisConfigInfo.TrueDescription;
                                //bcalladdinfo.PointList = bpointlist;

                                List <B_CallpointlistInfo> callpointdetails = new List <B_CallpointlistInfo>();
                                Array.ForEach(bpointarr, point =>
                                {
                                    B_CallpointlistInfo callpointdetail = new B_CallpointlistInfo();
                                    callpointdetail.Id            = IdHelper.CreateLongId().ToString();
                                    callpointdetail.BCallId       = callid;
                                    callpointdetail.CalledPointId = point;

                                    callpointdetails.Add(callpointdetail);
                                });
                                bcalladdinfo.CallPointList = callpointdetails;

                                bCallService.AddCall(new B_CallAddRequest {
                                    CallInfo = bcalladdinfo
                                });
                            }
                        }

                        //添加人员定位设备呼叫
                        if (rpointlist.Length > 0)
                        {
                            RCallInfoGetByMasterIDRequest rcallgetRequest = new RCallInfoGetByMasterIDRequest();
                            rcallgetRequest.MasterId      = analysisConfigInfo.Id;
                            rcallgetRequest.CallType      = 1;
                            rcallgetRequest.IsQueryByType = true;
                            rcallgetRequest.Type          = 1;
                            var rcallinfo = rCallService.GetRCallInfoByMasterID(rcallgetRequest).Data.FirstOrDefault();
                            if (rcallinfo == null)
                            {
                                rpointlist = rpointlist.Substring(0, rpointlist.Length - 1);

                                R_CallInfo rcalladdinfo = new R_CallInfo();
                                rcalladdinfo.Id                = IdHelper.CreateLongId().ToString();
                                rcalladdinfo.Type              = 1;
                                rcalladdinfo.CallType          = 1;
                                rcalladdinfo.CallTime          = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                                rcalladdinfo.MasterId          = analysisConfigInfo.Id;
                                rcalladdinfo.CallPersonDefType = 4;
                                rcalladdinfo.PointList         = rpointlist;

                                rCallService.AddCall(new R_CallAddRequest {
                                    CallInfo = rcalladdinfo
                                });
                            }
                        }

                        //添加人员卡号呼叫
                        if (rpersonlist.Length > 0)
                        {
                            RCallInfoGetByMasterIDRequest rcallgetRequest = new RCallInfoGetByMasterIDRequest();
                            rcallgetRequest.MasterId      = analysisConfigInfo.Id;
                            rcallgetRequest.CallType      = 1;
                            rcallgetRequest.IsQueryByType = true;
                            rcallgetRequest.Type          = 0;
                            var rcallinfo = rCallService.GetRCallInfoByMasterID(rcallgetRequest).Data.FirstOrDefault();
                            if (rcallinfo == null)
                            {
                                rpersonlist = rpersonlist.Substring(0, rpersonlist.Length - 1);

                                R_CallInfo rcalladdinfo = new R_CallInfo();
                                rcalladdinfo.Id                = IdHelper.CreateLongId().ToString();
                                rcalladdinfo.Type              = 0;
                                rcalladdinfo.CallType          = 1;
                                rcalladdinfo.CallTime          = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                                rcalladdinfo.MasterId          = analysisConfigInfo.Id;
                                rcalladdinfo.CallPersonDefType = 2;
                                rcalladdinfo.BhContent         = rpersonlist;

                                rCallService.AddCall(new R_CallAddRequest {
                                    CallInfo = rcalladdinfo
                                });
                            }
                        }
                        #endregion
                    }

                    if (responsesysEmergencyLinkInfo.EmergencyLinkageState != 1)
                    {
                        //2.更新配置缓存
                        responsesysEmergencyLinkInfo.EmergencyLinkageState = 1;
                        sysEmergencyLinkageService.UpdateSysEmergencyLinkage(new SysEmergencyLinkageUpdateRequest {
                            SysEmergencyLinkageInfo = responsesysEmergencyLinkInfo
                        });
                        //3.写运行记录
                        EmergencyLinkHistoryAddRequest ehistoryaddrequest = new EmergencyLinkHistoryAddRequest();
                        EmergencyLinkHistoryInfo       ehistory           = new EmergencyLinkHistoryInfo();
                        ehistory.Id                    = IdHelper.CreateLongId().ToString();
                        ehistory.IsForceEnd            = 0;
                        ehistory.SysEmergencyLinkageId = responsesysEmergencyLinkInfo.Id;
                        ehistory.StartTime             = DateTime.Now;
                        ehistory.EndTime               = new DateTime(1900, 1, 1, 0, 0, 0);
                        ehistoryaddrequest.EmergencyLinkHistoryInfo = ehistory;
                        emergencyLinkHistoryService.AddEmergencyLinkHistory(ehistoryaddrequest);
                    }
                }
                //如果模型不成立则1.解除控制 2.更新配置缓存 3.更新运行记录
                else
                {
                    //解除广播控制
                    BCallInfoGetByMasterIDRequest b_defExistsRequest = new BCallInfoGetByMasterIDRequest();
                    b_defExistsRequest.MasterId = analysisConfigInfo.Id;
                    b_defExistsRequest.CallType = 1;
                    var bcallinfo = bCallService.GetBCallInfoByMasterID(b_defExistsRequest).Data.FirstOrDefault();
                    if (bcallinfo != null && bcallinfo.CallType != 2)
                    {
                        bcallinfo.CallType = 2;
                        bCallService.UpdateCall(new B_CallUpdateRequest {
                            CallInfo = bcallinfo
                        });
                    }

                    //解除人员定位控制
                    RCallInfoGetByMasterIDRequest rcallgetRequest = new RCallInfoGetByMasterIDRequest();
                    rcallgetRequest.MasterId      = analysisConfigInfo.Id;
                    rcallgetRequest.CallType      = 1;
                    rcallgetRequest.IsQueryByType = false;
                    rcallgetRequest.Type          = 0;
                    var rcallinfo = rCallService.GetRCallInfoByMasterID(rcallgetRequest).Data;
                    if (rcallinfo.Count > 0)
                    {
                        rcallinfo.ForEach(o =>
                        {
                            if (o.CallType != 2)
                            {
                                o.CallType = 2;
                                rCallService.UpdateCall(new R_CallUpdateRequest {
                                    CallInfo = o
                                });
                            }
                        });
                    }

                    if (responsesysEmergencyLinkInfo.EmergencyLinkageState != 0)
                    {
                        //2.更新配置缓存
                        responsesysEmergencyLinkInfo.EmergencyLinkageState = 0;
                        sysEmergencyLinkageService.UpdateSysEmergencyLinkage(new SysEmergencyLinkageUpdateRequest {
                            SysEmergencyLinkageInfo = responsesysEmergencyLinkInfo
                        });
                    }

                    //3.更新运行记录
                    var emergencyLinkHistory = emergencyLinkHistoryService.GetEmergencyLinkHistoryByEmergency(new EmergencyLinkHistoryGetByEmergencyRequest {
                        EmergencyId = responsesysEmergencyLinkInfo.Id
                    }).Data;
                    if (emergencyLinkHistory != null && !string.IsNullOrEmpty(emergencyLinkHistory.Id) && emergencyLinkHistory.EndTime.Year == 1900)
                    {
                        emergencyLinkHistory.EndTime = DateTime.Now;
                        emergencyLinkHistoryService.UpdateEmergencyLinkHistory(new EmergencyLinkHistoryUpdateRequest {
                            EmergencyLinkHistoryInfo = emergencyLinkHistory
                        });
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Info(" 多系统融合应急联动输出出错!" + ex.Message);
            }
        }
Exemplo n.º 10
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());
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// 创建模型数据
        /// </summary>
        private JC_LargedataAnalysisConfigInfo CreateModel()
        {
            if (isEidt)
            {
                editModel.Name             = txtTempleteName.Text.Trim();
                editModel.TempleteId       = this.lookUpEditName.EditValue.ToString();
                editModel.TrueDescription  = txtTrueDescription.Text.Trim();
                editModel.FalseDescription = txtFalseDescription.Text.Trim();
                editModel.AnalysisInterval = int.Parse(txtAnalysisInterval.Text.Trim());

                //从视图列表viewList获取数据源。
                foreach (var item in viewList)
                {
                    var expressionConfigList = editModel.AnalysisModelPointRecordInfoList.Where(q => q.ExpressionId == item.ExpressionId && q.ParameterId == item.ParameterId);
                    foreach (var expressionConfig in expressionConfigList)
                    {
                        expressionConfig.DevTypeId   = item.DevTypeId;
                        expressionConfig.DevTypeName = string.Empty;
                        if (item.DevTypeId > -1)
                        {
                            expressionConfig.DevTypeName = item.DevTypeName;
                        }
                        expressionConfig.Point         = string.IsNullOrEmpty(item.Point) ? string.Empty : item.Point;
                        expressionConfig.PointId       = string.IsNullOrEmpty(item.PointId) ? string.Empty : item.PointId;
                        expressionConfig.PointActivity = item.PointActivity;
                    }
                }

                return(editModel);
            }

            //Add Model
            JC_LargedataAnalysisConfigInfo largedataAnalysisConfigInfo = new JC_LargedataAnalysisConfigInfo();

            //largedataAnalysisConfigInfo.Id = Guid.NewGuid().ToString();
            largedataAnalysisConfigInfo.Id = IdHelper.CreateLongId().ToString();

            string templeteId = this.lookUpEditName.EditValue.ToString();  //是ookUpEdit.Properties.ValueMember的值

            largedataAnalysisConfigInfo.TempleteId = templeteId;
            largedataAnalysisConfigInfo.IsDeleted = DeleteState.No;
            largedataAnalysisConfigInfo.IsEnabled = EnableState.Yes;

            largedataAnalysisConfigInfo.Name             = txtTempleteName.Text.Trim();
            largedataAnalysisConfigInfo.TrueDescription  = txtTrueDescription.Text.Trim();
            largedataAnalysisConfigInfo.FalseDescription = txtFalseDescription.Text.Trim();
            largedataAnalysisConfigInfo.AnalysisInterval = int.Parse(txtAnalysisInterval.Text.Trim());
            largedataAnalysisConfigInfo.AnalysisResult   = 0;
            largedataAnalysisConfigInfo.CreatorId        = UserID;
            largedataAnalysisConfigInfo.CreatorName      = UserName;
            //从视图列表viewList获取数据源。
            foreach (var item in viewList)
            {
                var expressionConfigList = dataSource.Where(q => q.ExpressionId == item.ExpressionId && q.ParameterId == item.ParameterId);
                foreach (var expressionConfig in expressionConfigList)
                {
                    expressionConfig.DevTypeId   = item.DevTypeId;
                    expressionConfig.DevTypeName = string.Empty;
                    if (item.DevTypeId > -1)
                    {
                        expressionConfig.DevTypeName = item.DevTypeName;
                    }
                    expressionConfig.Point         = string.IsNullOrEmpty(item.Point) ? string.Empty : item.Point;
                    expressionConfig.PointId       = string.IsNullOrEmpty(item.PointId) ? string.Empty : item.PointId;
                    expressionConfig.PointActivity = item.PointActivity;
                }
            }
            largedataAnalysisConfigInfo.AnalysisModelPointRecordInfoList = dataSource;

            return(largedataAnalysisConfigInfo);
        }
Exemplo n.º 12
0
        /// <summary>
        /// 单个表达式分析
        /// </summary>
        /// <param name="dataAnalysisInfo">分析模型</param>
        /// <param name="expConfigList">表达式配置列表</param>
        /// <param name="returnResult">表达式分析结果</param>
        /// <param name="analysisPointId">绑定类型时每个类型下的测点ID</param>
        private void ExpressionAnalysis(JC_LargedataAnalysisConfigInfo dataAnalysisInfo, IGrouping <string, JC_SetAnalysisModelPointRecordInfo> expConfigList, List <ExpressionRealTimeResultInfo> returnResult, PointAnalysisInfo pointAnalysisInfo = null)
        {
            List <AnalysisSuccessfulPointInfo> expressionUsedPointList = new List <AnalysisSuccessfulPointInfo>();

            var    firstPointBindingInfo = expConfigList.FirstOrDefault();
            string expressionId          = firstPointBindingInfo.ExpressionId;
            string expression            = firstPointBindingInfo.Expresstion;
            string expressionText        = firstPointBindingInfo.Expresstion;
            int    continueTime          = firstPointBindingInfo.ContinueTime;
            int    maxcontinueTime       = firstPointBindingInfo.MaxContinueTime;

            if (pointAnalysisInfo != null)
            {
                expressionId = string.Format("{0}_{1}", expressionId, pointAnalysisInfo.PointId);
            }
            //是否因子值为未知
            bool isUnknowFactorValue = false;

            //获取表达式参数因子值
            foreach (var pointMapping in expConfigList)
            {
                string expressionConfigId = pointMapping.ExpressionConfigId;
                string pointId            = pointAnalysisInfo == null ? pointMapping.PointId : pointAnalysisInfo.PointId;
                string pointCode          = pointAnalysisInfo == null ? pointMapping.Point : pointAnalysisInfo.Point;
                string wz         = pointAnalysisInfo == null ? pointMapping.Wz : pointAnalysisInfo.Wz;
                string callMethod = pointMapping.CallMethodName;
                if (!expressionUsedPointList.Any(q => q.PointId == pointId))
                {
                    expressionUsedPointList.Add(new AnalysisSuccessfulPointInfo()
                    {
                        PointId = pointId, Point = pointCode, Wz = wz
                    });
                }
                object[] factorValues = null;
                try
                {
                    factorLuaService.RegisterFunction(factorCalculateService, callMethod);
                    factorValues = factorLuaService.CallFunction(callMethod, pointId);
                }
                catch (Exception ex)
                {
                    LogHelper.Error(string.Format("通过Lua调用因子({0})服务接口({1})出错:{2}", pointId + ">>" + pointMapping.FactorName, callMethod, ex.StackTrace));
                }
                if (!isUnknowFactorValue)
                {
                    object factorGetValue = (factorValues == null || factorValues.Length <= 0) ? "Unknow" : (factorValues[0] as FactorValueInfo).Value;
                    isUnknowFactorValue = (factorGetValue.ToString() == "Unknow" || factorGetValue.ToString() == "未知") ? true : false;
                    //if (isUnknowFactorValue)
                    //    break;//因为要替换表达式文本为测点号->因子格式所以这里取消跳出循环了.
                    //获取到的因子值替换表达式中的表达式参数配置ID.
                    expression = expression.Replace(expressionConfigId, factorGetValue.ToString());
                }
                expressionText = expressionText.Replace(expressionConfigId, string.Format("{0}[{1}]->{2}", pointCode, wz, pointMapping.FactorName));
            }
            //默认表达式计算结果为0-未知
            int expressionCalculateResult = 0;

            if (!isUnknowFactorValue)
            {
                //计算表达式.
                object[] expressionLuaCalculateResult = null;
                try
                {
                    //表达式计算结果要么true要么false
                    expressionLuaCalculateResult = factorLuaService.ExecuteLuaScript(expression);
                    expressionCalculateResult    = bool.Parse(expressionLuaCalculateResult[0].ToString()) ? 2 : 1;
                }
                catch (Exception ex)
                {
                    LogHelper.Error(string.Format("Lua计算表达式出错!表达式为:{0}, 错误消息:{1}", expressionText, ex.StackTrace));
                    //计算出错,表达式计算结果为未知
                    expressionCalculateResult = 0;
                }
            }
            lock (listLock)
            {
                //记录表达式实时分析结果
                ExpressionRealTimeResultInfo expressionRealTimeResultInfo = expressionRealTimeResultList.FirstOrDefault(q => q.AnalysisModelId == dataAnalysisInfo.Id && q.ExpressionId == expressionId);
                string analysisResultText = string.Empty;
                switch (expressionCalculateResult)
                {
                case 1:
                    analysisResultText = dataAnalysisInfo.FalseDescription;
                    break;

                case 2:

                    //表达式分析成立时,判断持续时间是否大于最大持续时间;如果大于持续时间,则置为分析不成立
                    //bool ismaxcontinuetime = false;
                    //if (expressionRealTimeResultInfo != null)
                    //{
                    //    int actualContinueTime = Convert.ToInt32((DateTime.Now - expressionRealTimeResultInfo.FirstSuccessfulTime).TotalSeconds);
                    //    if (maxcontinueTime > 0 && maxcontinueTime < actualContinueTime)
                    //        ismaxcontinuetime = true;
                    //}

                    //if (ismaxcontinuetime)
                    //{
                    //    analysisResultText = dataAnalysisInfo.FalseDescription;
                    //    expressionCalculateResult = 1;
                    //}
                    //else
                    //{
                    //    analysisResultText = dataAnalysisInfo.TrueDescription;
                    //    foreach (var item in expressionUsedPointList)
                    //    {
                    //        if (!dataAnalysisInfo.AnalysisSuccessfulPointList.Any(q => q.PointId == item.PointId))
                    //            dataAnalysisInfo.AnalysisSuccessfulPointList.Add(item);
                    //    }
                    //}


                    analysisResultText = dataAnalysisInfo.TrueDescription;
                    foreach (var item in expressionUsedPointList)
                    {
                        if (!dataAnalysisInfo.AnalysisSuccessfulPointList.Any(q => q.PointId == item.PointId))
                        {
                            dataAnalysisInfo.AnalysisSuccessfulPointList.Add(item);
                        }
                    }
                    //dataAnalysisInfo.AnalysisSuccessfulPointList.AddRange(expressionUsedPointList.Except(dataAnalysisInfo.AnalysisSuccessfulPointList));
                    break;

                default:
                    analysisResultText = "未知";
                    break;
                }
                if (expressionRealTimeResultInfo == null)
                {
                    expressionRealTimeResultInfo = new ExpressionRealTimeResultInfo()
                    {
                        AnalysisModelId     = dataAnalysisInfo.Id,
                        AnalysisModelName   = dataAnalysisInfo.Name,
                        ExpressionId        = expressionId,
                        Expression          = expression,
                        ExpressionText      = expressionText,
                        AnalysisResult      = expressionCalculateResult,
                        AnalysisResultText  = analysisResultText,
                        FirstSuccessfulTime = expressionCalculateResult == 2 ? DateTime.Now : DateTime.MinValue,
                        LastAnalysisTime    = DateTime.Now,
                        ContinueTime        = continueTime,
                        MaxContinueTime     = maxcontinueTime,
                        ActualContinueTime  = 0
                    };
                    expressionRealTimeResultList.Add(expressionRealTimeResultInfo);
                }
                else
                {
                    expressionRealTimeResultInfo.AnalysisResult     = expressionCalculateResult;
                    expressionRealTimeResultInfo.AnalysisResultText = analysisResultText;
                    expressionRealTimeResultInfo.LastAnalysisTime   = DateTime.Now;
                    expressionRealTimeResultInfo.ExpressionText     = expressionText;
                    if (expressionCalculateResult == 2 && expressionRealTimeResultInfo.FirstSuccessfulTime == DateTime.MinValue)
                    {
                        expressionRealTimeResultInfo.FirstSuccessfulTime = DateTime.Now;
                    }
                    if (expressionCalculateResult == 2)
                    {
                        expressionRealTimeResultInfo.ActualContinueTime = Convert.ToInt64((expressionRealTimeResultInfo.LastAnalysisTime - expressionRealTimeResultInfo.FirstSuccessfulTime).TotalSeconds);
                    }
                    else
                    {
                        expressionRealTimeResultInfo.FirstSuccessfulTime = DateTime.MinValue;
                        expressionRealTimeResultInfo.ActualContinueTime  = 0;
                    }
                }
                returnResult.Add(ObjectConverter.DeepCopy(expressionRealTimeResultInfo));
            }
        }
Exemplo n.º 13
0
        /// <summary>
        /// 处理分析结果
        /// </summary>
        /// <param name="dataAnalysisInfo">实时分析模型</param>
        /// <param name="expressionRealTimeResultInfoList">实时表达式分析结果列表</param>
        private void AnalysisResultHandler(JC_LargedataAnalysisConfigInfo dataAnalysisInfo, List <ExpressionRealTimeResultInfo> expressionRealTimeResultInfoList)
        {
            //赋值实时表达式分析结果列表
            dataAnalysisInfo.ExpressionRealTimeResultList = expressionRealTimeResultInfoList;
            //模型分析成功
            //bool isAnalysisSuccessful = expressionRealTimeResultInfoList.Exists(q => q.AnalysisResult == 2 && q.ActualContinueTime >= q.ContinueTime);
            bool isAnalysisSuccessful = expressionRealTimeResultInfoList.Exists(q => q.AnalysisResult == 2 && ((q.MaxContinueTime == 0 && q.ActualContinueTime >= q.ContinueTime) || (q.MaxContinueTime > 0 && q.ActualContinueTime >= q.ContinueTime && q.ActualContinueTime <= q.MaxContinueTime)));
            //模型分析不成功
            bool isAnalysisFail = !expressionRealTimeResultInfoList.Exists(q => q.AnalysisResult == 2);

            //if (isAnalysisSuccessful || isAnalysisFail)
            //{
            if (isAnalysisSuccessful)
            {
                dataAnalysisInfo.AnalysisResult     = 2;
                dataAnalysisInfo.AnalysisResultText = dataAnalysisInfo.TrueDescription;
                dataAnalysisInfo.AnalysisTime       = expressionRealTimeResultInfoList.FirstOrDefault(q => q.AnalysisResult == 2 && q.ActualContinueTime >= q.ContinueTime).LastAnalysisTime;
            }
            else
            {
                dataAnalysisInfo.AnalysisResult     = expressionRealTimeResultInfoList.Exists(q => q.AnalysisResult == 1) ? 1 : 0;
                dataAnalysisInfo.AnalysisResultText = dataAnalysisInfo.AnalysisResult == 1 ? dataAnalysisInfo.FalseDescription : "未知";
                dataAnalysisInfo.AnalysisTime       = expressionRealTimeResultInfoList.LastOrDefault().LastAnalysisTime;
                dataAnalysisInfo.AnalysisSuccessfulPointList.Clear();
            }

            try
            {
                //更新服务端实时缓存.
                largeDataAnalysisCacheClientService.UpdateLargeDataAnalysisConfigCahce(new LargeDataAnalysisConfigCacheUpdateRequest()
                {
                    LargeDataAnalysisConfigInfo = dataAnalysisInfo
                });
            }
            catch (Exception ex)
            {
                LogHelper.Error(string.Format("更新实时缓存出错:{0}", ex.StackTrace));
            }

            //当前分析结果和上一次分析结果不同时
            if (dataAnalysisInfo.AnalysisResult != dataAnalysisInfo.PrevAnalysisResult || DateTime.Now > Convert.ToDateTime(dataAnalysisInfo.PrevAnalysisTime.ToString("yyyy-MM-dd 23:59:59")))
            {
                try
                {
                    Monitor.Enter(addLogLock);
                    //写入分析日志
                    analysisLogService.AddJC_Largedataanalysislog(new LargedataAnalysisLogAddRequest()
                    {
                        JC_LargedataAnalysisLogInfo = new JC_LargedataAnalysisLogInfo()
                        {
                            Id = IdHelper.CreateLongId().ToString(),
                            AnalysisModelId   = dataAnalysisInfo.Id,
                            AnalysisResult    = dataAnalysisInfo.AnalysisResult,
                            AnalysisTime      = dataAnalysisInfo.AnalysisTime.Value,
                            IsDeleted         = Enums.Enums.DeleteState.No,
                            Name              = dataAnalysisInfo.Name,
                            StatusDescription = dataAnalysisInfo.AnalysisResult == 2 ? dataAnalysisInfo.TrueDescription
                                : dataAnalysisInfo.AnalysisResult == 0 ? "分析结果未知" : dataAnalysisInfo.FalseDescription
                        }
                    });
                }
                catch (Exception ex)
                {
                    LogHelper.Error(string.Format("处理分析结果>保存分析日志出错:{0}", ex.StackTrace));
                }
                finally
                {
                    Monitor.Exit(addLogLock);
                }
            }

            //更新上一次的分析结果
            //dataAnalysisInfo.PrevAnalysisResult = dataAnalysisInfo.AnalysisResult;
            //dataAnalysisInfo.PrevAnalysisTime = dataAnalysisInfo.AnalysisTime.Value;
            //更新内部缓存
            AnalysisModelCache.Instance.UpdateItem(dataAnalysisInfo);
            //}
        }
Exemplo n.º 14
0
        protected override void DoWork()
        {
            DateTime analysisModelServerSideTime = DateTime.MinValue;

            try
            {
                BasicResponse <string> analysisModelLastChangedTimeResponse = largeDataAnalysisLastChangedService.GetAnalysisModelLastChangedTime(new LargeDataAnalysisLastChangedRequest());
                if (analysisModelLastChangedTimeResponse.IsSuccess && !string.IsNullOrEmpty(analysisModelLastChangedTimeResponse.Data))
                {
                    analysisModelServerSideTime = DateTime.Parse(analysisModelLastChangedTimeResponse.Data);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error(string.Format("检查服务端分析模型最后修改时间时出错:{0}", ex.StackTrace));
            }

            if (analysisModelServerSideTime > analysisModelLastChangedTime || analysisModelCache.Count == 0)
            {
                BasicResponse <List <JC_LargedataAnalysisConfigInfo> > analysisConfigInfoListResponse;
                try
                {
                    analysisConfigInfoListResponse = largeDataAnalysisCacheClientService.GetAllLargeDataAnalysisConfigCache(new LargeDataAnalysisCacheClientGetAllRequest());
                    if (analysisConfigInfoListResponse.IsSuccess && analysisConfigInfoListResponse.Data != null)
                    {
                        var newestAnalysisConfigInfoList = analysisConfigInfoListResponse.Data;
                        foreach (var item in newestAnalysisConfigInfoList)
                        {
                            JC_LargedataAnalysisConfigInfo existsAnalysisModel = analysisModelCache.Query(q => q.Id == item.Id, false).FirstOrDefault();
                            if (null == existsAnalysisModel)
                            {
                                //有新的分析模型加入
                                if (AnalysisModelChangedEvent != null)
                                {
                                    AnalysisModelChangedEvent(new AnalysisChangedEventArgs()
                                    {
                                        Action = "Add", AnalysisConfig = item
                                    });
                                }
                            }
                            else
                            {
                                if (item.UpdatedTime > existsAnalysisModel.UpdatedTime)
                                {
                                    //分析模型有更新。
                                    if (AnalysisModelChangedEvent != null)
                                    {
                                        AnalysisModelChangedEvent(new AnalysisChangedEventArgs()
                                        {
                                            Action = "Update", AnalysisConfig = item
                                        });
                                    }
                                }
                            }
                        }
                        var cachedItems = analysisModelCache.Query();
                        for (int i = cachedItems.Count - 1; i >= 0; i--)
                        {
                            if (!newestAnalysisConfigInfoList.Any(q => q.Id == cachedItems[i].Id))
                            {
                                //内部维护的分析模型在服务端已被删除
                                if (AnalysisModelChangedEvent != null)
                                {
                                    AnalysisModelChangedEvent(new AnalysisChangedEventArgs()
                                    {
                                        Action = "Delete", AnalysisConfig = cachedItems[i]
                                    });
                                }
                            }
                        }
                    }
                    analysisModelLastChangedTime = analysisModelServerSideTime;
                }
                catch (Exception ex)
                {
                    LogHelper.Error(string.Format("更新内部维护的分析模型时出错:{0}", ex.StackTrace));
                }
            }
            base.DoWork();
        }
        /// <summary>
        /// 验证分析模型
        /// </summary>
        /// <param name="analysisConfig">分析模型配置信息</param>
        /// <returns>Mas应答对象</returns>
        private BasicResponse largeDataAnalysisConfigValidation(JC_LargedataAnalysisConfigInfo analysisConfig)
        {
            if (analysisConfig == null)
            {
                return new BasicResponse()
                       {
                           Code = 1, Message = "分析模型没有初始化"
                       }
            }
            ;
            if (string.IsNullOrEmpty(analysisConfig.TempleteId))
            {
                return new BasicResponse()
                       {
                           Code = 1, Message = "没有指定分析模板Id"
                       }
            }
            ;
            List <JC_SetAnalysisModelPointRecordInfo> analysisModelPointList = analysisConfig.AnalysisModelPointRecordInfoList;

            if (analysisModelPointList == null || analysisModelPointList.Count == 0)
            {
                return new BasicResponse()
                       {
                           Code = 1, Message = "没有为表达式配置测点或指定设备类型"
                       }
            }
            ;
            if (tmpl == null || validateTemplateId != analysisConfig.TempleteId)
            {
                tmpl = _AnalysisModelPointRecordRepository.GetAnalysisModelPointBindingTemplateByTempleteId(analysisConfig.TempleteId);

                validateTemplateId = analysisConfig.TempleteId;
            }
            if (tmpl == null || tmpl.Count == 0)
            {
                return new BasicResponse()
                       {
                           Code = 1, Message = "模板不存在或未配置模板"
                       }
            }
            ;
            if (tmpl.Count > 1 && analysisModelPointList.Count != tmpl.Count)//排除只有一个表达式一个参数的验证.
            {
                return(new BasicResponse()
                {
                    Code = 1, Message = "参数个数不匹配"
                });
            }

            BasicResponse response = new BasicResponse();

            foreach (var item in analysisModelPointList)
            {
                if (string.IsNullOrEmpty(item.PointId) && item.DevTypeId == -1)
                {
                    response.Code = 1; response.Message = "表达式参数配置不完整.";
                    break;
                }
                JC_SetanalysismodelpointrecordModel findModel = tmpl.FirstOrDefault(x => x.ExpressionId == item.ExpressionId && x.ParameterId == item.ParameterId && x.FactorId == item.FactorId);
                if (findModel == null)
                {
                    response.Code = 1; response.Message = "表达式,参数,因子. 不匹配.";
                    break;
                }
            }

            return(response);
        }
        /// <summary>
        /// 添加分析模型,及其关联的测点。
        /// </summary>
        /// <param name="jc_LargedataAnalysisConfigRsequest">分析模型的添加请求</param>
        /// <returns>Mas应答对象包含分析模型</returns>
        public BasicResponse <JC_LargedataAnalysisConfigInfo> AddLargeDataAnalysisConfig(LargedataAnalysisConfigAddRequest jc_LargedataAnalysisConfigRsequest)
        {
            BasicResponse validationResponse = largeDataAnalysisConfigValidation(jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo);

            if (!validationResponse.IsSuccess)
            {
                return new BasicResponse <JC_LargedataAnalysisConfigInfo>()
                       {
                           Code = validationResponse.Code, Message = validationResponse.Message, Data = jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo
                       }
            }
            ;
            var jC_Largedataanalysisconfigresponse = new BasicResponse <JC_LargedataAnalysisConfigInfo>();
            var _jC_Largedataanalysisconfig        = ObjectConverter.Copy <JC_LargedataAnalysisConfigInfo, JC_LargedataanalysisconfigModel>(jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo);
            var _jcSetAnalysisModelPointRecordList = ObjectConverter.CopyList <JC_SetAnalysisModelPointRecordInfo, JC_SetanalysismodelpointrecordModel>(jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo.AnalysisModelPointRecordInfoList);

            bool isSingleExpressionAndParameter1 = isSingleExpressionAndParameter(jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo.TempleteId);
            bool isBindDevType = jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo.AnalysisModelPointRecordInfoList[0].DevTypeId > -1;


            if (isSingleExpressionAndParameter1 && !isBindDevType /*&& jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo.AnalysisModelPointRecordInfoList.Count > 1*/)
            {
                List <JC_SetAnalysisModelPointRecordInfo> listOfPoint = jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo.AnalysisModelPointRecordInfoList;

                string[] pointIds = listOfPoint[0].PointId.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                if (pointIds.Length > 1)
                {
                    foreach (var pointId in pointIds)
                    {
                        List <JC_SetAnalysisModelPointRecordInfo> toAddPointList = new List <JC_SetAnalysisModelPointRecordInfo>();
                        foreach (var oriPoint in listOfPoint)
                        {
                            JC_SetAnalysisModelPointRecordInfo addPoint = ObjectConverter.DeepCopy(oriPoint);
                            addPoint.PointId = pointId;
                            BasicResponse <Jc_DefInfo> pointDefine = pointDefineCacheService.PointDefineCacheByPointIdRequeest(new Sys.Safety.Request.Cache.PointDefineCacheByPointIdRequeest()
                            {
                                PointID = pointId
                            });
                            if (pointDefine.IsSuccess && pointDefine.Data != null)
                            {
                                addPoint.Point = pointDefine.Data.Point;
                            }
                            toAddPointList.Add(addPoint);
                        }

                        //JC_LargedataAnalysisConfigInfo largedataAnalysisConfigInfo = ObjectConverter.Copy<JC_LargedataAnalysisConfigInfo, JC_LargedataAnalysisConfigInfo>(jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo);
                        JC_LargedataAnalysisConfigInfo largedataAnalysisConfigInfo = ObjectConverter.DeepCopy <JC_LargedataAnalysisConfigInfo>(jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo);

                        largedataAnalysisConfigInfo.AnalysisModelPointRecordInfoList = toAddPointList;
                        jC_Largedataanalysisconfigresponse = AddLargeDataAnalysisConfig(new LargedataAnalysisConfigAddRequest()
                        {
                            JC_LargedataAnalysisConfigInfo = largedataAnalysisConfigInfo
                        });
                    }
                    return(jC_Largedataanalysisconfigresponse);
                }
            }

            //给模型赋默认值 Start
            _jC_Largedataanalysisconfig.Id = IdHelper.CreateLongId().ToString();
            StringBuilder points = new StringBuilder();

            foreach (var jcSetAnalysisModelPointRecord in _jcSetAnalysisModelPointRecordList)
            {
                jcSetAnalysisModelPointRecord.Id = IdHelper.CreateLongId().ToString();
                jcSetAnalysisModelPointRecord.AnalysisModelId = _jC_Largedataanalysisconfig.Id;

                JC_SetAnalysisModelPointRecordInfo analysisModelPointRecordInfo = jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo.AnalysisModelPointRecordInfoList.FirstOrDefault(q => q.PointId == jcSetAnalysisModelPointRecord.PointId);
                if (string.IsNullOrEmpty(points.ToString()))
                {
                    points.Append(analysisModelPointRecordInfo.Point);
                }
                //points.Append(analysisModelPointRecordInfo.Point).Append(",");
            }
            if (string.IsNullOrEmpty(_jC_Largedataanalysisconfig.Name))
            {
                _jC_Largedataanalysisconfig.Name = _AnalysisTemplateRepository.GetJC_AnalysistemplateById(_jC_Largedataanalysisconfig.TempleteId).Name;
            }
            if (isSingleExpressionAndParameter1 && !isBindDevType)
            {
                _jC_Largedataanalysisconfig.Name = string.Format("{0}({1})", _jC_Largedataanalysisconfig.Name, points.ToString().Trim(','));
            }
            //给模型赋默认值 End

            JC_LargedataanalysisconfigModel existsModel = _Repository.GetLargeDataAnalysisConfigByName(_jC_Largedataanalysisconfig.Name);

            if (null != existsModel)
            {
                return new BasicResponse <JC_LargedataAnalysisConfigInfo>()
                       {
                           Code = -100, Message = "分析模型名称已存在", Data = jc_LargedataAnalysisConfigRsequest.JC_LargedataAnalysisConfigInfo
                       }
            }
            ;

            JC_LargedataanalysisconfigModel resultjC_Largedataanalysisconfig = null;

            TransactionsManager.BeginTransaction(() =>
            {
                //保存分析模型
                resultjC_Largedataanalysisconfig = _Repository.AddJC_Largedataanalysisconfig(_jC_Largedataanalysisconfig);
                //保持分析模型中表达式参数与测点的关联关系.
                _AnalysisModelPointRecordRepository.Insert(_jcSetAnalysisModelPointRecordList);
            });

            if (resultjC_Largedataanalysisconfig != null)
            {
                jC_Largedataanalysisconfigresponse.Data = ObjectConverter.Copy <JC_LargedataanalysisconfigModel, JC_LargedataAnalysisConfigInfo>(resultjC_Largedataanalysisconfig);

                BasicResponse <IList <JC_SetAnalysisModelPointRecordInfo> > pointListResponse = _AnalysisModelPointRecordService.GetCustomizationAnalysisModelPointRecordInfoByModelId(new SetAnalysisModelPointRecordByModelIdGetRequest()
                {
                    AnalysisModelId = resultjC_Largedataanalysisconfig.Id
                });
                if (pointListResponse != null && pointListResponse.Data != null)
                {
                    jC_Largedataanalysisconfigresponse.Data.AnalysisModelPointRecordInfoList = pointListResponse.Data.ToList();
                }
                try
                {
                    //添加到缓存
                    _LargeDataAnalysisConfigCacheService.AddLargeDataAnalysisConfigCache(new LargeDataAnalysisConfigCacheAddRequest()
                    {
                        LargeDataAnalysisConfigInfo = jC_Largedataanalysisconfigresponse.Data
                    });
                }
                catch (Exception ex)
                {
                    Basic.Framework.Logging.LogHelper.Error(string.Format("添加分析模型后再添加到缓存出错:{0}", ex.StackTrace));
                }

                if (Basic.Framework.Data.PlatRuntime.Items.ContainsKey(DataContract.UserRoleAuthorize.KeyConst.AnalysisModelChangedKey))
                {
                    Basic.Framework.Data.PlatRuntime.Items[DataContract.UserRoleAuthorize.KeyConst.AnalysisModelChangedKey] = DateTime.Now;
                }
                else
                {
                    Basic.Framework.Data.PlatRuntime.Items.Add(DataContract.UserRoleAuthorize.KeyConst.AnalysisModelChangedKey, DateTime.Now);
                }
            }
            return(jC_Largedataanalysisconfigresponse);
        }