private async Task <bool> CompareDaysFromTurnover(TripOnRouteWithStationsDto input) { var sqlRRoute = new RoutesRepository(_logger); var route = await sqlRRoute.ById(input.RouteId); if (route.TurnoverId == null) { throw new ValidationException("У данного маршрута отсутсвует цикловой график"); } var sqlRTurnover = new TurnoversRepoisitory(_logger); var turnover = await sqlRTurnover.ById((int)route.TurnoverId); var sqlRDaysOnRoute = new DayOfRoutesRepoisitory(_logger); var daysOfRouteFromTurnover = await sqlRDaysOnRoute.DaysByTurnoverId(turnover.Id); var daysFromTurnover = daysOfRouteFromTurnover.Select(x => x.Day).ToList(); daysFromTurnover.Sort(); input.Days.Sort(); var isgoodTrip = true; foreach (var d in daysFromTurnover) { if (!input.Days.Any(x => x.Equals(d))) { isgoodTrip = false; } } if (isgoodTrip) { return(true); } return(false); }
/// <summary> /// Отдает маршруты с временными промежутками то и рейсов для ебучего расписания /// </summary> public async Task <RoutesWithTimelinePaging> GetRoutesWithTimeline(int turnoverId, int skip, int limit, int?routeId = null) { RoutesWithTripsAndToPaging data; if (routeId != null) { data = await GetRoutesWithTripsAndToByTurnoverId(turnoverId, skip, limit, routeId); } else { data = await GetRoutesWithTripsAndToByTurnoverId(turnoverId, skip, limit); } var result = new RoutesWithTimelinePaging { Total = data.Total, Data = new List <ScheduleRouteTripsTo>() }; foreach (var item in data.Data.OrderBy(x => int.Parse("0" + Regex.Match(x.Name, "(\\d+)").Value))) { var toAdd = new ScheduleRouteTripsTo(); toAdd.RouteId = item.Id; toAdd.Mileage = item.Mileage; toAdd.RouteName = item.Name; toAdd.TimeLines = await TimelineFromTrips(item.Trips); var timelineFromInspectionRoutes = TimelineFromInspectionRoutes(item.InspectionRoutes); if (timelineFromInspectionRoutes.Count > 0) { toAdd.TimeLines.AddRange(timelineFromInspectionRoutes); } result.Data.Add(toAdd); } var sqlRTurnover = new TurnoversRepoisitory(_logger); var sqlRDirection = new DirectionsRepository(_logger); var sqlRDayOfRoutes = new DayOfRoutesRepoisitory(_logger); var turnover = await sqlRTurnover.ById(turnoverId); result.TurnoverName = turnover.Name; var direction = await sqlRDirection.ById(turnover.DirectionId); result.DirectionName = direction?.Name; var turnoversDays = await sqlRDayOfRoutes.DaysByTurnoverId(turnoverId); result.Days = turnoversDays.Select(x => x.Day).ToList(); return(result); }
public async Task DeleteTurnoverWithDays(int id) { ////Начинаем блядь КВН using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled)) { var sqlRTurnovers = new TurnoversRepoisitory(_logger); var sqlRDays = new DayOfRoutesRepoisitory(_logger); var currentDays = await sqlRDays.DaysByTurnoverId(id); foreach (var currentDay in currentDays) { await sqlRDays.Delete(currentDay.Id); } await sqlRTurnovers.Delete(id); transaction.Complete(); } }
/// <summary> /// Добавить тарновера с днями в цикловой график /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task <TurnoverWithDays> AddTurnoverWithDays(TurnoverWithDays input) { //Начинаем блядь КВН using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled)) { var sqlRTurnovers = new TurnoversRepoisitory(_logger); var sqlRDays = new DayOfRoutesRepoisitory(_logger); var turnover = await sqlRTurnovers.Add(_mapper.Map <TurnoverWithDays, Turnover>(input)); var result = _mapper.Map <Turnover, TurnoverWithDays>(turnover); result.Days = new List <DayOfWeek>(); foreach (var inputDay in input.Days) { var day = await sqlRDays.Add(new DayOfRoute { TurnoverId = result.Id, Day = inputDay }); result.Days.Add(day.Day); } transaction.Complete(); return(result); } }
public async Task <TurnoverWithDays> UpdateTurnoverWithDays(TurnoverWithDays input) { //Начинаем блядь КВН using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled)) { var sqlRTurnovers = new TurnoversRepoisitory(_logger); var sqlRDays = new DayOfRoutesRepoisitory(_logger); var turnover = await sqlRTurnovers.Update(_mapper.Map <TurnoverWithDays, Turnover>(input)); var result = _mapper.Map <Turnover, TurnoverWithDays>(turnover); var currentDays = await sqlRDays.DaysByTurnoverId(input.Id); result.Days = new List <DayOfWeek>(); foreach (var inputDay in input.Days) { if (currentDays.Any(x => x.Day.Equals(inputDay))) { result.Days.Add(inputDay); continue; } var day = await sqlRDays.Add(new DayOfRoute { TurnoverId = input.Id, Day = inputDay }); result.Days.Add(day.Day); } foreach (var currentDay in currentDays) { if (!input.Days.Any(x => x.Equals(currentDay.Day))) { await sqlRDays.Delete(currentDay.Id); } } transaction.Complete(); return(result); } }
public async Task <TurnoversWithDaysPaging> GetTurnoversWithDays(int skip, int limit) { var sqlR = new TurnoversRepoisitory(_logger); var turnovers = await sqlR.GetAll(skip, limit, null); var result = new TurnoversWithDaysPaging { Data = new List <TurnoverWithDays>(), Total = turnovers.Data.Count }; var sqlRDays = new DayOfRoutesRepoisitory(_logger); foreach (var turnover in turnovers.Data) { result.Data.Add(new TurnoverWithDays { Name = turnover.Name, DirectionId = turnover.DirectionId, Id = turnover.Id, Days = (await sqlRDays.DaysByTurnoverId(turnover.Id)).Select(x => x.Day).ToList() }); } return(result); }
public async Task <List <PlanedRouteTrainDto> > PlanedRouteTrainsTable(DateTime startTime, DateTime EndTime) { var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(_logger); var sqlRRoutes = new RoutesRepository(_logger); var sqlRTrains = new TrainRepository(_logger); var sqlRUsers = new UserRepository(_logger); var sqlRDayOfROutes = new DayOfRoutesRepoisitory(_logger); var sqlRStations = new StantionsRepository(_logger); var sqlRPlaneStationsOnTrips = new PlanedStationOnTripsRepository(_logger); var sqlRPlaneBrigadeTrains = new PlaneBrigadeTrainsRepository(_logger); var planedRouteTrains = await sqlRPlanedRouteTrains.GetAll(); planedRouteTrains = planedRouteTrains.Where(x => x.Date >= startTime && x.Date < EndTime).ToList(); //var result = new List<PlanedRouteTrainDto>(); var dictionary = new Dictionary <int, PlanedRouteTrainDto>(); //var routeDictionary = planedRouteTrains.ToDictionary(e => e.RouteId); //Собственно надо набить словарик доступными роутами var routes = await sqlRRoutes.GetAll(0, Int32.MaxValue, null); routes.Data = routes.Data.Where(x => x.TurnoverId != null).ToList(); foreach (var route in routes.Data) { var planedRouteTrainDto = new PlanedRouteTrainDto { Route = route, RouteDays = new List <DayOfWeek>(), DaysData = new List <DayData>() }; if (route.TurnoverId != null) { var daysOfRoutes = await sqlRDayOfROutes.DaysByTurnoverId((int)route.TurnoverId); var days = daysOfRoutes.Select(x => x.Day); planedRouteTrainDto.RouteDays.AddRange(days); var proccesDate = startTime; while (proccesDate <= EndTime) { var currentDay = proccesDate.DayOfWeek; if (days.Contains(currentDay)) { planedRouteTrainDto.DaysData.Add(new DayData { Date = proccesDate.Date, DateString = proccesDate.Date.ToString() }); } proccesDate = proccesDate.AddDays(1); } } if (dictionary.ContainsKey(route.Id)) { dictionary[route.Id].DaysData.AddRange(planedRouteTrainDto.DaysData); } else { dictionary.Add(route.Id, planedRouteTrainDto); } } foreach (var planedRouteTrain in planedRouteTrains) { //достаем роут var route = await sqlRRoutes.ById(planedRouteTrain.RouteId); //var currentRouteItems = planedRouteTrains.Where(e => e.RouteId == route.Id); var planedRouteTrainDto = new PlanedRouteTrainDto { Route = route, DaysData = new List <DayData>() }; var toAdd = new DayData { Train = await sqlRTrains.ById(planedRouteTrain.TrainId), PlanedRouteTrainId = planedRouteTrain.Id, Date = planedRouteTrain.Date }; toAdd.DateString = toAdd.Date.ToString("yyyy-MM-ddTHH:mm:ssZ"); var planeBrigadeTrains = await sqlRPlaneBrigadeTrains.ByPlanedRouteTrainId(planedRouteTrain.Id); toAdd.Users = new List <DaysUser>(); foreach (var planeBrigadeTrain in planeBrigadeTrains) { var user = await sqlRUsers.ById(planeBrigadeTrain.UserId); var userToAdd = new DaysUser { UserId = user.Id, Name = user.Name, PlaneBrigadeTrainsId = planeBrigadeTrain.Id }; userToAdd.UserStations = new UserStations(); var planedStationInput = await sqlRPlaneStationsOnTrips.ById(planeBrigadeTrain.StantionStartId); userToAdd.UserStations.InputTime = planedStationInput.OutTime; userToAdd.UserStations.InputName = (await sqlRStations.ById(planedStationInput.StantionId)).Name; var planedStationOutput = await sqlRPlaneStationsOnTrips.ById(planeBrigadeTrain.StantionEndId); userToAdd.UserStations.OutputTime = planedStationOutput.InTime; userToAdd.UserStations.OutputName = (await sqlRStations.ById(planedStationOutput.StantionId)).Name; //userToAdd.UserStations.InputName = (await sqlRStations.ById(planeBrigadeTrain.StantionStartId)).Name; //userToAdd.UserStations.OutputName = (await sqlRStations.ById(planeBrigadeTrain.StantionEndId)).Name; toAdd.Users.Add(userToAdd); } planedRouteTrainDto.DaysData.Add(toAdd); if (dictionary.ContainsKey(route.Id)) { //надо взять текущие деньки роута и проверить что такого еще нет. кстати если его нет надо нахуй послать, а если есть заменить. var currentDays = dictionary[route.Id].DaysData; var day = currentDays.FirstOrDefault(x => x.Date.Date.Equals(planedRouteTrainDto.DaysData.First().Date.Date)); if (day == null) { dictionary[route.Id].DaysData.AddRange(planedRouteTrainDto.DaysData); continue; } //throw new ValidationException("На этот день нельзя добавить поезд"); var index = dictionary[route.Id].DaysData.IndexOf(day); dictionary[route.Id].DaysData[index] = planedRouteTrainDto.DaysData.First(); //dictionary[route.Id].DaysData.AddRange(planedRouteTrainDto.DaysData); } else { dictionary.Add(route.Id, planedRouteTrainDto); } } //var train = await sqlRTrains.ByIdWithStations(planedRouteTrain.TrainId); var result = new List <PlanedRouteTrainDto>(); result.AddRange(dictionary.Values); return(result); }
public async Task <List <TripWithStartEndTimeAndDays> > GetTripsByTurnoverIdAndDays(int turnoverId, int routeId) { var sqlRTripOnRoute = new TripsOnRouteRepository(_logger); var sqlRRoute = new RoutesRepository(_logger); var sqlRDaysOfRoutes = new DayOfRoutesRepoisitory(_logger); var sqlRTrips = new TripsRepository(_logger); var sqlRStationOnTrips = new StantionOnTripsRepository(_logger); var sqlRStation = new StantionsRepository(_logger); var sqlRDayOfTrips = new DayOfTripsRepoisitory(_logger); //Получаем дни циклового графика var daysTurnoverObj = await sqlRDaysOfRoutes.DaysByTurnoverId(turnoverId); var daysTurnover = daysTurnoverObj.Select(x => x.Day).ToList(); daysTurnover.Sort(); //Надо найти трипсы с аналогичными днями. var trips = await sqlRTrips.GetAll(); var result = new List <TripWithStartEndTimeAndDays>(); var route = await sqlRRoute.ById(routeId); foreach (var trip in trips) { if (await sqlRTripOnRoute.ByRouteIdAndTripId(route.Id, trip.Id) != null) { continue; } var currentTripDaysObj = await sqlRDayOfTrips.DaysByTripId(trip.Id); var currentTripDays = currentTripDaysObj.Select(x => x.Day).ToList(); currentTripDays.Sort(); var isGoodTrip = true; foreach (var d in daysTurnover) { if (!currentTripDays.Any(x => x.Equals(d))) { isGoodTrip = false; } } if (!isGoodTrip) { continue; } { string days = null; foreach (var day in currentTripDays) { if (days == null) { days = GetStringDayOfWeekShort(day); } else { days = days + ", " + GetStringDayOfWeekShort(day); } } var tripStations = await sqlRStationOnTrips.ByTripId(trip.Id); tripStations = tripStations.OrderBy(x => x.OutTime).ToList(); var startStation = tripStations.First(); var endStation = tripStations.Last(); var tripExtended = _mapper.Map <Trip, TripWithStartEndTimeAndDays>(trip); tripExtended.Days = currentTripDays; tripExtended.StartTime = startStation.OutTime.ToStringTimeOnly(); tripExtended.EndTime = endStation.InTime.ToStringTimeOnly(); tripExtended.StartStationName = (await sqlRStation.ById(startStation.StantionId)).Name; tripExtended.EndStationName = (await sqlRStation.ById(endStation.StantionId)).Name; result.Add(tripExtended); } } return(result); }