cockpit/Router/ProjectRouter.py

109 lines
3.8 KiB
Python

import math
from fastapi import APIRouter, UploadFile, File, Depends, HTTPException
import pandas as pd
from sqlalchemy.orm import Session
from Crud import ProjectCrud
from Schemas import ProjectSchemas
from Utils.SqlAlchemyUtils import get_db
router = APIRouter(
tags=["项目数据"],
prefix="/api/project",
)
@router.post("/upload", summary='项目录入', description='录入项目数据')
def func(file: UploadFile = File(...), db: Session = Depends(get_db)):
# 使用 Pandas 读取 Excel 文件
df = pd.read_csv(file.file)
for index, row in df.iterrows():
insert = {
"project": row[0],
"client": row[1],
"client_labels": row[2].strip("[]").replace("'", "").replace(" ", ""),
"project_type": row[3].strip("[]").replace("'", "").replace(" ", ""),
"project_labels": row[4].strip("[]").replace("'", "").replace(" ", ""),
"project_status": row[5],
"start_date": row[6],
"finish_date": row[7],
"amount": row[8],
"master": row[9],
"participants": row[10].strip("[]").replace("'", "").replace(" ", ""),
"departments": row[11].strip("[]").replace("'", "").replace(" ", ""),
"remarks": None
}
for key, val in insert.items():
if isinstance(insert.get(key), str):
continue
elif insert.get(key) is None:
continue
elif math.isnan(insert.get(key)):
insert[key] = None
ProjectCrud.insert_data(db, insert)
return {
"code": 200,
"message": "录入成功",
"content": {}
}
@router.put("/edit", summary='项目编辑', description='编辑项目数据')
def func(project_id: int, project_info: ProjectSchemas.EditProjectInfo, db: Session = Depends(get_db)):
result = ProjectCrud.edit_data(db, project_id, project_info)
if not result:
raise HTTPException(status_code=404, detail="id不存在")
return {
"code": 200,
"message": "编辑成功",
"content": result
}
@router.post("/query_by_department", summary='部门项目查询', description='查询项目数据')
def func(schema: ProjectSchemas.QueryProjectByDepartment, db: Session = Depends(get_db)):
result = ProjectCrud.query_data_by_department(db, schema)
if not result:
raise HTTPException(status_code=404, detail="部门不存在")
return {
"code": 200,
"message": "查询成功",
"content": result
}
@router.post("/query_by_id", summary='id查询项目', description='查询项目数据')
def func(project_id: int, db: Session = Depends(get_db)):
result = ProjectCrud.query_data_by_id(db, project_id)
if not result:
raise HTTPException(status_code=404, detail="id不存在")
return {
"code": 200,
"message": "查询成功",
"content": result
}
@router.post("/query_by_pie", summary='累计收入业务数量查询', description='查询项目数据')
def func(schema: ProjectSchemas.QueryProjectByType, db: Session = Depends(get_db)):
result = ProjectCrud.query_data_for_pie(db, schema)
if not result:
raise HTTPException(status_code=404, detail="类别不存在")
return {
"code": 200,
"message": "查询成功",
"content": result
}
@router.post("/query_by_bar", summary='收入同比业务分类查询', description='查询项目数据')
def func(schema: ProjectSchemas.QueryProjectByType, db: Session = Depends(get_db)):
result = ProjectCrud.query_data_for_bar(db, schema)
if not result:
raise HTTPException(status_code=404, detail="类别不存在")
return {
"code": 200,
"message": "查询成功",
"content": result
}