tfse-model-api-v0.2/Report/routes.py

197 lines
7.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import time
import json
import requests
from flask import Blueprint, request
from Report.PdfReport import ReportGenerator
from Report.ReportModel import ReportModel
from Report.db import upload_pdf, update_data, upload_esg_pdf
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_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()
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_esg_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('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_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