Пример #1
0
        public void AddPackagesToPackingList(List <Package> packages, List <Vehicle> vehicles)
        {
            foreach (var package in packages)
            {
                double minDistance = double.MaxValue;

                Vehicle courierVehicle = null;

                foreach (var vehicle in vehicles)
                {
                    var distance = _geoMapService.CalculateDistanceBetweenTwoPoints(package.Sender.Address.Latitude, package.Sender.Address.Longitude, vehicle.Driver.Address.Latitude, vehicle.Driver.Address.Longitude);

                    if (distance < minDistance && distance < _packageDeliveryConfigValues.MaxDistanceToPickupPackage)
                    {
                        minDistance    = distance;
                        courierVehicle = vehicle;
                    }
                }

                var maxDistancePossibleToCover = courierVehicle.AverageVelocity * _packageDeliveryConfigValues.WorkingHours;

                courierVehicle.CurrentLoad = _vehicleService.GetVehicleCurrentLoad(courierVehicle);

                courierVehicle.CourierPackingList.Add(package);
                List <GeoCoords> addressesToVisit = _shippingPlannerService.GetCourierRouteCoords(courierVehicle);
                courierVehicle.CourierPackingList.Remove(package);

                courierVehicle.DistanceToCover = _shippingPlannerService.CalculateRouteDistance(addressesToVisit);

                if (courierVehicle.LoadCapacity >= courierVehicle.CurrentLoad + (int)package.Weight && courierVehicle.DistanceToCover <= maxDistancePossibleToCover && courierVehicle != null)
                {
                    _packageService.AddPackageToVehiclePackingList(package, courierVehicle);

                    package.State = Package.PackageState.AddedToPackingList;
                    _packageService.UpdatePackage(package);
                }
                else
                {
                    package.Priority = Package.PackagePriority.High;
                    _packageService.UpdatePackage(package);
                }
            }
        }