After Graduate Update
This commit is contained in:
parent
b92a91ab37
commit
c6917dd85e
69 changed files with 7540 additions and 0 deletions
103
ressult/app/routes/upload.py
Normal file
103
ressult/app/routes/upload.py
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
# app/routes/upload.py
|
||||
"""
|
||||
Маршруты API для загрузки и импорта данных
|
||||
Соответствует требованиям ТЗ по импорту данных
|
||||
"""
|
||||
import pandas as pd
|
||||
from fastapi import APIRouter, UploadFile, File, HTTPException
|
||||
from app.database import db
|
||||
from app.models import UploadResponse
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@router.post("/partners")
|
||||
async def upload_partners(file: UploadFile = File(...)):
|
||||
"""
|
||||
Загрузка партнеров из файла
|
||||
Подготовка данных для импорта согласно ТЗ
|
||||
"""
|
||||
try:
|
||||
if file.filename.endswith('.xlsx'):
|
||||
df = pd.read_excel(file.file)
|
||||
elif file.filename.endswith('.csv'):
|
||||
df = pd.read_csv(file.file)
|
||||
else:
|
||||
raise HTTPException(status_code=400, detail="Unsupported file format")
|
||||
|
||||
processed = 0
|
||||
errors = []
|
||||
|
||||
for index, row in df.iterrows():
|
||||
try:
|
||||
# Валидация и преобразование данных
|
||||
rating = row.get('rating', 0)
|
||||
if pd.isna(rating):
|
||||
rating = 0
|
||||
|
||||
db.execute_query("""
|
||||
INSERT INTO partners
|
||||
(partner_type, company_name, legal_address, inn, director_name,
|
||||
phone, email, rating, sales_locations)
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
|
||||
""", (
|
||||
row.get('partner_type'),
|
||||
row.get('company_name'),
|
||||
row.get('legal_address'),
|
||||
row.get('inn'),
|
||||
row.get('director_name'),
|
||||
row.get('phone'),
|
||||
row.get('email'),
|
||||
int(rating), # Конвертация в целое число
|
||||
row.get('sales_locations')
|
||||
))
|
||||
processed += 1
|
||||
except Exception as e:
|
||||
errors.append(f"Row {index}: {str(e)}")
|
||||
|
||||
return UploadResponse(
|
||||
message="File processed successfully",
|
||||
processed_rows=processed,
|
||||
errors=errors
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
@router.post("/sales")
|
||||
async def upload_sales(file: UploadFile = File(...)):
|
||||
"""Загрузка продаж из файла"""
|
||||
try:
|
||||
if file.filename.endswith('.xlsx'):
|
||||
df = pd.read_excel(file.file)
|
||||
elif file.filename.endswith('.csv'):
|
||||
df = pd.read_csv(file.file)
|
||||
else:
|
||||
raise HTTPException(status_code=400, detail="Unsupported file format")
|
||||
|
||||
processed = 0
|
||||
errors = []
|
||||
|
||||
for index, row in df.iterrows():
|
||||
try:
|
||||
db.execute_query("""
|
||||
INSERT INTO sales
|
||||
(partner_id, product_name, quantity, sale_date)
|
||||
VALUES (%s, %s, %s, %s)
|
||||
""", (
|
||||
int(row.get('partner_id')),
|
||||
row.get('product_name'),
|
||||
row.get('quantity'),
|
||||
row.get('sale_date')
|
||||
))
|
||||
processed += 1
|
||||
except Exception as e:
|
||||
errors.append(f"Row {index}: {str(e)}")
|
||||
|
||||
return UploadResponse(
|
||||
message="File processed successfully",
|
||||
processed_rows=processed,
|
||||
errors=errors
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
Loading…
Add table
Add a link
Reference in a new issue