From 27c41274e11af0b79e567b1d34328c4da27db3f8 Mon Sep 17 00:00:00 2001 From: P3ngSaM <61768364+P3ngSaM@users.noreply.github.com> Date: Mon, 21 Nov 2022 16:57:34 +0800 Subject: [PATCH] =?UTF-8?q?changes=20=E7=BB=93=E6=9E=9C=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/Router/RatingFlowRouter.py | 66 ++++++++++++++++++++++++++++++--- App/Schemas/RatingFlowSchema.py | 5 +++ 2 files changed, 66 insertions(+), 5 deletions(-) diff --git a/App/Router/RatingFlowRouter.py b/App/Router/RatingFlowRouter.py index 848dc80..efd33bc 100644 --- a/App/Router/RatingFlowRouter.py +++ b/App/Router/RatingFlowRouter.py @@ -411,12 +411,12 @@ def func(rating_flow_id: str, db: Session = Depends(get_db), mongodb: MongoHelpe bacp_body.update({"bacp_score": total_score}) + bacp_body.update({"bacp_level": "C"}) for symbol in rank_standards: if total_score > rank_standards.get(symbol): rank_level = symbol bacp_body.update({"bacp_level": rank_level}) - else: - bacp_body.update({"bacp_level": "C"}) + break return bacp_body @@ -440,12 +440,69 @@ def func(rating_flow_id: str, db: Session = Depends(get_db)): adjust_data = rank_table.get('评级调整') if not adjust_data: raise HTTPException(status_code=404, detail="Rating Adjustment Data Not Found") - return adjust_data + adjustment = list() + for item in adjust_data: + insert = dict() + insert['调整因素'] = item.get('title') + insert['调整因素介绍'] = item.get('describe') + insert['调整分数'] = None + insert['调整说明'] = None + adjustment.append(insert) + + return adjustment + + +@router.post("/import/calculation_adjust", summary="计算调整因素得分", tags=["评级节点"]) +def func(schema: RatingFlowSchema.CalculationAdjustReqBody, db: Session = Depends(get_db), + mongodb: MongoHelper = Depends(get_mongodb)): + # 获取流程; rf_item: 流程对象 + rf_item = Crud.get_rating_flow(db=db, rating_flow_id=schema.rating_flow_id) + if not rf_item: + raise HTTPException(status_code=404, detail="RatingFlow Not Found") + # 计算得分 + score = sum([item.get('调整分数') for item in schema.adjustment]) + # 获取上个节点的得分 + nodes_item = [node for node in rf_item.nodes if node.node_name == '基本信用状况'] + if not nodes_item: + raise HTTPException(status_code=404, detail="RatingNode Not Found") + bacp_body = get_rating_node_data(db=db, mongodb=mongodb, _id=nodes_item[0].id) + bacp_score = bacp_body.get('bacp_score') + ascp_score = round((bacp_score + score), 2) + # 获取打分卡; res_scorecard: 打分卡 + scorecard = request_to_get( + url='http://test.fecribd.com/api/model_store/scorecard/view?_id={}'.format(rf_item.scorecard_id) + ) + if not scorecard: + raise HTTPException(status_code=404, detail="ScoreCard Not Found") + rank_table = scorecard.get("rank_table") + if not rank_table: + raise HTTPException(status_code=404, detail="RankTable Not Found") + rank_standards = dict(sorted(rank_table.get("得分级别标准").items(), key=lambda kv: (kv[1], kv[0]), reverse=True)) + rank_level = 'C' + for symbol in rank_standards: + if ascp_score > rank_standards.get(symbol): + rank_level = symbol + break + + adjustment_data = { + "ascp_score": ascp_score, + "ascp_level": rank_level, + "adjustments": schema.adjustment, + } + + # 保存流程节点数据 + node_item = [node for node in rf_item.nodes if node.node_name == '个体信用状况'] + if not node_item: + raise HTTPException(status_code=404, detail="RatingNode Not Found") + node = node_item[0] + Crud.save_rating_flow_node(db=db, mongodb=mongodb, node_id=node.id, data=adjustment_data.copy()) + + return adjustment_data @router.get("/import/external_support", summary="导入外部支持", tags=["评级节点"]) def func(province: str, region: str, db: Session = Depends(get_db)): - return {"result": "AAA"} + return {"外部支持级别": "AAA", "最终调整级别": None, "调整说明": None} @router.get("/result/confirm", summary="结果确认", tags=["评级节点"]) @@ -458,4 +515,3 @@ def func(rating_flow_id: str, operation: str, db: Session = Depends(get_db)): return Crud.edit_rating_status(db, rating_flow_id, status=operation) else: return {"info": "评级已确认无法执行操作"} - diff --git a/App/Schemas/RatingFlowSchema.py b/App/Schemas/RatingFlowSchema.py index e2fa6fe..7dbea2e 100644 --- a/App/Schemas/RatingFlowSchema.py +++ b/App/Schemas/RatingFlowSchema.py @@ -72,3 +72,8 @@ class ListRatingFlowsReqBody(BaseModel): class GetRatingFlowNodeContentReqBody(BaseModel): node_id: str = None + + +class CalculationAdjustReqBody(BaseModel): + rating_flow_id: str + adjustment: list