예제 #1
0
        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();
        }
예제 #3
0
        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();
            }
        }