Merge branch 'v0.21' into 'master'

经营风险

See merge request root/tfse_admin!34
This commit is contained in:
FECR-IBD 2022-04-19 07:36:11 +00:00
commit 7eb64fa3f6
4 changed files with 112 additions and 8 deletions

View File

@ -73,10 +73,10 @@ class CompanyIndexApiImpl(CompanyIndexApi):
update_time = CompanyIndexApi.UpdateTime() update_time = CompanyIndexApi.UpdateTime()
basic_info = CompanyIndexApi.BasicInfo() basic_info = CompanyIndexApi.BasicInfo()
financial_data = CompanyIndexApi.FinancialData() financial_data = CompanyIndexApi.FinancialData()
operating_risk = CompanyIndexApi operating_risk = CompanyIndexApi.OperatingRisk()
financial_analysis = CompanyIndexApi financial_analysis = CompanyIndexApi.FinancialAnalysis()
cc_rating = CompanyIndexApi cc_rating = CompanyIndexApi.CCRating()
esg_rating = CompanyIndexApi esg_rating = CompanyIndexApi.ESGRating()
def get_head_info(self): def get_head_info(self):
"""获取头部信息""" """获取头部信息"""
@ -129,8 +129,8 @@ class CompanyIndexApiImpl(CompanyIndexApi):
result = {'工商信息': {}, "股东信息": {}, "主要成员": {}} result = {'工商信息': {}, "股东信息": {}, "主要成员": {}}
self.basic_info.business_info = self.dict_to_set(instance=self.basic_info.BusinessInfo, data=result['工商信息']) self.basic_info.business_info = self.dict_to_set(instance=self.basic_info.BusinessInfo, data=result['工商信息'])
self.basic_info.share_holder = self.instance_list_to_set(instance_list_type=self.basic_info.ShareHolder, data=result['股东信息']) self.basic_info.share_holder = self.instance_list_to_set(instance=self.basic_info.ShareHolder, data=result['股东信息'])
self.basic_info.main_member = self.instance_list_to_set(instance_list_type=self.basic_info.MainMember, data=result['主要成员']) self.basic_info.main_member = self.instance_list_to_set(instance=self.basic_info.MainMember, data=result['主要成员'])
def get_financial_data(self): def get_financial_data(self):
"""获取财务数据""" """获取财务数据"""
@ -149,3 +149,30 @@ class CompanyIndexApiImpl(CompanyIndexApi):
self.financial_data.profit_sheet = self.dict_to_set(instance=self.financial_data.ProfitSheet, data=result['利润表']) self.financial_data.profit_sheet = self.dict_to_set(instance=self.financial_data.ProfitSheet, data=result['利润表'])
self.financial_data.appendix_data = self.dict_to_set(instance=self.financial_data.AppendixDataSheet, data=result['补充数据表']) self.financial_data.appendix_data = self.dict_to_set(instance=self.financial_data.AppendixDataSheet, data=result['补充数据表'])
self.financial_data.financial_index = self.dict_to_set(instance=self.financial_data.FinancialIndex, data=result['财务指标']) self.financial_data.financial_index = self.dict_to_set(instance=self.financial_data.FinancialIndex, data=result['财务指标'])
def get_operating_risk(self):
"""获取经营风险分析"""
if self.operating_risk.__dict__.__contains__('update_time'):
find_body = {"企业ID": self.operating_risk.cid, "更新时间": self.operating_risk.update_time}
else:
find_body = {"企业ID": self.operating_risk.cid}
result = self.db.find_single_data(
"企业数据",
"经营风险分析",
find_body,
["评价ID", "风险级别", "风险分数", "列入失信名单", "合规风险", "经营风险", "周边风险", "变更记录"]
)
if not result:
result = {'评价ID': None, "风险级别": None, "风险分数": None, "列入失信名单": None, "合规风险": {}, "经营风险": {}, "周边风险": {}, "变更记录": {}}
self.operating_risk.rid = result['评价ID']
self.operating_risk.risk_level = result['风险级别']
self.operating_risk.risk_score = result['风险分数']
self.operating_risk.in_untrustworthy_list = result['列入失信名单']
self.operating_risk.compliance_risk = self.instance_list_to_set(instance=self.OperatingRisk().InfluenceObj, data=result['合规风险'])
self.operating_risk.operating_risk = self.instance_list_to_set(instance=self.OperatingRisk().InfluenceObj, data=result['经营风险'])
self.operating_risk.peripheral_risk = self.instance_list_to_set(instance=self.OperatingRisk().DetailObj, data=result['周边风险'])
self.operating_risk.change_records = self.instance_list_to_set(instance=self.OperatingRisk().InfluenceObj, data=result['变更记录'])

View File

@ -323,6 +323,66 @@ class CompanyIndexApi(SpecObject):
"financial_index": "财务指标" "financial_index": "财务指标"
} }
class OperatingRisk(SpecObject):
"""经营风险"""
class InfluenceObj(SpecObject):
"""影响统计"""
name = ValidateAttr(field='name', type=str)
total = ValidateAttr(field='total', type=int)
influence = ValidateAttr(field='influence', type=str)
fields_map = {
"name": "类型",
"total": "数量",
"influence": "影响"
}
class DetailObj(SpecObject):
"""详细统计"""
name = ValidateAttr(field='name', type=str)
total = ValidateAttr(field='total', type=int)
detail = ValidateAttr(field='detail', type=list)
fields_map = {
"name": "类型",
"total": "数量",
"detail": "详情"
}
cid = ValidateAttr(field='cid', type=str, length=8, default=None)
update_time = ValidateAttr(field='update_time', func=Validate.time_format)
rid = ValidateAttr(field='rid', type=str, length=8, default='')
risk_level = ValidateAttr(field='risk_level', type=str, in_list=['', '较高', '中等', '警示', ''], default='')
risk_score = ValidateAttr(field='risk_score', type=[int, float], default='')
in_untrustworthy_list = ValidateAttr(field='in_untrustworthy_list', type=str, in_list=["", ""], default='')
compliance_risk = ValidateAttr(field='compliance_risk', instance_list=InfluenceObj)
operating_risk = ValidateAttr(field='operating_risk', instance_list=InfluenceObj)
peripheral_risk = ValidateAttr(field='peripheral_risk', instance_list=DetailObj)
change_records = ValidateAttr(field='change_records', instance_list=InfluenceObj)
fields_map = {
"cid": "企业ID",
"update_time": "更新时间",
"rid": "评价ID",
"risk_level": "风险级别",
"risk_score": "风险分数",
"in_untrustworthy_list": "列入失信名单",
"compliance_risk": "合规风险统计",
"operating_risk": "经营风险统计",
"peripheral_risk": "周边风险统计",
"change_records": "变更记录统计"
}
class FinancialAnalysis(SpecObject):
"""财务分析"""
class CCRating(SpecObject):
"""综信评价分析"""
class ESGRating(SpecObject):
"""ESG评价分析"""
def get_head_info(self): def get_head_info(self):
"""头部信息""" """头部信息"""

View File

@ -103,7 +103,7 @@ def basic_info_route(**kwargs):
@company_route.route('/financial_data', methods=['POST']) @company_route.route('/financial_data', methods=['POST'])
@verify_token @verify_token
def financial_data_route(**kwargs): def financial_data_route(**kwargs):
"""""" """获取财务数据"""
try: try:
req = request.json req = request.json
impl = CompanyIndexApiImpl() impl = CompanyIndexApiImpl()
@ -116,6 +116,23 @@ def financial_data_route(**kwargs):
return {"info": e.failed_info}, e.status_code return {"info": e.failed_info}, e.status_code
@company_route.route('/operating_risk', methods=['POST'])
@verify_token
def operating_risk_route(**kwargs):
"""经营风险分析"""
try:
req = request.json
impl = CompanyIndexApiImpl()
impl.operating_risk.cid = req['cid']
if req.__contains__('update_time'):
impl.operating_risk.update_time = req['update_time']
impl.get_operating_risk()
result = impl.operating_risk.dict_to_show(columns=["评价ID", "风险级别", "风险分数", "列入失信名单", "合规风险统计", "经营风险统计", "周边风险统计", "变更记录统计"])
return result, 200
except ReturnConditionCheckFailed as e:
return {"info": e.failed_info}, e.status_code
@company_route.route('/index', methods=['POST']) @company_route.route('/index', methods=['POST'])
@verify_token @verify_token
def index_route(**kwargs): def index_route(**kwargs):

View File

@ -66,7 +66,7 @@ class SpecObject(object):
"""实例数组设值""" """实例数组设值"""
list_ = list() list_ = list()
for item in list(kwargs['data']): for item in list(kwargs['data']):
instance = kwargs['instance_list_type']() instance = kwargs['instance']()
fields_map = dict([v, k] for k, v in instance.fields_map.items()) fields_map = dict([v, k] for k, v in instance.fields_map.items())
for field in list(item.keys()): for field in list(item.keys()):
instance.__setattr__(fields_map[field], item[field]) instance.__setattr__(fields_map[field], item[field])