Ejemplo n.º 1
0
        public void BindCardToPerson(Personnel person, LocationCard tag)
        {
            if (tag != null && person != null)
            {
                LocationCardToPersonnel cardToPerson = new LocationCardToPersonnel();
                cardToPerson.PersonnelId    = person.Id;
                cardToPerson.LocationCardId = tag.Id;
                LocationCardToPersonnels.Add(cardToPerson);

                tag.IsActive = true;//绑定了人员就激活
                LocationCards.Edit(tag);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 根据标签信息初始化实时位置信息表,这样跟定位引擎对接时就不用每次都判断是否是新增还是修改了
        /// </summary>
        public List <LocationCard> InitTagPosition(int mockPowerCount)
        {
            List <LocationCard> tags = LocationCards.ToList();

            if (tags == null)
            {
                tags = new List <LocationCard>();
            }

            var mockTags = GetMockTags(mockPowerCount, tags);  //生成模拟数据,测试大数据量,mockPowerCount = 100的话,2个变成200个

            tags.AddRange(mockTags);

            AddTagPositionsByTags(tags);

            return(tags);
        }
Ejemplo n.º 3
0
        private int errorCount = 0;                                                  //测试用

        private void EditTagPositionListOP(List <Position> positions)
        {
            //1.获取列表
            if (tagPosDic == null)
            {
                tagPosDic = LocationCardPositions.ToDictionary();
            }
            //var tagPosList = LocationCardPositions.ToDictionary();
            List <LocationCardPosition> changedTagPosList = new List <LocationCardPosition>();
            //Dictionary<string, LocationCard> dict = LocationCards.ToDictionaryByCode();//放在TagRelationBuffer中
            List <LocationCardPosition> newTagPosList = new List <LocationCardPosition>();

            List <LocationCard> editCardList       = new List <LocationCard>();
            Dictionary <string, LocationCard> dict = TagRelationBuffer.Instance().GetLocationCardDic();

            var maxSpeed = AppContext.MoveMaxSpeed;

            //maxSpeed = 0;//测试用

            //2.修改数据
            for (int i = 0; i < positions.Count; i++)
            {
                Position position = positions[i];
                if (position == null)
                {
                    continue;                  //位置信息可能有null
                }
                //LocationCard lc = LocationCards.Where(p=>p.Code == position.Code).FirstOrDefault();
                LocationCard lc = GetChangedCard(dict, position);
                if (lc != null)
                {
                    editCardList.Add(lc);
                }

                if (tagPosDic.ContainsKey(position.Code))
                {
                    var tagPos = tagPosDic[position.Code];

                    if (maxSpeed > 0)
                    {
                        var speed = PosDistanceUtil.GetSpeed(tagPos, position);

                        //PosDistance dis1 = new PosDistance(tagPos, position);
                        //posDistanceList.Add(dis1);

                        if (speed > maxSpeed)  //判断错误点
                        {
                            errorCount++;
                            PosDistance dis = new PosDistance(tagPos, position);
                            //这个点就不用来修改实时位置了
                            string tagPos1 = tagPos.GetText();
                            string tagPos2 = position.GetText();
                            Log.Info("ErrorPos", string.Format("发现错误点:TagPos:{0} Position:{1} ErrorCount:{2} Distance:{3}", tagPos1, tagPos2, errorCount, dis));
                            positions.RemoveAt(i);
                            i--;
                        }
                        else
                        {
                            tagPos.Edit(position);                   //修改实时位置数据
                            if (!changedTagPosList.Contains(tagPos)) //修改部分
                            {
                                changedTagPosList.Add(tagPos);
                            }
                        }
                    }
                    else
                    {
                        tagPos.Edit(position);                   //修改实时位置数据
                        if (!changedTagPosList.Contains(tagPos)) //修改部分
                        {
                            changedTagPosList.Add(tagPos);
                        }
                    }
                }
                else
                {
                    LocationCardPosition newTagPos = new LocationCardPosition(position);
                    newTagPosList.Add(newTagPos);
                    tagPosDic.Add(newTagPos.Id, newTagPos);//更新缓存
                }
            }

            //List<LocationCardPosition> noChangedTagPosList = new List<LocationCardPosition>();//没有移动的位置信息
            //foreach (var tag1 in tagPosList)
            //{
            //    if (!changedTagPosList.Contains(tag1))
            //    {
            //        noChangedTagPosList.Add(tag1);
            //    }
            //}

            ////设置实时位置的移动状态
            //foreach (var tag1 in noChangedTagPosList)
            //{
            //    TimeSpan time = DateTime.Now - tag1.DateTime;
            //    if (time.TotalSeconds > 30)
            //    {
            //        if (tag1.Flag == "0:0:0:0:1")
            //        {
            //            tag1.MoveState = 1;
            //        }
            //        else
            //        {
            //            tag1.MoveState = 2;
            //        }
            //    }
            //}

            LocationCards.EditRange(editCardList);              //修改定位卡信息

            LocationCardPositions.EditRange(changedTagPosList); //修改位置信息

            LocationCardPositions.AddRange(newTagPosList);      //增加位置信息
        }
Ejemplo n.º 4
0
        private void EditTagPositionListOP(List <Position> positions)
        {
            //1.获取列表
            List <LocationCardPosition> tagPosList        = LocationCardPositions.ToList();
            List <LocationCardPosition> changedTagPosList = new List <LocationCardPosition>();
            List <LocationCardPosition> newTagPosList     = new List <LocationCardPosition>();

            //2.修改数据
            for (int i = 0; i < positions.Count; i++)
            {
                Position position = positions[i];
                if (position == null)
                {
                    continue;                  //位置信息可能有null
                }
                LocationCard lc = LocationCards.Where(p => p.Code == position.Code).FirstOrDefault();
                if (lc == null)
                {
                    continue;
                }
                if (lc.Flag != position.Flag || lc.Power != position.Power)
                {
                    lc.Flag  = position.Flag;
                    lc.Power = position.Power;
                    if (lc.Power >= 400)
                    {
                        lc.PowerState = 0;
                    }
                    else
                    {
                        lc.PowerState = 1;
                    }

                    LocationCards.Edit(lc);
                }

                var tagPos = tagPosList.Find(item => item.Id == position.Code);
                if (tagPos != null)
                {
                    tagPos.Edit(position);//修改实时位置数据
                    if (!changedTagPosList.Contains(tagPos))
                    {
                        changedTagPosList.Add(tagPos);
                    }
                }
                else
                {
                    LocationCardPosition newTagPos = new LocationCardPosition(position);
                    newTagPosList.Add(newTagPos);
                }
            }

            List <LocationCardPosition> noChangedTagPosList = new List <LocationCardPosition>();//没有移动的位置信息

            foreach (var tag1 in tagPosList)
            {
                if (!changedTagPosList.Contains(tag1))
                {
                    noChangedTagPosList.Add(tag1);
                }
            }

            ////设置实时位置的移动状态
            //foreach (var tag1 in noChangedTagPosList)
            //{
            //    TimeSpan time = DateTime.Now - tag1.DateTime;
            //    if (time.TotalSeconds > 30)
            //    {
            //        if (tag1.Flag == "0:0:0:0:1")
            //        {
            //            tag1.MoveState = 1;
            //        }
            //        else
            //        {
            //            tag1.MoveState = 2;
            //        }
            //    }
            //}

            try
            {
                LocationCardPositions.Db.BulkUpdate(changedTagPosList);//插件Z.EntityFramework.Extensions功能
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("EditTagPositionListOP1,Type:{0},Count:{1},Error:{2}", typeof(LocationCardPosition), changedTagPosList.Count(), ex.Message));
            }

            try
            {
                LocationCardPositions.Db.BulkInsert(newTagPosList);//插件Z.EntityFramework.Extensions功能
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("EditTagPositionListOP2,Type:{0},Count:{1},Error:{2}", typeof(LocationCardPosition), changedTagPosList.Count(), ex.Message));
            }
        }