public BasicResponse <List <AreaInfo> > GetPassiveAreaInfoByAssId(LongIdRequest request) { var req3 = new EmergencyLinkageConfigCacheGetAllRequest(); var res3 = _sysEmergencyLinkageCacheService.GetAllSysEmergencyLinkageCache(req3); var linkageInfo = res3.Data.FirstOrDefault(a => a.PassiveAreaAssId == request.Id.ToString()); var passiveAreaAss = linkageInfo == null ? new List <EmergencyLinkagePassiveAreaAssInfo>() : linkageInfo.PassiveAreas; var req = new AreaCacheGetAllRequest(); var res = _areaCacheService.GetAllAreaCache(req); if (res.Code != 100) { throw new Exception(res.Message); } var allArea = res.Data; //var allPassiveAreaAss = _emergencyLinkagePassiveAreaAssRepository.Datas.ToList(); var res2 = from a in passiveAreaAss join b in allArea on a.AreaId equals b.Areaid into temp from ab in temp.DefaultIfEmpty() //where a.PassiveAreaAssId == request.Id.ToString() select ab; var retLis = res2.ToList(); var ret = new BasicResponse <List <AreaInfo> >() { Data = retLis }; return(ret); }
public BasicResponse <List <EnumcodeInfo> > GetMasterTriDataStateByAssId(LongIdRequest request) { var req3 = new EmergencyLinkageConfigCacheGetAllRequest(); var res3 = _sysEmergencyLinkageCacheService.GetAllSysEmergencyLinkageCache(req3); var linkageInfo = res3.Data.FirstOrDefault(a => a.MasterTriDataStateAssId == request.Id.ToString()); var masterTriDataStateAss = linkageInfo == null ? new List <EmergencyLinkageMasterTriDataStateAssInfo>() : linkageInfo.MasterTriDataStates; var req = new EnumcodeGetByEnumTypeIDRequest() { EnumTypeId = 4.ToString() }; var res = _enumcodeService.GetEnumcodeByEnumTypeID(req); if (res.Code != 100) { throw new Exception(res.Message); } var allDataState = res.Data; //var allMasterTriDataStateAss = _emergencyLinkageMasterTriDataStateAssRepository.Datas.ToList(); var res2 = from a in masterTriDataStateAss join b in allDataState on a.DataStateId equals b.LngEnumValue.ToString() into temp from ab in temp.DefaultIfEmpty() //where a.MasterTriDataStateAssId == request.Id.ToString() select ab; var retLis = res2.ToList(); var ret = new BasicResponse <List <EnumcodeInfo> >() { Data = retLis }; return(ret); }
public BasicResponse <List <Jc_DevInfo> > GetMasterEquTypeInfoByAssId(LongIdRequest request) { var req3 = new EmergencyLinkageConfigCacheGetAllRequest(); var res3 = _sysEmergencyLinkageCacheService.GetAllSysEmergencyLinkageCache(req3); var linkageInfo = res3.Data.FirstOrDefault(a => a.MasterDevTypeAssId == request.Id.ToString()); var masterDevTypeAss = linkageInfo == null ? new List <EmergencyLinkageMasterDevTypeAssInfo>() : linkageInfo.MasterDevTypes; var req = new DeviceDefineCacheGetAllRequest(); var res = _deviceDefineCacheService.GetAllPointDefineCache(req); if (res.Code != 100) { throw new Exception(res.Message); } var allEquType = res.Data; //var allMasterDevTypeAss = _emergencyLinkageMasterDevTypeAssRepository.Datas.ToList(); var res2 = from a in masterDevTypeAss join b in allEquType on a.DevId equals b.Devid into temp from ab in temp.DefaultIfEmpty() //where a.MasterDevTypeAssId == request.Id.ToString() select ab; var retLis = res2.ToList(); var ret = new BasicResponse <List <Jc_DevInfo> >() { Data = retLis }; return(ret); }
GetNotEndLastLinkageHistoryMasterPointByLinkageId(LongIdRequest request) { var ret = new BasicResponse <IList <EmergencyLinkageHistoryMasterPointAssInfo> >() { Data = new List <EmergencyLinkageHistoryMasterPointAssInfo>() }; var lastLinkHistory = _Repository.GetLastLinkHistoryByLinkageId(request.Id.ToString()); if (lastLinkHistory == null) { return(ret); } if (lastLinkHistory.EndTime != new DateTime(1900, 1, 1)) { return(ret); } var model = _emergencyLinkageHistoryMasterPointAssRepository.GetLinkageHistoryMasterPointAssListByLinkageHistoryId( lastLinkHistory.Id); var info = ObjectConverter .CopyList <EmergencyLinkageHistoryMasterPointAssModel, EmergencyLinkageHistoryMasterPointAssInfo>(model); ret.Data = info; return(ret); }
public BasicResponse SoftDeleteSysEmergencyLinkageById(LongIdRequest request) { var req = request.Id.ToString(); var res = _Repository.GetSysEmergencyLinkageById(req); res.Activity = 0; _Repository.UpdateSysEmergencyLinkage(res); //更新缓存 var res2 = new EmergencyLinkageConfigCacheDeleteRequest { SysEmergencyLinkageInfo = new SysEmergencyLinkageInfo() { Id = request.Id.ToString() } }; _sysEmergencyLinkageCacheService.DeleteSysEmergencyLinkageCache(res2); return(new BasicResponse()); }
public BasicResponse <IList <EmergencyLinkagePassiveAreaAssInfo> > GetEmergencyLinkageMasterAreaAssListByAssId(LongIdRequest request) { var models = _Repository.GetEmergencyLinkageMasterAreaAssListByAssId(request.Id.ToString()); var infos = ObjectConverter.CopyList <EmergencyLinkagePassiveAreaAssModel, EmergencyLinkagePassiveAreaAssInfo>(models); var ret = new BasicResponse <IList <EmergencyLinkagePassiveAreaAssInfo> >() { Data = infos }; return(ret); }
public BasicResponse <List <R_PersoninfInfo> > GetPassivePersonByAssId(LongIdRequest request) { var responseStr = HttpClientHelper.Post(Webapi + "/v1/SysEmergencyLinkage/GetPassivePersonByAssId?token=" + Token, JSONHelper.ToJSONString(request)); return(JSONHelper.ParseJSONString <BasicResponse <List <R_PersoninfInfo> > >(responseStr)); }
public BasicResponse <List <EnumcodeInfo> > GetMasterTriDataStateByAssId(LongIdRequest request) { var responseStr = HttpClientHelper.Post(Webapi + "/v1/SysEmergencyLinkage/GetMasterTriDataStateByAssId?token=" + Token, JSONHelper.ToJSONString(request)); return(JSONHelper.ParseJSONString <BasicResponse <List <EnumcodeInfo> > >(responseStr)); }
public BasicResponse SoftDeleteSysEmergencyLinkageById(LongIdRequest request) { var responseStr = HttpClientHelper.Post(Webapi + "/v1/SysEmergencyLinkage/SoftDeleteSysEmergencyLinkageById?token=" + Token, JSONHelper.ToJSONString(request)); return(JSONHelper.ParseJSONString <BasicResponse>(responseStr)); }
/// <summary>新增历史记录和call,更新实时状态 /// /// </summary> private static void AddLinkageHisAndCall(SysEmergencyLinkageInfo item, List <Jc_BInfo> satisfyJcb, DateTime nowTime, bool ifUpdateRealTimeValue) { var allPosition = PositionService.GetAllPositionCache().Data; //新增联动历史记录 var emergencyLinkHistoryInfo = new EmergencyLinkHistoryInfo() { SysEmergencyLinkageId = item.Id, StartTime = nowTime, EndTime = new DateTime(1900, 1, 1), IsForceEnd = 0, EndPerson = "0" }; var emergencyLinkageHistoryMasterPointAssList = new List <EmergencyLinkageHistoryMasterPointAssInfo>(); foreach (var item2 in satisfyJcb) { var newItem = new EmergencyLinkageHistoryMasterPointAssInfo { PointId = item2.PointID, DataState = item2.Type }; emergencyLinkageHistoryMasterPointAssList.Add(newItem); } var req = new AddEmergencyLinkHistoryAndAssRequest { EmergencyLinkHistoryInfo = emergencyLinkHistoryInfo, LinkageHistoryMasterPointAssInfoList = emergencyLinkageHistoryMasterPointAssList }; EmergencyLinkHistoryService.AddEmergencyLinkHistoryAndAss(req); //新增人员rcall if (item.PassivePersonAssId != "0") { var req2 = new LongIdRequest() { Id = Convert.ToInt64(item.PassivePersonAssId) }; var res2 = SysEmergencyLinkageService.GetPassivePersonByAssId(req2); var passivePerson = res2.Data; StringBuilder sbPersonCard = new StringBuilder(); foreach (var item2 in passivePerson) { sbPersonCard.Append(item2.Bh + ","); } if (sbPersonCard.Length > 0) { sbPersonCard.Remove(sbPersonCard.Length - 1, 1); } var newRcall = new R_CallInfo() { Id = IdHelper.CreateLongId().ToString(), MasterId = item.Id, Type = 0, CallType = 1, CallPersonDefType = 2, BhContent = sbPersonCard.ToString(), CallTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) }; var req5 = new R_CallAddRequest() { CallInfo = newRcall }; RcallService.AddCall(req5); } //被控区域测点及所选测点获取 List <IdTextCheck> lisAllAssDef = new List <IdTextCheck>(); //所有关联被控测点 if (item.PassiveAreaAssId != "0") { var req6 = new LongIdRequest { Id = Convert.ToInt64(item.PassiveAreaAssId) }; var res6 = SysEmergencyLinkageService.GetPassiveAreaInfoByAssId(req6); var allPassiveArea = res6.Data; var allPassiveAreaId = new List <string>(); foreach (var item2 in allPassiveArea) { allPassiveAreaId.Add(item2.Areaid); } var res7 = SysEmergencyLinkageService.GetAllPassivePointInfo(); var allPassivePoint = res7.Data; var passiveAreaPoint = allPassivePoint.Where(a => allPassiveAreaId.Contains(a.AreaId)).ToList(); lisAllAssDef.AddRange(passiveAreaPoint); } if (item.PassivePointAssId != "0") { var req6 = new LongIdRequest() { Id = Convert.ToInt64(item.PassivePointAssId) }; var res6 = SysEmergencyLinkageService.GetPassivePointInfoByAssId(req6); lisAllAssDef.AddRange(res6.Data); } //插入测点rcall var handlePersonPoint = lisAllAssDef.Where(a => a.SysId == "11").ToList(); if (handlePersonPoint.Count > 0) { var handlePersonPointStr = new StringBuilder(); //人员定位系统关联的被控测点字符串 foreach (var item2 in handlePersonPoint) { handlePersonPointStr.Append(item2.Point + ","); } handlePersonPointStr.Remove(handlePersonPointStr.Length - 1, 1); var rcall = new R_CallInfo() { Id = IdHelper.CreateLongId().ToString(), MasterId = item.Id, Type = 1, CallType = 1, CallPersonDefType = 4, PointList = handlePersonPointStr.ToString(), CallTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) }; var req8 = new R_CallAddRequest() { CallInfo = rcall }; RcallService.AddCall(req8); } //插入bcall var handleBroadcastPoint = lisAllAssDef.Where(a => a.SysId == "12").ToList(); if (handleBroadcastPoint.Count > 0) { //var handleBroadcastPointStr = new StringBuilder(); //广播系统关联的被控测点字符串 //foreach (var item2 in handleBroadcastPoint) //{ // handleBroadcastPointStr.Append(item2.Point + ","); //} //handleBroadcastPointStr.Remove(handleBroadcastPointStr.Length - 1, 1); var bcallId = IdHelper.CreateLongId().ToString(); var handleBroadcastPointList = new List <B_CallpointlistInfo>(); foreach (var item2 in handleBroadcastPoint) { var newItem = new B_CallpointlistInfo() { Id = IdHelper.CreateLongId().ToString(), BCallId = bcallId, CalledPointId = item2.Id }; handleBroadcastPointList.Add(newItem); } var broadcastDetail = new StringBuilder(); //广播内容 broadcastDetail.Append(item.Name + ","); foreach (var item2 in satisfyJcb) { var wzInfo = allPosition.FirstOrDefault(a => a.WzID == item2.Wzid); var wzName = ""; if (wzInfo != null) { wzName = wzInfo.Wz; } broadcastDetail.Append(wzName + "," + EnumHelper.GetEnumDescription((DeviceDataState)item2.Type) + ","); } broadcastDetail.Remove(broadcastDetail.Length - 1, 1); var bcall = new B_CallInfo() { Id = bcallId, MasterId = item.Id, CallType = 1, //PointList = handleBroadcastPointStr.ToString(),//注释,调整了表结构,此处需要修改 20171227 CallPointList = handleBroadcastPointList, Message = broadcastDetail.ToString(), CallTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) }; var req9 = new B_CallAddRequest() { CallInfo = bcall }; BcallService.AddCall(req9); } //更新实时状态 if (ifUpdateRealTimeValue) { var req17 = new UpdateRealTimeStateRequest { LinkageId = item.Id, State = "1" }; SysEmergencyLinkageService.UpdateRealTimeState(req17); } }
/// <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(); } }