Merge branch 'pp' into 'main'

changes 结果确认接口

See merge request pengsen/rating_process!9
This commit is contained in:
彭森 2022-11-21 08:58:07 +00:00
commit a8517b0025
2 changed files with 66 additions and 5 deletions

View File

@ -412,12 +412,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_score": total_score})
bacp_body.update({"bacp_level": "C"})
for symbol in rank_standards: for symbol in rank_standards:
if total_score > rank_standards.get(symbol): if total_score > rank_standards.get(symbol):
rank_level = symbol rank_level = symbol
bacp_body.update({"bacp_level": rank_level}) bacp_body.update({"bacp_level": rank_level})
else: break
bacp_body.update({"bacp_level": "C"})
# 保存流程节点数据 # 保存流程节点数据
Crud.save_rating_flow_node(db=db, mongodb=mongodb, node_id=nodes_item.get("基本信用状况"), data=bacp_body.copy()) Crud.save_rating_flow_node(db=db, mongodb=mongodb, node_id=nodes_item.get("基本信用状况"), data=bacp_body.copy())
@ -444,12 +444,69 @@ def func(rating_flow_id: str, db: Session = Depends(get_db)):
adjust_data = rank_table.get('评级调整') adjust_data = rank_table.get('评级调整')
if not adjust_data: if not adjust_data:
raise HTTPException(status_code=404, detail="Rating Adjustment Data Not Found") 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=["评级节点"]) @router.get("/import/external_support", summary="导入外部支持", tags=["评级节点"])
def func(province: str, region: str, db: Session = Depends(get_db)): def func(province: str, region: str, db: Session = Depends(get_db)):
return {"result": "AAA"} return {"外部支持级别": "AAA", "最终调整级别": None, "调整说明": None}
@router.get("/result/confirm", summary="结果确认", tags=["评级节点"]) @router.get("/result/confirm", summary="结果确认", tags=["评级节点"])
@ -462,4 +519,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) return Crud.edit_rating_status(db, rating_flow_id, status=operation)
else: else:
return {"info": "评级已确认无法执行操作"} return {"info": "评级已确认无法执行操作"}

View File

@ -72,3 +72,8 @@ class ListRatingFlowsReqBody(BaseModel):
class GetRatingFlowNodeContentReqBody(BaseModel): class GetRatingFlowNodeContentReqBody(BaseModel):
node_id: str = None node_id: str = None
class CalculationAdjustReqBody(BaseModel):
rating_flow_id: str
adjustment: list