コード例 #1
0
ファイル: HomeController.cs プロジェクト: Dalamar81/Beertown
        public ActionResult Index()
        {
            var model = new BeertownModel();

            InitLists(model);

            return View(model);
        }
コード例 #2
0
ファイル: HomeController.cs プロジェクト: Dalamar81/Beertown
        public ActionResult Index(BeertownModel model)
        {
            // Составляем граф по данным из БД:
            Dictionary<int, ISet<PathFinder.Edge>> graph = CreateGraph();

            PathFinder pathFinder = new PathFinder(graph, model.StartStationId);
            // TODO: Хорошо бы кэшировать объект pathFinder для одинаковых значений StartStationId

            // Заполняем путь для отображения.
            model.Path = new List<BeertownModel.PathNode>();
            var toStation = _SubwayRepository.Stations.First(p => p.StationId == model.DestinationStationId);
            while (toStation.StationId != model.StartStationId)
            {
                var closestNode = pathFinder.ClosedNodes[toStation.StationId];
                var fromStation = _SubwayRepository.Stations.First(p => p.StationId == closestNode.NextNodeId);
                model.Path.Insert(0, new BeertownModel.PathNode
                {
                    Station = new BeertownModel.SubwayStation { StationId = toStation.StationId, StationName = toStation.StationName, LineColorCode = toStation.Line.LineColorCode, LineId = toStation.LineId },
                    Duration = closestNode.Distance
                });
                toStation = fromStation;
            }
            model.Path.Insert(0, new BeertownModel.PathNode
            {
                Station = new BeertownModel.SubwayStation { StationId = toStation.StationId, StationName = toStation.StationName, LineColorCode = toStation.Line.LineColorCode, LineId = toStation.LineId },
                Duration = 0
            });

            model.Cost = new List<BeertownModel.CostDetail>();
            foreach (var t in _SubwayRepository.LineTarifs.Where(p => p.ActualDate <= DateTime.Now && p.ActualEndDate >= DateTime.Now && model.Path.Select(pp => pp.Station.LineId).Contains(p.LineId)))
            {
                model.Cost.Add(new BeertownModel.CostDetail { Cost = t.Cost, CostItem = "проезд по " + t.Line.LineNameDativeCase + " линии", LineColorCode = t.Line.LineColorCode });
            }

            InitLists(model);
            return View(model);
        }
コード例 #3
0
ファイル: HomeController.cs プロジェクト: Dalamar81/Beertown
 private void InitLists(BeertownModel model)
 {
     List<SelectListGroup> groups = _SubwayRepository.Lines.Select(p => new SelectListGroup { Name = p.LineName }).ToList();
     model.Stations = _SubwayRepository.Stations.Select(p => new SelectListItem { Value = p.StationId.ToString(), Text = p.StationName, Group = groups.First(pp => pp.Name == p.Line.LineName) });
 }