Commit 184b3a5d authored by 李宗熹's avatar 李宗熹

Merge remote-tracking branch 'origin/manage' into manage

parents 8d657e2c 6bc337fc
...@@ -22,6 +22,8 @@ CFG_FILEPATH = work_dir + '/app/config/config.yaml' ...@@ -22,6 +22,8 @@ CFG_FILEPATH = work_dir + '/app/config/config.yaml'
config = yaml.load(open(CFG_FILEPATH, 'r'), Loader=yaml.FullLoader) config = yaml.load(open(CFG_FILEPATH, 'r'), Loader=yaml.FullLoader)
temp_img_save_folder = work_dir + '/app/templates/temp_img/productionenv/ReportTempImg/'
pdf_save_folder = work_dir + '/app/pdf/productionenv/AppHoldReport/'
template_folder = config[env]['oss']['imgs_url_prefix'] template_folder = config[env]['oss']['imgs_url_prefix']
pdf_folder = config[env]['oss']['pdf_url_prefix'] pdf_folder = config[env]['oss']['pdf_url_prefix']
......
...@@ -33,6 +33,7 @@ test: ...@@ -33,6 +33,7 @@ test:
tamp_user_db: tamp_user tamp_user_db: tamp_user
tamp_fund_db: tamp_fund tamp_fund_db: tamp_fund
tamp_diagnose_app_db: tamp_diagnose_app tamp_diagnose_app_db: tamp_diagnose_app
# host: 118.190.63.109
host: tools.caixiaoquan.com host: tools.caixiaoquan.com
port: 3306 port: 3306
user: root user: root
......
...@@ -32,8 +32,8 @@ class TemplateManage(Resource): ...@@ -32,8 +32,8 @@ class TemplateManage(Resource):
@login_require @login_require
def get(self): def get(self):
"""获取默认模版数据.""" """获取模版数据."""
self.parser.add_argument('type', type=int, required=True, help='type不能为空') self.parser.add_argument('id', type=str, required=True, help='id不能为空')
args = self.parser.parse_args() args = self.parser.parse_args()
args['ifa_id'] = g.ifa_id args['ifa_id'] = g.ifa_id
data = get_default_template(args) data = get_default_template(args)
......
...@@ -5,7 +5,7 @@ from sqlalchemy import Column, DECIMAL, Date, DateTime, Index, String, Table, Te ...@@ -5,7 +5,7 @@ from sqlalchemy import Column, DECIMAL, Date, DateTime, Index, String, Table, Te
from sqlalchemy.dialects.mysql import BIGINT, INTEGER from sqlalchemy.dialects.mysql import BIGINT, INTEGER
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from app.api.engine import TAMP_SQL, tamp_user_engine, tamp_diagnose_app_engine from app.api.engine import TAMP_SQL, tamp_user_engine, tamp_diagnose_app_engine, pdf_folder
from app.model.base import Base from app.model.base import Base
from app.model.base import BaseModel from app.model.base import BaseModel
...@@ -138,6 +138,8 @@ class HoldDiagnoseReport(Base, BaseModel): ...@@ -138,6 +138,8 @@ class HoldDiagnoseReport(Base, BaseModel):
allow_field = set(allow_field) & set(allow_field) allow_field = set(allow_field) & set(allow_field)
else: else:
allow_field = all_field allow_field = all_field
if self.file:
self.file = pdf_folder + self.file
data = {c: int(getattr(self, c).timestamp()) if isinstance(getattr(self, c), datetime.datetime) else getattr(self, c) for c in allow_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_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app: with TAMP_SQL(tamp_user_engine) as tamp_user, TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_user_session = tamp_user.session tamp_user_session = tamp_user.session
...@@ -146,15 +148,18 @@ class HoldDiagnoseReport(Base, BaseModel): ...@@ -146,15 +148,18 @@ class HoldDiagnoseReport(Base, BaseModel):
res = tamp_user_session.execute(sql) res = tamp_user_session.execute(sql)
sql2 = "select customer_name from tamp_diagnose_app.customer_view where id = '{}'".format(self.customer_id) sql2 = "select customer_name from tamp_diagnose_app.customer_view where id = '{}'".format(self.customer_id)
res2 = tamp_diagnose_app_session.execute(sql2) res2 = tamp_diagnose_app_session.execute(sql2)
if res: res = res.fetchone()
data['author_name'] = res.fetchone()[0] res2 = res2.fetchone()
else: if data:
data['author_name'] = '' if res:
if res2: data['author_name'] = res[0]
data['customer_name'] = res2.fetchone()[0] else:
else: data['author_name'] = ''
data['customer_name'] = '' if res2:
data['type'] = 2 data['customer_name'] = res2[0]
else:
data['customer_name'] = ''
data['type'] = 2
return data return data
...@@ -177,6 +182,8 @@ class HoldReport(Base, BaseModel): ...@@ -177,6 +182,8 @@ class HoldReport(Base, BaseModel):
allow_field = set(allow_field) & set(allow_field) allow_field = set(allow_field) & set(allow_field)
else: else:
allow_field = all_field allow_field = all_field
if self.file:
self.file = pdf_folder + self.file
data = {c: int(getattr(self, c).timestamp()) if isinstance(getattr(self, c), datetime.datetime) else getattr(self, c) for c in allow_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_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app: with TAMP_SQL(tamp_user_engine) as tamp_user, TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_user_session = tamp_user.session tamp_user_session = tamp_user.session
...@@ -185,15 +192,18 @@ class HoldReport(Base, BaseModel): ...@@ -185,15 +192,18 @@ class HoldReport(Base, BaseModel):
res = tamp_user_session.execute(sql) res = tamp_user_session.execute(sql)
sql2 = "select customer_name from tamp_diagnose_app.customer_view where id = '{}'".format(self.customer_id) sql2 = "select customer_name from tamp_diagnose_app.customer_view where id = '{}'".format(self.customer_id)
res2 = tamp_diagnose_app_session.execute(sql2) res2 = tamp_diagnose_app_session.execute(sql2)
if res: res = res.fetchone()
data['author_name'] = res.fetchone()[0] res2 = res2.fetchone()
else: if data:
data['author_name'] = '' if res:
if res2: data['author_name'] = res[0]
data['customer_name'] = res2.fetchone()[0] else:
else: data['author_name'] = ''
data['customer_name'] = '' if res2:
data['type'] = 1 data['customer_name'] = res2[0]
else:
data['customer_name'] = ''
data['type'] = 1
return data return data
...@@ -216,6 +226,8 @@ class PeriodicReport(Base, BaseModel): ...@@ -216,6 +226,8 @@ class PeriodicReport(Base, BaseModel):
allow_field = set(allow_field) & set(allow_field) allow_field = set(allow_field) & set(allow_field)
else: else:
allow_field = all_field allow_field = all_field
if self.file:
self.file = pdf_folder + self.file
data = {c: int(getattr(self, c).timestamp()) if isinstance(getattr(self, c), datetime.datetime) else getattr(self, c) for c in allow_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_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app: with TAMP_SQL(tamp_user_engine) as tamp_user, TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_user_session = tamp_user.session tamp_user_session = tamp_user.session
...@@ -224,15 +236,18 @@ class PeriodicReport(Base, BaseModel): ...@@ -224,15 +236,18 @@ class PeriodicReport(Base, BaseModel):
res = tamp_user_session.execute(sql) res = tamp_user_session.execute(sql)
sql2 = "select customer_name from tamp_diagnose_app.customer_view where id = '{}'".format(self.customer_id) sql2 = "select customer_name from tamp_diagnose_app.customer_view where id = '{}'".format(self.customer_id)
res2 = tamp_diagnose_app_session.execute(sql2) res2 = tamp_diagnose_app_session.execute(sql2)
if res: res = res.fetchone()
data['author_name'] = res.fetchone()[0] res2 = res2.fetchone()
else: if data:
data['author_name'] = '' if res:
if res2: data['author_name'] = res[0]
data['customer_name'] = res2.fetchone()[0] else:
else: data['author_name'] = ''
data['customer_name'] = '' if res2:
data['type'] = 3 data['customer_name'] = res2[0]
else:
data['customer_name'] = ''
data['type'] = 3
return data return data
......
...@@ -81,7 +81,7 @@ class UserCustomerDataAdaptor: ...@@ -81,7 +81,7 @@ class UserCustomerDataAdaptor:
tamp_diagnose_app_session = tamp_diagnose_app.session tamp_diagnose_app_session = tamp_diagnose_app.session
tamp_product_session = tamp_product.session tamp_product_session = tamp_product.session
tamp_fund_session = tamp_fund.session tamp_fund_session = tamp_fund.session
sql_user = """select f1.fund_id, f2.realname,f3.customer_name,f3.valueSex,f1.type,f1.order_type,f1.pay_date,f1.subscription_fee,f1.confirm_share_date,f1.confirm_share,f1.confirm_amount,f1.nav,f1.folio_name from tamp_order.customer_order_view f1, tamp_user.user_info f2,tamp_order.customer f3 where f2.id=f1.user_id and f3.id=f1.customer_id and f1.delete_tag=0 and user_id='{}' and customer_id='{}'""".format(self.user_id, self.customer_id) sql_user = """select f1.fund_id, f2.realname,f3.customer_name,f3.valueSex,f1.type,f1.order_type,f1.pay_date,f1.subscription_fee,f1.confirm_share_date,f1.confirm_share,f1.confirm_amount,f1.nav,f1.folio_name from tamp_diagnose_app.customer_order_view f1, tamp_user.user_info f2,tamp_diagnose_app.customer_view f3 where f2.id=f1.user_id and f3.id=f1.customer_id and f1.delete_tag=0 and user_id='{}' and customer_id='{}'""".format(self.user_id, self.customer_id)
cur = tamp_diagnose_app_session.execute(sql_user) cur = tamp_diagnose_app_session.execute(sql_user)
data = cur.fetchall() data = cur.fetchall()
order_df = pd.DataFrame(list(data), columns=['fund_id', 'username', 'customer_name', 'valueSex', 'type', 'order_type', 'pay_date', order_df = pd.DataFrame(list(data), columns=['fund_id', 'username', 'customer_name', 'valueSex', 'type', 'order_type', 'pay_date',
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
# @Software : PyCharm # @Software : PyCharm
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
import datetime import datetime
import json
import os import os
import uuid import uuid
...@@ -165,7 +166,7 @@ def make_report(args): ...@@ -165,7 +166,7 @@ def make_report(args):
customer_id = args.get('customer_id') customer_id = args.get('customer_id')
type = args.get('type') type = args.get('type')
name = args.get('name') name = args.get('name')
report_data = args.get('report_data') report_data = json.loads(args.get('report_data'))
pdf_name = str(uuid.uuid4()) + '.pdf' pdf_name = str(uuid.uuid4()) + '.pdf'
args['update_time'] = datetime.datetime.now() args['update_time'] = datetime.datetime.now()
args['update_status'] = 1 args['update_status'] = 1
...@@ -186,13 +187,13 @@ def make_report(args): ...@@ -186,13 +187,13 @@ def make_report(args):
tamp_diagnose_session.add(report_record) tamp_diagnose_session.add(report_record)
tamp_diagnose_session.flush() tamp_diagnose_session.flush()
record_id = report_record.id record_id = report_record.id
pid = os.fork() # pid = os.fork()
if pid == 0: if 0 == 0:
try: # try:
dt = DataIntegrate(ifa_id=ifa_id, customer_id=customer_id, pdf_name=pdf_name, type=type) dt = DataIntegrate(ifa_id=ifa_id, customer_id=customer_id, pdf_name=pdf_name, type=type)
dt.render_data(data=report_data) dt.render_data(data=report_data)
except: # except:
pass # pass
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app: with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_session = tamp_diagnose_app.session tamp_diagnose_session = tamp_diagnose_app.session
hold_report = tamp_diagnose_session.query(HoldReport).filter(and_( hold_report = tamp_diagnose_session.query(HoldReport).filter(and_(
...@@ -220,5 +221,6 @@ def make_report(args): ...@@ -220,5 +221,6 @@ def make_report(args):
'update_status': 2, 'update_status': 2,
'update_time': datetime.datetime.now() 'update_time': datetime.datetime.now()
}) })
return True
else: else:
return True return True
...@@ -117,7 +117,10 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor): ...@@ -117,7 +117,10 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
if len(last_profit_ratio) <= 0: if len(last_profit_ratio) <= 0:
cur_month_profit_ratio = cur_profit_ratio[-1] - 1 cur_month_profit_ratio = cur_profit_ratio[-1] - 1
else: else:
cur_month_profit_ratio = (cur_profit_ratio[-1] - last_profit_ratio[-1]) / last_profit_ratio[-1] if len(cur_profit_ratio) < 1:
cur_month_profit_ratio = 0
else:
cur_month_profit_ratio = (cur_profit_ratio[-1] - last_profit_ratio[-1]) / last_profit_ratio[-1]
folio_report_data["cur_month_profit_ratio"] = float(cur_month_profit_ratio) folio_report_data["cur_month_profit_ratio"] = float(cur_month_profit_ratio)
# 今年累积收益 # 今年累积收益
...@@ -268,7 +271,10 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor): ...@@ -268,7 +271,10 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
if len(last_profit_ratio) <= 0: if len(last_profit_ratio) <= 0:
cur_month_profit_ratio = cur_profit_ratio[-1] - 1 cur_month_profit_ratio = cur_profit_ratio[-1] - 1
else: else:
cur_month_profit_ratio = (cur_profit_ratio[-1] - last_profit_ratio[-1]) / last_profit_ratio[-1] if len(cur_profit_ratio) < 1:
cur_month_profit_ratio = 0
else:
cur_month_profit_ratio = (cur_profit_ratio[-1] - last_profit_ratio[-1]) / last_profit_ratio[-1]
report_data["cur_month_profit_ratio"] = float(cur_month_profit_ratio) report_data["cur_month_profit_ratio"] = float(cur_month_profit_ratio)
# 今年累积收益 # 今年累积收益
...@@ -320,10 +326,10 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor): ...@@ -320,10 +326,10 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
now_year = self.end_date.year now_year = self.end_date.year
month_return_data_dict = {} month_return_data_dict = {}
for i in range(now_year-start_year+1): for i in range(now_year-start_year+1):
month_return_data_dict[start_year+i] = {j+1: {"profit": "-", "net_amount": "-"} for j in range(12)} month_return_data_dict[str(start_year+i)] = {str(j+1): {"profit": "-", "net_amount": "-"} for j in range(12)}
for d_index, d_row in month_sum.items(): for d_index, d_row in month_sum.items():
cur_year = int(d_index[:4]) cur_year = str(int(d_index[:4]))
cur_month = int(d_index[5:]) cur_month = str(int(d_index[5:]))
cur_profit = round(d_row/10000.0, 2) cur_profit = round(d_row/10000.0, 2)
cur_net_amount = round(month_amount_sum.loc[d_index]/10000, 2) cur_net_amount = round(month_amount_sum.loc[d_index]/10000, 2)
month_return_data_dict[cur_year][cur_month]["profit"] = "%.2f"%cur_profit month_return_data_dict[cur_year][cur_month]["profit"] = "%.2f"%cur_profit
......
...@@ -22,45 +22,46 @@ from app.utils.jinjia2html_v2 import DataIntegrate ...@@ -22,45 +22,46 @@ from app.utils.jinjia2html_v2 import DataIntegrate
def get_default_template(args): def get_default_template(args):
"""""" """"""
type = args.get('type') data = {}
data = []
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app: with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_session = tamp_diagnose_app.session tamp_diagnose_session = tamp_diagnose_app.session
res = tamp_diagnose_session.query(FundReportManange).filter(and_( res = tamp_diagnose_session.query(FundReportManange).filter(and_(
FundReportManange.ifa_id == args.get('ifa_id'), FundReportManange.id == args.get('id'),
FundReportManange.type == type,
FundReportManange.delete_tag == 0, FundReportManange.delete_tag == 0,
FundReportManange.default_template.isnot(None)
)).first() )).first()
if not res: if not res:
return False return False
type = res.type
default_template, default_data = None, None default_template, default_data = None, None
if res.default_template:
default_template = res.default_template
elif res.custom_template:
default_template = res.custom_template
if type == 1: if type == 1:
args['name'] = '持仓报告默认模版'
default_template = hold_default_template
default_data = hold_default_data default_data = hold_default_data
elif type == 2: elif type == 2:
args['name'] = '诊断报告默认模版'
default_template = diagnose_default_template
default_data = diagnose_default_data default_data = diagnose_default_data
if res.default_template: data = {**json.loads(default_template), **default_data}
data = {'id': res.id, 'template_data': {**json.loads(res.default_template), **default_data}}
else:
args['id'] = str(uuid.uuid4())
args['default_template'] = json.dumps(default_template)
args['create_by'] = args.get('ifa_id')
args['create_time'] = datetime.datetime.now()
new_template = FundReportManange(**args)
tamp_diagnose_session.add(new_template)
data = {**default_template, **default_data}
return data return data
def add_template(args): def add_template(args):
"""新建模版""" """新建模版"""
type = args.get('type')
custom_template = json.loads(args.get('custom_template'))
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app: with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_session = tamp_diagnose_app.session tamp_diagnose_session = tamp_diagnose_app.session
args['id'] = str(uuid.uuid4()) args['id'] = str(uuid.uuid4())
args['default_template'] = json.dumps(hold_default_template) if type == 1:
allowed_keys = hold_default_template.keys()
for key in list(custom_template.keys()):
if key not in allowed_keys:
custom_template.pop(key)
elif type == 2:
allowed_keys = diagnose_default_template.keys()
for key in list(custom_template.keys()):
if key not in allowed_keys:
custom_template.pop(key)
args['custom_template'] = json.dumps(custom_template)
args['create_by'] = args.get('ifa_id') args['create_by'] = args.get('ifa_id')
args['create_time'] = datetime.datetime.now() args['create_time'] = datetime.datetime.now()
fund_report_manange = FundReportManange(**args) fund_report_manange = FundReportManange(**args)
...@@ -68,7 +69,7 @@ def add_template(args): ...@@ -68,7 +69,7 @@ def add_template(args):
def update_template(args): def update_template(args):
"""更新模版""" """更新模版"""
template_data = args.get('template_data') template_data = json.loads(args.get('template_data'))
with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app: with TAMP_SQL(tamp_diagnose_app_engine) as tamp_diagnose_app:
tamp_diagnose_session = tamp_diagnose_app.session tamp_diagnose_session = tamp_diagnose_app.session
res = tamp_diagnose_session.query(FundReportManange).filter(and_( res = tamp_diagnose_session.query(FundReportManange).filter(and_(
...@@ -79,7 +80,7 @@ def update_template(args): ...@@ -79,7 +80,7 @@ def update_template(args):
return False return False
if res[0].default_template: if res[0].default_template:
allowed_keys = json.loads(res[0].default_template).keys() allowed_keys = json.loads(res[0].default_template).keys()
for key, value in template_data.items(): for key in list(template_data.keys()):
if key not in allowed_keys: if key not in allowed_keys:
template_data.pop(key) template_data.pop(key)
# 更新默认模版 # 更新默认模版
...@@ -90,7 +91,7 @@ def update_template(args): ...@@ -90,7 +91,7 @@ def update_template(args):
}) })
else: else:
allowed_keys = json.loads(res[0].custom_template).keys() allowed_keys = json.loads(res[0].custom_template).keys()
for key, value in template_data.items(): for key in list(template_data.keys()):
if key not in allowed_keys: if key not in allowed_keys:
template_data.pop(key) template_data.pop(key)
# 更新自定义模版 # 更新自定义模版
...@@ -218,7 +219,7 @@ def set_default_template(args): ...@@ -218,7 +219,7 @@ def set_default_template(args):
)) ))
if not res: if not res:
return False return False
type = res.type type = res.first().type
tamp_diagnose_session.query(FundReportManange).filter(FundReportManange.type==type).update({ tamp_diagnose_session.query(FundReportManange).filter(FundReportManange.type==type).update({
'default': 0 'default': 0
}) })
......
...@@ -1201,40 +1201,40 @@ ...@@ -1201,40 +1201,40 @@
盈亏 盈亏
</td> </td>
<td class="text_red"> <td class="text_red">
{{value[1]["profit"]}} {{value["1"]["profit"]}}
</td> </td>
<td class="text_green"> <td class="text_green">
{{value[2]["profit"]}} {{value["2"]["profit"]}}
</td> </td>
<td> <td>
{{value[3]["profit"]}} {{value["3"]["profit"]}}
</td> </td>
<td> <td>
{{value[4]["profit"]}} {{value["4"]["profit"]}}
</td> </td>
<td> <td>
{{value[5]["profit"]}} {{value["5"]["profit"]}}
</td> </td>
<td> <td>
{{value[6]["profit"]}} {{value["6"]["profit"]}}
</td> </td>
<td> <td>
{{value[7]["profit"]}} {{value["7"]["profit"]}}
</td> </td>
<td> <td>
{{value[8]["profit"]}} {{value["8"]["profit"]}}
</td> </td>
<td> <td>
{{value[9]["profit"]}} {{value["9"]["profit"]}}
</td> </td>
<td> <td>
{{value[10]["profit"]}} {{value["10"]["profit"]}}
</td> </td>
<td> <td>
{{value[11]["profit"]}} {{value["11"]["profit"]}}
</td> </td>
<td> <td>
{{value[12]["profit"]}} {{value["12"]["profit"]}}
</td> </td>
</tr> </tr>
<tr> <tr>
...@@ -1242,40 +1242,40 @@ ...@@ -1242,40 +1242,40 @@
期末资产 期末资产
</td> </td>
<td class="text_red"> <td class="text_red">
{{value[1]["net_amount"]}} {{value["1"]["net_amount"]}}
</td> </td>
<td class="text_green"> <td class="text_green">
{{value[2]["net_amount"]}} {{value["2"]["net_amount"]}}
</td> </td>
<td> <td>
{{value[3]["net_amount"]}} {{value["3"]["net_amount"]}}
</td> </td>
<td> <td>
{{value[4]["net_amount"]}} {{value["4"]["net_amount"]}}
</td> </td>
<td> <td>
{{value[5]["net_amount"]}} {{value["5"]["net_amount"]}}
</td> </td>
<td> <td>
{{value[6]["net_amount"]}} {{value["6"]["net_amount"]}}
</td> </td>
<td> <td>
{{value[7]["net_amount"]}} {{value["7"]["net_amount"]}}
</td> </td>
<td> <td>
{{value[8]["net_amount"]}} {{value["8"]["net_amount"]}}
</td> </td>
<td> <td>
{{value[9]["net_amount"]}} {{value["9"]["net_amount"]}}
</td> </td>
<td> <td>
{{value[10]["net_amount"]}} {{value["10"]["net_amount"]}}
</td> </td>
<td> <td>
{{value[11]["net_amount"]}} {{value["11"]["net_amount"]}}
</td> </td>
<td> <td>
{{value[12]["net_amount"]}} {{value["12"]["net_amount"]}}
</td> </td>
</tr> </tr>
{%endfor%} {%endfor%}
......
...@@ -18,6 +18,6 @@ def login_require(func): ...@@ -18,6 +18,6 @@ def login_require(func):
ifa_id = redis.get(token) ifa_id = redis.get(token)
if not ifa_id: if not ifa_id:
return {"code": '9005', "message": "请登录", "attributes": []} return {"code": '9005', "message": "请登录", "attributes": []}
g.ifa_id = ifa_id.decode().replace('\'', '') g.ifa_id = ifa_id.decode().replace('\"', '')
return func(*args, **kwargs) return func(*args, **kwargs)
return auth return auth
\ No newline at end of file
...@@ -19,7 +19,7 @@ from matplotlib import ticker ...@@ -19,7 +19,7 @@ from matplotlib import ticker
from matplotlib.ticker import FuncFormatter from matplotlib.ticker import FuncFormatter
from matplotlib.font_manager import FontProperties from matplotlib.font_manager import FontProperties
from app.api.engine import template_folder from app.api.engine import template_folder, work_dir, temp_img_save_folder
matplotlib.use('Agg') matplotlib.use('Agg')
# 中文字体初始化 # 中文字体初始化
...@@ -98,9 +98,9 @@ def draw_month_return_chart(xlabels, product_list, cumulative): ...@@ -98,9 +98,9 @@ def draw_month_return_chart(xlabels, product_list, cumulative):
# imgdata.seek(0) # rewind the data # imgdata.seek(0) # rewind the data
# month_return_img = 'data:image/png;base64,' + base64.b64encode(imgdata.getvalue()).decode('utf-8') # month_return_img = 'data:image/png;base64,' + base64.b64encode(imgdata.getvalue()).decode('utf-8')
filename = str(uuid.uuid4()) + '.png' filename = str(uuid.uuid4()) + '.png'
filepath = template_folder + filename fig.savefig(temp_img_save_folder + filename, format='png', bbox_inches='tight')
fig.savefig(filepath, format='png', bbox_inches='tight') return_path = template_folder + filename
return filepath return return_path
def draw_contribution_chart(xlabels, product_list, cumulative): def draw_contribution_chart(xlabels, product_list, cumulative):
...@@ -165,9 +165,9 @@ def draw_contribution_chart(xlabels, product_list, cumulative): ...@@ -165,9 +165,9 @@ def draw_contribution_chart(xlabels, product_list, cumulative):
# month_return_img = 'data:image/png;base64,' + base64.b64encode(imgdata.getvalue()).decode('utf-8') # month_return_img = 'data:image/png;base64,' + base64.b64encode(imgdata.getvalue()).decode('utf-8')
# return month_return_img # return month_return_img
filename = str(uuid.uuid4()) + '.png' filename = str(uuid.uuid4()) + '.png'
filepath = template_folder + filename fig.savefig(temp_img_save_folder + filename, format='png', bbox_inches='tight')
fig.savefig(filepath, format='png', bbox_inches='tight') return_path = template_folder + filename
return filepath return return_path
# def draw_contribution_chart(xlabels, product_list, cumulative): # def draw_contribution_chart(xlabels, product_list, cumulative):
# """贡献分解图""" # """贡献分解图"""
...@@ -309,9 +309,9 @@ def draw_old_combination_chart(xlabels, origin_combination, index): ...@@ -309,9 +309,9 @@ def draw_old_combination_chart(xlabels, origin_combination, index):
# return_compare_img = 'data:image/png;base64,' + base64.b64encode(imgdata.getvalue()).decode('utf-8') # return_compare_img = 'data:image/png;base64,' + base64.b64encode(imgdata.getvalue()).decode('utf-8')
# return return_compare_img # return return_compare_img
filename = str(uuid.uuid4()) + '.png' filename = str(uuid.uuid4()) + '.png'
filepath = template_folder + filename fig.savefig(temp_img_save_folder + filename, format='png', bbox_inches='tight')
fig.savefig(filepath, format='png', bbox_inches='tight') return_path = template_folder + filename
return filepath return return_path
def draw_combination_chart(xlabels, new_combination, origin_combination, index): def draw_combination_chart(xlabels, new_combination, origin_combination, index):
...@@ -359,9 +359,9 @@ def draw_combination_chart(xlabels, new_combination, origin_combination, index): ...@@ -359,9 +359,9 @@ def draw_combination_chart(xlabels, new_combination, origin_combination, index):
# return_compare_img = 'data:image/png;base64,' + base64.b64encode(imgdata.getvalue()).decode('utf-8') # return_compare_img = 'data:image/png;base64,' + base64.b64encode(imgdata.getvalue()).decode('utf-8')
# return return_compare_img # return return_compare_img
filename = str(uuid.uuid4()) + '.png' filename = str(uuid.uuid4()) + '.png'
filepath = template_folder + filename fig.savefig(temp_img_save_folder + filename, format='png', bbox_inches='tight')
fig.savefig(filepath, format='png', bbox_inches='tight') return_path = template_folder + filename
return filepath return return_path
def draw_index_combination_chart(compare_data): def draw_index_combination_chart(compare_data):
...@@ -415,9 +415,9 @@ def draw_index_combination_chart(compare_data): ...@@ -415,9 +415,9 @@ def draw_index_combination_chart(compare_data):
# return_compare_img = 'data:image/png;base64,' + base64.b64encode(imgdata.getvalue()).decode('utf-8') # return_compare_img = 'data:image/png;base64,' + base64.b64encode(imgdata.getvalue()).decode('utf-8')
# return return_compare_img # return return_compare_img
filename = str(uuid.uuid4()) + '.png' filename = str(uuid.uuid4()) + '.png'
filepath = template_folder + filename fig.savefig(temp_img_save_folder + filename, format='png', bbox_inches='tight')
fig.savefig(filepath, format='png', bbox_inches='tight') return_path = template_folder + filename
return filepath return return_path
if __name__ == '__main__': if __name__ == '__main__':
# xlabels = ('2020-1', '2020-2', '2020-3', '2020-4', '2020-5', '2020-6', '2020-7', '2020-8', '2020-9', '2020-10', '2020-11', '2020-12') # xlabels = ('2020-1', '2020-2', '2020-3', '2020-4', '2020-5', '2020-6', '2020-7', '2020-8', '2020-9', '2020-10', '2020-11', '2020-12')
......
...@@ -17,6 +17,10 @@ class npEncoder(json.JSONEncoder): ...@@ -17,6 +17,10 @@ class npEncoder(json.JSONEncoder):
return obj.tolist() return obj.tolist()
elif isinstance(obj, decimal.Decimal): elif isinstance(obj, decimal.Decimal):
return obj.__str__() return obj.__str__()
elif isinstance(obj, np.int64):
return int(obj)
elif isinstance(obj, np.float64):
return float(obj)
return json.JSONEncoder.default(self, obj) return json.JSONEncoder.default(self, obj)
def img_transfer(url): def img_transfer(url):
......
...@@ -4,7 +4,7 @@ import uuid ...@@ -4,7 +4,7 @@ import uuid
from jinja2 import PackageLoader, Environment from jinja2 import PackageLoader, Environment
from app.api.engine import work_dir, pdf_folder, template_folder from app.api.engine import work_dir, pdf_folder, template_folder, pdf_save_folder
from app.config.default_template_params import hold_default_template, diagnose_default_template from app.config.default_template_params import hold_default_template, diagnose_default_template
from app.service.portfolio_diagnose import PortfolioDiagnose from app.service.portfolio_diagnose import PortfolioDiagnose
from app.service.result_service_v2 import UserCustomerResultAdaptor from app.service.result_service_v2 import UserCustomerResultAdaptor
...@@ -305,13 +305,12 @@ class DataIntegrate: ...@@ -305,13 +305,12 @@ class DataIntegrate:
# save_file = "app/html/v2/monthReportV2.html" # save_file = "app/html/v2/monthReportV2.html"
# with open(save_file, 'w', encoding="utf-8") as f: # with open(save_file, 'w', encoding="utf-8") as f:
# f.write(monthReport_html) # f.write(monthReport_html)
html_to_pdf(monthReport_html, pdf_folder + self.pdf_name) html_to_pdf(monthReport_html, pdf_save_folder + self.pdf_name)
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=1)
data = dt.get_template_data() data = dt.get_template_data()
print(data) dt.render_data()
# dt.render_data()
print('耗时{}秒'.format(round(time.time()-start, 2))) print('耗时{}秒'.format(round(time.time()-start, 2)))
...@@ -10761,3 +10761,85 @@ MySQLdb._exceptions.OperationalError: (2013, 'Lost connection to MySQL server du ...@@ -10761,3 +10761,85 @@ MySQLdb._exceptions.OperationalError: (2013, 'Lost connection to MySQL server du
2021-01-15 17:24:26 Fri werkzeug INFO * Restarting with stat 2021-01-15 17:24:26 Fri werkzeug INFO * Restarting with stat
2021-01-15 17:24:30 Fri werkzeug WARNING * Debugger is active! 2021-01-15 17:24:30 Fri werkzeug WARNING * Debugger is active!
2021-01-15 17:24:30 Fri werkzeug INFO * Debugger PIN: 191-123-093 2021-01-15 17:24:30 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 17:48:57 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/utils/auth.py', reloading
2021-01-15 17:48:57 Fri werkzeug INFO * Restarting with stat
2021-01-15 17:49:02 Fri werkzeug WARNING * Debugger is active!
2021-01-15 17:49:02 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 17:54:22 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/model/tamp_diagnose_app.py', reloading
2021-01-15 17:54:22 Fri werkzeug INFO * Restarting with stat
2021-01-15 17:54:27 Fri werkzeug WARNING * Debugger is active!
2021-01-15 17:54:27 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 17:54:41 Fri werkzeug INFO * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)
2021-01-15 17:54:41 Fri werkzeug INFO * Restarting with stat
2021-01-15 17:54:46 Fri werkzeug WARNING * Debugger is active!
2021-01-15 17:54:46 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 17:58:21 Fri werkzeug INFO 172.168.0.114 - - [15/Jan/2021 17:58:21] "GET /api/user/customer-data/ HTTP/1.1" 404 -
2021-01-15 17:58:21 Fri werkzeug INFO 172.168.0.114 - - [15/Jan/2021 17:58:21] "GET /api/user/fund-return-list/ HTTP/1.1" 404 -
2021-01-15 17:58:22 Fri werkzeug INFO 172.168.0.114 - - [15/Jan/2021 17:58:22] "GET /api/scan/getQrcode HTTP/1.1" 404 -
2021-01-15 17:58:26 Fri werkzeug INFO 172.168.0.114 - - [15/Jan/2021 17:58:26] "GET /api/scan/getQrcode HTTP/1.1" 404 -
2021-01-15 17:59:22 Fri werkzeug INFO 172.168.0.114 - - [15/Jan/2021 17:59:22] "GET /api/scan/getQrcode HTTP/1.1" 404 -
2021-01-15 18:00:01 Fri werkzeug INFO 172.168.0.114 - - [15/Jan/2021 18:00:01] "GET /api/scan/getQrcode HTTP/1.1" 404 -
2021-01-15 18:00:37 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:00:37] "GET /api/template_list?type=0&pageNumber=1&pageSize=10 HTTP/1.1" 200 -
2021-01-15 18:00:47 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:00:47] "GET /api/template_list?type=0&pageNumber=1&pageSize=10 HTTP/1.1" 200 -
2021-01-15 18:01:00 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:01:00] "GET /api/template_list?type=0&pageNumber=1&pageSize=10 HTTP/1.1" 200 -
2021-01-15 18:02:33 Fri werkzeug INFO * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)
2021-01-15 18:02:33 Fri werkzeug INFO * Restarting with stat
2021-01-15 18:02:39 Fri werkzeug WARNING * Debugger is active!
2021-01-15 18:02:39 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 18:02:39 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:02:39] "GET /api/template_list?type=0&pageNumber=1&pageSize=10 HTTP/1.1" 200 -
2021-01-15 18:03:15 Fri werkzeug INFO * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)
2021-01-15 18:03:15 Fri werkzeug INFO * Restarting with stat
2021-01-15 18:03:20 Fri werkzeug WARNING * Debugger is active!
2021-01-15 18:03:20 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 18:03:23 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:03:23] "GET /api/template_list?type=0&pageNumber=1&pageSize=10 HTTP/1.1" 200 -
2021-01-15 18:04:07 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:04:07] "GET /api/template_list?type=1&pageNumber=1&pageSize=10 HTTP/1.1" 200 -
2021-01-15 18:04:12 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:04:12] "GET /api/template_list?type=2&pageNumber=1&pageSize=10 HTTP/1.1" 200 -
2021-01-15 18:04:17 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:04:17] "GET /api/template_list?type=3&pageNumber=1&pageSize=10 HTTP/1.1" 200 -
2021-01-15 18:04:22 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:04:22] "GET /api/template_list?type=0&pageNumber=1&pageSize=10 HTTP/1.1" 200 -
2021-01-15 18:04:54 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:04:54] "GET /api/template_list?type=0&pageNumber=1&pageSize=10 HTTP/1.1" 500 -
2021-01-15 18:04:57 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:04:57] "GET /api/template_list?type=0&pageNumber=1&pageSize=10 HTTP/1.1" 200 -
2021-01-15 18:05:07 Fri werkzeug INFO 127.0.0.1 - - [15/Jan/2021 18:05:07] "GET /api/template_list?type=0&pageNumber=1&pageSize=10 HTTP/1.1" 200 -
2021-01-15 18:06:24 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/model/tamp_diagnose_app.py', reloading
2021-01-15 18:06:24 Fri werkzeug INFO * Restarting with stat
2021-01-15 18:06:28 Fri werkzeug WARNING * Debugger is active!
2021-01-15 18:06:28 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 19:02:45 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/service/template_manage_service.py', reloading
2021-01-15 19:02:46 Fri werkzeug INFO * Restarting with stat
2021-01-15 19:02:51 Fri werkzeug WARNING * Debugger is active!
2021-01-15 19:02:51 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 19:07:14 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/service/template_manage_service.py', reloading
2021-01-15 19:07:14 Fri werkzeug INFO * Restarting with stat
2021-01-15 19:07:19 Fri werkzeug WARNING * Debugger is active!
2021-01-15 19:07:19 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 19:27:41 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/service/template_manage_service.py', reloading
2021-01-15 19:27:41 Fri werkzeug INFO * Restarting with stat
2021-01-15 19:27:48 Fri werkzeug WARNING * Debugger is active!
2021-01-15 19:27:48 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 19:40:39 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/service/template_manage_service.py', reloading
2021-01-15 19:40:39 Fri werkzeug INFO * Restarting with stat
2021-01-15 19:40:46 Fri werkzeug WARNING * Debugger is active!
2021-01-15 19:40:46 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 19:42:40 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/service/template_manage_service.py', reloading
2021-01-15 19:42:41 Fri werkzeug INFO * Restarting with stat
2021-01-15 19:42:46 Fri werkzeug WARNING * Debugger is active!
2021-01-15 19:42:46 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 19:46:33 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/service/template_manage_service.py', reloading
2021-01-15 19:46:33 Fri werkzeug INFO * Restarting with stat
2021-01-15 19:46:38 Fri werkzeug WARNING * Debugger is active!
2021-01-15 19:46:38 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 19:47:28 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/service/template_manage_service.py', reloading
2021-01-15 19:47:29 Fri werkzeug INFO * Restarting with stat
2021-01-15 19:47:35 Fri werkzeug WARNING * Debugger is active!
2021-01-15 19:47:35 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 19:48:39 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/service/template_manage_service.py', reloading
2021-01-15 19:48:39 Fri werkzeug INFO * Restarting with stat
2021-01-15 19:48:45 Fri werkzeug WARNING * Debugger is active!
2021-01-15 19:48:45 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 19:49:17 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/controller/template_manage.py', reloading
2021-01-15 19:49:17 Fri werkzeug INFO * Restarting with stat
2021-01-15 19:49:22 Fri werkzeug WARNING * Debugger is active!
2021-01-15 19:49:22 Fri werkzeug INFO * Debugger PIN: 191-123-093
2021-01-15 19:49:24 Fri werkzeug INFO * Detected change in '/Users/pengxiong/Desktop/tamp_workspace/fund_report/app/controller/template_manage.py', reloading
2021-01-15 19:49:24 Fri werkzeug INFO * Restarting with stat
2021-01-15 19:49:29 Fri werkzeug WARNING * Debugger is active!
2021-01-15 19:49:29 Fri werkzeug INFO * Debugger PIN: 191-123-093
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