Commit 57cd1e89 authored by pengxiong's avatar pengxiong

我的报告

parent bdd373cc
......@@ -28,6 +28,8 @@ test:
tamp_product_db: tamp_product
tamp_order_db: tamp_order
tamp_user_db: tamp_user
tamp_fund_db: tamp_fund
tamp_diagnose_app_db: tamp_diagnose_app
host: tools.caixiaoquan.com
port: 3306
user: root
......
......@@ -16,6 +16,7 @@ from flask import request, render_template
from flask import make_response
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.utils.html_to_pdf import html_to_pdf
from app.api.engine import pdf_folder, redis, env, TAMP_SQL, tamp_diagnose_app_engine
......@@ -50,7 +51,7 @@ class ReportHandlers(Resource):
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)
......@@ -63,3 +64,60 @@ class ReportHandlers(Resource):
def delete(self, id):
"""."""
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
from app.config.default_template_params import hold_default_template, hold_default_data, diagnose_default_data, \
diagnose_default_template
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 flask import jsonify
from app.utils.jinjia2html_v2 import DataIntegrate
......@@ -127,3 +127,16 @@ class TemplateList(Resource):
"attributes": data
}
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):
delete_tag = Column(INTEGER(2), server_default=text("'0'"))
name = Column(String(300), comment='模版名称')
type = Column(INTEGER(2), comment='模版类型1持仓报告2诊断报告')
default = Column(INTEGER(2), server_default=text("'0'"))
def to_dict(self, allow_field=None):
all_field = [r.name for r in self.__table__.columns]
......@@ -122,6 +123,25 @@ class HoldDiagnoseReport(Base, BaseModel):
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'] = 2
return data
class HoldReport(Base, BaseModel):
......@@ -135,6 +155,63 @@ class HoldReport(Base, BaseModel):
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'] = 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):
......
......@@ -13,6 +13,7 @@ from app.controller.template_manage import *
def add_route(api):
"""注册路由"""
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(TemplateList, '/api/template_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):
default_template = json.dumps(default_template)
create_by = args.get('ifa_id')
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)
res = tamp_diagnose_session.query(FundReportManange).filter(and_(
*conditions
......@@ -197,6 +197,28 @@ def get_make_report_data(args):
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):
"""制作报告."""
pdf_name = str(uuid.uuid4()) + '.pdf'
......
......@@ -1878,7 +1878,7 @@
<div class="tss3" style="display: {{box6_section2}}">
<div class="tss3_head dtable">
<div class="tss3_title dcell">
指标对比<span class="tss3_start_time">(起始日期2019-11-06</span>
指标对比<span class="tss3_start_time">(起始日期{{start_date}}</span>
</div>
<div class="tss3_now_time dcell">
截止日:最新净值日({{latest_worth_day}})
......
import sys
import time
import uuid
......@@ -313,8 +314,8 @@ class DataIntegrate:
if __name__ == '__main__':
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()
print(sys.getsizeof(data)*8)
# dt.render_data()
print('耗时{}秒'.format(round(time.time()-start, 2)))
This diff is collapsed.
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