public void OptimizeDeliveries(IJobCancellationToken canellationToken, OptimizeDeliveriesRequest optimizeDeliveriesRequest) { var request = GetRequest(optimizeDeliveriesRequest.RequestID); var customers = GetCustomers(request); var deliveries = GetDeliveries(request); var drivers = GetDrivers(request); var optimizedDeliveryScheduleEntries = new List <DeliveryScheduleEntry>(); var deliverySchedule = new DeliverySchedule() { OptimizationRecurringJobID = optimizeDeliveriesRequest.RequestID, ScheduleDate = optimizeDeliveriesRequest.ScheduleDate }; _uof.DeliverySchedules.Add(deliverySchedule); request.Status = RequestStatus.Processing; _uof.SaveChanges(); var deliveryNo = 0; try { foreach (var c in customers) { canellationToken.ThrowIfCancellationRequested(); var customerDistanceFromWareHouse = GetCustomerDistanceFromWareHouse(c); deliveryNo = 0; foreach (var d in deliveries.Where(d => d.CustomerID == c.ID)) { var idealDriver = GetIdealDriver(drivers, d.TransportType, customerDistanceFromWareHouse); deliveryNo++; if (idealDriver != null) { optimizedDeliveryScheduleEntries.Add(new DeliveryScheduleEntry() { CustomerID = c.ID, DriverName = idealDriver.DriverName, DeliveryScheduleID = deliverySchedule.ID, PackageID = d.ID, TransportType = d.TransportType, EstimatedTime = deliverySchedule.ScheduleDate.AddHours(deliveryNo), ID = deliveryNo }); } } } request.Status = RequestStatus.Scheduled; _uof.DeliveryScheduleEntries.AddRange(optimizedDeliveryScheduleEntries); _uof.SaveChanges(); } catch (OperationCanceledException ex) { request.Status = RequestStatus.Failed; _uof.SaveChanges(); Debug.Print("OperationCanceledException Thrown"); Debug.Print(ex.Message); } }
public void OptimizeDeliveries(OptimizeDeliveriesRequest optimizeDeliveriesRequest) { var request = GetRequest(optimizeDeliveriesRequest.RequestID); var customers = GetCustomers(request); var deliveries = GetDeliveries(request); var drivers = GetDrivers(request); var optimizedDeliveryScheduleEntries = new List <DeliveryScheduleEntry>(); var deliverySchedule = new DeliverySchedule() { OptimizationRecurringJobID = optimizeDeliveriesRequest.RequestID, ScheduleDate = optimizeDeliveriesRequest.ScheduleDate }; _uof.DeliverySchedules.Add(deliverySchedule); request.Status = RequestStatus.Processing; _uof.SaveChanges(); var deliveryNo = 0; foreach (var c in customers) { var customerDistanceFromWareHouse = GetCustomerDistanceFromWareHouse(c); deliveryNo = 0; foreach (var d in deliveries.Where(d => d.CustomerID == c.ID)) { var idealDriver = GetIdealDriver(drivers, d.TransportType, customerDistanceFromWareHouse); deliveryNo++; if (idealDriver != null) { optimizedDeliveryScheduleEntries.Add(new DeliveryScheduleEntry() { CustomerID = c.ID, DriverName = idealDriver.DriverName, DeliveryScheduleID = deliverySchedule.ID, PackageID = d.ID, TransportType = d.TransportType, EstimatedTime = deliverySchedule.ScheduleDate.AddHours(deliveryNo), ID = deliveryNo }); } } } //throw new Exception("Some Job ending error"); request.Status = RequestStatus.Scheduled; _uof.DeliveryScheduleEntries.AddRange(optimizedDeliveryScheduleEntries); _uof.SaveChanges(); }
public void OptimizeDeliveries(IJobCancellationToken canellationToken, OptimizeDeliveriesRequest optimizeDeliveriesRequest) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Optimization Deliveries started for requestId {0}", optimizeDeliveriesRequest.RequestID); Console.ResetColor(); var request = GetRequest(optimizeDeliveriesRequest.RequestID); var deliverySchedule = new DeliverySchedule() { OptimizationRecurringJobID = optimizeDeliveriesRequest.RequestID, ScheduleDate = optimizeDeliveriesRequest.ScheduleDate }; try { var customers = GetCustomers(request); var deliveries = GetDeliveries(request); var drivers = GetDrivers(request); var optimizedDeliveryScheduleEntries = new List <DeliveryScheduleEntry>(); _uof.DeliverySchedules.Add(deliverySchedule); request.Status = RequestStatus.Processing; _uof.SaveChanges(); var deliveryNo = 0; foreach (var c in customers) { canellationToken.ThrowIfCancellationRequested(); var customerDistanceFromWareHouse = GetCustomerDistanceFromWareHouse(c); deliveryNo = 0; foreach (var d in deliveries.Where(d => d.CustomerID == c.ID)) { var idealDriver = GetIdealDriver(drivers, d.TransportType, customerDistanceFromWareHouse); deliveryNo++; if (idealDriver != null) { optimizedDeliveryScheduleEntries.Add(new DeliveryScheduleEntry() { CustomerID = c.ID, DriverName = idealDriver.DriverName, DeliveryScheduleID = deliverySchedule.ID, PackageID = d.ID, TransportType = d.TransportType, EstimatedTime = deliverySchedule.ScheduleDate.AddHours(deliveryNo), ID = deliveryNo }); } } } //throw new Exception("Fake Error"); _uof.DeliveryScheduleEntries.AddRange(optimizedDeliveryScheduleEntries); _uof.SaveChanges(); OptimizeDeliveriesComplete(request.ID); } catch (OperationCanceledException ex) { _uof.DeliverySchedules.Remove(deliverySchedule); request.Status = RequestStatus.Stopped; _uof.SaveChanges(); } catch (Exception ex) { _uof.DeliverySchedules.Remove(deliverySchedule); request.Status = RequestStatus.Failed; _uof.SaveChanges(); } }