コード例 #1
0
        public async Task <PlanedRouteTrain> AddTrainToPlanedRouteTrains(PlanedRouteTrain input)
        {
            using (var transaction = new TransactionScope(asyncFlowOption: TransactionScopeAsyncFlowOption.Enabled))
            {
                var sqlRTrips                    = new TripsRepository(_logger);
                var sqlRStations                 = new StantionOnTripsRepository(_logger);
                var sqlRInspectionOnRoutes       = new InspectionRoutesRepository(_logger);
                var sqlRPlanedInspectionOnRoutes = new PlanedInspectionRoutesRepository(_logger);

                var sqlRPlaneStations     = new PlanedStationOnTripsRepository(_logger);
                var sqlRPlanedRouteTrains = new PlanedRouteTrainsRepository(_logger);

                //Валидация Хуяция.
                //TODO поменять на sql
                var trainPlaneRoutes = await sqlRPlanedRouteTrains.ByTrainId(input.TrainId);

                if (trainPlaneRoutes.Any(x => x.Date.Date.Equals(input.Date.Date)))
                {
                    throw new ValidationException(Error.AlreadyAdd);
                }

                var result = await sqlRPlanedRouteTrains.Add(input);

                var trips = await sqlRTrips.GetTripsByRouteId(input.RouteId);

                //var tripsStationsDictionary = new Dictionary<Trip, List<StantionOnTrip>>();
                foreach (var trip in trips)
                {
                    var stations = await sqlRStations.ByTripId(trip.Id);

                    foreach (var station in stations)
                    {
                        var toAdd = _mapper.Map <StantionOnTrip, PlaneStantionOnTrip>(station);
                        toAdd.PlanedRouteTrainId = result.Id;
                        var newInTime = toAdd.InTime - DateTime.MinValue;
                        toAdd.InTime = input.Date.Date.Add(newInTime);

                        var newOutTime = toAdd.OutTime - DateTime.MinValue;
                        toAdd.OutTime = input.Date.Date.Add(newOutTime);

                        await sqlRPlaneStations.Add(toAdd);
                    }

                    //tripsStationsDictionary.Add(trip, stations);
                }

                //И тут я узнал что надо инспекции скопировать ебать их в рот
                var inspections = await sqlRInspectionOnRoutes.GetByRouteId(input.RouteId);

                foreach (var inspection in inspections)
                {
                    var toAdd = new PlanedInspectionRoute
                    {
                        CheckListType      = inspection.CheckListType,
                        PlanedRouteTrainId = result.Id,
                    };
                    var newInTime = inspection.Start - inspection.Start.Date;
                    toAdd.Start = input.Date.Date.Add(newInTime);
                    var newOutTime = inspection.End - inspection.End.Date;
                    toAdd.End = input.Date.Date.Add(newOutTime);
                    await sqlRPlanedInspectionOnRoutes.Add(toAdd);
                }


                transaction.Complete();
                return(result);
            }
        }
コード例 #2
0
        public async Task <RoutesWithTripsAndToPaging> GetRoutesWithTripsAndToByTurnoverId(int turnoverId, int skip, int limit, int?routeId = null)
        {
            var sqlRRoute            = new RoutesRepository(_logger);
            var sqlRTripsOnRoute     = new TripsOnRouteRepository(_logger);
            var sqlRTrips            = new TripsRepository(_logger);
            var sqlRStationOnTrips   = new StantionOnTripsRepository(_logger);
            var sqlRInspectionRoutes = new InspectionRoutesRepository(_logger);

            var routes = new List <Route>();
            var total  = 0;

            if (routeId == null)
            {
                var paging = await sqlRRoute.GetByTurnoverIdPaging(turnoverId, skip, limit);

                routes.AddRange(paging.Data);
                total = paging.Total;
            }
            else
            {
                routes.Add(await sqlRRoute.ById(routeId.Value));
            }

            var result = new RoutesWithTripsAndToPaging {
                Data = new List <RoutesWithTripsAndTo>(), Total = total
            };


            foreach (var route in routes)
            {
                var data = new RoutesWithTripsAndTo
                {
                    Id               = route.Id,
                    Name             = route.Name,
                    Mileage          = route.Mileage,
                    Description      = route.Description,
                    TurnoverId       = route.TurnoverId,
                    InspectionRoutes = await sqlRInspectionRoutes.GetByRouteId(route.Id)
                };
                var tripsOnRoute = await sqlRTripsOnRoute.ByRouteId(route.Id);

                var trips = new List <TripWithTripOnRouteId>();
                foreach (var tripOnRoute in tripsOnRoute)
                {
                    var trip = await sqlRTrips.ById(tripOnRoute.TripId);

                    var toAdd = _mapper.Map <Trip, TripWithTripOnRouteId>(trip);
                    toAdd.TripOnRouteId = tripOnRoute.Id;
                    trips.Add(toAdd);
                }

                data.Trips = trips;


                foreach (var trip in data.Trips)
                {
                    trip.StantionOnTrips = new List <StantionOnTrip>();
                    var stationsOnTrip = await sqlRStationOnTrips.ByTripId(trip.Id);

                    foreach (var stationOnTrip in stationsOnTrip)
                    {
                        trip.StantionOnTrips.Add(stationOnTrip);
                    }
                }

                result.Data.Add(data);
            }

            return(result);
        }