update 评级相关接口
This commit is contained in:
parent
093e399b15
commit
d3e4a7ce31
|
@ -1,23 +1,29 @@
|
|||
import time
|
||||
|
||||
from DBHelper.MongoHelperInstance import DB_GUA
|
||||
from Utils.CommonUtil import trans_fields_name
|
||||
from Modules.Models.ScoreAndRankModel import ScoreAndRankModel, refs, CreditIndexScore
|
||||
from Utils.CommonUtil import trans_fields_name, sub_dict
|
||||
from Utils.ErrorUtil import APIReturnError
|
||||
from Utils.ScoreUtils import ScoreUtils
|
||||
|
||||
|
||||
class RatingResultImpl(object):
|
||||
|
||||
@staticmethod
|
||||
def search(**kwargs):
|
||||
condition = {"信用级别": kwargs['level']} if isinstance(kwargs['level'], float) else {}
|
||||
total = DB_GUA.find_all_data_with_count(
|
||||
"企业数据",
|
||||
"公司概览",
|
||||
{"信用评级": {"$regex": kwargs["level"]}}
|
||||
"评级数据",
|
||||
"评级记录",
|
||||
condition
|
||||
)
|
||||
|
||||
items = DB_GUA.find_data_by_page_with_sort(
|
||||
"企业数据",
|
||||
"公司概览",
|
||||
{"信用评级": {"$regex": kwargs["level"]}},
|
||||
["信用评级", "企业名称", "所在省份", "评级日期"],
|
||||
{"评级日期": -1},
|
||||
"评级数据",
|
||||
"评级记录",
|
||||
condition,
|
||||
["评级ID", "信用级别", "企业名称", "所在省份", "评级时间"],
|
||||
{"评级时间": -1},
|
||||
kwargs["page_size"],
|
||||
kwargs["page_no"]
|
||||
)
|
||||
|
@ -27,9 +33,10 @@ class RatingResultImpl(object):
|
|||
for item in items:
|
||||
trans_item = trans_fields_name(
|
||||
item,
|
||||
["信用评级", "企业名称", "所在省份", "评级日期"],
|
||||
["级别", "企业名称", "省份", "日期"]
|
||||
["评级ID", "信用级别", "企业名称", "所在省份", "评级时间"],
|
||||
["评级ID", "级别", "企业名称", "省份", "日期"]
|
||||
)
|
||||
trans_item['日期'] = trans_item['日期'][:10] if trans_item['日期'] else None
|
||||
trans_items.append(trans_item)
|
||||
|
||||
result = {
|
||||
|
@ -38,3 +45,166 @@ class RatingResultImpl(object):
|
|||
}
|
||||
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def info(**kwargs):
|
||||
|
||||
rid = kwargs['rid']
|
||||
|
||||
record = DB_GUA.find_single_data(
|
||||
"评级数据",
|
||||
"评级记录",
|
||||
{'评级ID': rid},
|
||||
['企业名称', '所在省份', '所在城市', '评级时间', '评级ID']
|
||||
)
|
||||
|
||||
if record:
|
||||
record['省市信息'] = record['所在省份'] + record['所在城市']
|
||||
record.pop('所在省份')
|
||||
record.pop('所在城市')
|
||||
|
||||
return record
|
||||
|
||||
@staticmethod
|
||||
def rank(**kwargs):
|
||||
""""""
|
||||
|
||||
rid = kwargs["rid"]
|
||||
|
||||
rating_record = DB_GUA.find_single_data(
|
||||
"评级数据",
|
||||
"评级记录",
|
||||
{"评级ID": rid},
|
||||
["企业ID", "报告期"]
|
||||
)
|
||||
|
||||
if rating_record:
|
||||
cid = rating_record["企业ID"]
|
||||
report_date = rating_record["报告期"]
|
||||
else:
|
||||
raise APIReturnError("打分失败; 原因: 不存在此记录", 202)
|
||||
|
||||
indicators = DB_GUA.find_single_data(
|
||||
"评级数据",
|
||||
"财务分析",
|
||||
{"评级ID": rid},
|
||||
[
|
||||
"代偿保障率(%)", "代偿准备金比率(%)", "现金类资产比率(%)", "风险准备金充足率(%)",
|
||||
"流动比率(%)", "担保在保余额增长率(%)", "担保收入增长率(%)", "资产总额增长率(%)",
|
||||
"单一客户集中度(%)", "当期担保代偿率(%)", "融资担保放大倍数(倍)", "行业集中度(%)",
|
||||
"当期代偿回收率(%)", "实收资本(亿元)", "担保业务收入(万元)", "总资产收益率(%)",
|
||||
"营业利润率(%)", "净资产收益率(%)", "实际资产负债率(%)", "资本充足率(%)"
|
||||
]
|
||||
)
|
||||
|
||||
if not indicators:
|
||||
raise APIReturnError("打分失败; 原因: 不存在财务指标数据", 202)
|
||||
|
||||
index_score = CreditIndexScore()
|
||||
|
||||
index_score.score_compensation_rate(indicators["代偿保障率(%)"])
|
||||
index_score.score_compensation_reserve_ratio(indicators["代偿准备金比率(%)"])
|
||||
index_score.score_cash_assets_ratio(indicators["现金类资产比率(%)"])
|
||||
index_score.score_risk_reserve_adequacy_ratio(indicators["风险准备金充足率(%)"])
|
||||
index_score.score_current_ratio(indicators["流动比率(%)"])
|
||||
index_score.score_compensation()
|
||||
|
||||
index_score.score_guaranteed_insured_balance_growth_rate(indicators["担保在保余额增长率(%)"])
|
||||
index_score.score_guaranteed_revenue_growth_rate(indicators["担保收入增长率(%)"])
|
||||
index_score.score_growth_rate_of_total_assets(indicators["资产总额增长率(%)"])
|
||||
index_score.score_growth_ability()
|
||||
|
||||
index_score.score_single_customer_concentration(indicators["单一客户集中度(%)"])
|
||||
index_score.score_current_guarantee_compensation_rate(indicators["当期担保代偿率(%)"])
|
||||
index_score.score_financing_guarantee_magnification(indicators["融资担保放大倍数(倍)"])
|
||||
index_score.score_industry_concentration(indicators["行业集中度(%)"])
|
||||
index_score.score_current_compensation_recovery_rate(indicators["当期代偿回收率(%)"])
|
||||
index_score.score_guaranteed_asset_quality()
|
||||
|
||||
index_score.score_paid_capital(indicators["实收资本(亿元)"])
|
||||
index_score.score_guarantee_business_income(indicators["担保业务收入(万元)"])
|
||||
index_score.score_enterprise_size()
|
||||
|
||||
index_score.score_return_total_assets(indicators["总资产收益率(%)"])
|
||||
index_score.score_operating_margin(indicators["营业利润率(%)"])
|
||||
index_score.score_roe(indicators["净资产收益率(%)"])
|
||||
index_score.score_profitability()
|
||||
|
||||
index_score.score_actual_asset_liability_ratio(indicators["实际资产负债率(%)"])
|
||||
index_score.score_capital_adequacy_ratio(indicators["资本充足率(%)"])
|
||||
index_score.score_capital_structure()
|
||||
|
||||
dimension_score = sub_dict(index_score.fields_toggle(), ["代偿能力", "成长能力", "担保资产质量", "企业规模", "盈利能力", "资本结构"])
|
||||
total_score = round(sum(dimension_score.values()), 2)
|
||||
|
||||
rank_level = ScoreUtils.eval_rank_level(total_score)
|
||||
|
||||
score_rank_model = ScoreAndRankModel()
|
||||
score_rank_model.rid = kwargs["rid"]
|
||||
score_rank_model.cid = cid
|
||||
score_rank_model.report_date = report_date
|
||||
score_rank_model.rank_score = total_score
|
||||
score_rank_model.rank_level = rank_level
|
||||
score_rank_model.credit_index_score = index_score
|
||||
|
||||
score_rank_data = score_rank_model.fields_toggle()
|
||||
|
||||
DB_GUA.upsert_single_data(
|
||||
"评级数据",
|
||||
"得分级别",
|
||||
{"评级ID": rid},
|
||||
score_rank_data
|
||||
)
|
||||
|
||||
dimensions = {
|
||||
"代偿能力": ["代偿保障率(%)", "代偿准备金比率(%)", "现金类资产比率(%)", "风险准备金充足率(%)", "流动比率(%)"],
|
||||
"成长能力": ["担保在保余额增长率(%)", "担保收入增长率(%)", "资产总额增长率(%)"],
|
||||
"担保资产质量": ["单一客户集中度(%)", "当期担保代偿率(%)", "融资担保放大倍数(倍)", "行业集中度(%)", "当期代偿回收率(%)"],
|
||||
"企业规模": ["实收资本(亿元)", "担保业务收入(万元)"],
|
||||
"盈利能力": ["总资产收益率(%)", "营业利润率(%)", "净资产收益率(%)"],
|
||||
"资本结构": ["实际资产负债率(%)", "资本充足率(%)"]
|
||||
}
|
||||
|
||||
result = {
|
||||
"信用级别": score_rank_data["信用级别"],
|
||||
"信用得分": score_rank_data["信用得分"],
|
||||
"代偿能力": {"表格": [], "合计": dimension_score["代偿能力"]},
|
||||
"成长能力": {"表格": [], "合计": dimension_score["成长能力"]},
|
||||
"担保资产质量": {"表格": [], "合计": dimension_score["担保资产质量"]},
|
||||
"企业规模": {"表格": [], "合计": dimension_score["企业规模"]},
|
||||
"盈利能力": {"表格": [], "合计": dimension_score["盈利能力"]},
|
||||
"资本结构": {"表格": [], "合计": dimension_score["资本结构"]},
|
||||
}
|
||||
|
||||
for dimension in dimensions:
|
||||
for i in dimensions[dimension]:
|
||||
data = {
|
||||
"指标": i,
|
||||
"数值": indicators[i],
|
||||
"标准分": refs[i]["weight"],
|
||||
"实际得分": score_rank_data["信用指标得分"][i]
|
||||
}
|
||||
result[dimension]["表格"].append(data)
|
||||
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def report(**kwargs):
|
||||
rid = kwargs['rid']
|
||||
|
||||
record_01 = DB_GUA.find_single_data(
|
||||
"评级数据",
|
||||
"报告数据",
|
||||
{'评级ID': rid},
|
||||
['评价年度', '报告标题', '生成日期', '评级ID']
|
||||
)
|
||||
record_02 = DB_GUA.find_single_data(
|
||||
"评级数据",
|
||||
"评级记录",
|
||||
{'评级ID': rid},
|
||||
['评级报告']
|
||||
)
|
||||
|
||||
record = {**record_01, **record_02}
|
||||
|
||||
return record
|
||||
|
|
|
@ -36,29 +36,51 @@ def search_routes(**kwargs):
|
|||
@verify_token
|
||||
def info_routes(**kwargs):
|
||||
"""评级信息"""
|
||||
RouteParamsCheck(request.args, ["company_name", "rating_date"]).required()
|
||||
level = request.args["level"]
|
||||
page_size = request.args["page_size"]
|
||||
page_no = request.args["page_no"]
|
||||
try:
|
||||
RouteParamsCheck(request.args, ["rid"]).required()
|
||||
rid = request.args["rid"]
|
||||
|
||||
impl = RatingResultImpl()
|
||||
impl = RatingResultImpl()
|
||||
|
||||
result = impl.search(
|
||||
level=level,
|
||||
page_size=page_size,
|
||||
page_no=page_no
|
||||
)
|
||||
result = impl.info(rid=rid)
|
||||
|
||||
return {"info": "评级搜索", "result": result}, 200
|
||||
return {"info": "评级信息", "result": result}, 200
|
||||
|
||||
except APIReturnError as e:
|
||||
return {"info": e.__str__()}, e.status_code
|
||||
|
||||
|
||||
@result_route.route('/rank', methods=['GET'])
|
||||
@verify_token
|
||||
def rank_routes(**kwargs):
|
||||
"""得分级别"""
|
||||
try:
|
||||
RouteParamsCheck(request.args, ["rid"]).required()
|
||||
rid = request.args["rid"]
|
||||
|
||||
impl = RatingResultImpl()
|
||||
|
||||
result = impl.rank(rid=rid)
|
||||
|
||||
return {"info": "得分级别", "result": result}, 200
|
||||
|
||||
except APIReturnError as e:
|
||||
return {"info": e.__str__()}, e.status_code
|
||||
|
||||
|
||||
@result_route.route('/report', methods=['GET'])
|
||||
@verify_token
|
||||
def report_routes(**kwargs):
|
||||
"""评级搜索"""
|
||||
"""评级搜索"""
|
||||
try:
|
||||
RouteParamsCheck(request.args, ["rid"]).required()
|
||||
rid = request.args["rid"]
|
||||
|
||||
impl = RatingResultImpl()
|
||||
|
||||
result = impl.report(rid=rid)
|
||||
|
||||
return {"info": "得分级别", "result": result}, 200
|
||||
|
||||
except APIReturnError as e:
|
||||
return {"info": e.__str__()}, e.status_code
|
Loading…
Reference in New Issue