Commit 7a4b6c5c authored by pengxiong's avatar pengxiong

制作模版

parent 39dfe2cd
...@@ -16,8 +16,8 @@ from flask import request, render_template ...@@ -16,8 +16,8 @@ from flask import request, render_template
from flask import make_response from flask import make_response
from app.api.engine import config from app.api.engine import config
from app.service.report_service import get_report_list, delete_report, get_one_report, edit_report from app.service.report_service import get_report_list, delete_report, get_one_report, edit_report, make_report
from app.service.template_manage_service import make_report, get_make_report_data from app.service.template_manage_service import get_make_report_data
from app.utils.html_to_pdf import html_to_pdf from app.utils.html_to_pdf import html_to_pdf
from app.api.engine import pdf_folder, redis, env, TAMP_SQL, tamp_diagnose_app_engine from app.api.engine import pdf_folder, redis, env, TAMP_SQL, tamp_diagnose_app_engine
from app.utils.jinjia2html_v2 import DataIntegrate from app.utils.jinjia2html_v2 import DataIntegrate
...@@ -55,10 +55,16 @@ class ReportHandlers(Resource): ...@@ -55,10 +55,16 @@ class ReportHandlers(Resource):
self.parser.add_argument('type', type=int, required=True, help='1为持仓报告2为诊断报告3周期报告') self.parser.add_argument('type', type=int, required=True, help='1为持仓报告2为诊断报告3周期报告')
self.parser.add_argument('name', type=str, required=False, help='报告名称或者客户姓名') self.parser.add_argument('name', type=str, required=False, help='报告名称或者客户姓名')
self.parser.add_argument('customer_id', type=str, required=True, help='customer_id不能为空') self.parser.add_argument('customer_id', type=str, required=True, help='customer_id不能为空')
self.parser.add_argument('template_data', type=str, required=True, help='template_data不能为空') self.parser.add_argument('report_data', type=str, required=True, help='report_data不能为空')
args = self.parser.parse_args() args = self.parser.parse_args()
args['ifa_id'] = self.ifa_id args['ifa_id'] = self.ifa_id
make_report(args) make_report(args)
resp = {
"statusCode": "0000",
"message": "成功",
"attributes": []
}
return resp
def put(self, id): def put(self, id):
...@@ -103,10 +109,7 @@ class ReportList(Resource): ...@@ -103,10 +109,7 @@ class ReportList(Resource):
def post(self): def post(self):
"""保存报告.""" """保存报告."""
self.parser.add_argument('customer_id', type=str, required=True, help='customer_id不能为空') pass
args = self.parser.parse_args()
make_report(args)
def put(self): def put(self):
"""编辑报告.""" """编辑报告."""
......
...@@ -67,7 +67,6 @@ class TemplateManage(Resource): ...@@ -67,7 +67,6 @@ class TemplateManage(Resource):
def put(self): def put(self):
"""更新模版.""" """更新模版."""
self.parser.add_argument('id', type=str, required=True, help='模版id') self.parser.add_argument('id', type=str, required=True, help='模版id')
# self.parser.add_argument('name', type=int, required=False, help='模版名称')
self.parser.add_argument('template_data', type=str, required=False, help='模版数据') self.parser.add_argument('template_data', type=str, required=False, help='模版数据')
args = self.parser.parse_args() args = self.parser.parse_args()
args['ifa_id'] = self.ifa_id args['ifa_id'] = self.ifa_id
......
...@@ -7,12 +7,15 @@ ...@@ -7,12 +7,15 @@
# @Software : PyCharm # @Software : PyCharm
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
import datetime import datetime
import os
import uuid
from sqlalchemy import and_ from sqlalchemy import and_
# from sqlalchemy import union_all # from sqlalchemy import union_all
from app.api.engine import TAMP_SQL, tamp_diagnose_app_engine from app.api.engine import TAMP_SQL, tamp_diagnose_app_engine
from app.model.tamp_diagnose_app import HoldReport, HoldDiagnoseReport, PeriodicReport from app.model.tamp_diagnose_app import HoldReport, HoldDiagnoseReport, PeriodicReport
from app.utils.jinjia2html_v2 import DataIntegrate
def get_report_list(args): def get_report_list(args):
...@@ -114,7 +117,7 @@ def get_one_report(args): ...@@ -114,7 +117,7 @@ def get_one_report(args):
elif type == 3: elif type == 3:
res = periodic_report res = periodic_report
data = [r.to_dict() for r in res] data = [r.to_dict() for r in res]
return data return data[0]
def edit_report(args): def edit_report(args):
...@@ -153,3 +156,65 @@ def edit_report(args): ...@@ -153,3 +156,65 @@ def edit_report(args):
if r > 0: if r > 0:
return True return True
return False return False
def make_report(args):
"""制作报告."""
ifa_id = args.get('ifa_id')
customer_id = args.get('customer_id')
type = args.get('type')
name = args.get('name')
report_data = args.get('report_data')
pdf_name = str(uuid.uuid4()) + '.pdf'
args['update_time'] = datetime.datetime.now()
args['update_status'] = 1
record_id = 0
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_session = tamp_diagnose_app.session
report_record = None
if type == 1:
report_record = HoldReport(**args)
elif type == 2:
report_record = HoldDiagnoseReport(**args)
elif type == 3:
report_record = PeriodicReport(**args)
if not report_record:
return False
tamp_diagnose_session.add(report_record)
tamp_diagnose_session.flush()
record_id = report_record.id
pid = os.fork()
if pid == 0:
try:
dt = DataIntegrate(ifa_id=ifa_id, customer_id=customer_id, pdf_name=pdf_name, type=type)
dt.render_data(data=report_data)
hold_report = tamp_diagnose_session.query(HoldReport).filter(and_(
HoldReport.id == record_id,
HoldReport.ifa_id == ifa_id,
))
hold_diagnose_report = tamp_diagnose_session.query(HoldDiagnoseReport).filter(and_(
HoldDiagnoseReport.id == record_id,
HoldDiagnoseReport.ifa_id == ifa_id,
))
periodic_report = tamp_diagnose_session.query(PeriodicReport).filter(and_(
PeriodicReport.id == record_id,
PeriodicReport.ifa_id == ifa_id,
))
if type == 1:
res = hold_report
elif type == 2:
res = hold_diagnose_report
elif type == 3:
res = periodic_report
if not res:
return False
res.update({
'file': pdf_name,
'update_status': 2,
'update_time': datetime.datetime.now()
})
except:
pass
else:
return True
...@@ -223,45 +223,3 @@ def set_default_template(args): ...@@ -223,45 +223,3 @@ def set_default_template(args):
return True return True
return False return False
def make_report(args):
"""制作报告."""
ifa_id = args.get('ifa_id')
customer_id = args.get('customer_id')
type = args.get('type')
name = args.get('name')
pdf_name = str(uuid.uuid4()) + '.pdf'
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_app_session = tamp_diagnose_app.session
sql = "update hold_report set update_time='{}', update_status='{}' where ifa_id='{}' and customer_id='{}'".format(
datetime.datetime.now(),
1,
ifa_id,
customer_id
)
tamp_diagnose_app_session.execute(sql)
start = time.time()
try:
dt = DataIntegrate(ifa_id=ifa_id, customer_id=customer_id, pdf_name=pdf_name, type=type)
dt.render_data()
except:
pass
print('耗时{}秒'.format(round(time.time() - start, 2)))
auth = oss2.Auth(config[env]['oss']['account'], config[env]['oss']['password'])
# Endpoint以杭州为例,其它Region请按实际情况填写。
bucket = oss2.Bucket(auth, 'http://oss-cn-shanghai.aliyuncs.com', 'tamperdev')
# 生成下载文件的签名URL,有效时间为60s。
path = bucket.sign_url('GET', 'productionenv/Start/' + pdf_name, 60)
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_app_session = tamp_diagnose_app.session
sql = "update hold_report set update_time='{}', update_status='{}', file='{}' where ifa_id='{}' and customer_id='{}'".format(
datetime.datetime.now(),
2,
pdf_name,
ifa_id,
customer_id
)
tamp_diagnose_app_session.execute(sql)
...@@ -294,8 +294,10 @@ class DataIntegrate: ...@@ -294,8 +294,10 @@ class DataIntegrate:
self.data = {**hold_default_template, **data} self.data = {**hold_default_template, **data}
return self.data return self.data
def render_data(self): def render_data(self, data=None):
# 全部数据 # 全部数据
if data:
self.data = data
# 开始渲染html模板 # 开始渲染html模板
env = Environment(loader=PackageLoader('app', 'templates')) # 创建一个包加载器对象 env = Environment(loader=PackageLoader('app', 'templates')) # 创建一个包加载器对象
# template = env.get_template('monthReport.html') # 获取一个模板文件 # template = env.get_template('monthReport.html') # 获取一个模板文件
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment