From ef61dbe4b74e4de617a4e3541ffe2272313968c0 Mon Sep 17 00:00:00 2001 From: wcq <744800102@qq.com> Date: Mon, 21 Aug 2023 17:04:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E5=91=8A=E4=B8=BA=E7=A9=BA=E8=AE=BE?= =?UTF-8?q?=E4=B8=BA--?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mods/smebiz_rate/company_rate/router.py | 62 ++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/mods/smebiz_rate/company_rate/router.py b/mods/smebiz_rate/company_rate/router.py index 772d3e9..eed7937 100644 --- a/mods/smebiz_rate/company_rate/router.py +++ b/mods/smebiz_rate/company_rate/router.py @@ -1,9 +1,11 @@ +import datetime import json from pathlib import Path from urllib.parse import quote import requests from fastapi import APIRouter, Depends, HTTPException, Response +from sqlalchemy import func, distinct from sqlalchemy.orm import Session from starlette.responses import FileResponse @@ -168,7 +170,7 @@ def get_report(req: schemas.GetReport, db: Session = Depends(common_db.get_db), token_data: auth_util.tokenDataModel = Depends(auth_util.token_data_depend) ): data = load_report_need_data(db, req.id) - json.dump(data,open('ttt.json','w',encoding='utf-8'),ensure_ascii=False) + json.dump(data, open('ttt.json', 'w', encoding='utf-8'), ensure_ascii=False) response = requests.post(f'{conf["rate_utils"]["host"]}/api/report_generation/generation', json.dumps( data), timeout=15) # print(response.json()) @@ -205,4 +207,62 @@ def get_report(req: schemas.GetReport, db: Session = Depends(common_db.get_db), raise HTTPException(status_code=404, detail="未找到报告文件,路径不存在") return FileResponse(Path("./" + file.file_url), headers={"Content-Disposition": f"attachment; filename={quote(file.file_name)}"}) + + ######### + + +@router.post("/company_rate/get_dashboard_data", summary="获取看板数据") +def get_dashboard_data(db: Session = Depends(common_db.get_db), + token_data: auth_util.tokenDataModel = Depends(auth_util.token_data_depend)): + 企业总数 = db.query(CompanyUser).filter(CompanyUser.verified == True).count() + 昨日新增 = db.query(CompanyUser).filter(CompanyUser.verified == True, func.date( + CompanyUser.create_time) == datetime.datetime.now().date()).count() + 待处理申请 = db.query(CompanyRate).filter(CompanyRate.man_data.isnot(None), + CompanyRate.mgr_data_state != '已就绪').count() + 申请企业数 = db.query((distinct(CompanyRate.company_name))).filter(CompanyRate.man_data.isnot(None), + CompanyRate.mgr_data_state != '已就绪', + ).count() + 待评级企业 = db.query((distinct(CompanyRate.company_name))).filter(CompanyRate.man_data.isnot(None), + CompanyRate.mgr_data_state != '已就绪').count() + 总申请数 = db.query(CompanyRate).filter(CompanyRate.man_data.isnot(None)).count() + 待披露企业 = db.query(CompanyRate).filter(CompanyRate.rate_state == '已评级', + CompanyRate.publish_state != '已披露').count() + 披露企业数 = db.query(CompanyRate).filter(CompanyRate.publish_state == '已披露').count() + + 已披露企业评级等级扇形数据 = [[item[0],item[1]] for item in + db.query(CompanyRate.rate_level, func.count(CompanyRate.rate_level)).filter( + CompanyRate.publish_state == '已披露').group_by( + CompanyRate.rate_level).all()] + + + # 计算七天前的日期 + seven_days_ago = datetime.datetime.now() - datetime.timedelta(days=7) + + # 查询七天内每天创建的评级申请数量 + daily_user_counts = db.query( + func.date(CompanyRate.create_time).label('date'), + func.count(CompanyRate.id).label('count') + ).filter( + CompanyRate.create_time >= seven_days_ago + ).group_by( + func.date(CompanyRate.create_time) + ).order_by( + func.date(CompanyRate.create_time) + ).all() + 七日评级申请趋势数据 = [[item.date, item.count] for item in daily_user_counts] + + data = { + "企业总数": 企业总数, + "昨日新增": 昨日新增, + "待处理申请": 待处理申请, + "申请企业数": 申请企业数, + "待评级企业": 待评级企业, + "总申请数": 总申请数, + "待披露企业": 待披露企业, + "披露企业数": 披露企业数, + "七日评级申请趋势数据": 七日评级申请趋势数据, + "已披露企业评级等级扇形数据": 已披露企业评级等级扇形数据 + } + print(data) + return data