public ShipmentProcessor(ILogger logger) { _shipmentBll = new ShipmentBLL(); _addressBll = new AddressBLL(); _droneBll = new DroneBLL(); _logger = logger; }
static void Main(string[] args) { ShipmentBLL shipBll = new ShipmentBLL(); DroneBLL droneBll = new DroneBLL(); ShipmentInfo shipment = new ShipmentInfo(); shipment.DestinationAddress = new AddressInfo(); shipment.DestinationAddress.Address1 = "335 Laird Road"; shipment.DestinationAddress.City = "Guelph"; shipment.DestinationAddress.Country = "Canada"; shipment.DestinationAddress.State = "Ontario"; shipment.DestinationAddress.ZipCode = "N1H 6J3"; shipment.DestinationAddress.Latitude = 43.50501M; shipment.DestinationAddress.Longitude = -80.26827M; shipment.Weight = 1M; shipment.Status = ShipmentStatus.AwaitingShipment; shipment.SourceAddress = new AddressInfo(); shipment.SourceAddress.Address1 = "8725 Yonge St"; shipment.SourceAddress.City = "Richmond Hill"; shipment.SourceAddress.Country = "Canada"; shipment.SourceAddress.State = "Ontario"; shipment.SourceAddress.ZipCode = "L4C 6Z1"; shipment.SourceAddress.Latitude = 43.84292M; shipment.SourceAddress.Longitude = -79.43053M; shipBll.AddShipment(shipment); DroneInfo drone = new DroneInfo(); drone.Latitude = 43.86071M; drone.Longitude = -79.37736M; drone.MaxWeight = 1000M; drone.Name = "DRONE 001"; drone.Status = DroneStatus.Available; droneBll.AddDrone(drone); shipBll.AssignDroneToShipment(drone.Id, shipment.Id); }
public ActivityController() { droneBll = new DroneBLL(); baseBll = new BaseBLL(); }
private void ProcessShipment(int shipmentId, int droneId) { Random r = new Random(); int travelTime; ShipmentBLL shipBLL = new ShipmentBLL(); DroneBLL droneBLL = new DroneBLL(); DroneShipmentActivityLogBLL logBLL = new DroneShipmentActivityLogBLL(); BaseBLL baseBll = new BaseBLL(); AddressBLL addressBll = new AddressBLL(); // Start ShipmentInfo shipment = shipBLL.GetShipment(shipmentId); shipment.Status = ShipmentStatus.InTransit; shipment.DroneId = droneId; shipBLL.UpdateShipment(shipment); DroneShipmentActivityLogInfo log = new DroneShipmentActivityLogInfo(); log.DroneId = droneId; log.ShipmentId = shipmentId; log.Message = "Beginning processing"; logBLL.AddDroneShipmentActivityLog(log); // Go pick up shipment DroneInfo drone = droneBLL.GetDrone(droneId); drone.Status = DroneStatus.PickingUpShipment; droneBLL.UpdateDrone(drone); log.Message = "Travelling to shipment source for pickup"; logBLL.AddDroneShipmentActivityLog(log); travelTime= r.Next(MIN_TRAVEL_TIME_IN_SECONDS, MAX_TRAVEL_TIME_IN_SECONDS); log.Message = string.Format("Estimated time to reach shipment source (in seconds): {0}", travelTime); logBLL.AddDroneShipmentActivityLog(log); TravelTo(droneBLL, drone, shipment.SourceAddress.Longitude, shipment.SourceAddress.Latitude, travelTime); // Deliver shipment log.Message = "Delivering shipment to destination"; logBLL.AddDroneShipmentActivityLog(log); drone.Status = DroneStatus.DeliveringShipment; droneBLL.UpdateDrone(drone); travelTime = r.Next(MIN_TRAVEL_TIME_IN_SECONDS, MAX_TRAVEL_TIME_IN_SECONDS); log.Message = string.Format("Estimated time to reach shipment destination (in seconds): {0}", travelTime); logBLL.AddDroneShipmentActivityLog(log); TravelTo(droneBLL, drone, shipment.DestinationAddress.Longitude, shipment.DestinationAddress.Latitude, travelTime); // Shipment delivered shipment.Status = ShipmentStatus.Shipped; shipBLL.UpdateShipment(shipment); log.Message = "Shipment delivered"; logBLL.AddDroneShipmentActivityLog(log); // Returning home log.Message = "Returning to base"; logBLL.AddDroneShipmentActivityLog(log); drone.Status = DroneStatus.ReturningToBase; droneBLL.UpdateDrone(drone); // Find the nearest base and go there log.Message = "Locating the nearest base"; logBLL.AddDroneShipmentActivityLog(log); var bases = baseBll.GetAll(); BaseInfo nearestBase = null; double shortestDistance = double.MaxValue; foreach (var baseInfo in bases) { var distance = addressBll.GetDistanceKm((double)drone.Latitude, (double)drone.Longitude, (double)baseInfo.Address.Latitude, (double)baseInfo.Address.Longitude); if (distance < shortestDistance) { shortestDistance = distance; nearestBase = baseInfo; } } log.Message = string.Format("Nearest base is: {0}", nearestBase.Name); logBLL.AddDroneShipmentActivityLog(log); travelTime = r.Next(MIN_TRAVEL_TIME_IN_SECONDS, MAX_TRAVEL_TIME_IN_SECONDS); log.Message = string.Format("Estimated time to reach base (in seconds): {0}", travelTime); logBLL.AddDroneShipmentActivityLog(log); TravelTo(droneBLL, drone, nearestBase.Address.Longitude, nearestBase.Address.Latitude, travelTime); // End log.Message = "Now available"; logBLL.AddDroneShipmentActivityLog(log); drone.Status = DroneStatus.Available; droneBLL.UpdateDrone(drone); }
private void TravelTo(DroneBLL droneBLL, DroneInfo drone, decimal destinationLongitude, decimal destinationLatitude, int maxTravelTime) { int currentTravelTime = 0; decimal totalLatitudeDistanceToTravel = drone.Latitude > destinationLatitude ? -(drone.Latitude - destinationLatitude) : destinationLatitude - drone.Latitude; decimal totalLongitudeDistanceToTravel = drone.Longitude > destinationLongitude ? -(drone.Longitude - destinationLongitude) : destinationLongitude - drone.Longitude; decimal latitudeIncrement = totalLatitudeDistanceToTravel / Convert.ToDecimal(maxTravelTime); decimal longitudeIncrement = totalLongitudeDistanceToTravel / Convert.ToDecimal(maxTravelTime); // will update every second while (currentTravelTime < maxTravelTime) { drone.Latitude += latitudeIncrement; drone.Longitude += longitudeIncrement; droneBLL.UpdateDrone(drone); currentTravelTime += 1; Thread.Sleep(1000); } }
public DronesController() { _droneBll = new DroneBLL(); _baseBll = new BaseBLL(); }