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 import requests
from sqlalchemy.orm import Session 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_accessories import DeliveryAccessory
from app.infrastructure.database.models.delivery_orders import DeliveryOrder from app.infrastructure.database.models.delivery_orders import DeliveryOrder
from app.infrastructure.database.models.total_orders import TotalOrder from app.infrastructure.database.models.total_orders import TotalOrder
@ -36,11 +36,12 @@ class NewTotalOrderService:
grouped_by_period = self.group_accessories_by_period(accessories) grouped_by_period = self.group_accessories_by_period(accessories)
routes_by_period = self.find_routes_by_period(grouped_by_period, distances, cities) 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( new_total_order = TotalOrder(
order_datetime=datetime.now(), order_datetime=datetime.now(),
count_robots=2000, count_robots=2000,
deadline=datetime.now(), deadline=datetime.now(),
price=0,
) )
session.add(new_total_order) session.add(new_total_order)
session.flush() session.flush()
@ -55,22 +56,36 @@ class NewTotalOrderService:
delivery_order_deadline = new_total_order.deadline - timedelta(days=period) delivery_order_deadline = new_total_order.deadline - timedelta(days=period)
new_total_order.price += cost
new_delivery_order = DeliveryOrder( new_delivery_order = DeliveryOrder(
order_datetime=datetime.now(), order_datetime=datetime.now(),
count_trucks=vehicle_count, count_trucks=vehicle_count,
deadline=delivery_order_deadline, deadline=delivery_order_deadline,
price=cost, price=cost,
truck_id=selected_truck, 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)): 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( new_delivery_accessory = DeliveryAccessory(
queue=point_index + 1, queue=point_index + 1,
count=accessory.count,
accessory_id=accessory.id
) )
session.add(new_delivery_accessory)
response += f"Период: {period}\n" response += f"Период: {period}\n"
response += f"Маршрут: {' -> '.join([city.name for city in route])}\n" response += f"Маршрут: {' -> '.join([city.name for city in route])}\n"
@ -80,6 +95,8 @@ class NewTotalOrderService:
response += f"Количество автомобилей: {vehicle_count}" response += f"Количество автомобилей: {vehicle_count}"
response += f"Стоимость перевозки: {cost}\n" response += f"Стоимость перевозки: {cost}\n"
session.commit()
return response return response
def find_routes_by_period(self, grouped_by_period, distances, cities): def find_routes_by_period(self, grouped_by_period, distances, cities):

View File

@ -2,7 +2,7 @@ import os
from dotenv import load_dotenv from dotenv import load_dotenv
from sqlalchemy import create_engine from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker, Session
from app.infrastructure.database.models import Base 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) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
def connect() -> Session:
global SessionLocal
return SessionLocal()
def init_db(): def init_db():
import app.infrastructure.database.models.roles import app.infrastructure.database.models.roles
import app.infrastructure.database.models.users 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 return success
@router.post("/total-orders/calculate", response_model=TotalOrderEntity) @router.post("/total-orders/calculate")
def calculate_total_order(db: Session = Depends(get_db)): def calculate_total_order(db: Session = Depends(get_db)):
service = NewTotalOrderService(db) service = NewTotalOrderService(db)
result = service.total_calculate() result = service.total_calculate()