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
|
|
|
|
}
|