Example #1
0
        public ActionResult Create(AreaAuthorizationRecord aa, FormCollection col)
        {
            if (ModelState.IsValid)
            {
                //aa.RepeatDay = col["RepeatType"];
                aa.CreateTime = DateTime.Now;
                aa.ModifyTime = null;
                aa.DeleteTime = null;
                //aa.SetTimeSpane();
                //bll.JurisDictions.Add(jd);
                //return RedirectToAction("Index");

                var result = bll.AreaAuthorizationRecords.Add(aa);
                if (result)
                {
                    return(Json(new { success = result }));
                }
                else
                {
                    return(Json(new { success = result, errors = bll.AreaAuthorizationRecords.ErrorMessage }));
                }
            }

            GetListToViewBag();
            return(View(aa));
        }
        private void BtnSubmit_OnClick(object sender, RoutedEventArgs e)
        {
            Bll bll = AppContext.GetLocationBll();
            var aa  = new AreaAuthorization();

            aa.Name        = TbName.Text;
            aa.Description = TbDescription.Text;

            var area = CbAreaList.SelectedItem as PhysicalTopology;

            aa.AreaId = area.Id;

            if (bll.AreaAuthorizations.Add(aa) == false)
            {
                MessageBox.Show("添加失败1");
            }

            var role = CbAreaList.SelectedItem as CardRole;

            var aar = new AreaAuthorizationRecord(aa, role);

            if (bll.AreaAuthorizationRecords.Add(aar) == false)
            {
                MessageBox.Show("添加失败2");
            }

            MessageBox.Show("添加成功");
        }
        private void MenuAddRecord_OnClick(object sender, RoutedEventArgs e)
        {
            AreaAuthorization aa = DataGrid1.SelectedItem as AreaAuthorization;

            if (aa == null)
            {
                return;
            }
            var win = new CardRoleWindow();

            win.ShowOkButton();
            if (win.ShowDialog() == true)
            {
                //var roles = win.GetSelectedRoles();
                //foreach (var role in roles)
                //{
                //    AreaAuthorizationRecord aar = new AreaAuthorizationRecord(aa, role);
                //    if (aarService.Post(aar) == null)
                //    {
                //        MessageBox.Show("分配权限失败");
                //        break;
                //    }
                //}

                var role = win.Role;
                if (role != null)
                {
                    AreaAuthorizationRecord aar = new AreaAuthorizationRecord(aa, role);
                    if (aarService.Post(aar) == null)
                    {
                        MessageBox.Show("分配权限失败");
                    }
                }
            }
        }
Example #4
0
        public ActionResult Create()
        {
            AreaAuthorizationRecord jd = new AreaAuthorizationRecord();

            GetListToViewBag();
            return(PartialView(jd));
        }
Example #5
0
        /// <summary>
        /// 功能:1、去除重复的正常告警,2、当卡片有正常告警和异常告警时,去除正常告警
        /// </summary>
        /// <param name="p"></param>
        /// <param name="area"></param>
        /// <param name="arr"></param>
        /// <param name="content"></param>
        /// <param name="level"></param>
        /// /// <param name="newAlarmList"></param>
        private void RemoveDuplicateAlarms(Position p, int area, AreaAuthorizationRecord arr, string content, LocationAlarmLevel level, ref List <LocationAlarm> newAlarmList)
        {
            if (level == LocationAlarmLevel.正常)
            {
                //如果缓存中 没有正常告警,添加正常告警;如果缓存中有正常告警,添加正常告警规则Id
                int           nCount = newAlarmList.FindAll(i => i.LocationCardId == p.CardId && i.AlarmLevel != LocationAlarmLevel.正常).Count();
                LocationAlarm alarm  = newAlarmList.Find(i => i.LocationCardId == p.CardId && i.AlarmLevel == LocationAlarmLevel.正常);
                if (nCount == 0 && alarm == null)
                {
                    alarm = AddAlarm(p, area, arr, content, level);
                    newAlarmList.Add(alarm);
                }
                else if (nCount == 0 && alarm != null)
                {
                    alarm.AllAuzId += ";" + arr.Id;
                }
            }
            else
            {
                //如果缓存中有正常告警,去除正常告警,再添加异常告警
                int nCount = newAlarmList.FindAll(i => i.LocationCardId == p.CardId && i.AlarmLevel == LocationAlarmLevel.正常).Count();
                if (nCount > 0)
                {
                    newAlarmList.RemoveAll(i => i.LocationCardId == p.CardId && i.AlarmLevel == LocationAlarmLevel.正常);
                }

                LocationAlarm alarm = AddAlarm(p, area, arr, content, level);
                newAlarmList.Add(alarm);
            }

            return;
        }
Example #6
0
        //List<Position> noAlarmPos = new List<Position>();

        private LocationAlarm AddAlarm(Position p, int area, AreaAuthorizationRecord arr, string content, LocationAlarmLevel level)
        {
            LocationAlarm alarm = new LocationAlarm(p, area, arr, content, level);

            //alarms.Add(alarm);
            return(alarm);
        }
Example #7
0
        public LocationAlarm(Position p, int area, AreaAuthorizationRecord aar, string content, LocationAlarmLevel level)
        {
            SetTime();
            AlarmType      = LocationAlarmType.区域告警;
            AlarmLevel     = level;
            LocationCardId = p.CardId;
            PersonnelId    = p.PersonnelID;
            CardRoleId     = p.RoleId ?? 0;
            //if (p.AreaId == 0)
            //{
            //    Log.Info("p.AreaId == 0");
            //}

            if (aar != null)
            {
                AreaId    = aar.AreaId;
                AuzId     = aar.Id;//触发告警的权限规则
                AllAuzId += aar.Id;
            }
            else
            {
                AreaId = area;
            }
            Content = content;
            AlarmId = Guid.NewGuid().ToString();
        }
Example #8
0
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            AreaAuthorizationRecord jd = bll.AreaAuthorizationRecords.Find(id);

            if (jd == null)
            {
                return(HttpNotFound());
            }

            jd.Area = bll2.Areas.Find(p => p.Id == jd.AreaId);
            //return View(jd);
            return(PartialView(jd));
        }
        private void AddAAR(CardRole role, AreaAuthorization aa)
        {
            var aar = new AreaAuthorizationRecord(aa, role);

            if (authorizationRecords == null)
            {
                authorizationRecords = new List <AreaAuthorizationRecord>();
            }
            authorizationRecords.Add(aar);
            AreaAuthorizationRecords.Add(aar);

            if (authorizationAreas != null)
            {
                var aa2 = authorizationAreas.Find(i => i.Id == aa.AreaId);
                if (aa2 != null)
                {
                    aa2.Records.Add(aar);
                }
            }
        }
Example #10
0
        public ActionResult Edit(AreaAuthorizationRecord jd, FormCollection col)
        {
            if (ModelState.IsValid)
            {
                jd.ModifyTime = DateTime.Now;
                //jd.RepeatDay = col["RepeatDay"];

                var result = bll.AreaAuthorizationRecords.Edit(jd);
                if (result)
                {
                    return(Json(new { success = result }));
                }
                else
                {
                    return(Json(new { success = result, errors = bll.AreaAuthorizationRecords.ErrorMessage }));
                }
            }

            GetListToViewBag();
            return(View(jd));
        }
        private void CreateAllAuthorizationRecord()
        {
//权限指派给标签角色
            foreach (var aa in areaAuthorizations)
            {
                var aa2 = authorizationAreas.Find(i => i.Id == aa.AreaId);
                foreach (var role in _roles)
                {
                    var aar = new AreaAuthorizationRecord(aa, role);
                    authorizationRecords.Add(aar);
                    aa2.Records.Add(aar);
                }
                //1.超级管理员能够进入全部区间
                //2.管理人员也能进入全部区域
                //3.巡检人员和维修人员能够进入生产区域
                //4.参观人员(高级)能够进入生活区域和大部分生产区域
                //5.参观人员(一般)能够进入生活区域和少部分生产区域
            }

            AreaAuthorizationRecords.AddRange(authorizationRecords);
        }
Example #12
0
        public bool SetCardRoleAccessAreas(int roleId, List <int> areaIds)
        {
            try
            {
                HashSet <int> areaIdHs    = new HashSet <int>(areaIds); //保证角色对应区域唯一性
                var           bll         = AppContext.GetLocationBll();
                var           aarService  = new AreaAuthorizationRecordService(bll);
                var           aaService   = new AreaAuthorizationService(bll);
                var           roleService = new TagRoleService(bll);
                var           role        = roleService.GetEntity(roleId + "");

                var aarList = aarService.GetListByRole(roleId + "");


                List <int> removeList = new List <int>();
                List <int> newList    = new List <int>();

                for (int i = 0; i < aarList.Count; i++)
                {
                    var aar = aarList[i];
                    if (aar.AccessType == AreaAccessType.能进入) //设置的是可以进入的权限,同时要把不能进入的权限都删了
                    {
                        //removeList.Add(aarList[i].Id);
                        var r = aarService.Delete(aar.Id + "");
                        aarList.RemoveAt(i);
                        i--;
                    }
                }

                List <int> areasIds = new List <int>();
                foreach (var item in aarList)
                {
                    if (item.Area != null)
                    {
                        int areaId = item.Area.Id;
                        if (!areasIds.Contains(areaId))
                        {
                            areasIds.Add(areaId);                           //保证areasIds唯一性
                        }
                    }
                }

                foreach (var item in areaIdHs)
                {
                    if (areasIds.Contains(item))
                    {
                        areasIds.Remove(item);
                    }
                    else
                    {
                        newList.Add(item);
                    }
                }
                removeList.AddRange(areasIds);

                foreach (var areaId in removeList)
                {
                    //var aar = aarList.FirstOrDefault(i => i.Area!=null&&i.Area.Id == areaId);
                    //if (aar != null)
                    //{
                    //    var r = aarService.Delete(aar.Id + "");
                    //}

                    //权限表中,出现过AreaId和cardId对应并重复的数据。现在取消权限时,把AreadId重复的都删除掉
                    aarService.RemoveListByAreaId(areaId, aarList);
                }

                foreach (var areaId in newList)
                {
                    var list = aaService.GetListByArea(areaId + "");
                    if (list.Count == 0)//新增的区域没有对应的权限设置数据
                    {
                        var aaNew = AreaAuthorization.New();
                        aaNew.AreaId     = areaId;              //根节点
                        aaNew.AccessType = AreaAccessType.可以进出; //可进入的权限
                        aaNew.RangeType  = AreaRangeType.Single;
                        string areaType = "区域";
                        aaNew.Name        = string.Format("权限[" + areaType + "]");
                        aaNew.Description = string.Format("权限:可以进入" + areaType + "。");
                        var aaNewR = aaService.Post(aaNew);
                        list.Add(aaNewR);//后续挪动到aaService里面。
                    }
                    var aa = list.FirstOrDefault(i => i.AccessType == AreaAccessType.可以进出);
                    if (aa != null)
                    {
                        var aar = new AreaAuthorizationRecord(aa, role);
                        var r   = aarService.Post(aar);
                    }
                    else
                    {
                        Log.Error("SetCardRoleAccessAreas", "为找到区域对应的权限数据:" + areaId);
                    }
                }
                RefreshData();
            }
            catch (Exception ex)
            {
                Log.Error(tag, "SetCardRoleAccessAreas", ex.ToString());
                return(false);
            }
            return(true);
        }
Example #13
0
        /// <summary>
        /// 产生告警
        /// </summary>
        /// <param name="list1"></param>
        /// <returns></returns>
        private List <LocationAlarm> GenerateAreaAlarm(List <Position> list1)
        {
            List <LocationAlarm> newAlarmList = new List <LocationAlarm>();

            if (list1 == null)
            {
                Log.Error(tag, "GenerateAreaAlarm", "list1 == null");
                return(newAlarmList);
            }

            foreach (Position p in list1)
            {
                if (p == null || p.IsAreaNull() || p.PersonnelID == null || p.AreaId == null || p.IsDynamicAreaPos)
                {
                    continue;
                }

                CardRole role = roles.Find(i => i.Id == p.RoleId);
                if (role == null)
                {
                    int pAreaId = (int)p.AreaId;
                    //RemoveDuplicateAlarms(p, pAreaId, null, "标签未配置区域权限。", LocationAlarmLevel.四级告警, ref newAlarmList);
                    continue;
                }
                string personDepartment = GetPersonDepartInfo(p.PersonnelID, p.Code);
                foreach (var area in p.Areas)
                {
                    AreaAuthorizationRecord aar = aarList.Find(i => i.AreaId == area.Id && i.CardRoleId == role.Id);
                    if (aar != null)
                    {
                        LocationAlarm la      = realAlarms.Find(j => j.LocationCardId == p.CardId && j.AreaId == area.Id);
                        DateTime      dtBegin = p.DateTime;
                        DateTime      dtEnd   = p.DateTime;
                        if (la != null)
                        {
                            dtBegin = la.AlarmTime;
                        }

                        TimeSpan ts         = dtEnd.Subtract(dtBegin).Duration();
                        int      nTimeStamp = Convert.ToInt32(ts.TotalMinutes);

                        if (aar.AccessType == AreaAccessType.能进入)
                        {
                            RemoveDuplicateAlarms(p, area.Id, null, string.Format("人员:{0},在区域'{1}'未配置权限。", personDepartment, area), LocationAlarmLevel.四级告警, ref newAlarmList);
                        }
                        else
                        {
                            //if (aar.IsTimeValid(dtBegin, dtEnd, nTimeStamp) == false)
                            //{
                            //    RemoveDuplicateAlarms(p, area.Id, aar, string.Format("可以进入区域'{0}',但是未在有效时间范围内。", area), LocationAlarmLevel.四级告警, ref newAlarmList);
                            //}
                            //else
                            {
                                RemoveDuplicateAlarms(p, area.Id, aar, string.Format("正常,所在区域:{0}", area), LocationAlarmLevel.正常, ref newAlarmList);
                            }
                        }
                    }
                    else
                    {
                        if (role.Id == 1 || role.Name == SuperUserName)//超级管理员
                        {
                            RemoveDuplicateAlarms(p, area.Id, null, string.Format("正常,所在区域:{0}", area), LocationAlarmLevel.正常, ref newAlarmList);
                        }
                        else
                        {
                            RemoveDuplicateAlarms(p, area.Id, null, string.Format("人员:{0},在区域'{1}'未配置权限。", personDepartment, area), LocationAlarmLevel.四级告警, ref newAlarmList);
                        }
                    }
                }
            }

            return(newAlarmList);
        }
Example #14
0
        public List <LocationAlarm> GetAlarms(List <Position> list1)
        {
            alarms    = new List <LocationAlarm>();
            posAlarms = new Dictionary <Position, List <LocationAlarm> >();


            LoadData();
            foreach (Position p in list1)
            {
                if (p == null)
                {
                    continue;
                }
                if (p.IsAreaNull())
                {
                    AddAlarm(p, 0, null, "不在园区有效区域内。", LocationAlarmLevel.四级告警);
                    continue;
                }

                List <LocationAlarm> posAlarmState  = new List <LocationAlarm>(); //告警状态
                List <LocationAlarm> posNormalState = new List <LocationAlarm>(); //正常状态
                List <Position>      noAlarmPos     = new List <Position>();

                CardRole role = roles.Find(i => i.Id == p.RoleId);
                if (role != null)
                {
                    foreach (var area in p.Areas)
                    {
                        AreaAuthorizationRecord aar = aarList.Find(i => i.AreaId == area.Id && i.CardRoleId == role.Id);
                        string personDepartment     = GetPersonDepartInfo(p.PersonnelID, p.Code);
                        if (aar != null)
                        {
                            LocationAlarm la      = realAlarms.Find(j => j.LocationCardId == p.CardId && j.AreaId == area.Id);
                            DateTime      dtBegin = p.DateTime;
                            DateTime      dtEnd   = p.DateTime;
                            if (la != null)
                            {
                                dtBegin = la.AlarmTime;
                            }
                            TimeSpan ts         = dtEnd.Subtract(dtBegin).Duration();
                            int      nTimeStamp = Convert.ToInt32(ts.TotalMinutes);
                            if (aar.AccessType == AreaAccessType.能进入)
                            {
                                //string.Format("标签角色'{0}'在区域'{1}'未配置权限。", role, area)
                                posAlarmState.Add(AddAlarm(p, area.Id, null, string.Format("人员:{0},在区域'{1}'未配置权限。", personDepartment, area), LocationAlarmLevel.四级告警));
                            }
                            else
                            {
                                //if (aar.IsTimeValid(dtBegin, dtEnd, nTimeStamp) == false)
                                //{
                                //    posAlarmState.Add(AddAlarm(p, area.Id, aar, string.Format("可以进入区域'{0}',但是未在有效时间范围内。", area), LocationAlarmLevel.四级告警));
                                //}
                                //else
                                //{
                                //    posNormalState.Add(AddAlarm(p, area.Id, aar, string.Format("正常,所在区域:{0}", area), LocationAlarmLevel.正常));
                                //    noAlarmPos.Add(p);
                                //}
                            }
                        }
                        else
                        {
                            if (role.Id == 1)//超级管理员
                            {
                                posNormalState.Add(AddAlarm(p, area.Id, null, string.Format("正常,所在区域:{0}", area), LocationAlarmLevel.正常));
                                noAlarmPos.Add(p);
                            }
                            else
                            {
                                posAlarmState.Add(AddAlarm(p, area.Id, null, string.Format("人员:{0},在区域'{1}'未配置权限。", personDepartment, area), LocationAlarmLevel.四级告警));
                            }
                        }
                    }
                }
                else
                {
                    posAlarmState.Add(AddAlarm(p, 0, null, "标签未配置区域权限。", LocationAlarmLevel.四级告警));
                }

                //1.找出区域相关的所有权限
                //2.判断当前定位卡是否有权限进入该区域
                //  2.1找的卡所在的标签角色
                //  2.2判断该组是否是在权限内
                //  2.3不在则发出警告,进入非法区域
                //  2.4默认标签角色CardRole 1.超级管理员、巡检人员、管理人员、施工人员、参观人员
                //p.AreaId

                if (posAlarmState.Count > 0 && posNormalState.Count > 0)//存在告警状态和正常状态,则去掉正常状态
                {
                    posNormalState.Clear();
                }

                List <LocationAlarm> posAlarm0 = new List <LocationAlarm>();
                foreach (var item in posAlarmState)
                {
                    alarms.Add(item);
                    posAlarm0.Add(item);
                }

                if (posNormalState.Count > 0)//在一个区域内的多个规则的正常告警(状态)合并成一个
                {
                    if (posNormalState.Count > 1)
                    {
                        for (int i = 1; i < posNormalState.Count; i++)
                        {
                            posNormalState[0].AllAuzId += ";" + posNormalState[i].AuzId;
                        }
                    }
                    alarms.Add(posNormalState[0]);
                    posAlarm0.Add(posNormalState[0]);
                }
                posAlarms[p] = posAlarm0;
            }
            if (alarms.Count > 1)
            {
            }
            return(alarms);
        }
        private void SetRoleAuthorization5(List <Area> areaList)
        {
            List <AreaAuthorization> temp  = new List <AreaAuthorization>();
            List <CardRole>          temp2 = new List <CardRole>();

            for (int j = 1; j <= 4; j++)
            {
                var role = _roles[j];
                foreach (var area in areaList)
                {
                    var aa = AreaAuthorization.New();
                    aa.AreaId      = area.Id;             //根节点
                    aa.AccessType  = AreaAccessType.可以进出; //可进入的权限
                    aa.RangeType   = AreaRangeType.WithParent;
                    aa.Name        = string.Format("权限[机房]");
                    aa.Description = string.Format("权限:可以进入机房。");
                    areaAuthorizations.Add(aa);

                    temp.Add(aa);
                    temp2.Add(role);

                    //AreaAuthorizations.Add(aa);
                    //AddAAR(role, aa);
                }
            }
            AreaAuthorizations.AddRange(temp);

            if (authorizationRecords == null)
            {
                authorizationRecords = new List <AreaAuthorizationRecord>();
            }

            List <AreaAuthorizationRecord> temp3 = new List <AreaAuthorizationRecord>();

            for (int i = 0; i < temp.Count; i++)
            {
                var role = temp2[i];
                var aa   = temp[i];
                //AddAAR(role, aa);

                var aar = new AreaAuthorizationRecord(aa, role);

                authorizationRecords.Add(aar);

                temp3.Add(aar);

                //AreaAuthorizationRecords.Add(aar);

                //if (authorizationAreas != null)
                //{
                //    var aa2 = authorizationAreas.Find(item => item.Id == aa.AreaId);
                //    if (aa2 != null)
                //    {
                //        aa2.Records.Add(aar);
                //    }
                //}
            }

            AreaAuthorizationRecords.AddRange(temp3);

            foreach (var aar in temp3)
            {
                if (authorizationAreas != null)
                {
                    var aa2 = authorizationAreas.Find(item => item.Id == aar.AreaId);
                    if (aa2 != null)
                    {
                        aa2.Records.Add(aar);
                    }
                }
            }
        }
        private List <LocationAlarm> GetAlarmList()
        {
            List <LocationAlarm> list = new List <LocationAlarm>();

            try
            {
                List <Personnel> personnelList         = db.Personnels.ToList();
                List <Area>      areaList              = db.Areas.ToList();
                List <AreaAuthorizationRecord> aarList = db.AreaAuthorizationRecords.FindAll(i => i.SignIn == true);
                foreach (Personnel person in personnelList)
                {
                    string   strsql = string.Format(@"select a.* from cardroles a  inner join locationcards  b  on a.id=b.CardRoleId  inner join  locationcardtopersonnels c on b.id=c.LocationCardId  where c.PersonnelId=" + person.Id);
                    CardRole role   = db.CardRoles.GetDataBySql <CardRole>(strsql);
                    LocationCardToPersonnel card = db.LocationCardToPersonnels.Find(i => i.PersonnelId == person.Id);
                    if (role == null || card == null)
                    {
                        continue;
                    }
                    foreach (Area area in areaList)
                    {
                        AreaAuthorizationRecord aar = aarList.Find(i => i.AreaId == area.Id && i.CardRoleId == role.Id);
                        if (aar != null)
                        {
                            DateTime nowTime      = DateTime.Now;
                            DateTime nowEndTime   = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, aar.EndTime.Hour, aar.EndTime.Minute, aar.EndTime.Second);
                            DateTime nowStartTime = new DateTime(nowTime.Year, nowTime.Month, nowTime.Day, aar.StartTime.Hour, aar.StartTime.Minute, aar.StartTime.Second);
                            if (nowTime > nowEndTime)//可以判断是否产生告警
                            {
                                Position position = new Position();
                                position.CardId      = card.LocationCardId;
                                position.RoleId      = role.Id;
                                position.PersonnelID = person.Id;
                                PersonnelFirstInArea personArea = db.PersonnelFirstInAreas.Find(i => i.areaId == area.Id && i.personId == person.Id && i.type == 1);
                                if (personArea == null)//表示人员person当天未到过该区域
                                {
                                    //未签到告警
                                    LocationAlarm alarm1 = new LocationAlarm(position, area.Id, aar, person.Name, LocationAlarmLevel.四级告警, LocationAlarmType.签到告警);
                                    list.Add(alarm1);
                                }
                                else
                                {
                                    DateTime dateTime = personArea.dateTime;
                                    if (dateTime > nowStartTime && dateTime < nowEndTime)//时间范围内进入过
                                    {
                                        //正常告警
                                        LocationAlarm alarm1 = new LocationAlarm(position, area.Id, aar, person.Name, LocationAlarmLevel.正常, LocationAlarmType.签到告警);
                                        list.Add(alarm1);
                                    }
                                    else
                                    {
                                        //未签到告警
                                        LocationAlarm alarm1 = new LocationAlarm(position, area.Id, aar, person.Name, LocationAlarmLevel.四级告警, LocationAlarmType.签到告警);
                                        list.Add(alarm1);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error("SignInAlarmThread.GetCacheList:" + ex.ToString());
            }
            return(list);
        }
Example #17
0
        /// <summary>
        /// 产生告警
        /// </summary>
        /// <param name="list1"></param>
        /// <returns></returns>
        private List <LocationAlarm> GenerateAreaAlarm(List <Position> list1)
        {
            List <LocationAlarm> newAlarmList = new List <LocationAlarm>();

            if (list1 == null)
            {
                Log.Error(tag, "GenerateAreaAlarm", "list1 == null");
                return(newAlarmList);
            }

            foreach (Position p in list1)
            {
                if (p == null || p.IsAreaNull() || p.PersonnelID == null || p.AreaId == null || p.IsDynamicAreaPos)
                {
                    continue;
                }
                CardRole role = roles.Find(i => i.Id == p.RoleId);
                if (role == null)
                {
                    int pAreaId = (int)p.AreaId;
                    //RemoveDuplicateAlarms(p, pAreaId, null, "标签未配置区域权限。", LocationAlarmLevel.四级告警, ref newAlarmList);
                    continue;
                }
                //清除人员进入区域记录
                Bll db = Bll.NewBllNoRelation();
                List <PersonnelFirstInArea> paList = db.PersonnelFirstInAreas.Where(i => i.personId == p.PersonnelID && i.type == 0);
                List <Area> areaList = p.Areas.ToList();
                foreach (PersonnelFirstInArea personnelInArea in paList)
                {
                    Area area = areaList.Find(i => i.Id == personnelInArea.areaId);
                    if (area == null)
                    {
                        db.PersonnelFirstInAreas.DeleteById(personnelInArea.Id);
                    }
                }



                string personDepartment = GetPersonDepartInfo(p.PersonnelID, p.Code);
                foreach (var area in p.Areas)
                {
                    AreaAuthorizationRecord aar = aarList.Find(i => i.AreaId == area.Id && i.CardRoleId == role.Id);
                    if (aar != null)
                    {
                        LocationAlarm la      = realAlarms.Find(j => j.LocationCardId == p.CardId && j.AreaId == area.Id);
                        DateTime      dtBegin = p.DateTime;
                        DateTime      dtEnd   = p.DateTime;
                        if (la != null)
                        {
                            dtBegin = la.AlarmTime;
                        }

                        TimeSpan ts         = dtEnd.Subtract(dtBegin).Duration();
                        int      nTimeStamp = Convert.ToInt32(ts.TotalMinutes);

                        if (aar.AccessType == AreaAccessType.能进入)
                        {
                            RemoveDuplicateAlarms(p, area.Id, null, string.Format("人员:{0},在区域'{1}'未配置权限。", personDepartment, area), LocationAlarmLevel.四级告警, ref newAlarmList);
                        }
                        else
                        {
                            DateTime startTime = new DateTime(p.DateTime.Year, p.DateTime.Month, p.DateTime.Day, aar.StartTime.Hour, aar.StartTime.Minute, aar.StartTime.Second);
                            DateTime endTime   = new DateTime(p.DateTime.Year, p.DateTime.Month, p.DateTime.Day, aar.EndTime.Hour, aar.EndTime.Minute, aar.EndTime.Second);
                            if (aar.TimeType == TimeSettingType.无限制)
                            {
                                RemoveDuplicateAlarms(p, area.Id, aar, string.Format("正常,所在区域:{0}", area), LocationAlarmLevel.正常, ref newAlarmList);
                            }
                            else if (aar.TimeType == TimeSettingType.时间长度)
                            {
                                //获取
                                PersonnelFirstInArea getPA = db.PersonnelFirstInAreas.Find(i => i.personId == p.PersonnelID && i.areaId == area.Id && i.type == 0);
                                if (getPA == null) //不存在表示已经出了这个区域
                                {
                                    PersonnelFirstInArea person  = new PersonnelFirstInArea();
                                    DateTime             nowTime = DateTime.Now;
                                    person.personId = p.PersonnelID;
                                    person.areaId   = area.Id;
                                    person.dateTime = nowTime;
                                    person.type     = 0;
                                    bool result = db.PersonnelFirstInAreas.Add(person);
                                    Log.Info("记录人员:" + p.PersonnelName + "进入区域:" + area.Name + "权限:时间长度,结果:" + result);
                                    RemoveDuplicateAlarms(p, area.Id, aar, string.Format("正常,所在区域:{0}", area), LocationAlarmLevel.正常, ref newAlarmList, LocationAlarmType.超时告警);
                                }
                                else//告警
                                {
                                    if ((p.DateTime - getPA.dateTime).TotalMinutes > aar.TimeSpan)//超过时长
                                    {
                                        string timeOut = ((p.DateTime - getPA.dateTime).TotalMinutes - aar.TimeSpan).ToString();
                                        RemoveDuplicateAlarms(p, area.Id, aar, string.Format("人员:{0},在区域:{1}超时停留{2}分", personDepartment, area, timeOut), LocationAlarmLevel.四级告警, ref newAlarmList, LocationAlarmType.超时告警);
                                    }
                                    else
                                    {
                                        RemoveDuplicateAlarms(p, area.Id, aar, string.Format("正常,所在区域:{0}", area), LocationAlarmLevel.正常, ref newAlarmList, LocationAlarmType.超时告警);
                                    }
                                }
                            }

                            else if (aar.TimeType == TimeSettingType.时间点范围)
                            {
                                if (p.DateTime > startTime && p.DateTime < endTime)
                                {
                                    RemoveDuplicateAlarms(p, area.Id, aar, string.Format("正常,所在区域:{0}", area), LocationAlarmLevel.正常, ref newAlarmList, LocationAlarmType.超时告警);
                                }
                                else
                                {
                                    RemoveDuplicateAlarms(p, area.Id, aar, string.Format("告警,人员:{0} 在区域:{1}未设置权限", area), LocationAlarmLevel.四级告警, ref newAlarmList, LocationAlarmType.超时告警);
                                }
                            }
                            else if (aar.TimeType == TimeSettingType.时间长度加范围)
                            {
                                if (p.DateTime > startTime && p.DateTime < endTime)  //判断在时间范围内后,再判断时间长度
                                {
                                    PersonnelFirstInArea getPA = db.PersonnelFirstInAreas.Find(i => i.personId == p.PersonnelID && i.areaId == area.Id && i.type == 0);
                                    if (getPA == null) //不存在表示已经出了这个区域
                                    {
                                        PersonnelFirstInArea person  = new PersonnelFirstInArea();
                                        DateTime             nowTime = DateTime.Now;
                                        person.personId = p.PersonnelID;
                                        person.areaId   = area.Id;
                                        person.dateTime = nowTime;
                                        person.type     = 0;
                                        bool result = db.PersonnelFirstInAreas.Add(person);
                                        Log.Info("记录人员:" + p.PersonnelName + "进入区域:" + area.Name + "权限:时间长度加范围,结果:" + result);
                                        RemoveDuplicateAlarms(p, area.Id, aar, string.Format("正常,所在区域:{0}", area), LocationAlarmLevel.正常, ref newAlarmList, LocationAlarmType.超时告警);
                                    }
                                    else//告警
                                    {
                                        if ((p.DateTime - getPA.dateTime).TotalMinutes > aar.TimeSpan)//超过时长
                                        {
                                            RemoveDuplicateAlarms(p, area.Id, aar, string.Format("人员:{0},在区域:{1}未设置权限", personDepartment, area), LocationAlarmLevel.四级告警, ref newAlarmList, LocationAlarmType.超时告警);
                                        }
                                        else
                                        {
                                            RemoveDuplicateAlarms(p, area.Id, aar, string.Format("正常,所在区域:{0}", area), LocationAlarmLevel.正常, ref newAlarmList, LocationAlarmType.超时告警);
                                        }
                                    }
                                }
                                else
                                {
                                    RemoveDuplicateAlarms(p, area.Id, aar, string.Format("告警,人员:{0} 在区域:{1}未设置权限", area), LocationAlarmLevel.四级告警, ref newAlarmList);
                                }
                            }



                            //if (aar.IsTimeValid(dtBegin, dtEnd, nTimeStamp) == false)
                            //{
                            //    RemoveDuplicateAlarms(p, area.Id, aar, string.Format("可以进入区域'{0}',但是未在有效时间范围内。", area), LocationAlarmLevel.四级告警, ref newAlarmList);
                            //}
                            //else
                        }
                        if (aar.SignIn)//有签到限制(添加一条人员进入区域的记录)
                        {
                            PersonnelFirstInArea getPA = db.PersonnelFirstInAreas.Find(i => i.personId == p.PersonnelID && i.areaId == area.Id && i.type == 1);
                            if (getPA == null)
                            {
                                PersonnelFirstInArea person  = new PersonnelFirstInArea();
                                DateTime             nowTime = DateTime.Now;
                                person.personId = p.PersonnelID;
                                person.areaId   = area.Id;
                                person.dateTime = nowTime;
                                person.type     = 1;
                                bool result = db.PersonnelFirstInAreas.Add(person);
                                Log.Info("记录人员:" + p.PersonnelName + "进入区域:" + area.Name + "权限:签到,结果:" + result);
                            }
                        }
                    }
                    else
                    {
                        if (role.Id == 1 || role.Name == SuperUserName)//超级管理员
                        {
                            RemoveDuplicateAlarms(p, area.Id, null, string.Format("正常,所在区域:{0}", area), LocationAlarmLevel.正常, ref newAlarmList);
                        }
                        else
                        {
                            RemoveDuplicateAlarms(p, area.Id, null, string.Format("人员:{0},在区域'{1}'未配置权限。", personDepartment, area), LocationAlarmLevel.四级告警, ref newAlarmList);
                        }
                    }
                }
            }

            return(newAlarmList);
        }