public bool AddPositionsEx(List <Position> positions) { //1.删除重复的位置信息,只留最新的部分 var positions2 = RemoveRepeatPosition(positions); positions.Clear(); positions.AddRange(positions2); //2.处理定位引擎位置信息,添加关联人员信息 //var tagRelation = new TagRelationBuffer(this); if (tagRelation == null) { //tagRelation = new TagRelationBuffer(); tagRelation = TagRelationBuffer.Instance(); } tagRelation.SetPositionInfo(positions2);//设置标签、人员和区域 //3.写入数据库 return(AddPositions(positions2)); }
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); //增加位置信息 }