Esempio n. 1
0
        public async Task Execute(IJobExecutionContext context)
        {
            try
            {
                using (FleetManagementDbContext dbContext = new FleetManagementDbContext())
                {
                    var vehicles = await dbContext.Vehicles.ToListAsync();

                    foreach (var vehicle in vehicles)
                    {
                        var telematicsData =
                            await dbContext.TelematicsDatas.FirstOrDefaultAsync(t => t.VIN == vehicle.VIN);

                        TelematicsData newTelematicsData = new TelematicsData
                        {
                            VIN          = vehicle.VIN,
                            Mileage      = TelematicsDataGenerator.GenerateNextMileageValue(telematicsData?.Mileage),
                            FuelLevel    = TelematicsDataGenerator.GenerateNextFuelLevelValue(telematicsData?.FuelLevel),
                            CurrentSpeed =
                                TelematicsDataGenerator.GenerateNextCurrentSpeedValue(telematicsData?.CurrentSpeed),
                            WorkingTime = telematicsData?.WorkingTime != null
                                ? telematicsData.WorkingTime += TimeSpan.FromMinutes(1)
                                : new TimeSpan(0, 0, 1, 0),
                        };

                        newTelematicsData.Idling = newTelematicsData.Idling.HasValue
                            ? telematicsData?.CurrentSpeed == 0
                                ? telematicsData.Idling += TimeSpan.FromMinutes(3)
                                : new TimeSpan(0, 0, 0, 0)
                            : new TimeSpan(0, 0, 3, 0);

                        if (telematicsData == null)
                        {
                            dbContext.TelematicsDatas.Add(newTelematicsData);
                        }
                        else
                        {
                            telematicsData.Mileage      = newTelematicsData.Mileage;
                            telematicsData.FuelLevel    = newTelematicsData.FuelLevel;
                            telematicsData.CurrentSpeed = newTelematicsData.CurrentSpeed;
                            telematicsData.WorkingTime  = newTelematicsData.WorkingTime;
                            telematicsData.Idling       = newTelematicsData.Idling;
                        }

                        await SeedTelematicsHistory.UpdateTelematicsHistory(newTelematicsData, dbContext);
                    }

                    await dbContext.SaveChangesAsync();
                }
            }
            catch (Exception exception)
            {
                throw exception;
            }
        }
        public static async Task UpdateTelematicsHistory(TelematicsData telematicsData, FleetManagementDbContext dbContext)
        {
            var newTelematicsDataHistory = new Data.Models.TelematicsDataHistory()
            {
                VIN          = telematicsData.VIN,
                Mileage      = telematicsData.Mileage,
                FuelLevel    = telematicsData.FuelLevel,
                CurrentSpeed = telematicsData.CurrentSpeed,
                WorkingTime  = telematicsData.WorkingTime,
                Idling       = telematicsData.Idling,
                Modified     = DateTimeOffset.Now.LocalDateTime,
            };

            dbContext.TelematicsDataHistories.Add(newTelematicsDataHistory);
        }