Exemple #1
0
        public IHttpActionResult SearchTrain(int startStationId, int endStationId)
        {
            int statStationRouteId = _context.Stations.Single(s => s.SID == startStationId).RID;
            int endStationRouteId  = _context.Stations.Single(s => s.SID == endStationId).RID;

            //both stations in same GetRoute
            if (statStationRouteId == endStationRouteId)
            {
                var data      = GetTrains(startStationId, endStationId);
                var timeTaken = TimeSpan.FromSeconds(CalculateApproximateTime(data));
                var options   = new OptionDto {
                    TimeTaken = timeTaken.ToString("g"), Options = data
                };
                var result = new SearchTrainResult();
                result.Result.Add(options);
                result.Count = "1";
                return(Ok(result));
            }

            //stations in near by GetRoute
            var startStationPrimaryRId = _context.Routes.Single(r => r.RID == statStationRouteId).prid;
            var endStationPrimaryRId   = _context.Routes.Single(r => r.RID == endStationRouteId).prid;
            var flag = (statStationRouteId == endStationPrimaryRId)
                ? 1
                : ((endStationRouteId == startStationPrimaryRId)
                    ? 2
                    : ((startStationPrimaryRId == endStationPrimaryRId) ? 3 : 0));

            if (flag > 0)
            {
                int findStation =
                    flag == 1 ? endStationRouteId : statStationRouteId;
                int connectingStation = GetConnectingStation(findStation);
                var list1             = GetTrains(startStationId, connectingStation);
                var list2             = GetTrains(connectingStation, endStationId);
                var result            = FilterResult(list1, list2);
                return(Ok(result));
            }

            {
                _routeIdList = new List <int>();
                _routeIdList = GetRoute(statStationRouteId, endStationRouteId);
                return(Ok(_routeIdList));
            }
        }
Exemple #2
0
        private static SearchTrainResult FilterResult(IEnumerable <TrainDataDto> list1, List <TrainDataDto> list2)
        {
            SearchTrainResult result = new SearchTrainResult();

            foreach (TrainDataDto dataDto in list1)
            {
                var data = new OptionDto();
                foreach (TrainDataDto trainDataDto in list2)
                {
                    if (trainDataDto.StartStationDeparture1 >= dataDto.EndStationArrival1)
                    {
                        if (dataDto.TrainId == trainDataDto.TrainId)
                        {
                            dataDto.EndStationArrival = trainDataDto.EndStationArrival;
                            //dataDto.EndStationDeparture = trainDataDto.EndStationDeparture;
                            dataDto.EndStationId = trainDataDto.EndStationId;
                            data.Options.Add(dataDto);
                            list2.Remove(trainDataDto);
                            break;
                        }
                        else
                        {
                            data.Options.Add(dataDto);
                            data.Options.Add(trainDataDto);
                            break;
                        }
                    }
                }

                if (data.Options.Count <= 0)
                {
                    continue;
                }
                data.TimeTaken = TimeSpan.FromSeconds(CalculateApproximateTime(data.Options)).ToString();
                result.Result.Add(data);
            }

            result.Count = result.Result.Count.ToString();
            return(result);
        }