public bool EditTagPosition(Position position) { LocationCardPosition tagPos = LocationCardPositions.FindByCode(position.Code);//判断是否存在实时数据 if (tagPos == null) { var tagPosition = new LocationCardPosition(position); if (LocationCardPositions.Add(tagPosition))//添加新的实时数据 { return(true); } else { ErrorMessage = Positions.ErrorMessage; return(false); } } else { tagPos.Edit(position); if (LocationCardPositions.Edit(tagPos))//修改实时数据 { return(true); } else { ErrorMessage = Positions.ErrorMessage; return(false); } } }
public ActionResult DeleteConfirmed(string id) { LocationCardPosition tagPosition = db.LocationCardPositions.Find(id); db.LocationCardPositions.Remove(tagPosition); //db.SaveChanges(); return(RedirectToAction("Index")); }
public void SetProperty(LocationCardPosition pos) { Code = pos.Id; X = pos.X; Y = pos.Z; Z = pos.Y; Power = pos.Power; Number = pos.Number; Flag = pos.Flag; Archors = pos.Archors; }
// GET: TagPositions/Delete/5 public ActionResult Delete(string id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } LocationCardPosition tagPosition = db.LocationCardPositions.Find(id); if (tagPosition == null) { return(HttpNotFound()); } //return View(tagPosition); return(PartialView(tagPosition)); }
/// <summary> /// 初始化实时位置信息 /// </summary> public void InitRealTimePositions() { DateTime dt = DateTime.Now; long TimeStamp = TimeConvert.DateTimeToTimeStamp(dt); LocationCardPositions.Clear(); List <LocationCardPosition> tagpositions = new List <LocationCardPosition>(); var cardPersons = _bll.LocationCardToPersonnels.ToList(); //和卡绑定的人才有位置信息 var cards = _bll.LocationCards.ToList(); var area = _bll.Areas.Find(2); //电厂 var bound = area.InitBound; bound.Points = _bll.Points.FindAll(i => i.BoundId == bound.Id); for (int i = 0; i < cardPersons.Count; i++) { var cp = cardPersons[i]; var card = cards.Find(j => j.Id == cp.LocationCardId); if (i < 10)//这部分固定初始位置 { var tagposition = new LocationCardPosition() { CardId = cp.LocationCardId, Id = card.Code, X = 2292.5f + i, Y = 2, Z = 1715.5f, DateTime = dt, DateTimeStamp = TimeStamp, Power = 0, Number = i, Flag = "0:0:0:0:0", AreaId = 2, PersonId = cp.Id }; tagpositions.Add(tagposition); } else//这部分随机初始位置 { var x = r.Next((int)bound.GetSizeX()) + bound.MinX; var z = r.Next((int)bound.GetSizeY()) + bound.MinY; while (!bound.Contains(x, z)) { x = r.Next((int)bound.GetSizeX()) + bound.MinX; z = r.Next((int)bound.GetSizeY()) + bound.MinY; } var tagposition = new LocationCardPosition() { CardId = cp.LocationCardId, Id = card.Code, X = x, Y = 2, Z = z, DateTime = dt, DateTimeStamp = TimeStamp, Power = 0, Number = i, Flag = "0:0:0:0:0", PersonId = cp.Id }; tagpositions.Add(tagposition); } } LocationCardPositions.AddRange(tagpositions); }
public ActionResult Create([Bind(Include = "Tag,X,Y,Z,Time,Power,Number,Flag")] LocationCardPosition tagPosition) { if (ModelState.IsValid) { //db.LocationCardPositions.Add(tagPosition); //db.SaveChanges(); //return RedirectToAction("Index"); var result = db.LocationCardPositions.Add(tagPosition); if (result) { return(Json(new { success = result })); } else { return(Json(new { success = result, errors = db.LocationCardPositions.ErrorMessage })); } } GetListToViewBag(); return(View(tagPosition)); }
public void AddTagPositionsByTags(List <LocationCard> tags) { return; //cww_2019_01_18:不插入无位置的标签位置 var tagPosList = LocationCardPositions.ToList(); //事先取出全部到内存中,比每次都到数据库中查询快很多。 100个从6.4s->1.8s,1.8s中主要是第一次查询的一些初始工作 var newPosList = new List <LocationCardPosition>(); foreach (var tag in tags) { //TagPosition tagPos = TagPositions.FindByCode(tag.Code);//100个要2s var tagPos = tagPosList.Find(i => i.Id == tag.Code);//判断是否存在实时数据 if (tagPos == null) { var tagPosition = new LocationCardPosition(tag.Code); newPosList.Add(tagPosition); } } //根据标签数量初始化位置信息,插入没有位置信息的标签位置 foreach (var tp in newPosList) { LocationCardPositions.Add(tp); } }
public void AddTagPositionsByTags(List <LocationCard> tags) { var tagPosList = LocationCardPositions.ToList();//事先取出全部到内存中,比每次都到数据库中查询快很多。 100个从6.4s->1.8s,1.8s中主要是第一次查询的一些初始工作 var newPosList = new List <LocationCardPosition>(); foreach (var tag in tags) { //TagPosition tagPos = TagPositions.FindByCode(tag.Code);//100个要2s var tagPos = tagPosList.Find(i => i.Id == tag.Code);//判断是否存在实时数据 if (tagPos == null) { var tagPosition = new LocationCardPosition(tag.Code); newPosList.Add(tagPosition); } } //TagPositions.Db.BulkInsert(newPosList);//插件Z.EntityFramework.Extensions功能 //TagPositions.Db.BulkSaveChanges(); foreach (var tp in newPosList) { LocationCardPositions.Add(tp); } }
/// <summary> /// 初始化实时位置信息 /// </summary> public void InitRealTimePositions() { //return;//正式发布时不需要模拟数据 var pos = _bll.Positions.ToList(); if (pos == null || pos.Count == 0) { DateTime dt = DateTime.Now; long TimeStamp = TimeConvert.ToStamp(dt); LocationCardPositions.Clear(); List <LocationCardPosition> tagpositions = new List <LocationCardPosition>(); var cardPersons = _bll.LocationCardToPersonnels.ToList();//和卡绑定的人才有位置信息 var cards = _bll.LocationCards.ToList(); var parkName = AppSetting.ParkName; Area park = null; if (!string.IsNullOrEmpty(parkName)) { park = _bll.Areas.Find(i => i.Name == parkName); } if (park == null) { park = _bll.Areas.Find(2);//默认四会热电厂 } if (park == null) { Log.Error("InitRealTimePositions park == null"); return; } List <Area> buildings = _bll.Areas.FindAll(i => i.Type == AreaTypes.大楼); if (buildings.Count == 1)//只有一个大楼,则是演示案例 { park = buildings[0]; } var bound = park.InitBound; if (bound == null) { for (int i = 0; i < cardPersons.Count; i++) { var cp = cardPersons[i]; var card = cards.Find(j => j.Id == cp.LocationCardId); { var x = 0; var z = 0; var tagposition = new LocationCardPosition() { CardId = cp.LocationCardId, Id = card.Code, X = x, Y = 2, Z = z, DateTime = dt, DateTimeStamp = TimeStamp, Power = 400, Number = i, Flag = "0:0:0:0:0", PersonId = cp.PersonnelId, AreaId = park.Id }; tagpositions.Add(tagposition); //LocationCardPositions.Add(tagposition); } } } else { bound.Points = _bll.Points.FindAll(i => i.BoundId == bound.Id); for (int i = 0; i < cardPersons.Count; i++) { var cp = cardPersons[i]; var card = cards.Find(j => j.Id == cp.LocationCardId); //if (i < 10)//这部分固定初始位置 //{ // var tagposition = new LocationCardPosition() { CardId = cp.LocationCardId, Id = card.Code, X = 2292.5f+i, Y = 2, Z = 1715.5f, DateTime = dt, DateTimeStamp = TimeStamp, Power = 0, Number = i, Flag = "0:0:0:0:0", AreaId = 2, PersonId = cp.Id }; // tagpositions.Add(tagposition); //} //else//这部分随机初始位置 { var x = r.Next((int)(bound.GetSizeX() * 0.9)) + bound.MinX + (bound.GetSizeX() * 0.05); var z = r.Next((int)(bound.GetSizeY() * 0.9)) + bound.MinY + (bound.GetSizeY() * 0.05); while (!bound.Contains(x, z)) { x = r.Next((int)(bound.GetSizeX() * 0.9)) + bound.MinX + (bound.GetSizeX() * 0.05); z = r.Next((int)(bound.GetSizeY() * 0.9)) + bound.MinY + (bound.GetSizeY() * 0.05); } var tagposition = new LocationCardPosition() { CardId = cp.LocationCardId, Id = card.Code, X = (float)x, Y = 2, Z = (float)z, DateTime = dt, DateTimeStamp = TimeStamp, Power = 400, Number = i, Flag = "0:0:0:0:0", PersonId = cp.PersonnelId, AreaId = park.Id }; tagpositions.Add(tagposition); } } } LocationCardPositions.AddRange(tagpositions); } else { } }
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)); } }