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 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