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); }
/// <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); }
/// <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(); } }
/// <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); } } } }
/// <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); } }