update 准备企业主页数据接口

This commit is contained in:
P3ngSaM 2022-04-21 15:29:42 +08:00
parent 254230fc37
commit e62cdbdfa2
3 changed files with 352 additions and 39 deletions

View File

@ -4,9 +4,10 @@ import requests
import pandas as pd
from DBHelper.MongoHelper import MongoHelper
from RatingData.scripts.risk_detail import associate_risk_detail, change_log_detail
from Utils.ErrorUtil import LogConditionCheckFailed
from CompanyData.CompanyDataObj import CompanyData, BasicInfo, ShareHolder, MainMember, ComprehensiveCreditAnalysis, \
FinancialElementsAnalysis, BusinessElementsAnalysis
FinancialElementsAnalysis, BusinessElementsAnalysis, FinancialIndex, BalanceSheet, ProfitSheet, AppendixDataSheet
from common.utils import sub_dict, df_iterrows
@ -179,6 +180,131 @@ class CompanyDataImpl(CompanyData):
__main__()
def update_credit_data(self, rid):
"""更新综信评价相关数据"""
def update_rating_result():
"""更新评价结果"""
rating_result = self.db_tfse.find_single_data(
'综信评价数据',
'评价结果',
{'评价ID': rid},
['企业ID', '信用等级', '信用评分', '评价年度', '经营评分', '财务评分', '风险评分', '评价时间']
)
self.cid = rating_result['企业ID']
del rating_result['企业ID']
rating_result['评价ID'] = rid
self.cc_rating_result = rating_result
def financial_indicator():
"""更新财务指标"""
financial_result = self.db_tfse.find_single_data(
'综信评价数据',
'财指结果',
{'企业ID': self.cid},
['净资产收益率', '存货周转率', '已获利息倍数', '应收账款周转率', '总资产周转率', '总资产增长率', '总资产报酬率',
'技术投入比率', '营业增长率', '资产负债率', '速动比率']
)
financial_index = FinancialIndex()
financial_index.roe = financial_result['净资产收益率']
financial_index.inventory_turnover = financial_result['存货周转率']
financial_index.interest_multiple = financial_result['已获利息倍数']
financial_index.accounts_receivable_turnover = financial_result['应收账款周转率']
financial_index.total_asset_turnover = financial_result['总资产周转率']
financial_index.total_asset_growth_rate = financial_result['总资产增长率']
financial_index.roa = financial_result['总资产报酬率']
financial_index.technology_investment_ratio = financial_result['技术投入比率']
financial_index.operating_growth_rate = financial_result['营业增长率']
financial_index.assets_and_liabilities = financial_result['资产负债率']
financial_index.quick_ratio = financial_result['速动比率']
self.fin_index = financial_index
def financial_sheet():
"""更新财务表"""
fill_data = self.db_tfse.find_single_data(
'综信评价数据',
'填报数据',
{'评价ID': rid},
['财务填报']
)
def update_balance_sheet():
"""资产负债表"""
balance_data = fill_data['财务填报']['资产负债表'][0]
balance = BalanceSheet()
balance.accounts_receivable = balance_data['应收账款']
balance.stock = balance_data['存货']
balance.total_current_assets = balance_data['流动资产合计']
balance.total_assets = balance_data['资产总计']
balance.short_loan = balance_data['短期借款']
balance.one_year_liabilities = balance_data['一年内到期非流动负债']
balance.total_current_liabilities = balance_data['流动负债合计']
balance.long_term_loan = balance_data['长期借款']
balance.total_liabilities = balance_data['负债合计']
balance.total_owners_equity = balance_data['所有者权益合计']
self.balance_sheet = balance
def update_profit_sheet():
"""利润表"""
profit_data = fill_data['财务填报']['利润表'][0]
profit = ProfitSheet()
profit.operating_income = profit_data['营业收入']
profit.operating_cost = profit_data['营业成本']
profit.total_profit = profit_data['利润总额']
profit.net_profit = profit_data['净利润']
self.profit_sheet = profit
def update_appendix_sheet():
"""补充数据表"""
appendix_data = fill_data['财务填报']['补充数据表'][0]
appendix = AppendixDataSheet()
appendix.rd_expenses = appendix_data['研发费用']
appendix.interest_disbursement = appendix_data['计入财务费的利息支出']
appendix.interest_expense = appendix_data['资本化利息支出']
self.appendix_sheet = appendix
def _main_():
update_balance_sheet()
update_profit_sheet()
update_appendix_sheet()
_main_()
def __main__():
update_rating_result()
financial_indicator()
financial_sheet()
result = self.dict_to_save()
del result['企业ID']
self.db_tfse.update_single_data(
'企业数据',
'企业数据_更新汇总',
{'企业ID': self.cid},
result
)
__main__()
def update_esg_data(self, rid):
"""更新ESG相关数据"""
rating_result = self.db_tfse.find_single_data(
'ESG评价数据',
'评价结果',
{'评价ID': rid},
['企业ID', '评价等级', '评价年度', 'ESG得分', '环境得分', '社会得分', '公司治理得分', '评价时间']
)
cid = rating_result['企业ID']
del rating_result['企业ID']
rating_result['评价ID'] = rid
self.esg_rating_result = rating_result
result = self.dict_to_save()
self.db_tfse.update_single_data(
'企业数据',
'企业数据_更新汇总',
{'企业ID': cid},
result
)
class CreditAnalysisImpl(ComprehensiveCreditAnalysis):
"""综合信用分析类"""
@ -459,7 +585,7 @@ class FinancialAnalysisImpl(FinancialElementsAnalysis):
index_value = json.loads(df_this[
['净资产收益率', '总资产报酬率', '总资产周转率', '应收账款周转率', '存货周转率', '资产负债率', '已获利息倍数', '速动比率',
'营业增长率', '总资产增长率', '技术投入比率']].apply(
lambda x: '{}%'.format(x.values[0]) if '' in x.name else x.values[0]).T.to_json())
lambda x: '{}%'.format(x.values[0]) if '' in x.name or '倍数' in x.name else x.values[0]).T.to_json())
rate = dict()
rate['净资产收益率'] = rating_result['财务评分']['盈利能力']['净资产收益率'] / 8
rate['总资产报酬率'] = rating_result['财务评分']['盈利能力']['总资产报酬率'] / 8
@ -499,7 +625,7 @@ class FinancialAnalysisImpl(FinancialElementsAnalysis):
score_index.debt_risk = rating_result['财务评分']['债务风险']['合计']
score_index.business_growth = rating_result['财务评分']['经营增长']['合计']
compare.year = df_this['年报期'][0]
compare.index = score_index.dict_to_save()
compare.index = score_index
self.compare_to_years.append(compare.dict_to_save())
def score_last_script():
@ -511,7 +637,7 @@ class FinancialAnalysisImpl(FinancialElementsAnalysis):
score_index.debt_risk = score_last_origin['债务风险']['合计']
score_index.business_growth = score_last_origin['经营增长']['合计']
compare.year = df_last['年报期'][1]
compare.index = score_index.dict_to_save()
compare.index = score_index
self.compare_to_years.append(compare.dict_to_save())
score_actl_script()
@ -541,6 +667,7 @@ class FinancialAnalysisImpl(FinancialElementsAnalysis):
company_level()
average_level()
self.compare_to_industry = compare_industry
def delta_to_year():
"""财务得分较去年变化"""
@ -585,4 +712,174 @@ class BusinessAnalysisImpl(BusinessElementsAnalysis):
db = MongoHelper("tfse_v0.21")
def risk_analysis_etl(self):
pass
rating_result = self.db.find_single_data(
'综信评价数据',
'评价结果',
{"评价ID": self.rid},
["企业ID", "企业名称", "风险评分"]
)
risk_data = self.db.find_single_data(
'综信评价数据',
'风险数据',
{"评价ID": self.rid},
["合规风险", "经营风险"]
)
def head_info():
self.cid = rating_result['企业ID']
self.update_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
def risk_relative_score():
"""风险分数"""
risk_score = rating_result['风险评分']['合计']
self.risk_score = 100 if risk_score/43 >= 1 else round(risk_score/43*100, 2)
def risk_level():
"""风险级别"""
risk_score = rating_result['风险评分']['合计']
if risk_score >= 43:
level = ''
elif risk_score >= 33:
level = '较高'
elif risk_score >= 23:
level = '中等'
elif risk_score >= 10:
level = '警示'
else:
level = ''
self.risk_level = level
def risk_num():
"""风险数量"""
self.risk_quantity = sum(risk_data['合规风险'].values()) + sum(risk_data['经营风险'].values())
def is_break_trust():
"""列入失信人名单"""
self.untrustworthy_list = '' if risk_data['合规风险']['失信人'] >= 1 else ''
def eligibility_risk():
"""合规风险"""
def degree_of_impact(param):
if param.name in ['失信人', '严重违法']:
impact = '严重'
elif param.name in ['经营异常', '欠税公告', '税收违法']:
impact = '异常'
elif param.name in ['立案信息', '行政处罚', '环保处罚']:
impact = '中等'
else:
impact = ''
return impact
df = pd.DataFrame({'合规风险': risk_data['合规风险']})
df = df.drop(df[df['合规风险'] == 0].index)
df['影响程度'] = df.T.apply(lambda x: degree_of_impact(x))
df_list = df_iterrows(df)
self.compliance_risk = list()
if df_list:
for item in df_list:
cr = self.ComplianceRisk()
cr.genre = item[0]
cr.quantity = item[1]
cr.affect = item[2]
self.compliance_risk.append(cr.dict_to_save())
def operating_risk():
"""经营风险"""
def degree_of_impact(param):
if param.name in ['开庭公告', '法院公告', '诉讼', '送达公告'] and param.values[0] >= 50:
impact = '异常'
elif param.name in ['开庭公告', '法院公告', '诉讼', '送达公告'] and param.values[0] >= 25:
impact = '中等'
elif param.name in ['开庭公告', '法院公告', '诉讼', '送达公告'] and param.values[0] >= 10:
impact = '警示'
elif param.name in ['被执行人'] and param.values[0] >= 30:
impact = '异常'
elif param.name in ['被执行人'] and param.values[0] >= 15:
impact = '中等'
elif param.name in ['被执行人'] and param.values[0] >= 6:
impact = '警示'
elif param.name in ['股权出质'] and param.values[0] >= 10:
impact = '异常'
elif param.name in ['股权出质'] and param.values[0] >= 5:
impact = '中等'
elif param.name in ['股权出质'] and param.values[0] >= 3:
impact = '警示'
else:
impact = '轻微'
return impact
df = pd.DataFrame({'经营风险': risk_data['经营风险']})
df = df.drop(df[df['经营风险'] == 0].index)
df['影响程度'] = df.T.apply(lambda x: degree_of_impact(x))
df_list = df_iterrows(df)
self.operational_risk = list()
if df_list:
for item in df_list:
or_ = self.OperationalRisk()
or_.genre = item[0]
or_.quantity = item[1]
or_.affect = item[2]
self.compliance_risk.append(or_.dict_to_save())
def associate_risk():
"""周边风险"""
data = associate_risk_detail(rating_result['企业名称'])
self.peripheral_risk = list()
if data:
df_list = df_iterrows(pd.DataFrame(data).sort_values('total', ascending=False).set_index('title'))
for item in df_list:
pr = self.PeripheralRisk()
pr.genre = item[0]
pr.quantity = item[1]
pr.detail = item[2]
self.peripheral_risk.append(pr.dict_to_save())
def change_log():
"""变更记录"""
data = change_log_detail(rating_result['企业名称'])
def degree_of_impact(param):
if param.name in ['法定代表人变更', '主要人员变更'] and param.values[0] >= 20:
impact = '异常'
elif param.name in ['法定代表人变更', '主要人员变更'] and param.values[0] >= 10:
impact = '中等'
elif param.name in ['法定代表人变更', '主要人员变更'] and param.values[0] >= 4:
impact = '警示'
else:
impact = '轻微'
return impact
df = pd.DataFrame(data).sort_values('total', ascending=False).set_index('title')
df['影响程度'] = df.T.apply(lambda x: degree_of_impact(x))
df_list = df_iterrows(df[['total', '影响程度']])
self.change_log = list()
for item in df_list:
cl = self.ChangeLog()
cl.genre = item[0]
cl.quantity = item[1]
cl.affect = item[2]
self.change_log.append(cl.dict_to_save())
def _main_():
head_info()
risk_relative_score()
risk_level()
risk_num()
is_break_trust()
eligibility_risk()
operating_risk()
associate_risk()
change_log()
result = self.dict_to_save()
self.db.upsert_single_data(
'企业数据',
'经营风险分析',
{'评价ID': self.rid},
result
)
_main_()

View File

@ -121,25 +121,25 @@ class AppendixDataSheet(SpecObject):
interest_expense = ValidateAttr(field='interest_expense', type=float)
fields_map = {
'rd_expenses': '研发费用异常',
'interest_disbursement': '计入财务费的利息支出异常',
'interest_expense': '资本化利息支出异常'
'rd_expenses': '研发费用',
'interest_disbursement': '计入财务费的利息支出',
'interest_expense': '资本化利息支出'
}
class FinancialIndex(SpecObject):
"""财务指标"""
roe = ValidateAttr(field="roe", type=float)
inventory_turnover = ValidateAttr(field="inventory_turnover", type=float)
interest_multiple = ValidateAttr(field="interest_multiple", type=float)
accounts_receivable_turnover = ValidateAttr(field="accounts_receivable_turnover", type=float)
total_asset_turnover = ValidateAttr(field="total_asset_turnover", type=float)
total_asset_growth_rate = ValidateAttr(field="total_asset_growth_rate", type=float)
roa = ValidateAttr(field="roa", type=float)
technology_investment_ratio = ValidateAttr(field="technology_investment_ratio", type=float)
operating_growth_rate = ValidateAttr(field="operating_growth_rate", type=float)
assets_and_liabilities = ValidateAttr(field="assets_and_liabilities", type=float)
quick_ratio = ValidateAttr(field="quick_ratio", type=float)
inventory_turnover = ValidateAttr(field="inventory_turnover", type=(float, int))
interest_multiple = ValidateAttr(field="interest_multiple", type=(float, int))
accounts_receivable_turnover = ValidateAttr(field="accounts_receivable_turnover", type=(float, int))
total_asset_turnover = ValidateAttr(field="total_asset_turnover", type=(float, int))
total_asset_growth_rate = ValidateAttr(field="total_asset_growth_rate", type=(float, int))
roa = ValidateAttr(field="roa", type=(float, int))
technology_investment_ratio = ValidateAttr(field="technology_investment_ratio", type=(float, int))
operating_growth_rate = ValidateAttr(field="operating_growth_rate", type=(float, int))
assets_and_liabilities = ValidateAttr(field="assets_and_liabilities", type=(float, int))
quick_ratio = ValidateAttr(field="quick_ratio", type=(float, int))
fields_map = {
"roe": "净资产收益率",
@ -168,7 +168,6 @@ class CompanyData(SpecObject):
main_members = ValidateAttr(field="main_members", instance_list=MainMember)
balance_sheet = ValidateAttr(field='balance_sheet', type=BalanceSheet)
profit_sheet = ValidateAttr(field='profit_sheet', type=ProfitSheet)
# income_sheet = {}
appendix_sheet = ValidateAttr(field='appendix_sheet', type=AppendixDataSheet)
fin_index = ValidateAttr(field='fin_index', type=FinancialIndex)
cc_rating_result = ValidateAttr(field='cc_rating_result', type=dict)
@ -444,10 +443,10 @@ class FinancialElementsAnalysis(SpecObject):
class DeltaToYears(SpecObject):
"""财务得分较去年变化"""
profitability = ValidateAttr(field='profitability', type=(int, float))
asset_quality = ValidateAttr(field='asset_quality', type=(int, float))
debt_risk = ValidateAttr(field='debt_risk', type=(int, float))
business_growth = ValidateAttr(field='business_growth', type=(int, float))
profitability = ValidateAttr(field='profitability', type=str)
asset_quality = ValidateAttr(field='asset_quality', type=str)
debt_risk = ValidateAttr(field='debt_risk', type=str)
business_growth = ValidateAttr(field='business_growth', type=str)
fields_map = {
"profitability": "盈利能力",
@ -458,10 +457,10 @@ class FinancialElementsAnalysis(SpecObject):
class DeltaToIndustry(SpecObject):
"""财务得分较同行差异"""
profitability = ValidateAttr(field='profitability', type=(int, float))
asset_quality = ValidateAttr(field='asset_quality', type=(int, float))
debt_risk = ValidateAttr(field='debt_risk', type=(int, float))
business_growth = ValidateAttr(field='business_growth', type=(int, float))
profitability = ValidateAttr(field='profitability', type=str)
asset_quality = ValidateAttr(field='asset_quality', type=str)
debt_risk = ValidateAttr(field='debt_risk', type=str)
business_growth = ValidateAttr(field='business_growth', type=str)
fields_map = {
"profitability": "盈利能力",
@ -472,9 +471,9 @@ class FinancialElementsAnalysis(SpecObject):
class IndexDetails(SpecObject):
"""指标详情"""
index = ValidateAttr(field='', type=str)
value = ValidateAttr(field='', type=str)
level = ValidateAttr(field='', type=str, in_list=['', '', '', '', ''])
index = ValidateAttr(field='index', type=str)
value = ValidateAttr(field='value', type=str)
level = ValidateAttr(field='level', type=str, in_list=['', '', '', '', ''])
fields_map = {
"index": "指标",
@ -486,7 +485,7 @@ class FinancialElementsAnalysis(SpecObject):
update_time = ValidateAttr(field='update_time', func=Validate.time_format)
rid = ValidateAttr(field='rid', type=str, length=8)
report_date = ValidateAttr(field='report_date', type=str, func=Validate.date_format)
compare_to_years = ValidateAttr(field='compare_to_years', length=2, instance_list=CompareToYears)
compare_to_years = ValidateAttr(field='compare_to_years', instance_list=CompareToYears)
compare_to_industry = ValidateAttr(field='compare_to_industry', type=CompareToIndustry)
delta_to_years = ValidateAttr(field='delta_to_years', type=DeltaToYears)
delta_to_industry = ValidateAttr(field='delta_to_industry', type=DeltaToIndustry)
@ -567,3 +566,17 @@ class BusinessElementsAnalysis(SpecObject):
peripheral_risk = ValidateAttr(field='peripheral_risk', instance_list=PeripheralRisk)
change_log = ValidateAttr(field='change_log', instance_list=ChangeLog)
fields_map = {
"cid": "企业ID",
"rid": "评价ID",
"update_time": "更新日期",
"risk_score": "风险分数",
"risk_level": "风险级别",
"risk_quantity": "风险数量",
"untrustworthy_list": "列入失信名单",
"compliance_risk": "合规风险",
"operational_risk": "经营风险",
"peripheral_risk": "周边风险",
"change_log": "变更记录"
}

View File

@ -1,6 +1,6 @@
from flask import Blueprint, request
from CompanyData.CompanyDataImpl import CompanyDataImpl, CreditAnalysisImpl, FinancialAnalysisImpl
from CompanyData.CompanyDataImpl import CompanyDataImpl, CreditAnalysisImpl, FinancialAnalysisImpl, BusinessAnalysisImpl
from Utils.ErrorUtil import ReturnConditionCheckFailed
from common.utils import verify_token
from CompanyData.job_scripts import update_process_scripts
@ -44,13 +44,17 @@ def general_rating():
-
"""
try:
# credit_analysis = CreditAnalysisImpl()
# credit_analysis.rid = request.json['rid']
# credit_analysis.cc_rating_etl()
credit_analysis = CreditAnalysisImpl()
credit_analysis.rid = request.json['rid']
credit_analysis.cc_rating_etl()
financial_analysis = FinancialAnalysisImpl()
financial_analysis.rid = request.json['rid']
financial_analysis.financial_analysis_etl()
# company_index.risk_analysis_etl()
business_analysis = BusinessAnalysisImpl()
business_analysis.rid = request.json['rid']
business_analysis.risk_analysis_etl()
company_data = CompanyDataImpl()
company_data.update_credit_data(request.json['rid'])
return {"info": "数据准备完成"}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
@ -70,9 +74,8 @@ def esg_rating():
Returns:
-
"""
rid = request.json['rid']
esg_rating_etl(rid)
company_data = CompanyDataImpl()
company_data.update_esg_data(request.json['rid'])
return {"info": "数据准备完成"}, 200