1058 lines
47 KiB
Python
1058 lines
47 KiB
Python
import json
|
||
import os
|
||
import datetime
|
||
import requests
|
||
import time
|
||
|
||
from DBHelper.MongoHelper import MongoHelper
|
||
from Report.PdfReport import ReportGenerator
|
||
from Report.ReportObj import ReportData
|
||
from Report.scripts.path_tool import get_gen_report_path
|
||
from common.scripts import update_process_status
|
||
|
||
|
||
class HandleReportData:
|
||
"""处理报告数据"""
|
||
report_data = None
|
||
report_template = None
|
||
|
||
def handle_cc_rating_report(self):
|
||
"""处理综信报告"""
|
||
|
||
def handle_paragraph_01(param):
|
||
"""
|
||
摘要
|
||
Parameters:
|
||
param: 摘要部分报告内容
|
||
Returns:
|
||
result: 处理好的报告内容
|
||
"""
|
||
data = self.report_data['报告模板'][0]['摘要']
|
||
|
||
def handle_part_01():
|
||
"""
|
||
评价结果
|
||
"""
|
||
param[0]['小节内容'][0]['段落'] = param[0]['小节内容'][0]['段落'].format(**data['评价结果'][0])
|
||
param[0]['小节内容'][1]['段落'] = param[0]['小节内容'][1]['段落'].format(**data['评价结果'][1])
|
||
|
||
def handle_part_02():
|
||
"""
|
||
主要财务数据
|
||
"""
|
||
param[1]['小节内容'][2]['表格'] = data['主要财务数据']
|
||
|
||
def handle_part_03():
|
||
"""
|
||
评价观点
|
||
"""
|
||
param[2]['小节内容'][0]['段落'] = param[2]['小节内容'][0]['段落'].format(**data['评价观点'][0])
|
||
param[2]['小节内容'][1]['段落'] = param[2]['小节内容'][1]['段落'].format(**data['评价观点'][1])
|
||
param[2]['小节内容'][2]['段落'] = param[2]['小节内容'][2]['段落'].format(**data['评价观点'][2])
|
||
param[2]['小节内容'][3]['段落'] = param[2]['小节内容'][3]['段落'].format(**data['评价观点'][3])
|
||
|
||
def handle_part_04():
|
||
"""
|
||
关注
|
||
"""
|
||
param[3]['小节内容'][0]['段落'] = param[3]['小节内容'][0]['段落'].format(**data['关注'][0])
|
||
param[3]['小节内容'][1]['段落'] = param[3]['小节内容'][1]['段落'].format(**data['关注'][1])
|
||
param[3]['小节内容'][2]['段落'] = param[3]['小节内容'][2]['段落'].format(**data['关注'][2])
|
||
|
||
# 调用子方法
|
||
handle_part_01()
|
||
handle_part_02()
|
||
handle_part_03()
|
||
handle_part_04()
|
||
|
||
return param
|
||
|
||
def handle_paragraph_02(param):
|
||
"""
|
||
公司概况
|
||
Parameters:
|
||
param: 公司概况部分报告内容
|
||
Returns:
|
||
result: 处理好的报告内容
|
||
"""
|
||
data = self.report_data['报告模板'][1]['一、公司概况']
|
||
|
||
def handle_part_01():
|
||
"""
|
||
公司背景
|
||
"""
|
||
param[0]['小节内容'][0]['段落'] = param[0]['小节内容'][0]['段落'].format(**data['公司背景'][0])
|
||
param[0]['小节内容'][1]['段落'] = param[0]['小节内容'][1]['段落'].format(**data['公司背景'][1])
|
||
|
||
def handle_part_02():
|
||
"""
|
||
股东实力
|
||
股东分为企业和自然人,如果股东为企业显示前两段,为自然人只显示最后一段
|
||
"""
|
||
# 判断返回的数据长度,为2是企业,为1是自然人
|
||
if len(data['股东实力']) == 1:
|
||
param[1]['小节内容'][2]['段落'] = param[1]['小节内容'][2]['段落'].format(**data['股东实力'][0])
|
||
# 删除前两段描述语句
|
||
del param[1]['小节内容'][0]
|
||
del param[1]['小节内容'][0]
|
||
else:
|
||
# 删除末尾语句
|
||
del param[1]['小节内容'][2]
|
||
param[1]['小节内容'][0]['段落'] = param[1]['小节内容'][0]['段落'].format(**data['股东实力'][0])
|
||
param[1]['小节内容'][1]['段落'] = param[1]['小节内容'][1]['段落'].format(**data['股东实力'][1])
|
||
|
||
def handle_part_03():
|
||
"""
|
||
对外投资
|
||
分为两种情况:一种是有对外投资数据,则只处理第一段和第四段,其他描述语句保留
|
||
另一种是没有对外投资数据,只显示返回的一句描述语句其他描述语句删除
|
||
"""
|
||
if len(data['对外投资']) == 1:
|
||
param[2]['小节内容'] = list()
|
||
describe = dict()
|
||
describe['段落'] = data['对外投资'][0]['describe']
|
||
param[2]['小节内容'].append(describe)
|
||
else:
|
||
param[2]['小节内容'][0]['段落'] = param[2]['小节内容'][0]['段落'].format(**data['对外投资'][0])
|
||
param[2]['小节内容'][3]['表格'] = data['对外投资'][1]
|
||
|
||
def handle_part_04():
|
||
"""
|
||
业务状况
|
||
"""
|
||
pass
|
||
|
||
def handle_part_05():
|
||
"""
|
||
进出口权
|
||
"""
|
||
param[4]['小节内容'][0]['段落'] = param[4]['小节内容'][0]['段落'].format(**data['进出口权'][0])
|
||
|
||
def handle_part_06():
|
||
"""
|
||
知识产权
|
||
"""
|
||
param[5]['小节内容'][0]['段落'] = param[5]['小节内容'][0]['段落'].format(**data['知识产权'][0])
|
||
param[5]['小节内容'][1]['段落'] = param[5]['小节内容'][1]['段落'].format(**data['知识产权'][1])
|
||
param[5]['小节内容'][2]['段落'] = param[5]['小节内容'][2]['段落'].format(**data['知识产权'][2])
|
||
|
||
def handle_part_07():
|
||
"""
|
||
荣誉资质(制造业)
|
||
荣誉资质共六段,如果返回数据长度为1,则此企业没有荣誉资质,只显示最后一段话,
|
||
如果长度大于1,则先处理第一段和第二段,第一段中返回字段存在无则删除此段
|
||
"""
|
||
if len(data['资质荣誉']) == 1:
|
||
param[6]['小节内容'] = list()
|
||
describe = dict()
|
||
describe['段落'] = '经查询,公司无技术、产品品质或品牌等方面的荣誉资质。'
|
||
param[6]['小节内容'].append(describe)
|
||
else:
|
||
param[6]['小节内容'][0]['段落'] = param[6]['小节内容'][0]['段落'].format(**data['资质荣誉'][0])
|
||
param[6]['小节内容'][1]['段落'] = param[6]['小节内容'][1]['段落'].format(**data['资质荣誉'][1])
|
||
param[6]['小节内容'][-2]['表格'] = data['资质荣誉'][2]
|
||
|
||
def handle_part_07_info():
|
||
"""
|
||
荣誉资质(信息技术业)
|
||
荣誉资质共六段,如果返回数据长度为1,则此企业没有荣誉资质,只显示最后一段话,
|
||
如果长度大于1,则先处理第一段和第二段,第一段中返回字段存在无则删除此段
|
||
"""
|
||
if len(data['资质荣誉']) == 1:
|
||
param[6]['小节内容'] = list()
|
||
describe = dict()
|
||
describe['段落'] = '经查询,公司无技术、产品品质或品牌等方面的荣誉资质。'
|
||
param[6]['小节内容'].append(describe)
|
||
else:
|
||
param[6]['小节内容'][0]['段落'] = param[6]['小节内容'][0]['段落'].format(**data['资质荣誉'][0])
|
||
param[6]['小节内容'][1]['段落'] = param[6]['小节内容'][1]['段落'].format(**data['资质荣誉'][1])
|
||
param[6]['小节内容'][2]['段落'] = param[6]['小节内容'][2]['段落'].format(**data['资质荣誉'][2])
|
||
param[6]['小节内容'][-2]['表格'] = data['资质荣誉'][3]
|
||
param_list = list()
|
||
for item in param[6]['小节内容']:
|
||
try:
|
||
if item['段落'] != '无数据':
|
||
param_list.append(item)
|
||
except KeyError:
|
||
param_list.append(item)
|
||
param[6]['小节内容'] = param_list
|
||
|
||
# 调用子方法
|
||
handle_part_01()
|
||
handle_part_02()
|
||
handle_part_03()
|
||
handle_part_04()
|
||
handle_part_05()
|
||
handle_part_06()
|
||
if self.report_data['行业选择'][0] == '制造业':
|
||
handle_part_07()
|
||
else:
|
||
handle_part_07_info()
|
||
return param
|
||
|
||
def handle_paragraph_03(param):
|
||
"""
|
||
ESG评价
|
||
Parameters:
|
||
param: ESG评价部分报告内容
|
||
Returns:
|
||
result: 处理好的报告内容
|
||
"""
|
||
data = self.report_data['报告模板'][2]['二、ESG评价']
|
||
|
||
def handle_part_01():
|
||
"""
|
||
环境治理
|
||
"""
|
||
param[0]['小节内容'][0]['段落'] = param[0]['小节内容'][0]['段落'].format(**data['环境治理'][0])
|
||
param[0]['小节内容'][1]['段落'] = param[0]['小节内容'][1]['段落'].format(**data['环境治理'][1])
|
||
|
||
def handle_part_02():
|
||
"""
|
||
社会责任
|
||
"""
|
||
param[1]['小节内容'][0]['段落'] = param[1]['小节内容'][0]['段落'].format(**data['社会责任'][0])
|
||
|
||
def handle_part_03():
|
||
"""
|
||
公司治理
|
||
"""
|
||
param[2]['小节内容'][0]['段落'] = param[2]['小节内容'][0]['段落'].format(**data['公司治理'][0])
|
||
|
||
# 调用子方法
|
||
handle_part_01()
|
||
handle_part_02()
|
||
handle_part_03()
|
||
return param
|
||
|
||
def handle_paragraph_04(param):
|
||
"""
|
||
财务分析
|
||
Parameters:
|
||
param: 财务分析部分报告内容
|
||
Returns:
|
||
result: 处理好的报告内容
|
||
"""
|
||
data = self.report_data['报告模板'][3]['三、财务分析']
|
||
|
||
def handle_part_01():
|
||
"""
|
||
盈利能力
|
||
"""
|
||
param[0]['小节内容'][1]['段落'] = param[0]['小节内容'][1]['段落'].format(**data['盈利能力'][1])
|
||
|
||
def handle_part_02():
|
||
"""
|
||
资产质量
|
||
"""
|
||
param[1]['小节内容'][2]['段落'] = param[1]['小节内容'][2]['段落'].format(**data['资产质量'][2])
|
||
|
||
def handle_part_03():
|
||
"""
|
||
债务风险
|
||
"""
|
||
param[2]['小节内容'][1]['段落'] = param[2]['小节内容'][1]['段落'].format(**data['债务风险'][1])
|
||
|
||
def handle_part_04():
|
||
"""
|
||
成长能力
|
||
"""
|
||
param[3]['小节内容'][1]['段落'] = param[3]['小节内容'][1]['段落'].format(**data['成长能力'][1])
|
||
|
||
# 调用子方法
|
||
handle_part_01()
|
||
handle_part_02()
|
||
handle_part_03()
|
||
handle_part_04()
|
||
return param
|
||
|
||
def handle_paragraph_04_info(param):
|
||
"""
|
||
财务分析(信息技术业)
|
||
Parameters:
|
||
param: 财务分析部分报告内容
|
||
Returns:
|
||
result: 处理好的报告内容
|
||
"""
|
||
data = self.report_data['报告模板'][3]['三、财务分析']
|
||
|
||
def handle_part_01():
|
||
"""
|
||
盈利能力
|
||
"""
|
||
param[0]['小节内容'][2]['段落'] = param[0]['小节内容'][2]['段落'].format(**data['盈利能力'][2])
|
||
|
||
def handle_part_02():
|
||
"""资产质量"""
|
||
param[1]['小节内容'][0]['段落'] = param[1]['小节内容'][0]['段落'].format(**data['资产质量'][0])
|
||
|
||
def handle_part_03():
|
||
"""
|
||
债务风险
|
||
"""
|
||
param[2]['小节内容'][1]['段落'] = param[2]['小节内容'][1]['段落'].format(**data['债务风险'][1])
|
||
|
||
def handle_part_04():
|
||
"""
|
||
成长能力
|
||
"""
|
||
param[3]['小节内容'][1]['段落'] = param[3]['小节内容'][1]['段落'].format(**data['成长能力'][1])
|
||
|
||
# 调用子方法
|
||
|
||
handle_part_01()
|
||
handle_part_02()
|
||
handle_part_03()
|
||
handle_part_04()
|
||
return param
|
||
|
||
def handle_paragraph_05(param):
|
||
"""
|
||
企业风险
|
||
Parameters:
|
||
param: 企业风险部分报告内容
|
||
Returns:
|
||
result: 处理好的报告内容
|
||
"""
|
||
data = self.report_data['报告模板'][4]['四、企业风险']
|
||
|
||
def handle_part_01():
|
||
"""
|
||
合规风险
|
||
"""
|
||
param[0]['小节内容'][0]['段落'] = param[0]['小节内容'][0]['段落'].format(**data['合规风险'][0])
|
||
|
||
def handle_part_02():
|
||
"""
|
||
经营风险
|
||
"""
|
||
param[1]['小节内容'][0]['段落'] = param[1]['小节内容'][0]['段落'].format(**data['经营风险'][0])
|
||
|
||
def handle_part_03():
|
||
"""
|
||
关联风险
|
||
"""
|
||
param[2]['小节内容'][0]['段落'] = param[2]['小节内容'][0]['段落'].format(**data['关联风险'][0])
|
||
|
||
# 调用子方法
|
||
handle_part_01()
|
||
handle_part_02()
|
||
handle_part_03()
|
||
return param
|
||
|
||
def handle_paragraph_06(param):
|
||
"""
|
||
评级结论
|
||
Parameters:
|
||
param: 评级结论部分报告内容
|
||
Returns:
|
||
result: 处理好的报告内容
|
||
"""
|
||
data = self.report_data['报告模板'][5]['五、评级结论']
|
||
|
||
def handle_part_01():
|
||
"""
|
||
结论
|
||
"""
|
||
param[0]['小节内容'][0]['段落'] = param[0]['小节内容'][0]['段落'].format(**data['结论'][0])
|
||
param[0]['小节内容'][1]['段落'] = param[0]['小节内容'][1]['段落'].format(**data['结论'][1])
|
||
param[0]['小节内容'][2]['段落'] = param[0]['小节内容'][2]['段落'].format(**data['结论'][2])
|
||
|
||
# 调用子方法
|
||
handle_part_01()
|
||
return param
|
||
|
||
def handle_paragraph_07(param):
|
||
"""
|
||
附录
|
||
Parameters:
|
||
param: 评级结论部分报告内容
|
||
Returns:
|
||
result: 处理好的报告内容
|
||
"""
|
||
data = self.report_data['报告模板'][6]['附录']
|
||
|
||
def handle_part_01():
|
||
"""
|
||
附录一
|
||
"""
|
||
param[0]['小节内容'][1]['表格'] = data['附录一']
|
||
|
||
# 调用子方法
|
||
handle_part_01()
|
||
return param
|
||
|
||
def manufacturing():
|
||
"""制造业"""
|
||
for index in range(len(self.report_template['报告内容'])):
|
||
if self.report_template['报告内容'][index]['章节'] == '摘要':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_01(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '一、公司概况':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_02(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '二、ESG评价':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_03(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '三、财务分析':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_04(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '四、企业风险':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_05(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '五、评级结论':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_06(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '附录':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_07(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
|
||
def information_technology():
|
||
"""信息技术业"""
|
||
for index in range(len(self.report_template['报告内容'])):
|
||
if self.report_template['报告内容'][index]['章节'] == '摘要':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_01(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '一、公司概况':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_02(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '二、ESG评价':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_03(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '三、财务分析':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_04_info(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '四、企业风险':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_05(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '五、评级结论':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_06(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '附录':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_07(
|
||
self.report_template['报告内容'][index]['章节内容'])
|
||
|
||
if self.report_data['行业选择'][0] == '制造业':
|
||
manufacturing()
|
||
elif self.report_data['行业选择'][0] == '信息技术业':
|
||
information_technology()
|
||
|
||
result = dict()
|
||
result['评价ID'] = self.report_data['评价ID']
|
||
result['企业ID'] = self.report_data['企业ID']
|
||
result['企业名称'] = self.report_data['企业名称']
|
||
result['评价年度'] = self.report_data['评价年度']
|
||
result['行业选择'] = self.report_data['行业选择']
|
||
result['生成日期'] = datetime.datetime.now().strftime("%Y-%m-%d")
|
||
result['报告内容'] = self.report_template['报告内容']
|
||
|
||
return result
|
||
|
||
def handle_esg_rating_report(self):
|
||
"""处理esg报告"""
|
||
|
||
def handle_paragraph_01(param):
|
||
"""
|
||
远东资信
|
||
Parameters:
|
||
param dict 远东资信段落模板
|
||
Returns:
|
||
result dict 处理好的报告模板
|
||
"""
|
||
param[2]['段落'] = param[2]['段落'].format(self.report_data['报告模板']['远东资信']['联系电话'])
|
||
param[3]['段落'] = param[3]['段落'].format(self.report_data['报告模板']['远东资信']['联系人'])
|
||
return param
|
||
|
||
def handle_paragraph_02(param):
|
||
"""
|
||
基本信息
|
||
Parameters:
|
||
param dict 基本信息段落模板
|
||
Returns:
|
||
result dict 处理好的报告模板
|
||
"""
|
||
param[0]['段落'] = param[0]['段落'].format(self.report_data['报告模板']['基本信息']['公司名称'])
|
||
param[1]['段落'] = param[1]['段落'].format(self.report_data['报告模板']['基本信息']['所属行业'])
|
||
return param
|
||
|
||
def handle_paragraph_03(param):
|
||
"""
|
||
公司ESG等级
|
||
Parameters:
|
||
param dict 公司ESG等级段落模板
|
||
Returns:
|
||
result dict 处理好的报告模板
|
||
"""
|
||
param[0]['段落'] = param[0]['段落'].format(self.report_data['报告模板']['公司ESG等级']['评价等级'])
|
||
return param
|
||
|
||
def handle_paragraph_04(param):
|
||
"""
|
||
环境部分
|
||
Parameters:
|
||
param dict 环境部分段落模板
|
||
Returns:
|
||
result dict 处理好的报告模板
|
||
"""
|
||
|
||
def handle_part_03():
|
||
"""
|
||
段落3
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['环境部分']['段落3']
|
||
param[2]['段落'] = param[2]['段落'].format(date_range=data['date_range'],
|
||
co2_emissions=data['co2_emissions'])
|
||
|
||
def handle_part_04():
|
||
"""
|
||
段落4
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['环境部分']['段落4']
|
||
param[3]['段落'] = param[3]['段落'].format(date_range=data['date_range'],
|
||
co2_emissions=data['co2_emissions'],
|
||
year_02=data['year_02'], year_03=data['year_03'],
|
||
year01_on_year02=data['year01_on_year02'],
|
||
year02_on_year03=data['year02_on_year03'],
|
||
industry_indicators=data['industry_indicators'],
|
||
industry_indicators_average=data['industry_indicators_average'],
|
||
industry_indicators_median=data['industry_indicators_median'],
|
||
median_comparison=data['median_comparison'])
|
||
|
||
def handle_part_06():
|
||
"""
|
||
段落4
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['环境部分']['段落6']
|
||
param[5]['段落'] = param[5]['段落'].format(date_range=data['date_range'],
|
||
energy_consumption=data['energy_consumption'])
|
||
|
||
def handle_part_07():
|
||
"""
|
||
段落7
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['环境部分']['段落7']
|
||
param[6]['段落'] = param[6]['段落'].format(date_range=data['date_range'],
|
||
energy_consumption=data['energy_consumption'],
|
||
year_02=data['year_02'], year_03=data['year_03'],
|
||
year01_on_year02=data['year01_on_year02'],
|
||
year02_on_year03=data['year02_on_year03'],
|
||
industry_indicators=data['industry_indicators'],
|
||
industry_indicators_average=data['industry_indicators_average'],
|
||
industry_indicators_median=data['industry_indicators_median'],
|
||
median_comparison=data['median_comparison'])
|
||
|
||
def handle_part_08():
|
||
"""
|
||
段落8
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['环境部分']['段落8']
|
||
param[7]['段落'] = param[7]['段落'].format(date_range=data['date_range'],
|
||
energy_consumption=data['energy_consumption'])
|
||
|
||
def handle_part_09():
|
||
"""
|
||
段落9
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['环境部分']['段落9']
|
||
param[8]['段落'] = param[8]['段落'].format(date_range=data['date_range'],
|
||
energy_consumption=data['energy_consumption'])
|
||
|
||
def handle_part_10():
|
||
"""
|
||
段落10
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['环境部分']['段落10']
|
||
param[9]['段落'] = param[9]['段落'].format(date_range=data['date_range'],
|
||
consume_water=data['consume_water'])
|
||
|
||
def handle_part_11():
|
||
"""
|
||
段落11
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['环境部分']['段落11']
|
||
param[10]['段落'] = param[10]['段落'].format(date_range=data['date_range'],
|
||
consume_water=data['consume_water'],
|
||
year_02=data['year_02'], year_03=data['year_03'],
|
||
year01_on_year02=data['year01_on_year02'],
|
||
year02_on_year03=data['year02_on_year03'],
|
||
industry_indicators=data['industry_indicators'],
|
||
industry_indicators_average=data[
|
||
'industry_indicators_average'],
|
||
industry_indicators_median=data['industry_indicators_median'],
|
||
median_comparison=data['median_comparison'])
|
||
|
||
def handle_part_12():
|
||
"""
|
||
段落12
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['环境部分']['段落12']
|
||
param[11]['段落'] = param[11]['段落'].format(describe=data['describe'])
|
||
|
||
def hanlde_part_13():
|
||
"""
|
||
段落13
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['环境部分']['段落13']
|
||
param[12]['段落'] = param[12]['段落'].format(describe=data['describe'])
|
||
|
||
def judge_false():
|
||
"""
|
||
判断语句描述中是否有false,有则删除
|
||
Parameters:
|
||
param type 参数名
|
||
Returns:
|
||
result type 返回数据
|
||
"""
|
||
new_list = list()
|
||
for item in param:
|
||
if item['段落'] != 'False':
|
||
new_list.append(item)
|
||
return new_list
|
||
|
||
# 调用子方法
|
||
handle_part_03()
|
||
handle_part_04()
|
||
handle_part_06()
|
||
handle_part_07()
|
||
handle_part_08()
|
||
handle_part_09()
|
||
handle_part_10()
|
||
handle_part_11()
|
||
handle_part_12()
|
||
hanlde_part_13()
|
||
result = judge_false()
|
||
return result
|
||
|
||
def handle_paragraph_05(param):
|
||
"""
|
||
社会部分
|
||
Parameters:
|
||
param dict 社会部分段落模板
|
||
Returns:
|
||
result dict 处理好的报告模板
|
||
"""
|
||
|
||
def handle_part_02():
|
||
"""
|
||
段落2
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['社会部分']['段落2']
|
||
param[1]['段落'] = param[1]['段落'].format(date_range=data['date_range'],
|
||
turnover_ratio=data['turnover_ratio'],
|
||
year_03=data['year_03'],
|
||
industry_indicators=data['industry_indicators'],
|
||
industry_indicators_average=data['industry_indicators_average'],
|
||
industry_indicators_median=data['industry_indicators_median'],
|
||
median_comparison=data['median_comparison'])
|
||
|
||
def handle_part_03():
|
||
"""
|
||
段落3
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['社会部分']['段落3']
|
||
param[2]['段落'] = param[2]['段落'].format(date_range=data['date_range'], salary_level=data['salary_level'],
|
||
year_02=data['year_02'], year_03=data['year_03'],
|
||
year01_on_year02=data['year01_on_year02'],
|
||
year02_on_year03=data['year02_on_year03'],
|
||
industry_indicators=data['industry_indicators'],
|
||
industry_indicators_average=data['industry_indicators_average'],
|
||
industry_indicators_median=data['industry_indicators_median'],
|
||
median_comparison=data['median_comparison'])
|
||
|
||
def handle_part_04():
|
||
"""
|
||
段落4
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['社会部分']['段落4']
|
||
param[3]['段落'] = param[3]['段落'].format(describe=data['describe'])
|
||
|
||
def handle_part_05():
|
||
"""
|
||
段落5
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['社会部分']['段落5']
|
||
param[4]['段落'] = param[4]['段落'].format(describe=data['describe'])
|
||
|
||
def handle_part_06():
|
||
"""
|
||
段落6
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['社会部分']['段落6']
|
||
param[5]['段落'] = param[5]['段落'].format(date_range=data['date_range'],
|
||
training_number=data['training_number'], year_03=data['year_03'],
|
||
industry_indicators=data['industry_indicators'])
|
||
|
||
def handle_part_07():
|
||
"""
|
||
段落7
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['社会部分']['段落7']
|
||
param[6]['段落'] = param[6]['段落'].format(date_range=data['date_range'],
|
||
salary_level=data['salary_level'], year_03=data['year_03'],
|
||
industry_indicators=data['industry_indicators'])
|
||
|
||
def handle_part_08():
|
||
"""
|
||
段落8
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['社会部分']['段落8']
|
||
param[7]['段落'] = param[7]['段落'].format(describe=data['describe'])
|
||
|
||
def handle_part_09():
|
||
"""
|
||
段落9
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['社会部分']['段落9']
|
||
param[8]['段落'] = param[8]['段落'].format(describe=data['describe'])
|
||
|
||
def judge_false():
|
||
"""
|
||
判断语句描述中是否有false,有则删除
|
||
Parameters:
|
||
param type 参数名
|
||
Returns:
|
||
result type 返回数据
|
||
"""
|
||
new_list = list()
|
||
for item in param:
|
||
if item['段落'] != 'False':
|
||
new_list.append(item)
|
||
return new_list
|
||
|
||
# 调用子方法
|
||
handle_part_02()
|
||
handle_part_03()
|
||
handle_part_04()
|
||
handle_part_05()
|
||
handle_part_06()
|
||
handle_part_07()
|
||
handle_part_08()
|
||
handle_part_09()
|
||
result = judge_false()
|
||
return result
|
||
|
||
def handle_paragraph_06(param):
|
||
"""
|
||
公司治理部分
|
||
Parameters:
|
||
param dict 社会部分段落模板
|
||
Returns:
|
||
result dict 处理好的报告模板
|
||
"""
|
||
|
||
def handle_part_02():
|
||
"""
|
||
段落2
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['公司治理部分']['段落2']
|
||
param[1]['段落'] = param[1]['段落'].format(describe=data['describe'])
|
||
|
||
def handle_part_03():
|
||
"""
|
||
段落3
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['公司治理部分']['段落3']
|
||
param[2]['段落'] = param[2]['段落'].format(describe=data['describe'])
|
||
|
||
def handle_part_04():
|
||
"""
|
||
段落4
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['公司治理部分']['段落4']
|
||
param[3]['段落'] = param[3]['段落'].format(experience_year=data['experience_year'],
|
||
industry_indicators_average=data['industry_indicators_average'])
|
||
|
||
def handle_part_05():
|
||
"""
|
||
段落5
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['公司治理部分']['段落5']
|
||
param[4]['段落'] = param[4]['段落'].format(describe=data['describe'])
|
||
|
||
def handle_part_06():
|
||
"""
|
||
段落6
|
||
Parameters:
|
||
-
|
||
Returns:
|
||
result dict 处理好的报告段落模板
|
||
"""
|
||
data = self.report_data['报告模板']['公司治理部分']['段落6']
|
||
param[5]['段落'] = param[5]['段落'].format(board_meetings_number=data['board_meetings_number'],
|
||
industry_indicators_average=data['industry_indicators_average'])
|
||
|
||
def judge_false():
|
||
"""
|
||
判断语句描述中是否有false,有则删除
|
||
Parameters:
|
||
param type 参数名
|
||
Returns:
|
||
result type 返回数据
|
||
"""
|
||
new_list = list()
|
||
for item in param:
|
||
if item['段落'] != 'False':
|
||
new_list.append(item)
|
||
return new_list
|
||
|
||
# 调用子方法
|
||
handle_part_02()
|
||
handle_part_03()
|
||
handle_part_04()
|
||
handle_part_05()
|
||
handle_part_06()
|
||
result = judge_false()
|
||
return result
|
||
|
||
self.report_template['企业名称'] = self.report_data['企业名称']
|
||
self.report_template['评价ID'] = self.report_data['评价ID']
|
||
self.report_template['企业ID'] = self.report_data['企业ID']
|
||
self.report_template['评价年度'] = self.report_data['评价年度']
|
||
self.report_template['生成日期'] = datetime.datetime.now().strftime("%Y-%m-%d")
|
||
self.report_template['报告类型'] = 'ESG'
|
||
for index in range(len(self.report_template['报告内容'])):
|
||
if self.report_template['报告内容'][index]['章节'] == '远东资信':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_01(self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '基本信息':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_02(self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '公司ESG等级':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_03(self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '环境部分':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_04(self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '社会部分':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_05(self.report_template['报告内容'][index]['章节内容'])
|
||
elif self.report_template['报告内容'][index]['章节'] == '公司治理部分':
|
||
self.report_template['报告内容'][index]['章节内容'] = handle_paragraph_06(self.report_template['报告内容'][index]['章节内容'])
|
||
return self.report_template
|
||
|
||
|
||
class GenerateReport(ReportData):
|
||
"""报告生成类"""
|
||
db = MongoHelper("tfse_v0.21")
|
||
|
||
def generate_pdf(self, name, content, database):
|
||
# 生成PDF报告文件,以时间戳命名,临时存储
|
||
report_file_name = '{}_{}.pdf'.format(name, int(time.time()))
|
||
pdf_report = ReportGenerator(name=report_file_name, text_model=content)
|
||
pdf_report.gen_report()
|
||
# 保存PDF报告文件,删除临时存储的报告
|
||
file_id = self.db.upsert_file('文件', database, report_file_name)
|
||
report_path = get_gen_report_path(name=report_file_name)
|
||
os.remove(report_path)
|
||
# 保存PDF报告成功,返回FileID;保存PDF报告文件失败,返回False
|
||
return file_id if file_id else False
|
||
|
||
def generate_cc_rating_report(self):
|
||
"""生成综信评价报告"""
|
||
|
||
def get_report_prepare_data():
|
||
"""获取报告准备数据"""
|
||
search = self.dict_to_save(columns=['企业ID', '评价ID', '企业名称'])
|
||
data = {"cid": search['企业ID'], "rid": search['评价ID'], "company": search['企业名称']}
|
||
url = 'http://api.fecribd.com/etl_tfse/rating/report_data'
|
||
token = 'dmfd7FshT!5Wng9^gcCcQV7T6FBnVgl4'
|
||
headers = {'token': token, 'Content-Type': 'application/json;charset=UTF-8'}
|
||
result = requests.post(url, headers=headers, data=json.dumps(data))
|
||
return json.loads(result.text) if result.status_code == 200 else False
|
||
|
||
def get_report_template():
|
||
"""获取报告模板"""
|
||
template = self.db.find_single_data(
|
||
'模型端',
|
||
'综信报告模板',
|
||
{"行业": industry},
|
||
['报告内容']
|
||
)
|
||
return template
|
||
|
||
def save_report_data(data):
|
||
"""保存处理好的报告数据"""
|
||
self.db.upsert_single_data(
|
||
'综信评价数据',
|
||
'报告数据',
|
||
{'评价ID': self.rid},
|
||
data
|
||
)
|
||
update_process_status(self.rid, '综合评价流程', {"评价流程.报告数据": 1})
|
||
fid = self.generate_pdf(self.name, data, '综信报告')
|
||
return fid
|
||
|
||
prepare_report_data = get_report_prepare_data()
|
||
|
||
if prepare_report_data is False:
|
||
return {"info": "报告准备数据生成错误"}, 210
|
||
|
||
industry = prepare_report_data['data']['行业选择'][0]
|
||
report_template = get_report_template()
|
||
|
||
if report_template is False:
|
||
return {"info": "未查询到此行业相关报告"}, 210
|
||
|
||
handle = HandleReportData()
|
||
handle.report_data = prepare_report_data['data']
|
||
handle.report_template = report_template
|
||
report_content = handle.handle_cc_rating_report()
|
||
save_report = save_report_data(report_content)
|
||
|
||
if save_report is not False:
|
||
return {"info": "生成报告成功", "result": {"FileID": save_report}}, 200
|
||
else:
|
||
return {"info": "生成报告失败"}, 210
|
||
|
||
def generate_esg_rating_report(self):
|
||
"""生成ESG评价报告"""
|
||
def get_report_prepare_data():
|
||
"""获取报告准备数据"""
|
||
search = self.dict_to_save(columns=['企业ID', '评价ID', '企业名称'])
|
||
data = {"cid": search['企业ID'], "rid": search['评价ID'], "company": search['企业名称']}
|
||
url = 'http://api.fecribd.com/etl_tfse/rating/esg_report_data'
|
||
token = 'dmfd7FshT!5Wng9^gcCcQV7T6FBnVgl4'
|
||
headers = {'token': token, 'Content-Type': 'application/json;charset=UTF-8'}
|
||
result = requests.post(url, headers=headers, data=json.dumps(data))
|
||
return json.loads(result.text) if result.status_code == 200 else False
|
||
|
||
def get_report_template():
|
||
"""获取报告模板"""
|
||
template = self.db.find_single_data(
|
||
'模型端',
|
||
'ESG报告模板',
|
||
{},
|
||
['报告内容']
|
||
)
|
||
return template
|
||
|
||
def save_report_data():
|
||
"""保存处理好的报告数据"""
|
||
self.db.upsert_single_data(
|
||
'ESG评价数据',
|
||
'报告数据',
|
||
{'评价ID': self.rid},
|
||
report_content
|
||
)
|
||
update_process_status(self.rid, 'ESG评价流程', {"评价流程.报告数据": 1})
|
||
fid = self.generate_pdf(self.name, report_content, 'ESG报告')
|
||
return fid
|
||
|
||
prepare_report_data = get_report_prepare_data()
|
||
|
||
if prepare_report_data is False:
|
||
return {"info": "报告准备数据生成错误"}, 210
|
||
|
||
report_template = get_report_template()
|
||
|
||
if report_template is False:
|
||
return {"info": "未查询到此行业相关报告"}, 210
|
||
|
||
handle = HandleReportData()
|
||
handle.report_data = prepare_report_data['data']
|
||
handle.report_template = report_template
|
||
report_content = handle.handle_esg_rating_report()
|
||
save_report = save_report_data()
|
||
|
||
if save_report is not False:
|
||
return {"info": "生成报告成功", "result": {"FileID": save_report}}, 200
|
||
else:
|
||
return {"info": "生成报告失败"}, 210
|
||
|
||
def generate_admin_report(self, report_content):
|
||
"""生成通用报告"""
|
||
name = report_content['企业名称']
|
||
text_model = report_content
|
||
if '评价类型' in report_content:
|
||
database = 'ESG报告'
|
||
else:
|
||
database = '综信报告'
|
||
fid = self.generate_pdf(name, text_model, database)
|
||
if fid is not False:
|
||
return {"info": "生成报告成功", "result": {"FileID": fid}}, 200
|
||
else:
|
||
return {"info": "生成报告失败"}, 210
|