diff --git a/CompanyData/CompanyDataImpl.py b/CompanyData/CompanyDataImpl.py index b1cc023..8f69c2d 100644 --- a/CompanyData/CompanyDataImpl.py +++ b/CompanyData/CompanyDataImpl.py @@ -1,9 +1,12 @@ import json +import time + import requests from DBHelper.MongoHelper import MongoHelper from Utils.ErrorUtil import LogConditionCheckFailed -from CompanyData.CompanyDataObj import CompanyData, BasicInfo, ShareHolder, MainMember +from CompanyData.CompanyDataObj import CompanyData, BasicInfo, ShareHolder, MainMember, ComprehensiveCreditAnalysis, \ + CreditPerformance, MaxScore, IndicatorRadar, IndexScore, CreditAnalysis class CompanyDataImpl(CompanyData): @@ -170,3 +173,134 @@ class CompanyDataImpl(CompanyData): prepare_industry_l1() __main__() + + +class CompanyIndexImpl(ComprehensiveCreditAnalysis): + """企业主页数据实现类""" + db = MongoHelper("tfse_v0.21") + + def cc_rating_etl(self): + """准备综合评价信息数据""" + rating_record = self.db.find_single_data( + '企业数据', + '评价记录', + {"评价ID": self.rid}, + ["报告fid"] + ) + rating_result = self.db.find_single_data( + '综信评价数据', + '评价结果', + {"评价ID": self.rid}, + ["企业ID", "企业名称", "经营评分", "财务评分", "风险评分", "评价年度"] + ) + text_model = self.db.find_single_data( + '综信评价数据', + '报告数据', + {"评价ID": self.rid}, + ["行业选择", "报告内容"] + ) + + def result_head(): + """结果数据""" + self.cid = rating_result['企业ID'] + self.name = rating_result['企业名称'] + self.update_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + + def make_radar_chart(): + """综合信用指标表现雷达图数据""" + max_score = MaxScore() + max_score.environment = 10 + max_score.social_responsibility = 10 + max_score.corporate_governance = 16 + max_score.profitability = 18 + max_score.asset_quality = 18 + max_score.debt_risk = 18 + max_score.operational_growth = 18 + max_score.compliance_risk = 43 + max_score.cperational_risk = 10 + max_score.associated_risk = 10 + + index_score = IndexScore() + index_score.environment = rating_result['经营评分']["环境"] + index_score.social_responsibility = rating_result['经营评分']["社会责任"] + index_score.corporate_governance = rating_result['经营评分']["公司治理"] + index_score.profitability = rating_result['财务评分']["盈利能力"]['合计'] + index_score.asset_quality = rating_result['财务评分']["资产质量"]['合计'] + index_score.debt_risk = rating_result['财务评分']["债务风险"]['合计'] + index_score.operational_growth = rating_result['财务评分']["经营增长"]['合计'] + index_score.compliance_risk = round(43 - rating_result['风险评分']["合规风险"], 2) + index_score.cperational_risk = round(10 - rating_result['风险评分']["经营风险"]['合计'], 2) + index_score.associated_risk = round(10 - rating_result['风险评分']["关联风险"]['合计'], 2) + + indicator_radar = IndicatorRadar() + indicator_radar.max_score = index_score.dict_to_save() + indicator_radar.max_score = max_score.dict_to_save() + credit_performence = CreditPerformance() + credit_performence.indicator_radar = indicator_radar.dict_to_save() + self.performance = credit_performence.dict_to_save() + + def credit_analysis_content(): + """综合评价分析中信用分析数据""" + def business_analysis_content(): + """经营分析""" + describe = text_model['报告内容'][1]['章节内容'][0]['小节内容'][1]['段落'] + return describe + + def financial_analysis_content(): + """财务分析""" + if text_model['行业选择'][0] == '制造业': + describe = list() + describe.append(text_model['报告内容'][3]['章节内容'][0]['小节内容'][1]['段落']) + describe.append(text_model['报告内容'][3]['章节内容'][1]['小节内容'][2]['段落']) + describe = ''.join(describe) + else: + describe = text_model['报告内容'][3]['章节内容'][0]['小节内容'][2]['段落'] + return describe + + def risk_analysis_content(): + """风险分析""" + risk_01 = text_model['报告内容'][4]['章节内容'][0]['小节内容'][0]['段落'] + list_01 = risk_01.split(',') + risk_02 = text_model['报告内容'][4]['章节内容'][1]['小节内容'][0]['段落'] + list_02 = risk_02.split(',') + risk_03 = text_model['报告内容'][4]['章节内容'][2]['小节内容'][0]['段落'] + list_03 = risk_03.split(',') + describe = list() + describe.append(list_01[::-1][0]) + describe.append(list_02[::-1][0]) + describe.append(list_03[::-1][0]) + describe = ','.join(describe) + res = describe.replace('。', '', 2) + return res + + def evaluation_comments_content(): + """评价意见""" + describe = list() + eva_01 = text_model['报告内容'][5]['章节内容'][0]['小节内容'][0]['段落'] + eva_02 = text_model['报告内容'][5]['章节内容'][0]['小节内容'][1]['段落'] + eva_03 = text_model['报告内容'][5]['章节内容'][0]['小节内容'][2]['段落'] + describe.append(eva_01) + describe.append(eva_02) + describe.append(eva_03) + describe = ''.join(describe) + return describe + + credit_analysis = CreditAnalysis() + credit_analysis.management_analysis = business_analysis_content() + credit_analysis.finance_analysis = financial_analysis_content() + credit_analysis.risk_analysis = risk_analysis_content() + credit_analysis.evaluation_opinion = evaluation_comments_content() + credit_analysis.view_report = '/file/get_company_report?file_id={}'.format(rating_record['报告fid']) + self.credit_analysis = credit_analysis.dict_to_save() + + def rating_history(): + """历史级别""" + + + def financial_analysis(self): + """准备财务要素信息""" + pass + + def risk_analysis_etl(self): + """准备风险要素信息""" + pass diff --git a/CompanyData/CompanyDataObj.py b/CompanyData/CompanyDataObj.py index 5e6d7ad..02e1912 100644 --- a/CompanyData/CompanyDataObj.py +++ b/CompanyData/CompanyDataObj.py @@ -198,3 +198,188 @@ class CompanyData(SpecObject): def prepare_company_init_data(self): """准备企业初始化数据""" + + +class IndexScore(SpecObject): + """指标得分""" + environment = ValidateAttr(field='environment', type=(int, float)) + social_responsibility = ValidateAttr(field='social_responsibility', type=(int, float)) + corporate_governance = ValidateAttr(field='corporate_governance', type=(int, float)) + 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)) + operational_growth = ValidateAttr(field='operational_growth', type=(int, float)) + compliance_risk = ValidateAttr(field='compliance_risk', type=(int, float)) + cperational_risk = ValidateAttr(field='cperational_risk', type=(int, float)) + associated_risk = ValidateAttr(field='associated_risk', type=(int, float)) + + fields_map = { + "environment": "环境", + "social_responsibility": "社会责任", + "corporate_governance": "公司治理", + "profitability": "盈利能力", + "asset_quality": "资产质量", + "debt_risk": "债务风险", + "operational_growth": "经营增长", + "compliance_risk": "合规风险", + "cperational_risk": "经营风险", + "associated_risk": "关联风险" + } + + +class MaxScore(SpecObject): + """最大分数""" + environment = ValidateAttr(field='environment', type=int) + social_responsibility = ValidateAttr(field='social_responsibility', type=int) + corporate_governance = ValidateAttr(field='corporate_governance', type=int) + profitability = ValidateAttr(field='profitability', type=int) + asset_quality = ValidateAttr(field='asset_quality', type=int) + debt_risk = ValidateAttr(field='debt_risk', type=int) + operational_growth = ValidateAttr(field='operational_growth', type=int) + compliance_risk = ValidateAttr(field='compliance_risk', type=int) + cperational_risk = ValidateAttr(field='cperational_risk', type=int) + associated_risk = ValidateAttr(field='associated_risk', type=int) + + fields_map = { + "environment": "环境", + "social_responsibility": "社会责任", + "corporate_governance": "公司治理", + "profitability": "盈利能力", + "asset_quality": "资产质量", + "debt_risk": "债务风险", + "operational_growth": "经营增长", + "compliance_risk": "合规风险", + "cperational_risk": "经营风险", + "associated_risk": "关联风险" + } + + +class IndicatorRadar(SpecObject): + """指标雷达""" + index_score = ValidateAttr(field='index_score', type=IndexScore) + max_score = ValidateAttr(field='max_score', type=MaxScore) + + fields_map = { + "index_score": "指标得分", + "max_score": "最大分数" + } + + +class CreditPerformance(SpecObject): + """综合信用表现""" + indicator_radar = ValidateAttr(field='indicator_radar', type=IndicatorRadar) + + fields_map = { + "indicator_radar": "指标雷达" + } + + +class CreditAnalysis(SpecObject): + """信用分析""" + management_analysis = ValidateAttr(field='management_analysis', type=str) + finance_analysis = ValidateAttr(field='finance_analysis', type=str) + risk_analysis = ValidateAttr(field='risk_analysis', type=str) + evaluation_opinion = ValidateAttr(field='evaluation_opinion', type=str) + view_report = ValidateAttr(field='view_report', type=str) + + fields_map = { + "management_analysis": "经营分析", + "finance_analysis": "财务分析", + "risk_analysis": "风险分析", + "evaluation_opinion": "评价意见", + "view_report": "查看报告" + } + + +class FinancialIndicators(SpecObject): + """财务指标""" + profitability = ValidateAttr(field='financial_indicators', in_list=['高', '中', '低', '差']) + asset_quality = ValidateAttr(field='asset_quality', in_list=['高', '中', '低', '差']) + debt_risk = ValidateAttr(field='debt_risk', in_list=['高', '中', '低', '差']) + operating_growth = ValidateAttr(field='operating_growth', in_list=['高', '中', '低', '差']) + + fields_map = { + "profitability": "盈利能力", + "asset_quality": "资产质量", + "debt_risk": "债务风险", + "operating_growth": "经营增长" + } + + +class RiskIndicators(SpecObject): + """风险指标""" + compliance_risk = ValidateAttr(field='compliance_risk', in_list=['高', '中', '低', '差']) + operational_risk = ValidateAttr(field='operational_risk', in_list=['高', '中', '低', '差']) + associated_risk = ValidateAttr(field='associated_risk', in_list=['高', '中', '低', '差']) + + fields_map = { + "compliance_risk": "合规风险", + "operational_risk": "经营风险", + "associated_risk": "关联风险" + } + + +class OperatingIndicators(SpecObject): + """经营指标""" + environmental = ValidateAttr(field='environmental', in_list=['高', '中', '低', '差']) + social_responsibility = ValidateAttr(field='social_responsibility', in_list=['高', '中', '低', '差']) + corporate_governance = ValidateAttr(field='corporate_governance', in_list=['高', '中', '低', '差']) + + fields_map = { + "environmental": "环境", + "social_responsibility": "社会责任", + "corporate_governance": "公司治理" + } + + +class IndexTable(SpecObject): + """指标表格""" + financial_indicators = ValidateAttr(field='financial_indicators', type=FinancialIndicators) + risk_indicators = ValidateAttr(field='risk_indicators', type=RiskIndicators) + operating_indicators = ValidateAttr(field='operating_indicators', type=OperatingIndicators) + + fields_map = { + "financial_indicators": "财务指标", + "risk_indicators": "风险指标", + "operating_indicators": "经营指标" + } + + +class HistoryLevel(SpecObject): + """历史级别""" + credit_rating = ValidateAttr(field='credit_rating', type=str) + credit_score = ValidateAttr(field='credit_score', type=(float, int)) + evaluation_time = ValidateAttr(field='evaluation_time', type=str) + evaluation_method = ValidateAttr(field='evaluation_method', type=str, in_list=['企业申报']) + change_trend = ValidateAttr(field='change_trend', type=str) + + fields_map = { + "credit_rating": "信用等级", + "credit_score": "信用评分", + "evaluation_time": "评价时间", + "evaluation_method": "评价方式", + "change_trend": "变化趋势" + } + + +class ComprehensiveCreditAnalysis(SpecObject): + """综合信用分析""" + cid = ValidateAttr(field='cid', type=str, length=8) + rid = ValidateAttr(field='rid', type=str, length=8) + name = ValidateAttr(field='name', type=str) + update_time = ValidateAttr(field='update_time', type=str) + performance = ValidateAttr(field='performance', type=CreditPerformance) + credit_analysis = ValidateAttr(field='credit_analysis', type=CreditAnalysis) + index_table = ValidateAttr(field='index_table', type=IndexTable) + history_level = ValidateAttr(field='history_level', instance_list=HistoryLevel) + + fields_map = { + "cid": "企业ID", + "rid": "评价ID", + "name": "企业名称", + "update_time": "更新时间", + "performance": "综合信用表现", + "analysis": "信用分析", + "index_table": "指标表格", + "history_level": "历史级别" + } \ No newline at end of file diff --git a/CompanyData/CompanyDataRoutes.py b/CompanyData/CompanyDataRoutes.py index 3445c88..659cf25 100644 --- a/CompanyData/CompanyDataRoutes.py +++ b/CompanyData/CompanyDataRoutes.py @@ -1,6 +1,6 @@ from flask import Blueprint, request -from CompanyData.CompanyDataImpl import CompanyDataImpl +from CompanyData.CompanyDataImpl import CompanyDataImpl, CompanyIndexImpl from Utils.ErrorUtil import ReturnConditionCheckFailed from common.utils import verify_token from CompanyData.job_scripts import * @@ -43,13 +43,18 @@ def general_rating(): Returns: - """ - rid = request.json['rid'] - - cc_rating_etl(rid) - financial_analysis(rid) - risk_analysis_etl(rid) - - return {"info": "数据准备完成"}, 200 + try: + company_index = CompanyIndexImpl() + company_index.cid = request.json['rid'] + company_index.cc_rating_etl() + company_index.financial_analysis() + company_index.risk_analysis_etl() + return {"info": "数据准备完成"}, 200 + except ReturnConditionCheckFailed as e: + e.log_error() + return {"info": e.failed_info}, e.status_code + except KeyError: + return {"info": "参数错误"}, 400 @company_route.route('/esg_index_etl', methods=['POST'])