From 6a04c303abb52a83dbf7287f0731940a5fc2777a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=9D=E5=B7=9D?= Date: Sun, 20 Nov 2022 11:13:46 +0800 Subject: [PATCH] changes --- App/Router/RatingFlowRouter.py | 19 +- App/Router/RatingFlowRouter.py.orig | 258 --------------------------- App/Schemas/RatingFlowSchema.py.orig | 73 -------- 3 files changed, 17 insertions(+), 333 deletions(-) delete mode 100644 App/Router/RatingFlowRouter.py.orig delete mode 100644 App/Schemas/RatingFlowSchema.py.orig diff --git a/App/Router/RatingFlowRouter.py b/App/Router/RatingFlowRouter.py index e14ae47..e3c94e0 100644 --- a/App/Router/RatingFlowRouter.py +++ b/App/Router/RatingFlowRouter.py @@ -20,8 +20,23 @@ router = APIRouter( @router.post("/create", summary='新建评级流程', tags=["评级流程"]) -def func(schema: RatingFlowSchema.CreateRatingFlowReqBody, token: str = Header(...), - db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)): +def func(schema: RatingFlowSchema.CreateRatingFlowReqBody, token: str = Header(...), db: Session = Depends(get_db)): + + # 检查企业信息 + res = request_to_post( + url="http://test.fecribd.com/api/wide_data/company/search_name_by_cid/", + data={"cid": schema.company_id} + ) + if not res: + raise HTTPException(status_code=202, detail="CompanyID Incorrect") + + # 检查打分卡信息 + res = request_to_post( + url="http://test.fecribd.com/api/model_store/scorecard/search_name_by_id/", + data={"id": schema.scorecard_id} + ) + if not res: + raise HTTPException(status_code=202, detail="ScorecardID Incorrect") # 存储新建的流程 rating_flow_obj = Crud.create_rating_flow(db=db, schema=schema) diff --git a/App/Router/RatingFlowRouter.py.orig b/App/Router/RatingFlowRouter.py.orig deleted file mode 100644 index 9c50901..0000000 --- a/App/Router/RatingFlowRouter.py.orig +++ /dev/null @@ -1,258 +0,0 @@ -import requests -from fastapi import APIRouter, Depends, HTTPException, Header -from sqlalchemy.orm import Session - -from App.Crud import RatingFlowCrud as Crud, RatingFlowParticipantCrud, RatingFlowNodeCrud -from App.Schemas import RatingFlowSchema -from Utils.AccessControl.AccessUtil import rbac -from Utils.Authentication.TokenUtil import decode_token -from Utils.Common.RegisterUtils import request_to_get, request_to_post -from Utils.Common.Utils import CommonUtils -from Utils.DataBase.MongoHelperUtils import get_mongodb, MongoHelper -from Utils.DataBase.SqlAlchemyUtils import get_db - -router = APIRouter( - prefix="/api/rating_flow", - dependencies=[Depends(rbac)] -) - - -@router.post("/create", summary='新建评级流程', tags=["评级流程"]) -def func(schema: RatingFlowSchema.CreateRatingFlowReqBody, token: str = Header(...), - db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)): - # 存储新建的流程 - rating_flow_obj = Crud.create_rating_flow(db=db, schema=schema) - - # 新建流程节点 - nodes = ["填报数据", "基本信用状况", "个体信用状况", "主体信用等级"] - for i in range(len(nodes)): - node_num = i + 1 - Crud.create_rating_flow_node(db=db, node_num=node_num, node_name=nodes[i], rating_process_id=rating_flow_obj.id) - - # 存储创建用户信息 - decoded_info = decode_token(token=token) - user_info = decoded_info.get("user_info") - participant_schema = RatingFlowSchema.CreateParticipantReqBody() - participant_schema.participant = user_info.get("name") - participant_schema.user_id = user_info.get("uid") - participant_schema.rating_process_id = rating_flow_obj.id - Crud.create_rating_flow_participant(db=db, schema=participant_schema) - - return {"rating_flow_id": rating_flow_obj.id} - - -@router.post("/get", summary="所有流程节点", tags=["评级流程"]) -def func(_id: str, db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)): - # 返回流程信息 - nodes = Crud.get_rating_flow_all_nodes(db=db, mongodb=mongodb, _id=_id) - if not nodes: - raise HTTPException(status_code=400, detail="RatingFlow Not Found") - return nodes - - -@router.post("/save", summary="保存节点数据", tags=["评级流程"]) -def func(schema: RatingFlowSchema.SaveRatingFlowNodeReqBody, db: Session = Depends(get_db), - mongodb: MongoHelper = Depends(get_mongodb)): - # 保存流程节点数据 - rating_process_id = Crud.save_rating_flow_node(db=db, mongodb=mongodb, node_id=schema.node_id, data=schema.data) - if not rating_process_id: - raise HTTPException(status_code=400, detail="RatingFlowNode Not Found") - - # 返回流程信息 - nodes = Crud.get_rating_flow_all_nodes(db=db, mongodb=mongodb, _id=rating_process_id) - if not nodes: - raise HTTPException(status_code=400, detail="RatingFlow Not Found") - return nodes - - -<<<<<<< HEAD -@router.post("/list", summary="获取用户参与的所有评级流程", tags=["评级流程"]) -def func(token: str = Header(...), db: Session = Depends(get_db)): - - decoded_info = decode_token(token=token) - user_info = decoded_info.get("user_info") - user_id = user_info.get("uid") - - items = RatingFlowParticipantCrud.list_users_rating_flows(db=db, user_id=user_id) - _list = [] - for item in items: - rating_flow = { - "测评ID": item.rating_process_id, - "测评企业": item.rating_flow.company, - "测评模型": item.rating_flow.scorecard, - "测评状态": item.rating_flow.status.value - } - _list.append(rating_flow) - - return _list - - -@router.post("/node_data", summary="获取流程节点数据", tags=["评级流程"]) -def func(schema, db: Session = Depends(get_db), mongodb: MongoHelper = Depends(get_mongodb)): - return RatingFlowNodeCrud.get_rating_node_data(_id=schema.node_id, db=db, mongodb=mongodb) - - -@router.post("/import/input_data", summary="导入填报数据", tags=["评级节点"]) -def func(schema: RatingFlowSchema.GetRatingDataReqBody, db: Session = Depends(get_db), - mongodb: MongoHelper = Depends(get_mongodb)): - score_card_id = schema.scorecard_id -======= -@router.get("/import/input_data", summary="导入填报数据", tags=["评级节点"]) -def func(rating_flow_id: str, year: int, db: Session = Depends(get_db)): - # 获取打分卡id - node = Crud.get_rating_flow(db=db, rating_flow_id=rating_flow_id) - if not node: - raise HTTPException(status_code=400, detail="RatingFlow Not Found") - scorecard_id = node.scorecard_id - company_id = node.company_id - report_date = list() - frist_year = str(node.report_date) - report_date.append(frist_year) - for y in range(1, year): - report_date.append(str(int(frist_year[:4]) - y) + '-12-31') ->>>>>>> ps01 - - # 获取打分卡配置 - score_card_url = 'http://test.fecribd.com:5004/api/model_store/scorecard/view?_id={}'.format(scorecard_id) - res = request_to_get(score_card_url) - if not res: - raise HTTPException(status_code=400, detail="ScoreCard Not Found") - - data_table = res.get('data_table') - if not data_table: - raise HTTPException(status_code=400, detail="DataTable Not Found") - - # 获取填报数据 - data_url = 'http://test.fecribd.com/api/wide_data/query/fiancial_data' - data = {"cid": company_id, "report_date": report_date} - result = request_to_post(data_url, data) - if not result: - raise HTTPException(status_code=400, detail="Data Not Found") - - # 整合结果 - data_result = dict() - for table_name, content in data_table.items(): - year_dict = dict() - for item in report_date: - data_result[table_name] = dict() - year = CommonUtils.date_conversion(item) - if table_name == '资产负债表': - balance = result.get('balance_sheet_data') - for b in balance: - insert = dict() - if b.get('截止日期') == item: - for cont in content: - insert[cont] = b.get(cont) - year_dict[year] = insert - data_result[table_name] = year_dict - if table_name == '利润表': - income = result.get('income_sheet_data') - for b in income: - insert = dict() - if b.get('截止日期') == item: - for cont in content: - insert[cont] = b.get(cont) - year_dict[year] = insert - data_result[table_name] = year_dict - if table_name == '现金流量表': - pass - return data_result - - -@router.get("/import/index_data", summary="导入定性定量指标", tags=["评级节点"]) -def func(rating_flow_id: str, db: Session = Depends(get_db)): - # 根据评级 - node = Crud.get_rating_flow(db=db, rating_flow_id=rating_flow_id) - if not node: - raise HTTPException(status_code=400, detail="RatingFlow Not Found") - scorecard_id = node.scorecard_id - company_id = node.company_id - year = node.report_date - - # 根据流程节点获取数据表 - data_sheets = {} - - # 获取定性定量指标配置表 - score_card_url = 'http://test.fecribd.com:5004/api/model_store/scorecard/view?_id={}'.format(scorecard_id) - res = request_to_get(score_card_url) - if not res: - raise HTTPException(status_code=400, detail="ScoreCard Not Found") - - index_table = res.get('index_table') - score_table = res.get('rank_table') - if not index_table and not score_table: - raise HTTPException(status_code=400, detail="ScoreCard Not Found") - # 计算定性定量指标值 - try: - # 读取请求参数 - n = len(index_table) - score_data = score_table.get('指标及权重') - # 生成indicator的value表 - indicator_values = [] - for num in range(n): - judge = list() - if score_data: - gear = score_data[num].get('档位', {}) - for k, v in gear.items(): - item_dict = dict() - item_dict['case'] = v - item_dict['level'] = CommonUtils.get_level(k) - judge.append(item_dict) - - indicator_value = { - "indicator": index_table[num].get('指标'), - "value": None, - "nature": 'quality' if index_table[num].get('指标类型') == '定性' else 'quantity', - "weight": float(score_data[num].get('权重')) * 0.01, - "judge": judge, - "reason": None - } - indicator_values.append(indicator_value) - - # 依次计算指标值 - for i in range(n): - if indicator_values[i]["nature"] == "quantity": - params_list = list() - # 计算指标参数 - params = index_table[i].get('指标参数', []) - for param in params: - param_dict = dict() - param_dict['param'] = param['参数'] - # 将year替换成年报期 - report_date = CommonUtils.date_conversion(year) - y = report_date if param['加载路径'][0] == 'year' else str( - int(report_date[:4]) - int(param['加载路径'][0][-1])) + '00' - param['加载路径'][0] = y - param_dict['path'] = param['加载路径'] - params_list.append(param_dict) - - func_name = indicator_values[i]["indicator"] - - func_args = {} - for param in [dict(item) for item in params_list]: - year, sheet, subject = param["path"][0], param["path"][1], param["path"][2] - func_args = {**func_args, **{param["param"]: data_sheets[sheet][year][subject]}} - req_url = "http://test.fecribd.com/api/index_function/{}/" - res = requests.post(req_url.format(func_name), json=func_args) - - indicator_values[i]['value'] = res.json() - - return indicator_values - - except Exception: - raise HTTPException(status_code=400, detail="Calculate Failed") - - -@router.post("/import/index_score", summary="导入定性定量得分", tags=["评级节点"]) -def func(schema): - pass - - -@router.post("/import/adjust_factors", summary="导入调整因素", tags=["评级节点"]) -def func(schema): - pass - - -@router.post("/import/external_support", summary="导入外部支持", tags=["评级节点"]) -def func(schema): - pass diff --git a/App/Schemas/RatingFlowSchema.py.orig b/App/Schemas/RatingFlowSchema.py.orig deleted file mode 100644 index fa76cfa..0000000 --- a/App/Schemas/RatingFlowSchema.py.orig +++ /dev/null @@ -1,73 +0,0 @@ -from datetime import date -from enum import Enum, unique - -from pydantic import BaseModel - - -@unique -class RatingFlowStatusEnum(Enum): - enum01 = "进行" - enum02 = "完成" - enum03 = "取消" - - -@unique -class RankLevelEnum(Enum): - enum01 = "AAA" - enum02 = "AA+" - enum03 = "AA" - enum04 = "AA-" - enum05 = "A+" - enum06 = "A" - enum07 = "A-" - enum08 = "BBB+" - enum09 = "BBB" - enum10 = "BBB-" - enum11 = "BB+" - enum12 = "BB" - enum13 = "BB-" - enum14 = "B+" - enum15 = "B" - enum16 = "B-" - enum17 = "CCC" - enum18 = "CC" - enum19 = "C" - enum20 = "-" - - -class CreateRatingFlowReqBody(BaseModel): - company: str = None - company_id: str = None - scorecard: str = None - scorecard_id: str = None - report_date: date = None - - -class CreateParticipantReqBody(BaseModel): - participant: str = None - user_id: str = None - rating_process_id: str = None - - -class SaveRatingFlowNodeReqBody(BaseModel): - node_id: str = None - data: dict = {} - - -class GetRatingDataReqBody(BaseModel): - company_id: str = None - scorecard_id: str = None - report_date: list = None - - -class GetIndicatorReqBody(BaseModel): - scorecard_id: str = None -<<<<<<< HEAD - - -class ListRatingFlowsReqBody(BaseModel): - status: RatingFlowStatusEnum = None - page: int = 1 - pagesize: int = 10 -======= ->>>>>>> ps01