This commit is contained in:
Андрей Дувакин 2024-10-05 21:32:59 +05:00
parent 3e6e6c60f7
commit 66eefde31b
3 changed files with 30 additions and 8 deletions

View File

@ -5,7 +5,7 @@ from math import ceil
import requests
from sqlalchemy.orm import Session
from app.infrastructure.database.dependencies import get_db
from app.infrastructure.database.database import connect
from app.infrastructure.database.models.delivery_accessories import DeliveryAccessory
from app.infrastructure.database.models.delivery_orders import DeliveryOrder
from app.infrastructure.database.models.total_orders import TotalOrder
@ -36,11 +36,12 @@ class NewTotalOrderService:
grouped_by_period = self.group_accessories_by_period(accessories)
routes_by_period = self.find_routes_by_period(grouped_by_period, distances, cities)
with get_db() as session:
with connect() as session:
new_total_order = TotalOrder(
order_datetime=datetime.now(),
count_robots=2000,
deadline=datetime.now(),
price=0,
)
session.add(new_total_order)
session.flush()
@ -55,22 +56,36 @@ class NewTotalOrderService:
delivery_order_deadline = new_total_order.deadline - timedelta(days=period)
new_total_order.price += cost
new_delivery_order = DeliveryOrder(
order_datetime=datetime.now(),
count_trucks=vehicle_count,
deadline=delivery_order_deadline,
price=cost,
truck_id=selected_truck,
total_order_id=new_delivery_order.id,
total_order_id=new_total_order.id,
)
session.add(new_total_order)
session.add(new_delivery_order)
for point_index in range(len(route)):
if route[point_index].name == 'Челябинск':
continue
accessory = list(
filter(
lambda x: x.city_id == route[point_index].id and x.period == period,
accessories
)
)[0]
new_delivery_accessory = DeliveryAccessory(
queue=point_index + 1,
count=accessory.count,
accessory_id=accessory.id
)
session.add(new_delivery_accessory)
response += f"Период: {period}\n"
response += f"Маршрут: {' -> '.join([city.name for city in route])}\n"
@ -80,7 +95,9 @@ class NewTotalOrderService:
response += f"Количество автомобилей: {vehicle_count}"
response += f"Стоимость перевозки: {cost}\n"
return response
session.commit()
return response
def find_routes_by_period(self, grouped_by_period, distances, cities):
purpose_city_id = self.city_repository.get_by_name('Челябинск').id

View File

@ -2,7 +2,7 @@ import os
from dotenv import load_dotenv
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import sessionmaker, Session
from app.infrastructure.database.models import Base
@ -13,6 +13,11 @@ engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
def connect() -> Session:
global SessionLocal
return SessionLocal()
def init_db():
import app.infrastructure.database.models.roles
import app.infrastructure.database.models.users

View File

@ -57,7 +57,7 @@ def delete_total_order(total_order_id: int, db: Session = Depends(get_db),
return success
@router.post("/total-orders/calculate", response_model=TotalOrderEntity)
@router.post("/total-orders/calculate")
def calculate_total_order(db: Session = Depends(get_db)):
service = NewTotalOrderService(db)
result = service.total_calculate()