添加看板接口

This commit is contained in:
wcq 2023-09-18 16:09:14 +08:00
parent a37e7666be
commit 96a4273016
5 changed files with 70 additions and 14 deletions

6
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,6 @@
{
"version": "0.2.0",
"configurations": [
{"name":"main","type":"python","request":"launch","program":"main.py","console":"integratedTerminal","justMyCode":true},
]
}

11
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"[python]": {
"editor.defaultFormatter": "ms-python.autopep8"
},
"editor.defaultFormatter": null,
"editor.formatOnPaste": false,
"editor.formatOnSave": true,
"[jsonc]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
}

View File

@ -4,7 +4,7 @@ from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from starlette.staticfiles import StaticFiles
from config.log import uvicorn_log_config
from context.common import conf, common_db, common_db_v2,common_db_base_v2
from context.common import conf, common_db, common_db_v2, common_db_base_v2
from mods import router as main_router
common_db.init_database(create_db=True)
@ -19,7 +19,8 @@ app = FastAPI(
)
if not os.path.exists("static"):
os.makedirs("static")
app.mount(f"/{sys_name}/static", StaticFiles(directory="static"), name="static")
app.mount(f"/{sys_name}/static",
StaticFiles(directory="static"), name="static")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
@ -32,4 +33,5 @@ app.router.prefix = f"/{sys_name}"
app.include_router(main_router.router)
print(f"接口文档链接: http://127.0.0.1:{conf['app']['port']}{app.docs_url}")
if __name__ == '__main__':
uvicorn.run(app, log_config=uvicorn_log_config, host="0.0.0.0", port=int(conf['app']['port']))
uvicorn.run(app, log_config=uvicorn_log_config,
host="0.0.0.0", port=int(conf['app']['port']))

View File

@ -1,4 +1,4 @@
from datetime import datetime
from datetime import datetime, timedelta
from fastapi import APIRouter, Depends, HTTPException, File
from sqlalchemy.orm import Session
@ -11,9 +11,8 @@ from . import crud
from . import schemas
from .utils import RateServeFlow, get_node_if_not_finished, RateUtils, get_node
from ...models import RateDataPreparationNode, RateServe, RateWorkNode, ReportWorkNode, CertWorkNode
from ...schemas import NodeState
from ...schemas import NodeState, RateServeState
from fastapi import UploadFile as FastApiUploadFile, Form
router = APIRouter(tags=["评级服务"], prefix='')
@ -68,7 +67,8 @@ def pass_node(req: schemas.PassNodeReq, db: Session = Depends(get_db)):
@router.post("/rate_serve/update_node_remark", summary="节点备注编辑接口")
def update_node_remark(req: schemas.UpdateNodeRemarkReq, db: Session = Depends(get_db)):
RateServeFlow.update_node_remark(db, req.serve_id, req.node_name, req.remark)
RateServeFlow.update_node_remark(
db, req.serve_id, req.node_name, req.remark)
return "保存成功"
@ -94,7 +94,8 @@ def rate_serve_cancel(req: schemas.RateServeCancelReq, db: Session = Depends(get
@router.post("/rate_post_data_check_node/update_rate_sheet_data", summary="更新企业填报数据",
tags=['企业提交材料审核节点'])
def update_rate_sheet_data(req: schemas.UpdateRateSheetDataReq, db: Session = Depends(get_db)):
node, serve = get_node_if_not_finished(db, req.serve_id, 'rate_post_data_check_node')
node, serve = get_node_if_not_finished(
db, req.serve_id, 'rate_post_data_check_node')
node.data = req.data
db.commit()
return "保存成功"
@ -104,8 +105,10 @@ def update_rate_sheet_data(req: schemas.UpdateRateSheetDataReq, db: Session = De
@router.post("/rate_data_preparation_node/api_data/load", summary="导入三方接口数据",
tags=['三方接口数据审核节点'])
def api_data_load(req: schemas.ApiDataLoadReq, db: Session = Depends(get_db)):
node, serve = get_node_if_not_finished(db, req.serve_id, 'rate_data_preparation_node')
serve: RateServe = db.query(RateServe).filter(RateServe.serve_id == req.serve_id).first()
node, serve = get_node_if_not_finished(
db, req.serve_id, 'rate_data_preparation_node')
serve: RateServe = db.query(RateServe).filter(
RateServe.serve_id == req.serve_id).first()
if not serve.company:
raise HTTPException(status_code=303, detail='该评级申请未绑定公司信息')
data, schema = RateUtils.load_api_data_by_company_name(serve.company.name)
@ -125,7 +128,8 @@ def api_data_get(req: schemas.ApiDataGetReq, db: Session = Depends(get_db)):
@router.post("/rate_data_preparation_node/api_data/update", summary="更新三方接口数据",
tags=['三方接口数据审核节点'])
def api_data_update(req: schemas.ApiDataUpdateReq, db: Session = Depends(get_db)):
node, serve = get_node_if_not_finished(db, req.serve_id, 'rate_data_preparation_node')
node, serve = get_node_if_not_finished(
db, req.serve_id, 'rate_data_preparation_node')
node.data = req.data
db.commit()
return "导入成功"
@ -155,7 +159,8 @@ def do_rate(req: schemas.DoRateReq, db: Session = Depends(get_db)):
@router.post("/report_work_node/make_report", summary="报告生成接口",
tags=['报告生成节点'])
def make_report(req: schemas.MakeReportReq, db: Session = Depends(get_db)):
node, serve = get_node_if_not_finished(db, req.serve_id, 'report_work_node')
node, serve = get_node_if_not_finished(
db, req.serve_id, 'report_work_node')
serve: RateServe
node: ReportWorkNode
company_name = serve.company.name
@ -172,7 +177,8 @@ def make_report(req: schemas.MakeReportReq, db: Session = Depends(get_db)):
req.report_time,
req.expiry_year)
report_file_name = f"{company_name}评级报告.docx"
file = file_upload_by_content(db, report_file_name, content, 'application/docx', 'docx', sub_type='初版评级报告')
file = file_upload_by_content(
db, report_file_name, content, 'application/docx', 'docx', sub_type='初版评级报告')
node.origin_file_id = file.id
node.origin_create_time = datetime.now()
db.commit()
@ -202,8 +208,31 @@ def make_cert(req: schemas.CertWorkNodeReq, db: Session = Depends(get_db)):
node: CertWorkNode
company_name = serve.company.name
report_file_name = f"{company_name}证书.docx"
file = file_upload_by_content(db, report_file_name, b"", 'application/docx', 'docx', sub_type='评级证书')
file = file_upload_by_content(
db, report_file_name, b"", 'application/docx', 'docx', sub_type='评级证书')
node.file_id = file.id
node.cert_create_time = datetime.now()
db.commit()
return "报告生成成功"
@router.post("/rate_serve/dashboard_data/get", summary="看板数据获取", response_model=schemas.DashboardDataGetRes,
tags=['看板数据'])
def make_cert(db: Session = Depends(get_db)):
examining = db.query(RateServe).filter(
RateServe.status == RateServeState.examining).count()
rating = db.query(RateServe).filter(
RateServe.status == RateServeState.rating).count()
publish = 0
published = 0
work_days = [(item.finish_time-item.create_time).total_seconds()/24/60/60 for item in db.query(
RateServe).filter(RateServe.finish_time > (datetime.now()-timedelta(days=15)))]
average_work_day = round(
sum(work_days)/len(work_days), 1) if work_days else 0
return {
"examining": examining,
"rating": rating,
"publish": publish,
"published": published,
"average_work_day": average_work_day
}

View File

@ -203,3 +203,11 @@ class FinalReportUploadReq(RateServeId):
class CertWorkNodeReq(RateServeId):
cert_time: datetime
expiry_year: Optional[int] = 2
class DashboardDataGetRes(BaseModel):
examining: int
rating: int
publish: int
published: int
average_work_day: float