示例#1
0
        public async Task <IHttpActionResult> Add(params Agv.Dtos.RouteInfoInputDto[] dto)
        {
            //创建和修改的人员、时间
            dto?.ToList().ForEach((a) =>
            {
                a.Id                = CombHelper.NewComb();
                a.CreatorUserId     = User.Identity.Name;
                a.CreatedTime       = DateTime.Now;
                a.LastUpdatedTime   = a.CreatedTime;
                a.LastUpdatorUserId = a.CreatorUserId;
            });
            var result = await RouteInfoContract.Add(dto);

            return(Json(result));
        }
示例#2
0
        public async Task <IHttpActionResult> Generate(params Agv.Dtos.RouteInfoInputDto[] dto)
        {
            //地标点和路径信息全获取
            List <MarkPointInfo> TmpMarkPointList = MarkPointInfoContract.MarkPointInfos?.ToList();

            //起始点
            MarkPointInfo StartMarkPoint = new MarkPointInfo();
            //终止点
            MarkPointInfo EndMarkPoint = new MarkPointInfo();
            //中间层起始点
            MarkPointInfo   BeforeMarkPoint = new MarkPointInfo();
            List <RoadInfo> AllRoads        = new List <RoadInfo>();
            List <RoadInfo> PassedRoads     = new List <RoadInfo>();

            List <RoadInfo> GetRoadInfoList = RoadInfoContract.RoadInfos.ToList();
            //反向所有路段
            List <RoadInfo> GetReverseRoadInfoList = RoadInfoContract.RoadInfos.ToList();
            MarkPointInfo   TmproadInfo            = new MarkPointInfo();

            Agv.Dtos.RouteInfoInputDto RouteInfo = new Agv.Dtos.RouteInfoInputDto();
            OperationResult            result    = new OperationResult();

            dto = new Agv.Dtos.RouteInfoInputDto[1] {
                RouteInfo
            };
            int StartMarkPointOfMarkPoints = 0;
            int EndMarkPointOfMarkPoints   = -1;
            //相同起点和终点的路段编号
            int RoutesNum = 0;

            if (!Equals(TmpMarkPointList, null))
            {
                //得到无相路段
                GetReverseRoadInfoList.ForEach((a) =>
                {
                    TmproadInfo          = a.StartMarkPointInfo;
                    a.StartMarkPointInfo = a.EndMarkPointInfo;
                    a.EndMarkPointInfo   = TmproadInfo;
                });
                GetRoadInfoList.AddRange(GetReverseRoadInfoList);
                //起始点和终止点全排列
                for (int i = 0; i < TmpMarkPointList.Count; i++)
                {
                    for (int j = 0; j < TmpMarkPointList.Count; j++)
                    {
                        if (i != j)
                        {
                            RoutesNum       = 0;
                            StartMarkPoint  = TmpMarkPointList[i];
                            BeforeMarkPoint = TmpMarkPointList[i];
                            EndMarkPoint    = TmpMarkPointList[j];

                            if (!Equals(AllRoads, null))
                            {
                                AllRoads.Clear();
                            }
                            if (!Equals(PassedRoads, null))
                            {
                                PassedRoads.Clear();
                            }
                            //用递归找到可以到达的路径的集合
                            var V = await RouteInfoContract.GetCombination(StartMarkPoint, EndMarkPoint, BeforeMarkPoint, AllRoads, PassedRoads, GetRoadInfoList);

                            if (AllRoads.Count > 0)
                            {
                                //list翻转
                                AllRoads.Reverse();
                                //用来区分路段集合中的多段路径
                                for (int k = 0; k < AllRoads.Count; k++)
                                {
                                    //记录每一次开始地标点存在的位置在MarkPoints
                                    if (Equals(AllRoads[k].StartMarkPointInfo, StartMarkPoint))
                                    {
                                        StartMarkPointOfMarkPoints = k;
                                    }
                                    //记录每一次结束地标点存在的位置在MarkPoints
                                    if (Equals(AllRoads[k].EndMarkPointInfo, EndMarkPoint))
                                    {
                                        EndMarkPointOfMarkPoints = k;
                                    }
                                    //每次找到结束点添加多段路径的表中
                                    if (EndMarkPointOfMarkPoints >= 0)
                                    {
                                        ++RoutesNum;
                                        dto?.ToList().ForEach((a) =>
                                        {
                                            a.TotalDistance     = 0;
                                            a.MarkPoints        = "";
                                            a.Id                = CombHelper.NewComb();
                                            a.CreatorUserId     = User.Identity.Name;
                                            a.CreatedTime       = DateTime.Now;
                                            a.LastUpdatedTime   = a.CreatedTime;
                                            a.LastUpdatorUserId = a.CreatorUserId;

                                            for (int m = StartMarkPointOfMarkPoints; m <= EndMarkPointOfMarkPoints; m++)
                                            {
                                                a.RouteStatus    = AllRoads[m].RoadStatus;
                                                a.TotalDistance += AllRoads[m].Distance;
                                                //if (a.MarkPoints.IndexOf(MarkPoints[m].StartMarkPointInfo.MarkPointName) == -1)
                                                //{
                                                a.MarkPoints += AllRoads[m].StartMarkPointInfo.MarkPointName + ",";
                                                //}
                                            }
                                            a.RouteNo   = "Route" + "(" + StartMarkPoint.MarkPointName + "-" + EndMarkPoint.MarkPointName + ")" + "=" + RoutesNum.ToString();
                                            a.RouteName = "路段" + "(" + StartMarkPoint.MarkPointName + "-" + EndMarkPoint.MarkPointName + ")" + "=" + RoutesNum.ToString();
                                            //if (a.MarkPoints.IndexOf(EndMarkPoint.MarkPointName) == -1)
                                            //{
                                            a.MarkPoints += EndMarkPoint.MarkPointName;
                                            //}
                                            a.StartMarkPointInfo    = StartMarkPoint;
                                            a.EndMarkPointInfo      = EndMarkPoint;
                                            a.StartMarkPointInfo_Id = StartMarkPoint.Id;
                                            a.EndMarkPointInfo_Id   = EndMarkPoint.Id;
                                        });
                                        EndMarkPointOfMarkPoints = -1;
                                        result = await RouteInfoContract.Generate(dto);

                                        if (!result.Successed)
                                        {
                                            return(Json(result));
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                return(null);
            }

            return(Json(result));
        }
示例#3
0
        public async Task <IHttpActionResult> Remove(params Guid[] ids)
        {
            var result = await RouteInfoContract.Delete(ids);

            return(Json(result));
        }
示例#4
0
        public async Task <IHttpActionResult> Update(params Agv.Dtos.RouteInfoInputDto[] dto)
        {
            var result = await RouteInfoContract.Update(dto);

            return(Json(result));
        }