cockpit/Router/ProjectRouter.py

109 lines
3.8 KiB
Python
Raw Permalink Normal View History

2023-02-24 15:27:19 +08:00
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
2023-02-23 10:40:30 +08:00
router = APIRouter(
2023-02-23 15:39:47 +08:00
tags=["项目数据"],
2023-02-23 10:40:30 +08:00
prefix="/api/project",
)
2023-02-24 15:27:19 +08:00
@router.post("/upload", summary='项目录入', description='录入项目数据')
2023-02-24 15:58:29 +08:00
def func(file: UploadFile = File(...), db: Session = Depends(get_db)):
2023-02-24 15:27:19 +08:00
# 使用 Pandas 读取 Excel 文件
df = pd.read_csv(file.file)
for index, row in df.iterrows():
insert = {
"project": row[0],
"client": row[1],
2023-02-27 15:42:06 +08:00
"client_labels": row[2].strip("[]").replace("'", "").replace(" ", ""),
"project_type": row[3].strip("[]").replace("'", "").replace(" ", ""),
"project_labels": row[4].strip("[]").replace("'", "").replace(" ", ""),
2023-02-24 15:27:19 +08:00
"project_status": row[5],
"start_date": row[6],
"finish_date": row[7],
"amount": row[8],
"master": row[9],
2023-02-27 15:42:06 +08:00
"participants": row[10].strip("[]").replace("'", "").replace(" ", ""),
"departments": row[11].strip("[]").replace("'", "").replace(" ", ""),
2023-02-24 15:27:19 +08:00
"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
}