Commit 57cd1e89 authored by pengxiong's avatar pengxiong

我的报告

parent bdd373cc
...@@ -28,6 +28,8 @@ test: ...@@ -28,6 +28,8 @@ test:
tamp_product_db: tamp_product tamp_product_db: tamp_product
tamp_order_db: tamp_order tamp_order_db: tamp_order
tamp_user_db: tamp_user tamp_user_db: tamp_user
tamp_fund_db: tamp_fund
tamp_diagnose_app_db: tamp_diagnose_app
host: tools.caixiaoquan.com host: tools.caixiaoquan.com
port: 3306 port: 3306
user: root user: root
......
...@@ -16,6 +16,7 @@ from flask import request, render_template ...@@ -16,6 +16,7 @@ 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
from app.service.template_manage_service import make_report, get_make_report_data from app.service.template_manage_service import make_report, 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
...@@ -50,7 +51,7 @@ class ReportHandlers(Resource): ...@@ -50,7 +51,7 @@ class ReportHandlers(Resource):
return resp return resp
def post(self): def post(self):
"""制作模版.""" """制作报告."""
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不能为空')
args = self.parser.parse_args() args = self.parser.parse_args()
make_report(args) make_report(args)
...@@ -63,3 +64,60 @@ class ReportHandlers(Resource): ...@@ -63,3 +64,60 @@ class ReportHandlers(Resource):
def delete(self, id): def delete(self, id):
""".""" """."""
pass pass
class ReportList(Resource):
"""报告列表."""
def __init__(self):
"""."""
token = request.headers.get('Authorization', '')
token = 's:sid:' + token.split(' ')[1]
ifa_id = redis.get(token)
if not ifa_id:
return {"code": '9005', "message": "请登录", "attributes": []}
self.ifa_id = ifa_id.decode().replace('\'', '')
self.parser = reqparse.RequestParser()
def get(self):
"""获取我的报告列表."""
self.parser.add_argument('type', type=int, required=True, help='0为全部1为持仓报告2为诊断报告3周期报告')
self.parser.add_argument('name', type=str, required=False, help='报告名称或者客户姓名')
self.parser.add_argument('pageNumber', type=int, required=True)
self.parser.add_argument('pageSize', type=int, required=True)
self.parser.add_argument('start_time', type=str, required=False)
self.parser.add_argument('end_time', type=str, required=False)
args = self.parser.parse_args()
args['ifa_id'] = self.ifa_id
data = get_report_list(args)
resp = {
"statusCode": "0000",
"message": "成功",
"attributes": data
}
return resp
def post(self):
"""制作报告."""
self.parser.add_argument('customer_id', type=str, required=True, help='customer_id不能为空')
args = self.parser.parse_args()
make_report(args)
def put(self, id):
"""."""
pass
def delete(self):
"""."""
self.parser.add_argument('type', type=int, required=True, help='0为全部1为持仓报告2为诊断报告3周期报告')
self.parser.add_argument('id', type=int, required=True, help='报告id不能为空')
args = self.parser.parse_args()
args['ifa_id'] = self.ifa_id
delete_report(args)
resp = {
"statusCode": "0000",
"message": "成功",
"attributes": []
}
return resp
\ No newline at end of file
...@@ -15,7 +15,7 @@ from app.api.engine import redis ...@@ -15,7 +15,7 @@ from app.api.engine import redis
from app.config.default_template_params import hold_default_template, hold_default_data, diagnose_default_data, \ from app.config.default_template_params import hold_default_template, hold_default_data, diagnose_default_data, \
diagnose_default_template diagnose_default_template
from app.service.template_manage_service import add_template, update_template, delete_template, get_template_list, \ from app.service.template_manage_service import add_template, update_template, delete_template, get_template_list, \
get_default_template get_default_template, set_default_template
from app.utils.format_transfer import npEncoder from app.utils.format_transfer import npEncoder
from flask import jsonify from flask import jsonify
from app.utils.jinjia2html_v2 import DataIntegrate from app.utils.jinjia2html_v2 import DataIntegrate
...@@ -127,3 +127,16 @@ class TemplateList(Resource): ...@@ -127,3 +127,16 @@ class TemplateList(Resource):
"attributes": data "attributes": data
} }
return resp return resp
def put(self):
"""设置默认模版"""
self.parser.add_argument('id', type=str, required=True, help='模版id')
args = self.parser.parse_args()
args['ifa_id'] = self.ifa_id
data = set_default_template(args)
resp = {
"statusCode": "0000",
"message": "成功",
"attributes": data
}
return resp
...@@ -83,6 +83,7 @@ class FundReportManange(Base, BaseModel): ...@@ -83,6 +83,7 @@ class FundReportManange(Base, BaseModel):
delete_tag = Column(INTEGER(2), server_default=text("'0'")) delete_tag = Column(INTEGER(2), server_default=text("'0'"))
name = Column(String(300), comment='模版名称') name = Column(String(300), comment='模版名称')
type = Column(INTEGER(2), comment='模版类型1持仓报告2诊断报告') type = Column(INTEGER(2), comment='模版类型1持仓报告2诊断报告')
default = Column(INTEGER(2), server_default=text("'0'"))
def to_dict(self, allow_field=None): def to_dict(self, allow_field=None):
all_field = [r.name for r in self.__table__.columns] all_field = [r.name for r in self.__table__.columns]
...@@ -122,6 +123,25 @@ class HoldDiagnoseReport(Base, BaseModel): ...@@ -122,6 +123,25 @@ class HoldDiagnoseReport(Base, BaseModel):
file = Column(String(128)) file = Column(String(128))
be_viewed = Column(INTEGER(2), comment='0未查看1已查看') be_viewed = Column(INTEGER(2), comment='0未查看1已查看')
report_data = Column(Text) report_data = Column(Text)
name = Column(String(100))
def to_dict(self, allow_field=None):
all_field = [r.name for r in self.__table__.columns]
if allow_field:
allow_field = set(allow_field) & set(allow_field)
else:
allow_field = all_field
data = {c: int(getattr(self, c).timestamp()) if isinstance(getattr(self, c), datetime.datetime) else getattr(self, c) for c in allow_field}
with TAMP_SQL(tamp_user_engine) as tamp_user:
tamp_user_session = tamp_user.session
sql = "select ui_username_mp from user_info where id = '{}'".format(self.ifa_id)
res = tamp_user_session.execute(sql)
sql2 = "select customer_name from tamp_diagnose_app.customer_view where id = '{}'".format(self.customer_id)
res2 = tamp_user_session.execute(sql2)
data['author_name'] = res.fetchone()[0]
data['customer_name'] = res2.fetchone()[0]
data['type'] = 2
return data
class HoldReport(Base, BaseModel): class HoldReport(Base, BaseModel):
...@@ -135,6 +155,63 @@ class HoldReport(Base, BaseModel): ...@@ -135,6 +155,63 @@ class HoldReport(Base, BaseModel):
file = Column(String(128)) file = Column(String(128))
be_viewed = Column(INTEGER(2), comment='0未查看1已查看') be_viewed = Column(INTEGER(2), comment='0未查看1已查看')
report_data = Column(Text) report_data = Column(Text)
name = Column(String(100))
def to_dict(self, allow_field=None):
all_field = [r.name for r in self.__table__.columns]
if allow_field:
allow_field = set(allow_field) & set(allow_field)
else:
allow_field = all_field
data = {
c: int(getattr(self, c).timestamp()) if isinstance(getattr(self, c), datetime.datetime) else getattr(self,
c) for
c in allow_field}
with TAMP_SQL(tamp_user_engine) as tamp_user:
tamp_user_session = tamp_user.session
sql = "select ui_username_mp from user_info where id = '{}'".format(self.ifa_id)
res = tamp_user_session.execute(sql)
sql2 = "select customer_name from tamp_diagnose_app.customer_view where id = '{}'".format(self.customer_id)
res2 = tamp_user_session.execute(sql2)
data['author_name'] = res.fetchone()[0]
data['customer_name'] = res2.fetchone()[0]
data['type'] = 1
return data
class PeriodicReport(Base, BaseModel):
__tablename__ = 'periodic_report'
id = Column(INTEGER(11), primary_key=True)
customer_id = Column(String(64))
ifa_id = Column(String(64))
update_time = Column(DateTime)
update_status = Column(INTEGER(11))
file = Column(String(128))
be_viewed = Column(INTEGER(2), comment='0未查看1已查看')
report_data = Column(Text)
name = Column(String(100))
def to_dict(self, allow_field=None):
all_field = [r.name for r in self.__table__.columns]
if allow_field:
allow_field = set(allow_field) & set(allow_field)
else:
allow_field = all_field
data = {
c: int(getattr(self, c).timestamp()) if isinstance(getattr(self, c), datetime.datetime) else getattr(self,
c) for
c in allow_field}
with TAMP_SQL(tamp_user_engine) as tamp_user:
tamp_user_session = tamp_user.session
sql = "select ui_username_mp from user_info where id = '{}'".format(self.ifa_id)
res = tamp_user_session.execute(sql)
sql2 = "select customer_name from tamp_diagnose_app.customer_view where id = '{}'".format(self.customer_id)
res2 = tamp_user_session.execute(sql2)
data['author_name'] = res.fetchone()[0]
data['customer_name'] = res2.fetchone()[0]
data['type'] = 3
return data
class IfaCustomer(Base, BaseModel): class IfaCustomer(Base, BaseModel):
......
...@@ -13,6 +13,7 @@ from app.controller.template_manage import * ...@@ -13,6 +13,7 @@ from app.controller.template_manage import *
def add_route(api): def add_route(api):
"""注册路由""" """注册路由"""
api.add_resource(ReportHandlers, '/api/fund_report/report') api.add_resource(ReportHandlers, '/api/fund_report/report')
api.add_resource(ReportList, '/api/fund_report/reportlist')
api.add_resource(TemplateManage, '/api/template_manage') api.add_resource(TemplateManage, '/api/template_manage')
api.add_resource(TemplateList, '/api/template_list') api.add_resource(TemplateList, '/api/template_list')
api.add_resource(CustomerList, '/api/customer_list') api.add_resource(CustomerList, '/api/customer_list')
......
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name : report_service.py
# @Time : 2021/1/13 下午3:14
# @Author : X. Peng
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
from sqlalchemy import and_
# from sqlalchemy import union_all
from app.api.engine import TAMP_SQL, tamp_diagnose_app_engine
from app.model.tamp_diagnose_app import HoldReport, HoldDiagnoseReport, PeriodicReport
def get_report_list(args):
"""."""
type = args.get('type')
ifa_id = args.get('ifa_id')
pageNumber = args['pageNumber']
pageSize = args['pageSize']
start_time = args.get('start_time')
end_time = args.get('end_time')
offset = (pageNumber - 1) * pageSize
res = []
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_session = tamp_diagnose_app.session
hold_report = tamp_diagnose_session.query(HoldReport).filter(and_(
HoldReport.ifa_id == ifa_id,
HoldReport.update_time >= start_time,
HoldReport.update_time <= end_time
))
hold_diagnose_report = tamp_diagnose_session.query(HoldDiagnoseReport).filter(and_(
HoldDiagnoseReport.ifa_id == ifa_id,
HoldDiagnoseReport.update_time >= start_time,
HoldDiagnoseReport.update_time <= end_time
))
periodic_report = tamp_diagnose_session.query(PeriodicReport).filter(and_(
PeriodicReport.ifa_id == ifa_id,
PeriodicReport.update_time >= start_time,
PeriodicReport.update_time <= end_time
))
if type == 0:
res = hold_report.union_all(hold_diagnose_report).union_all(periodic_report)
elif type == 1:
res = hold_report
elif type == 2:
res = hold_diagnose_report
elif type == 3:
res = periodic_report
totalSize = res.count()
data = res.offset(offset).limit(pageSize)
data = [r.to_dict() for r in data]
return {
'content': data,
'pageNum': pageNumber,
'pageSize': pageSize,
'totalSize': totalSize
}
def delete_report(args):
"""."""
type = args.get('type')
id = args.get('id')
ifa_id = args.get('ifa_id')
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_session = tamp_diagnose_app.session
if type == 1:
tamp_diagnose_session.query(HoldReport).filter(and_(
HoldReport.ifa_id == ifa_id,
HoldReport.id == id
)).delete()
elif type == 2:
tamp_diagnose_session.query(HoldDiagnoseReport).filter(and_(
HoldDiagnoseReport.ifa_id == ifa_id,
HoldDiagnoseReport.id == id
)).delete()
elif type == 3:
tamp_diagnose_session.query(PeriodicReport).filter(and_(
PeriodicReport.ifa_id == ifa_id,
PeriodicReport.id == id
)).delete()
...@@ -154,7 +154,7 @@ def get_template_list(args): ...@@ -154,7 +154,7 @@ def get_template_list(args):
default_template = json.dumps(default_template) default_template = json.dumps(default_template)
create_by = args.get('ifa_id') create_by = args.get('ifa_id')
create_time = datetime.datetime.now() create_time = datetime.datetime.now()
new_template = FundReportManange(id=id, ifa_id=args.get('ifa_id'), name=name, default_template=default_template, type=t, create_by=create_by, create_time=create_time) new_template = FundReportManange(id=id, ifa_id=args.get('ifa_id'), name=name, default_template=default_template, type=t, create_by=create_by, create_time=create_time, default=1)
tamp_diagnose_session.add(new_template) tamp_diagnose_session.add(new_template)
res = tamp_diagnose_session.query(FundReportManange).filter(and_( res = tamp_diagnose_session.query(FundReportManange).filter(and_(
*conditions *conditions
...@@ -197,6 +197,28 @@ def get_make_report_data(args): ...@@ -197,6 +197,28 @@ def get_make_report_data(args):
return data return data
def set_default_template(args):
"""."""
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_session = tamp_diagnose_app.session
res = tamp_diagnose_session.query(FundReportManange).filter(and_(
FundReportManange.id == args.get('id'),
FundReportManange.delete_tag == 0,
FundReportManange.ifa_id == args.get('ifa_id')
))
if not res:
return False
tamp_diagnose_session.query(FundReportManange).update({
'default': 0
})
r = res.update({
'default': 1
})
if r > 0:
return True
return False
def make_report(args): def make_report(args):
"""制作报告.""" """制作报告."""
pdf_name = str(uuid.uuid4()) + '.pdf' pdf_name = str(uuid.uuid4()) + '.pdf'
......
...@@ -1878,7 +1878,7 @@ ...@@ -1878,7 +1878,7 @@
<div class="tss3" style="display: {{box6_section2}}"> <div class="tss3" style="display: {{box6_section2}}">
<div class="tss3_head dtable"> <div class="tss3_head dtable">
<div class="tss3_title dcell"> <div class="tss3_title dcell">
指标对比<span class="tss3_start_time">(起始日期2019-11-06</span> 指标对比<span class="tss3_start_time">(起始日期{{start_date}}</span>
</div> </div>
<div class="tss3_now_time dcell"> <div class="tss3_now_time dcell">
截止日:最新净值日({{latest_worth_day}}) 截止日:最新净值日({{latest_worth_day}})
......
import sys
import time import time
import uuid import uuid
...@@ -313,8 +314,8 @@ class DataIntegrate: ...@@ -313,8 +314,8 @@ class DataIntegrate:
if __name__ == '__main__': if __name__ == '__main__':
start = time.time() start = time.time()
dt = DataIntegrate(ifa_id='USER_INFO15917850824287', customer_id='6716613802534121472', type=1) dt = DataIntegrate(ifa_id='USER_INFO15917850824287', customer_id='6716613802534121472', type=2)
data = dt.get_template_data() data = dt.get_template_data()
print(sys.getsizeof(data)*8)
# dt.render_data() # dt.render_data()
print('耗时{}秒'.format(round(time.time()-start, 2))) print('耗时{}秒'.format(round(time.time()-start, 2)))
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
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