import os import time import json import requests from flask import Blueprint, request from Report.PdfReport import ReportGenerator from Report.db import update_data, upload_report_pdf from Report.scripts.content_processing import handle_report_content from Report.scripts.esg_contents import handle_esg_report_data from Report.scripts.path_tool import get_gen_report_path from common.scripts import verify_token, read_json_file report_route = Blueprint('report', __name__) @report_route.route('/gen_general_rating_report', methods=['POST']) @verify_token def report_pdf(): """ 生成综合信用评价报告 Parameters: company str 企业名称 cid str 企业ID rid str 评价ID Returns: res str 报告FileID """ def get_report_prepare_data(param): """ 获取报告准备数据 Parameters: param: dict 接口接收的请求数据 Returns: res: 请求成功返回报告准备数据;请求失败返回False """ 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(param)) return json.loads(result.text) if result.status_code == 200 else False def save_report_data(param1, param2, param3): """ 保存处理好的报告数据 Parameters: param1: dict 查询条件 param2: dict 报告数据 param3: str 企业名称 Returns: res: 处理成功返回报告FileID;处理失败返回False """ # 保存报告数据 report_data_result = update_data('综信评价数据', '报告数据', param1, param2) # 保存报告数据失败,返回False if not report_data_result: return False else: # 生成PDF报告文件,以时间戳命名,临时存储 report_file_name = '{}_{}.pdf'.format(param3, int(time.time())) pdf_report = ReportGenerator(name=report_file_name, text_model=param2) pdf_report.gen_report() # 保存PDF报告文件,删除临时存储的报告 file_id = upload_report_pdf('文件', '综信报告', 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 # Parameters req_body = request.json # 接收的json格式请求体 prepare_report_data = get_report_prepare_data(req_body) # 判断报告准备数据生成情况,若为None则返回错误信息 if prepare_report_data is False: return {"info": "报告准备数据生成错误"}, 210 # 获取报告准备数据 report_template = read_json_file('/Report/static/ReportTemplates/{}.json'.format(prepare_report_data['data']['行业选择'][0])) # 根据行业获取报告模板 # 生成报告数据,保存报告数据 # text_model = ReportModel(prepare_report_data['data'], report_template).report_values() text_model = handle_report_content(report_template, prepare_report_data['data']) save_report_result = save_report_data({"评价ID": text_model['评价ID']}, text_model, text_model['企业名称']) if save_report_result is not False: return {"info": "生成报告成功", "result": {"FileID": save_report_result}}, 200 else: return {"info": "生成报告失败"}, 210 @report_route.route('/generate_esg_report', methods=['POST']) @verify_token def esg_report_pdf(): """ 生成ESG报告PDF Parameters: company str 企业名称 cid str 企业ID rid str 评价ID Returns: res str 报告FileID """ def get_report_prepare_data(param): """ 获取报告准备数据 Parameters: param: dict 接口接收的请求数据 Returns: res: 请求成功返回报告准备数据;请求失败返回False """ 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(param)) return json.loads(result.text) if result.status_code == 200 else False def save_report_data(param1, param2, param3): """ 保存处理好的报告数据 Parameters: param1: dict 查询条件 param2: dict 报告数据 param3: str 企业名称 Returns: res: 处理成功返回报告FileID;处理失败返回False """ # 保存报告数据 report_data_result = update_data('ESG评价数据', '报告数据', param1, param2) # 保存报告数据失败,返回False if not report_data_result: return False else: # 生成PDF报告文件,以时间戳命名,临时存储 report_file_name = '{}_{}.pdf'.format(param3, int(time.time())) pdf_report = ReportGenerator(name=report_file_name, text_model=param2) pdf_report.gen_report() # 保存PDF报告文件,删除临时存储的报告 file_id = upload_report_pdf('文件', 'ESG报告', 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 # Parameters req_body = request.json # 接收的json格式请求体 prepare_report_data = get_report_prepare_data(req_body) # 判断报告准备数据生成情况,若为None则返回错误信息 if prepare_report_data is False: return {"info": "报告准备数据生成错误"}, 210 # 获取报告准备数据 report_template = read_json_file('/Report/static/ReportTemplates/{}.json'.format('ESG报告')) # 生成报告数据,保存报告数据 text_model = handle_esg_report_data(prepare_report_data['data'], report_template) save_report_result = save_report_data({"评价ID": text_model['评价ID']}, text_model, text_model['企业名称']) if save_report_result is not False: return {"info": "生成报告成功", "result": {"FileID": save_report_result}}, 200 else: return {"info": "生成报告失败"}, 210 @report_route.route('/generate_pdf_report', methods=['POST']) @verify_token def gen_pdf(): """ 生成PDF报告 Parameters: text_model 报告json Returns: res str 报告FileID """ text_model = request.json['text_model'] # 生成PDF报告文件,以时间戳命名,临时存储 report_file_name = '{}_{}.pdf'.format(text_model['企业名称'], int(time.time())) pdf_report = ReportGenerator(name=report_file_name, text_model=text_model) pdf_report.gen_report() # 保存PDF报告文件,删除临时存储的报告 file_id = upload_report_pdf('文件', '综信报告', report_file_name) report_path = get_gen_report_path(name=report_file_name) os.remove(report_path) # file_id存在,生成成功;不存在则生成失败 if file_id: return {"info": "生成报告成功", "result": {"FileID": file_id}}, 200 else: return {"info": "生成报告失败"}, 210