private async Task <List <TimeLine> > TimelineFromTrips(List <TripWithTripOnRouteId> trips) { var sqlRStations = new StantionsRepository(_logger); var result = new List <TimeLine>(); if (trips.Count == 0) { return(result); } foreach (var trip in trips) { var toAdd = new TimeLine(); if (trip.TripOnRouteId != 0) { toAdd.TripOnRouteId = trip.TripOnRouteId; } var stationsOnTrips = trip.StantionOnTrips.ToList(); stationsOnTrips = stationsOnTrips.OrderBy(e => e.UpdateDate).ToList(); if (stationsOnTrips.Count > 1) { var startStationOnTrip = stationsOnTrips.First(); var endStationOnTrip = stationsOnTrips.Last(); var startStation = await sqlRStations.ById(startStationOnTrip.StantionId); var endStation = await sqlRStations.ById(endStationOnTrip.StantionId); toAdd.AdditionalTimeLineData = new AdditionalTimeLineData { TripStartStationName = startStation.Name, TripStartStationShortName = startStation.ShortName, TripEndStationName = endStation.Name, TripEndStationShortName = startStation.ShortName }; toAdd.StarTime = startStationOnTrip.OutTime; //.ToString("yyyy-MM-ddTHH:mm:ssZ"); toAdd.EndTime = endStationOnTrip.InTime; //.ToString("yyyy-MM-ddTHH:mm:ssZ"); } else { continue; } toAdd.Color = trip.TripType == TripType.Transfer ? ScheduleColors.ColorTransfer : ScheduleColors.ColorTrip; toAdd.EnumType = trip.TripType == TripType.Transfer ? TimelineTypeEnum.TimeRangeTripTransfer : TimelineTypeEnum.TimeRangeTrip; toAdd.Id = trip.Id; toAdd.Description = trip.Name; result.Add(toAdd); } return(result); }
public async Task <TripOnRouteWithStationsDto> TripWithStationsByRouteIdAndTripId(int routeId, int tripId) { var sqlRTripsOnRoute = new TripsOnRouteRepository(_logger); var sqlRTrips = new TripsRepository(_logger); var sqlRStationOnTrip = new StantionOnTripsRepository(_logger); var sqlRStation = new StantionsRepository(_logger); var result = new TripOnRouteWithStationsDto(); var tripOnRoute = await sqlRTripsOnRoute.ByRouteIdAndTripId(routeId, tripId); if (tripOnRoute == null) { throw new ValidationException("Элемент не найден"); } result.Id = tripOnRoute.Id; result.RouteId = tripOnRoute.Id; result.TripId = tripId; //result.TripWithDateTimeStations = new TripWithDateTimeStations(); result.TripWithDateTimeStations = _mapper.Map <Trip, TripWithDateTimeStations>(await sqlRTrips.ById(tripId)); var stations = await sqlRStationOnTrip.ByTripId(tripId); result.TripWithDateTimeStations.StantionOnTripsWithStringTime = new List <StationOnTripWithStringDateTime>(); foreach (var stantion in stations) { var toAdd = _mapper.Map <StantionOnTrip, StationOnTripWithStringDateTime>(stantion); toAdd.InTimeString = stantion.InTime.ToString("yyyy-MM-ddTHH:mm:ssZ"); toAdd.OutTimeString = stantion.OutTime.ToString("yyyy-MM-ddTHH:mm:ssZ"); toAdd.Stantion = await sqlRStation.ById(toAdd.StantionId); result.TripWithDateTimeStations.StantionOnTripsWithStringTime.Add(toAdd); } return(result); }
/// <summary> /// Справочник Парковок /// </summary> private static async Task <ReportResponse> GetParkingsTable(ReportRequest input, ILogger logger) { var sqlR = new ParkingRepository(logger); var sqlRStation = new StantionsRepository(logger); var result = new ReportResponse { Rows = new List <Row>() }; var data = await sqlR.GetAll(); result.Columns = new List <Column> { new Column("col0", "Название", "string", disableEdit: false), new Column("col1", "Описание", "string", disableEdit: false), new Column("col2", "Станция", "string", disableEdit: false), }; foreach (var item in data) { var station = await sqlRStation.ById(item.StantionId); var stations = await sqlRStation.GetAll(); stations = stations.Where(x => x.Id != item.StantionId).ToList(); var avaibleStations = new List <StantionSimple>(); foreach (var x in stations) { avaibleStations.Add(new StantionSimple { StantionName = x.Name, StantionId = x.Id }); } var row = new Row { Id = new RowId(item.Id, 1), HasItems = false.ToString(), ParentId = null, //Имя Col0 = item.Name, //Описание Col1 = item.Description, //Станция Col2 = station.Name, AdditionalProperty = new AdditionalProperty { AvaibleStations = avaibleStations, StationId = item.StantionId } }; result.Rows.Add(row); } return(result); }
/// <summary> /// Данные по станкам /// </summary> private static async Task GetPlaneStationsData(RouteData result, List <PlaneStantionOnTrip> planeStations, int tripId, ILogger logger) { var sqlRStations = new StantionsRepository(logger); var sqlRTrips = new TripsRepository(logger); var sqlRTrains = new TrainRepository(logger); var sqlRChangedStantion = new ChangePlaneStantionOnTripsRepository(logger); var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(logger); var planedTripWithStation = new PlanedTripWithStations { TripName = (await sqlRTrips.ById(tripId)).Name, PlaneStations = new List <PlanedStation>() }; var currentTripPlaneStations = planeStations.Where(x => x.TripId == tripId); foreach (var currentTripPlaneStation in currentTripPlaneStations) { var changedStationData = await sqlRChangedStantion.ByPlaneStantionOnTripId(currentTripPlaneStation.Id); var toAdd = new PlanedStation { PlanedStationId = currentTripPlaneStation.Id, StationName = (await sqlRStations.ById(currentTripPlaneStation.StantionId)).Name, InTime = currentTripPlaneStation.InTime, OutTime = currentTripPlaneStation.OutTime, ChangeStationsId = changedStationData?.Id, ChangedInTime = changedStationData?.InTime, ChangedOutTime = changedStationData?.OutTime, ChangeDroped = changedStationData?.Droped, ChangeTrainId = changedStationData?.TrainId }; //TODO надо уточнить стоит ли так делать. Возвращать нулл если поезд нихуя непоменялся var planedRouteTrain = await sqlRPlanedRouteTrains.ById(currentTripPlaneStation.PlanedRouteTrainId); if (planedRouteTrain.TrainId == toAdd.ChangeTrainId) { toAdd.ChangeTrainId = null; } if (toAdd.ChangeTrainId != null) { toAdd.ChangeTranName = (await sqlRTrains.ById(toAdd.ChangeTrainId)).Name; } planedTripWithStation.PlaneStations.Add(toAdd); } result.PlaneRoute.TripsWithStations.Add(planedTripWithStation); }
/// <summary> /// Данные по ебучим юзерам меж станками /// </summary> private static async Task GetPlanedBrigadesData(int planedRouteTrainId, RouteData result, ILogger logger) { var sqlRPlanedStations = new PlanedStationOnTripsRepository(logger); var sqlRUsers = new UserRepository(logger); var sqlRStations = new StantionsRepository(logger); var sqlRPlaneBrigadeTrains = new PlaneBrigadeTrainsRepository(logger); var sqlRChangedBrigadeTrains = new ChangePlaneBrigadeTrainsRepository(logger); result.PlaneRoute.UserOnStations = new List <PlanedUserOnStations>(); var planeBrigades = await sqlRPlaneBrigadeTrains.ByPlanedRouteTrainId(planedRouteTrainId); foreach (var planeBrigade in planeBrigades) { var stationStartId = (await sqlRPlanedStations.ById(planeBrigade.StantionStartId)).StantionId; var stationEndId = (await sqlRPlanedStations.ById(planeBrigade.StantionEndId)).StantionId; var changedBrigadeData = await sqlRChangedBrigadeTrains.ByPlaneBrigadeTrainId(planeBrigade.Id); var toAdd = new PlanedUserOnStations { PlaneBrigadeTrainId = planeBrigade.Id, UserName = (await sqlRUsers.ById(planeBrigade.UserId)).Name, StationStartName = (await sqlRStations.ById(stationStartId)).Name, StationEndName = (await sqlRStations.ById(stationEndId)).Name, ChangeBrigadeTrainId = changedBrigadeData?.Id }; if (changedBrigadeData != null) { toAdd.ChangedUserName = (await sqlRUsers.ById(planeBrigade.UserId)).Name; toAdd.ChangedStationStartName = (await sqlRStations.ById(changedBrigadeData.StantionEndId)).Name; toAdd.ChangedStationEndName = (await sqlRStations.ById(changedBrigadeData.StantionStartId)).Name; } result.PlaneRoute.UserOnStations.Add(toAdd); } }
/// <summary> /// Бригады таблица /// </summary> private static async Task <ChangeTimeRangeBrigadeDto> GetBrigadeData(GetRouteInformationTableRequest input, ILogger logger) { var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(logger); var sqlRTrips = new TripsRepository(logger); var sqlRPlanedStations = new PlanedStationOnTripsRepository(logger); var sqlRUsers = new UserRepository(logger); var sqlRStations = new StantionsRepository(logger); var sqlRPlaneBrigadeTrains = new PlaneBrigadeTrainsRepository(logger); var sqlRChangedBrigadeTrains = new ChangePlaneBrigadeTrainsRepository(logger); //var result = new ReportResponse { Rows = new List<Row>() }; var stationsSimple = new List <StantionSimple>(); //Берем всех юзерков var users = await sqlRUsers.GetAll(); //Получим все станки с маршрута var planeStations = await sqlRPlanedStations.ByPlannedRouteTrainId(input.PlanedRouteTrainId); planeStations.OrderBy(x => x.InTime); var currentTripId = 0; for (var index = 0; index < planeStations.Count; index++) { var planeStation = planeStations[index]; var trip = await sqlRTrips.ById(planeStation.TripId); var station = await sqlRStations.ById(planeStation.StantionId); var qqStart = planeStation.InTime.ToStringTimeOnly(); var qqEnd = planeStation.OutTime.ToStringTimeOnly(); if (currentTripId == 0 || planeStation.TripId != currentTripId) { qqStart = "н/д"; } if (index != planeStations.Count - 1) { if (planeStations[index + 1].TripId != planeStation.TripId && currentTripId != 0) { qqEnd = "н/д"; } } else { qqEnd = "н/д"; } var qq1 = $"{station.Name} {qqStart}-{qqEnd} ({trip.Name})"; stationsSimple.Add(new StantionSimple { StantionId = planeStation.Id, StantionName = qq1, TripName = trip.Name, InTime = planeStation.InTime }); currentTripId = planeStation.TripId; } var planeBrigades = await sqlRPlaneBrigadeTrains.ByPlanedRouteTrainId(input.PlanedRouteTrainId); planeBrigades = planeBrigades.Where(x => x.StantionStartId == input.EntityId).ToList(); var result = new ChangeTimeRangeBrigadeDto { Users = new List <ChangeTimeRangeUserDto>(), DataSource = new DataSource { Stantions = stationsSimple .OrderBy(x => x.TripName).ThenBy(y => y.InTime) .Select(x => new DataSourceDto { Value = x.StantionId, Text = x.StantionName }) .ToList(), Users = users .OrderBy(x => x.Name) .Select(x => new DataSourceDto { Value = x.Id, Text = x.Name }) .ToList() } }; foreach (var planeBrigade in planeBrigades) { var changeBrigade = await sqlRChangedBrigadeTrains.ByPlaneBrigadeTrainId(planeBrigade.Id) ?? new ChangePlaneBrigadeTrain { StantionEndId = 0, StantionStartId = 0, Droped = false, UserId = 0 }; var planeStartStation = await sqlRPlanedStations.ById(planeBrigade.StantionStartId); var planeEndStation = await sqlRPlanedStations.ById(planeBrigade.StantionEndId); var realStartStation = await sqlRStations.ById(planeStartStation.StantionId); var realEndStation = await sqlRStations.ById(planeEndStation.StantionId); var planedUser = await sqlRUsers.ById(planeBrigade.UserId); var toAdd = new ChangeTimeRangeUserDto { StartId = planeStartStation.Id, EndId = planeEndStation.Id, UserId = planedUser.Id, User = planedUser.Name, Start = realStartStation.Name, End = realEndStation.Name, PlaneBrigadeTrainId = planeBrigade.Id, Canseled = changeBrigade.Droped }; if (changeBrigade.UserId != 0) { toAdd.UserId = changeBrigade.UserId; } if (changeBrigade.StantionEndId != 0) { toAdd.EndId = changeBrigade.StantionEndId; } if (changeBrigade.StantionStartId != 0) { toAdd.StartId = changeBrigade.StantionStartId; } result.Users.Add(toAdd); } return(result); }
/// <summary> /// Рейсы со станками таблица /// </summary> private static async Task <RouteInformationTableTrip> GetTripData(GetRouteInformationTableRequest input, ILogger logger) { var sqlRStations = new StantionsRepository(logger); var sqlRTrips = new TripsRepository(logger); var sqlRTrains = new TrainRepository(logger); var sqlRChangedStation = new ChangePlaneStantionOnTripsRepository(logger); var sqlRPlannedRouteTrains = new PlanedRouteTrainsRepository(logger); var sqlRPlannedStations = new PlanedStationOnTripsRepository(logger); var result = new RouteInformationTableTrip { Stantions = new List <RouteInformationTableStantion>(), DataSource = new DataSource() }; var plannedRouteTrain = await sqlRPlannedRouteTrains.ById(input.PlanedRouteTrainId); var plannedStations = await sqlRPlannedStations.ByPlannedRouteTrainId(input.PlanedRouteTrainId); var tripId = plannedStations.Where(x => x.TripId == input.EntityId).Select(x => x.TripId).ToList(); if (!tripId.Any()) { return(result); } var trip = await sqlRTrips.ById(tripId.First()); result.Trip = trip.Name; var currentTripPlaneStations = plannedStations.Where(x => x.TripId == trip.Id); foreach (var currentTripPlaneStation in currentTripPlaneStations) { var planTrain = await sqlRTrains.ById(plannedRouteTrain.TrainId); var changedStationData = await sqlRChangedStation.ByPlaneStantionOnTripId(currentTripPlaneStation.Id); //String changedTrainName; //if (changedStationData?.TrainId != null) // changedTrainName = (await sqlRTrains.ById(changedStationData.TrainId)).Name; var toAdd = new RouteInformationTableStantion { Id = currentTripPlaneStation.Id, Name = (await sqlRStations.ById(currentTripPlaneStation.StantionId)).Name, Train = planTrain.Name, StartPlan = currentTripPlaneStation.InTime.ToStringTimeOnly(), EndPlan = currentTripPlaneStation.OutTime.ToStringTimeOnly(), TrainId = planTrain.Id, StartFact = currentTripPlaneStation.InTime.ToFuckingGenaFormat(plannedRouteTrain.Date.Date), EndFact = currentTripPlaneStation.OutTime.ToFuckingGenaFormat(plannedRouteTrain.Date.Date), Canceled = false, PlaneStationOnTripId = currentTripPlaneStation.Id }; if (changedStationData != null) { toAdd.StartFact = changedStationData.InTime.ToFuckingGenaFormat(plannedRouteTrain.Date.Date); toAdd.EndFact = changedStationData.OutTime.ToFuckingGenaFormat(plannedRouteTrain.Date.Date); toAdd.Canceled = changedStationData.Droped; if (changedStationData.TrainId != null) { toAdd.TrainId = (int)changedStationData.TrainId; } } result.Stantions.Add(toAdd); } var availableTrains = await GetAvaibleTrains(plannedRouteTrain.TrainId, logger); result.DataSource.Trains = availableTrains.Select(x => new DataSourceDto { Value = x.TrainId, Text = x.TrainName }).ToList(); return(result); }
private async Task <List <StantionQq> > GetStationsFromPlanedRouteByIdAndDay(int planedRouteTrainId, DateTime day, int userId, int?inputStationId = 0) { var result = new List <Stantion>(); var sqlRStations = new StantionsRepository(_logger); var sqlRPlanedStOnTrips = new PlanedStationOnTripsRepository(_logger); var sqlRTrip = new TripsRepository(_logger); if (userId == 0) { throw new ValidationException(Error.NotFilledOptionalField); } PlaneStantionOnTrip inputSt = null; if (inputStationId != 0) { inputSt = await sqlRPlanedStOnTrips.ById(inputStationId.Value); } var currentDayPlaneBrigadeTrain = await sqlRPlanedStOnTrips.ByUserIdAndTimeRange(userId, day.Date.AddHours(3), day.Date.AddDays(1).AddMilliseconds(-1)); //busyPlanedSt = busyPlanedSt.Where(x => x.PlanedRouteTrainId != planedRouteTrainId).ToList(); //var curPlanedRoute = await sqlPlanedBr.ByPlannedRouteTrainId(planedRouteTrainId); var currentPlanedRSt = await sqlRPlanedStOnTrips.ByPlannedRouteTrainId(planedRouteTrainId); currentPlanedRSt = currentPlanedRSt.OrderBy(x => x.OutTime).ToList(); //var curPlanedRouteBr = await sqlPlanedBr.ByPlannedRouteTrainId(planedRouteTrainId); var usedPlaneSt = new List <PlaneStantionOnTrip>(); if (currentPlanedRSt.Any()) { foreach (var item in currentDayPlaneBrigadeTrain) { //все станки маршрута, на который назначена данная запись var planSts = (await sqlRPlanedStOnTrips.ByPlannedRouteTrainId(item.PlanedRouteTrainId)) .OrderBy(x => x.OutTime).ToList(); var start = planSts.IndexOf(planSts.First(x => x.Id == item.StantionStartId)) + 1; var end = planSts.IndexOf(planSts.First(x => x.Id == item.StantionEndId)) + 1; usedPlaneSt.AddRange(planSts.GetRange(start, end - start)); } } usedPlaneSt = usedPlaneSt.DistinctBy(x => x.Id).ToList(); DateTime?minUsedTime = null; DateTime?maxUsedTime = null; if (usedPlaneSt.Count > 1) { minUsedTime = usedPlaneSt.First().OutTime; maxUsedTime = usedPlaneSt.Last().InTime; } if (usedPlaneSt.Count == 1) { minUsedTime = usedPlaneSt.First().OutTime; maxUsedTime = usedPlaneSt.First().InTime; } if (minUsedTime != null && maxUsedTime != null) { if (inputSt != null) { if (inputSt.OutTime <= minUsedTime) { maxUsedTime = ((DateTime)maxUsedTime).AddDays(1); } if (inputSt.OutTime >= maxUsedTime) { minUsedTime = ((DateTime)minUsedTime).AddDays(-1); } } } var res1 = new List <StantionQq>(); var currentTripId = 0; for (var index = 0; index < currentPlanedRSt.Count; index++) { var item = currentPlanedRSt[index]; var trip = await sqlRTrip.ById(item.TripId); if (minUsedTime != null && maxUsedTime != null) { if (item.InTime >= minUsedTime && item.InTime <= maxUsedTime) { continue; } if (item.OutTime >= minUsedTime && item.OutTime <= maxUsedTime) { continue; } } //foreach (var x in usedPlaneSt) //{ // if (item.InTime >= x.InTime && item.InTime <= x.OutTime) // isUsed = true; // if (item.OutTime >= x.InTime && item.OutTime <= x.OutTime) // isUsed = true; //} //if (isUsed) // continue; var station = await sqlRStations.ById(item.StantionId); station.Id = item.Id; //station.Name += $" ({item.InTime.ToStringTimeOnly()})"; var sqq = _mapper.Map <Stantion, StantionQq>(station); sqq.InTime = item.InTime; sqq.TripName = trip.Name; var qqStart = item.InTime.ToStringTimeOnly(); var qqEnd = item.OutTime.ToStringTimeOnly(); if (currentTripId == 0 || item.TripId != currentTripId) { qqStart = "н/д"; } if (index != currentPlanedRSt.Count - 1) { if (currentPlanedRSt[index + 1].TripId != item.TripId && currentTripId != 0) { qqEnd = "н/д"; } } else { qqEnd = "н/д"; } var qq1 = $"{station.Name} {qqStart}-{qqEnd} ({trip.Name})"; sqq.Name += $" ({qq1})"; res1.Add(sqq); currentTripId = item.TripId; //result.Add(station); } return(res1); }
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<DictionaryCrudResponse> ParkingCrud(DictionaryCrudRequest input) * { * var data = input.Parking; * if (data == null && input.IdToDelete == null) * throw new ValidationException("Не распарсилось"); * * var sqlR = new ParkingRepository(_logger); * if (input?.IdToDelete != null) * { * await sqlR.Delete((int)input.IdToDelete); * return new DictionaryCrudResponse { IsDeleted = true, Parking = data }; * } * * var all = await sqlR.GetAll(); * if (data?.Id == 0 && * all.Any(x => x.Name.Equals(input.Parking.Name))) * throw new ValidationException(Error.AlreadyAddWithThisName); * * if (data?.Id == 0) * { * var item = await sqlR.Add(data); * return new DictionaryCrudResponse { IsAdd = true, Parking = item }; * } * else * { * var item = await sqlR.Update(data); * return new DictionaryCrudResponse { IsUpdated = true, Parking = item }; * } * }*/ /// <summary> /// Справочник рейсов с днями /// </summary> private static async Task <ReportResponse> GetTripsWithDaysTable(ReportRequest input, ILogger logger) { var sqlR = new TripsRepository(logger); var sqlRTripDays = new DayOfTripsRepoisitory(logger); var sqlRStationOnTrips = new StantionOnTripsRepository(logger); var sqlRStations = new StantionsRepository(logger); var result = new ReportResponse { Rows = new List <Row>() }; var data = await sqlR.GetAll(); result.Columns = new List <Column> { new Column("col0", "Имя", "string", disableEdit: false), new Column("col1", "Дни", "string"), new Column("col2", "Время отправления", "string"), new Column("col3", "Время прибытия", "string") }; foreach (var item in data) { var stantionOnTrips = await sqlRStationOnTrips.ByTripId(item.Id); DateTime?startTime = null; DateTime?endTime = null; var days = (await sqlRTripDays.DaysByTripId(item.Id)).Select(x => x.Day).ToList(); string stringDays = null; if (days.Any()) { foreach (var day in days) { if (stringDays == null) { stringDays = GetStringDayOfWeekShort(day); } else { stringDays = stringDays + ", " + GetStringDayOfWeekShort(day); } } } if (stantionOnTrips.Count >= 2) { stantionOnTrips = stantionOnTrips.OrderBy(x => x.OutTime).ToList(); startTime = stantionOnTrips.First().OutTime; endTime = stantionOnTrips.Last().InTime; } var row = new Row { Id = new RowId(item.Id, 1), HasItems = false.ToString(), ParentId = null, //Имя Col0 = item.Name, //Дни Col1 = stringDays, //"Время отправления Col2 = startTime?.ToStringTimeOnly(), //Время прибытия Col3 = endTime?.ToStringTimeOnly(), AdditionalProperty = new AdditionalProperty { StantionsWithTime = new List <StantionWithTimeSimple>() } }; foreach (var stantionOnTrip in stantionOnTrips) { var stationName = (await sqlRStations.ById(stantionOnTrip.StantionId))?.Name; row.AdditionalProperty.StantionsWithTime.Add( new StantionWithTimeSimple { StantionId = stantionOnTrip.StantionId, StantionName = stationName, InTime = stantionOnTrip.InTime, OutTime = stantionOnTrip.OutTime }); } result.Rows.Add(row); } 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); }