._.
This commit is contained in:
parent
c53fdbb063
commit
3f5b2528bf
@ -54,7 +54,16 @@ class NewTotalOrderService:
|
||||
for route in routes:
|
||||
vehicle_count, selected_truck = self.calculate_vehicle_requirements(
|
||||
[a for a in accessories if a.period == period], trucks)
|
||||
cost = self.calculate_route_cost(route, accessories, distances)
|
||||
route_length = self.calculate_route_length(route, distances)
|
||||
|
||||
selected_truck_capacity = list(
|
||||
filter(
|
||||
lambda truck: truck.id == selected_truck,
|
||||
trucks
|
||||
)
|
||||
)[0].capacity
|
||||
|
||||
cost = route_length * 8 * selected_truck_capacity / 1000
|
||||
|
||||
delivery_order_deadline = new_total_order.deadline - timedelta(days=period)
|
||||
|
||||
@ -64,7 +73,7 @@ class NewTotalOrderService:
|
||||
order_datetime=datetime.now(),
|
||||
count_trucks=vehicle_count,
|
||||
deadline=delivery_order_deadline,
|
||||
price=cost,
|
||||
price=cost * vehicle_count,
|
||||
truck_id=selected_truck,
|
||||
total_order_id=new_total_order.id,
|
||||
)
|
||||
@ -112,7 +121,7 @@ class NewTotalOrderService:
|
||||
sum(accessory.weight for accessory in accessories if accessory.city_id == city.id)
|
||||
for city in route
|
||||
)
|
||||
cost = self.calculate_route_cost(route, accessories, distances)
|
||||
cost = self.calculate_route_length(route, distances)
|
||||
routes_with_details.append((route, (distance, total_weight, cost)))
|
||||
|
||||
sorted_routes = sorted(routes_with_details, key=lambda x: (x[1][2], x[1][0]))
|
||||
@ -162,22 +171,17 @@ class NewTotalOrderService:
|
||||
total_distance += distances[route[i].id - 1][route[i + 1].id - 1]
|
||||
return total_distance
|
||||
|
||||
def calculate_route_cost(self, route, accessories, distances):
|
||||
purpose_city_id = self.city_repository.get_by_name('Челябинск').id
|
||||
|
||||
total_weight = 0.0
|
||||
total_cost = 0.0
|
||||
@staticmethod
|
||||
def calculate_route_length(route, distances):
|
||||
total_length = 0.0
|
||||
|
||||
for i in range(len(route) - 1):
|
||||
if route[i].id != purpose_city_id:
|
||||
city_accessories = [accessory for accessory in accessories if accessory.city_id == route[i].id]
|
||||
total_weight += sum(accessory.weight for accessory in city_accessories) * self.robotsCount / 100
|
||||
total_cost += distances[route[i].id - 1][route[i + 1].id - 1] * (total_weight / 1000.0) * 8
|
||||
total_length += distances[route[i].id - 1][route[i + 1].id - 1]
|
||||
|
||||
return total_cost
|
||||
return total_length
|
||||
|
||||
def calculate_vehicle_requirements(self, accessories, trucks):
|
||||
total_weight = sum(accessory.weight for accessory in accessories) * self.robotsCount / 100
|
||||
total_weight = sum(accessory.weight / 100 for accessory in accessories) * self.robotsCount
|
||||
total_vehicles = float('inf')
|
||||
selected_truck = 0
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user