コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        public ActionResult DeleteConfirmed(string id)
        {
            LocationCardPosition tagPosition = db.LocationCardPositions.Find(id);

            db.LocationCardPositions.Remove(tagPosition);
            //db.SaveChanges();
            return(RedirectToAction("Index"));
        }
コード例 #3
0
ファイル: Position.cs プロジェクト: llhswwha/LocationSystem
 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;
 }
コード例 #4
0
        // 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));
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        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));
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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);
            }
        }
コード例 #9
0
        /// <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
            {
            }
        }
コード例 #10
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);      //增加位置信息
        }
コード例 #11
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));
            }
        }