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); } }
/// <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); }
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); //增加位置信息 }
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)); } }