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());
        }
예제 #6
0
        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));
        }
예제 #10
0
        /// <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);
            }
        }
예제 #11
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();
            }
        }