public BasicResponse <List <GascontentanalyzeconfigInfo> > GetAllGascontentanalyzeconfigListCache()
        {
            var infos = _gasContentAnalyzeConfigCacheService.GetAllCache().Data;

            var req          = new PointDefineCacheGetAllRequest();
            var res          = _pointDefineCacheService.GetAllPointDefineCache(req);
            var allPointInfo = res.Data;

            foreach (var item in infos)
            {
                var pointInfo = allPointInfo.FirstOrDefault(a => a.PointID == item.Pointid);
                if (pointInfo != null)
                {
                    item.Point    = pointInfo.Point;
                    item.Location = pointInfo.Wz;
                }
            }

            var ret = new BasicResponse <List <GascontentanalyzeconfigInfo> >
            {
                Data = infos
            };

            return(ret);
        }
        public BasicResponse <List <Jc_DefInfo> > GetMasterPointInfoByAssId(LongIdRequest request)
        {
            var req3           = new EmergencyLinkageConfigCacheGetAllRequest();
            var res3           = _sysEmergencyLinkageCacheService.GetAllSysEmergencyLinkageCache(req3);
            var linkageInfo    = res3.Data.FirstOrDefault(a => a.MasterPointAssId == request.Id.ToString());
            var masterPointAss = linkageInfo == null ? new List <EmergencyLinkageMasterPointAssInfo>() : linkageInfo.MasterPoint;

            var req = new PointDefineCacheGetAllRequest();
            var res = _pointDefineCacheService.GetAllPointDefineCache(req);

            if (res.Code != 100)
            {
                throw new Exception(res.Message);
            }
            var allPoint = res.Data;
            //var allMasterPointAss = _emergencyLinkageMasterPointAssRepository.Datas.ToList();
            var res2 = from a in masterPointAss
                       join b in allPoint on a.PointId equals b.PointID into temp
                       from ab in temp.DefaultIfEmpty()
                       //where a.MasterPointAssId == request.Id.ToString()
                       select ab;

            var retLis = res2.ToList();
            var ret    = new BasicResponse <List <Jc_DefInfo> >()
            {
                Data = retLis
            };

            return(ret);
        }
        public BasicResponse <List <GascontentanalyzeconfigInfo> > GetAllGascontentanalyzeconfigList()
        {
            var models = _Repository.Datas.ToList();
            var infos  = ObjectConverter.CopyList <GascontentanalyzeconfigModel, GascontentanalyzeconfigInfo>(models).ToList();

            var req          = new PointDefineCacheGetAllRequest();
            var res          = _pointDefineCacheService.GetAllPointDefineCache(req);
            var allPointInfo = res.Data;

            foreach (var item in infos)
            {
                var pointInfo = allPointInfo.FirstOrDefault(a => a.PointID == item.Pointid);
                if (pointInfo != null)
                {
                    item.Point    = pointInfo.Point;
                    item.Location = pointInfo.Wz;
                }
            }

            var ret = new BasicResponse <List <GascontentanalyzeconfigInfo> >
            {
                Data = infos
            };

            return(ret);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 获取设备定义DEF所有数据
        /// </summary>
        /// <returns></returns>
        public static List <Jc_DefInfo> GetKJPointDefineItems()
        {
            List <Jc_DefInfo>             pointDefineItems = new List <Jc_DefInfo>();
            PointDefineCacheGetAllRequest pointDefineCacheGetAllRequest = new PointDefineCacheGetAllRequest();

            pointDefineCacheGetAllRequest.IsQueryFromWriteCache = true;
            var defResponse = pointDefineCacheService.GetAllPointDefineCache(pointDefineCacheGetAllRequest);

            if (defResponse.IsSuccess)
            {
                pointDefineItems = defResponse.Data;
            }

            return(pointDefineItems);
        }
        public BasicResponse <List <Jc_DefInfo> > GetAllPointDefineCache(PointDefineCacheGetAllRequest request)
        {
            //modified by  20170719
            //默认测点查询从只读缓存查询,只有特殊实时性要求高的才从写缓存查询
            var response = new BasicResponse <List <Jc_DefInfo> >();

            if (request.IsQueryFromWriteCache)
            {
                response.Data = PointWriteCache.GetInstance.Query();
            }
            else
            {
                response.Data = PointReadonlyCache.GetInstance.Query();
            }

            return(response);
        }
        /// <summary>
        /// 在缓存中获取所有测点信息
        /// </summary>
        /// <returns></returns>
        public BasicResponse <List <Jc_DefInfo> > GetDefPointInformationInCache()
        {
            var response = new BasicResponse <List <Jc_DefInfo> >();

            try
            {
                var pointDefineCacheGetAllRequest  = new PointDefineCacheGetAllRequest();
                var pointDefineCacheGetAllResponse = pointDefineCacheService.GetAllPointDefineCache(pointDefineCacheGetAllRequest);
                if (pointDefineCacheGetAllResponse.Data != null)
                {
                    response.Data = pointDefineCacheGetAllResponse.Data;
                }
            }
            catch (Exception ex)
            {
                response.Code    = -100;
                response.Message = ex.Message;
                this.ThrowException("GetDefPointInformationInCache-在缓存中获取所有测点信息", ex);
            }
            return(response);
        }
Ejemplo n.º 7
0
        /// <summary>分析函数
        ///
        /// </summary>
        private static void Analyze()
        {
            var nowTime = DateTime.Now;
            //if (_ifFirstRun)
            //{
            //    _ifFirstRun = false;
            //}
            //else
            //{

            //结束已删除的应急联动
            var res4 = EmergencyLinkHistoryService.GetDeleteButNotEndLinkageIds();

            //var allDelLinkageConfig = allLinkageConfig.Where(a => a.Type == 1 && a.Activity != 1 && a.EmergencyLinkageState==1).ToList(); //所有非活动的普通应急联动
            foreach (var item in res4.Data)
            {
                EndLinkageHisAndCall(item, nowTime, false);
            }

            var triggerDataState = LinkageConstant.TriggerDataStateVlaue;
            var req18            = new AlarmCacheGetAllRequest();
            var allJcbCache      = AlarmCacheService.GetAllAlarmCache(req18).Data;
            var time1900         = new DateTime(1900, 1, 1);
            var sievingJcb       = allJcbCache.Where(a =>
                                                     (a.Point.Contains("A") || a.Point.Contains("D")) && triggerDataState.Contains(a.Type) &&
                                                     a.Etime == time1900).ToList(); //筛选后的未结束的jcb

            //判断jcb是否有重复数据
            var groupData = sievingJcb.GroupBy(a => new { a.Point, a.Type }).Select(a => new { Group = a.Key, Count = a.Count() });

            if (sievingJcb.Count != groupData.Count())
            {
                StringBuilder repeatStr = new StringBuilder();
                foreach (var item in groupData)
                {
                    if (item.Count > 1)
                    {
                        var repeat = sievingJcb.Where(a => a.Point == item.Group.Point && a.Type == item.Group.Type);
                        foreach (var item2 in repeat)
                        {
                            repeatStr.Append("\r\nPoint:" + item2.Point + " PointId:" + item2.PointID + " JcbId:" +
                                             item2.ID + " Stime:" + item2.Stime + " Etime:" + item2.Etime);
                        }
                    }
                }
                LogHelper.Error("Sys.Safety.Processing.Linkage.LinkageAnalyze:jc_b缓存存在重复数据。" + repeatStr);
            }

            var res = SysEmergencyLinkageService.GetAllSysEmergencyLinkageList();
            var allLinkageConfig         = res.Data;
            var allActivityLinkageConfig = allLinkageConfig.Where(a => a.Type == 1 && a.Activity == 1).ToList(); //所有活动的普通应急联动

            var req3     = new PointDefineCacheGetAllRequest();
            var res3     = PointDefineCacheService.GetAllPointDefineCache(req3);
            var allPoint = res3.Data; //所有测点

            foreach (var item in allActivityLinkageConfig)
            {
                //判断是否处于强制解除状态 todo  需要加锁
                if (item.IsForceEnd)
                {
                    var endTime = item.EndTime.AddSeconds(item.DelayTime);
                    if (nowTime <= endTime)
                    {
                        continue;
                    }
                    else
                    {
                        item.IsForceEnd = false;
                    }
                }

                //获取主控测点
                List <Jc_DefInfo> masterPoint = null; //主控测点
                if (item.MasterDevTypeAssId != "0")   //主控为设备类型
                {
                    var req2 = new LongIdRequest()
                    {
                        Id = Convert.ToInt64(item.MasterDevTypeAssId)
                    };
                    var res2     = SysEmergencyLinkageService.GetMasterEquTypeInfoByAssId(req2);
                    var allDev   = res2.Data;
                    var allDevId = new List <string>();
                    foreach (var item2 in allDev)
                    {
                        allDevId.Add(item2.Devid);
                    }

                    masterPoint = allPoint.Where(a => allDevId.Contains(a.Devid)).ToList();
                }
                if (item.MasterAreaAssId != "0")
                {
                    var req2 = new LongIdRequest()
                    {
                        Id = Convert.ToInt64(item.MasterAreaAssId)
                    };
                    var res2      = SysEmergencyLinkageService.GetMasterAreaInfoByAssId(req2);
                    var allArea   = res2.Data;
                    var allAreaId = new List <string>();
                    foreach (var item2 in allArea)
                    {
                        allAreaId.Add(item2.Areaid);
                    }

                    masterPoint = allPoint.Where(a => allAreaId.Contains(a.Areaid)).ToList();
                }
                if (item.MasterPointAssId != "0")
                {
                    var req2 = new LongIdRequest()
                    {
                        Id = Convert.ToInt64(item.MasterPointAssId)
                    };
                    var res2 = SysEmergencyLinkageService.GetMasterPointInfoByAssId(req2);
                    masterPoint = res2.Data;
                }

                if (masterPoint == null)
                {
                    continue;
                }

                var masterPointId = new List <string>(); //主控测点id
                foreach (var item2 in masterPoint)
                {
                    if (item2 == null)
                    {
                        continue;
                    }
                    masterPointId.Add(item2.PointID);
                }

                var duration = item.Duration;

                //获取触发主控状态
                var triDataState = new List <short>();
                foreach (var item2 in item.MasterTriDataStates)
                {
                    triDataState.Add(Convert.ToInt16(item2.DataStateId));
                }

                var satisfyJcb = sievingJcb.Where(a =>
                                                  (a.State == 21 || a.State == 20 || a.State == 5 || a.State == 24) && masterPointId.Contains(a.PointID) && triDataState.Contains(a.Type) &&
                                                  (nowTime - a.Stime).TotalSeconds >= duration)
                                 .OrderBy(a => a.PointID).ThenBy(a => a.Type).ToList(); //满足条件的jcb

                //去掉设备实时状态为标校、红外遥控的jcb数据
                for (int i = satisfyJcb.Count - 1; i >= 0; i--)
                {
                    var ifExist = allPoint.Any(a => a.PointID == satisfyJcb[i].PointID && (a.State == 5 || a.State == 24));
                    if (ifExist)
                    {
                        satisfyJcb.RemoveAt(i);
                    }
                }

                var req11 = new LongIdRequest()
                {
                    Id = Convert.ToInt64(item.Id)
                };
                var res11 = EmergencyLinkHistoryService.GetNotEndLastLinkageHistoryMasterPointByLinkageId(req11);
                var lastNotEndHisLinkagePointInfo =
                    res11.Data.OrderBy(a => a.PointId).ThenBy(a => a.DataState).ToList(); //当前联动上一次未结束的历史联动记录主控测点

                //判断触发的测点及其状态是否一样
                bool same = true;
                if (satisfyJcb.Count == lastNotEndHisLinkagePointInfo.Count)
                {
                    for (int i = 0; i < satisfyJcb.Count; i++)
                    {
                        if (satisfyJcb[i].PointID != lastNotEndHisLinkagePointInfo[i].PointId ||
                            satisfyJcb[i].Type != lastNotEndHisLinkagePointInfo[i].DataState)
                        {
                            same = false;
                            break;
                        }
                    }
                }
                else
                {
                    same = false;
                }

                if (satisfyJcb.Count != 0) //触发联动
                {
                    if (lastNotEndHisLinkagePointInfo.Count > 0)
                    {
                        if (!same) //主控不一样则先结束之前的联动
                        {
                            EndLinkageHisAndCall(item, nowTime, false);

                            AddLinkageHisAndCall(item, satisfyJcb, nowTime, true);
                        }
                    }
                    else
                    {
                        AddLinkageHisAndCall(item, satisfyJcb, nowTime, true);
                    }
                }
                else //解除联动
                {
                    EndLinkageHisAndCall(item, nowTime, true);
                }
                //}

                //删除2天前的已结束的bcall
                BcallService.DeleteFinishedBcall();
                //删除2天前的已结束的rcall
                RcallService.DeleteFinishedBcall();
            }
        }
Ejemplo n.º 8
0
        /// <summary>分析函数
        ///
        /// </summary>
        private static void Analyze()
        {
            var req      = new PointDefineCacheGetAllRequest();
            var allPoint = PointDefineCacheService.GetAllPointDefineCache(req).Data;

            var req2 = new BasicRequest();
            var res2 = JcHourService.GetDataAnalysisHistoryData(req2);
            var dataAnalysisHistory = res2.Data;

            var res = GascontentanalyzeconfigService.GetAllGascontentanalyzeconfigListCache();
            var allGascontentanalyzeconfig = res.Data;

            foreach (var item in allGascontentanalyzeconfig)
            {
                double height    = Convert.ToDouble(item.Height);    //巷道高
                double width     = Convert.ToDouble(item.Width);     //巷道宽
                double thickness = Convert.ToDouble(item.Thickness); //煤层厚度
                double speed     = Convert.ToDouble(item.Speed);     //掘进速度m/Month
                double length    = Convert.ToDouble(item.Length);    //巷道已暴露长度m(40)
                double acreage   = Convert.ToDouble(item.Acreage);   //断面
                double percent   = Convert.ToDouble(item.Percent);   //煤的挥发分%====整数
                double wind      = Convert.ToDouble(item.Wind);      //风量

                var info = dataAnalysisHistory.FirstOrDefault(m => m.PointId == item.Pointid);
                if (info == null)
                {
                    continue;
                }
                var monthAvg = Convert.ToDouble(info.MonthAverageValue); //月平均浓度

                double d = 0;                                            //为煤的周长
                if (thickness <= 3)
                {
                    d = 2 * thickness;
                }
                else
                {
                    d = 2 * (height + width);
                }

                speed = speed / 43200.0;          //为每分钟的掘进速度
                var a = d * speed * (2 * Math.Pow(length / speed, 0.5) - 1);
                acreage = acreage * speed * 1.45; //为每分钟的平均落煤量[SVY初台为断面计算之后为落煤量]
                var b  = acreage;
                var c  = 0.026 * (0.0004 * Math.Pow(percent, 2) + 0.16);
                var d1 = 20.252 * Math.Pow(percent, -0.7064);
                var q  = wind * monthAvg;

                //test
                var w0 = (q + b * d1) / (a * c + b);
                //var w0 = 0;

                var comparevalue = Convert.ToDouble(item.Comparevalue);

                //更新实时值
                var req6 = new UpdateRealTimeValueRequest
                {
                    Id            = item.Id,
                    RealTimeValue = w0.ToString("0.##"),
                    State         = w0 >= comparevalue ? "报警" : "正常"
                };
                GasContentAnalyzeConfigCacheService.UpdateRealTimeValue(req6);

                var req3 = new GetCacheByConditionRequest {
                    Condition = m => m.GasContentAnalyzeConfigId == item.Id
                };
                var res3       = GasContentAlarmCacheService.GetCacheByCondition(req3);
                var alarmCache = res3.Data;

                if (w0 >= comparevalue)     //报警
                {
                    if (alarmCache.Count == 0)
                    {
                        var pointInfo = allPoint.FirstOrDefault(m => m.PointID == item.Pointid);
                        if (pointInfo == null)
                        {
                            continue;
                        }

                        var alarmInfo = new GasContentAlarmInfo
                        {
                            Id = IdHelper.CreateLongId().ToString(),
                            GasContentAnalyzeConfigId = item.Id,
                            GasContent = w0.ToString("0.##"),
                            Point      = pointInfo.Point,
                            Location   = pointInfo.Wz
                        };

                        var req4 = new AddCacheRequest
                        {
                            Info = alarmInfo
                        };
                        GasContentAlarmCacheService.AddCache(req4);
                    }
                }
                else        //解除报警
                {
                    if (alarmCache.Count != 0)
                    {
                        var req5 = new DeleteCachesRequest
                        {
                            Infos = alarmCache
                        };
                        GasContentAlarmCacheService.DeleteCaches(req5);
                    }
                }
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 应急联动数据同步到平台端线程
        /// </summary>
        private static void Analyze()
        {
            try
            {
                PointDefineCacheGetAllRequest pointDefineCacheRequest = new PointDefineCacheGetAllRequest();
                List <Jc_DefInfo>             defList        = PointDefineCacheService.GetAllPointDefineCache(pointDefineCacheRequest).Data;
                List <RealDevice>             realDeviceList = new List <RealDevice>();
                foreach (Jc_DefInfo def in defList)
                {
                    RealDevice realDevice = new RealDevice();
                    realDevice.Code      = def.Point;
                    realDevice.Name      = def.Wz;
                    realDevice.TypeName  = def.DevName;
                    realDevice.Unit      = def.Unit;
                    realDevice.RealValue = def.Ssz;
                    int status = 0;
                    if (def.DevPropertyID == 0)
                    {
                        switch (def.State)
                        {
                        case 3:
                        case 4:
                            status = 1;
                            break;

                        case 0:
                        case 1:
                        case 2:
                            status = 5;
                            break;

                        default:
                            status = 1;
                            break;
                        }
                    }
                    else
                    {
                        switch (def.State)
                        {
                        case 21:
                            status = 1;
                            break;

                        case 20:
                            status = 0;
                            break;

                        case 8:
                        case 14:
                            status = 2;
                            break;

                        case 10:
                        case 16:
                            status = 3;
                            break;

                        case 12:
                        case 18:
                            status = 4;
                            break;

                        default:
                            status = 1;
                            break;
                        }
                    }
                    realDevice.Status = status;
                    realDevice.CTime  = def.DttStateTime;
                    realDeviceList.Add(realDevice);
                }
                //上传到服务器端
                try
                {
                    string uri = System.Configuration.ConfigurationManager.AppSettings["EmergencyLinkageServerUri"].ToString();

                    object revalue = WcfChannelFactory.ExecuteMethod <IRLService>(uri, "UpdateRealDevices", 101, realDeviceList.ToArray());

                    bool reType = (bool)revalue;
                }
                catch (Exception ex)
                {
                    LogHelper.Error(ex);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex);
            }
        }