Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in
Toggle navigation
F
fund_report
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
彭熊
fund_report
Commits
ec03c6d1
Commit
ec03c6d1
authored
Jan 15, 2021
by
李宗熹
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/manage' into manage
parents
3e1f8b04
c08dd684
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
408 additions
and
97 deletions
+408
-97
engine.py
app/api/engine.py
+2
-1
config.yaml
app/config/config.yaml
+8
-3
default_template_params.py
app/config/default_template_params.py
+1
-4
customer.py
app/controller/customer.py
+4
-8
report.py
app/controller/report.py
+17
-30
template_manage.py
app/controller/template_manage.py
+14
-20
tamp_diagnose_app.py
app/model/tamp_diagnose_app.py
+4
-1
6a12a5d3-e826-4b49-82df-16fd2d0d67c1.pdf
app/pdf/6a12a5d3-e826-4b49-82df-16fd2d0d67c1.pdf
+0
-0
template_manage_service.py
app/service/template_manage_service.py
+0
-3
monthReportV2.1.html
app/templates/v2/monthReportV2.1.html
+29
-27
auth.py
app/utils/auth.py
+23
-0
fund_report.log
logs/fund_report.log
+306
-0
No files found.
app/api/engine.py
View file @
ec03c6d1
...
@@ -99,7 +99,8 @@ tamp_diagnose_app_engine = create_engine(
...
@@ -99,7 +99,8 @@ tamp_diagnose_app_engine = create_engine(
redis
=
redis
.
StrictRedis
(
redis
=
redis
.
StrictRedis
(
host
=
config
[
env
][
'redis'
][
'host'
],
host
=
config
[
env
][
'redis'
][
'host'
],
port
=
config
[
env
][
'redis'
][
'port'
],
port
=
config
[
env
][
'redis'
][
'port'
],
db
=
config
[
env
][
'redis'
][
'db'
]
db
=
config
[
env
][
'redis'
][
'db'
],
password
=
config
[
env
][
'redis'
][
'password'
]
)
)
logging
.
basicConfig
(
level
=
logging
.
INFO
,
logging
.
basicConfig
(
level
=
logging
.
INFO
,
...
...
app/config/config.yaml
View file @
ec03c6d1
...
@@ -13,7 +13,10 @@ dev:
...
@@ -13,7 +13,10 @@ dev:
host
:
localhost
host
:
localhost
port
:
6379
port
:
6379
db
:
0
db
:
0
password
:
oss
:
oss
:
imgs_url_prefix
:
https://devtamper.tanpuyun.com/hangjiapc/report/productionenv/ReportTempImg/
pdf_url_prefix
:
https://devtamper.tanpuyun.com/hangjiapc/report/productionenv/AppHoldReport/
account
:
LTAI4FzkGhAMecinBCKwuoUW
account
:
LTAI4FzkGhAMecinBCKwuoUW
password
:
KJpPWg9U0kYO71yB41gqYbrFNJ4hso
password
:
KJpPWg9U0kYO71yB41gqYbrFNJ4hso
log
:
log
:
...
@@ -35,9 +38,10 @@ test:
...
@@ -35,9 +38,10 @@ test:
user
:
root
user
:
root
password
:
'
@imeng123'
password
:
'
@imeng123'
redis
:
redis
:
host
:
localhost
host
:
118.190.63.109
port
:
6379
port
:
5
6379
db
:
0
db
:
0
password
:
'
qimeng123'
oss
:
oss
:
imgs_url_prefix
:
https://testtamper.tanpuyun.com/hangjiapc/report/productionenv/ReportTempImg/
imgs_url_prefix
:
https://testtamper.tanpuyun.com/hangjiapc/report/productionenv/ReportTempImg/
pdf_url_prefix
:
https://testtamper.tanpuyun.com/hangjiapc/report/productionenv/AppHoldReport/
pdf_url_prefix
:
https://testtamper.tanpuyun.com/hangjiapc/report/productionenv/AppHoldReport/
...
@@ -60,9 +64,10 @@ prod:
...
@@ -60,9 +64,10 @@ prod:
user
:
tamp_fund
user
:
tamp_fund
password
:
'
@imeng408'
password
:
'
@imeng408'
redis
:
redis
:
host
:
localhost
host
:
r-uf6atruhdbq89enqz0.redis.rds.aliyuncs.com
port
:
6379
port
:
6379
db
:
0
db
:
0
password
:
'
@imeng123'
oss
:
oss
:
imgs_url_prefix
:
https://tamper.tanpuyun.com/hangjiapc/report/productionenv/ReportTempImg/
imgs_url_prefix
:
https://tamper.tanpuyun.com/hangjiapc/report/productionenv/ReportTempImg/
pdf_url_prefix
:
https://tamper.tanpuyun.com/hangjiapc/report/productionenv/AppHoldReport/
pdf_url_prefix
:
https://tamper.tanpuyun.com/hangjiapc/report/productionenv/AppHoldReport/
...
...
app/config/default_template_params.py
View file @
ec03c6d1
...
@@ -95,9 +95,6 @@ diagnose_default_template = {
...
@@ -95,9 +95,6 @@ diagnose_default_template = {
'box8': 'block',
'box8': 'block',
'cover_title1': '资产',
'cover_title1': '资产',
'cover_title2': '存续报告',
'cover_title2': '存续报告',
'logo': '',
'cover_back': '',
'scene': '',
'logo': template_folder + 'logo.png',
'logo': template_folder + 'logo.png',
'brand_name': '小飞象',
'brand_name': '小飞象',
'logo_display': 'block',
'logo_display': 'block',
...
@@ -569,7 +566,7 @@ diagnose_default_data = {
...
@@ -569,7 +566,7 @@ diagnose_default_data = {
"sharpe": 0.28
"sharpe": 0.28
}
}
],
],
"new_group_evaluation":
"建议赎回丹羿步步高德兴1号,增配申毅全天候2号后,整体组合波动率大幅降低,最大回撤从5.75%降到不足0.38%。"
,
"new_group_evaluation":
["建议赎回丹羿步步高德兴1号,增配申毅全天候2号后,整体组合波动率大幅降低,最大回撤从5.75%降到不足0.38%。"]
,
"old_evaluation": [
"old_evaluation": [
"1、组合构建于2020年7月,至今已运行5个月。投入成本为160.0万元,截止2020年12月31日,整体盈利24.46万元,整体表现<span class=\"self_description_red\">良好</span>,回撤控制能力<span class=\"self_description_red\">良好</span>;\n",
"1、组合构建于2020年7月,至今已运行5个月。投入成本为160.0万元,截止2020年12月31日,整体盈利24.46万元,整体表现<span class=\"self_description_red\">良好</span>,回撤控制能力<span class=\"self_description_red\">良好</span>;\n",
"2、组合共持有1只基金,1只基金取得正收益,1只基金综合得分较低建议更换;\n",
"2、组合共持有1只基金,1只基金取得正收益,1只基金综合得分较低建议更换;\n",
app/controller/customer.py
View file @
ec03c6d1
...
@@ -6,32 +6,28 @@
...
@@ -6,32 +6,28 @@
# @Email : acepengxiong@163.com
# @Email : acepengxiong@163.com
# @Software : PyCharm
# @Software : PyCharm
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
from
flask
import
request
from
flask
import
request
,
g
from
flask_restful
import
Resource
,
reqparse
from
flask_restful
import
Resource
,
reqparse
from
app.api.engine
import
redis
from
app.api.engine
import
redis
from
app.service.customer
import
get_customer_list
from
app.service.customer
import
get_customer_list
from
app.utils.auth
import
login_require
class
CustomerList
(
Resource
):
class
CustomerList
(
Resource
):
""""""
""""""
def
__init__
(
self
):
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
()
self
.
parser
=
reqparse
.
RequestParser
()
@
login_require
def
get
(
self
):
def
get
(
self
):
"""获取客户列表分页数据."""
"""获取客户列表分页数据."""
self
.
parser
.
add_argument
(
'name'
,
type
=
str
,
required
=
False
,
help
=
'客户名'
)
self
.
parser
.
add_argument
(
'name'
,
type
=
str
,
required
=
False
,
help
=
'客户名'
)
self
.
parser
.
add_argument
(
'pageNumber'
,
type
=
int
,
required
=
True
)
self
.
parser
.
add_argument
(
'pageNumber'
,
type
=
int
,
required
=
True
)
self
.
parser
.
add_argument
(
'pageSize'
,
type
=
int
,
required
=
True
)
self
.
parser
.
add_argument
(
'pageSize'
,
type
=
int
,
required
=
True
)
args
=
self
.
parser
.
parse_args
()
args
=
self
.
parser
.
parse_args
()
args
[
'ifa_id'
]
=
self
.
ifa_id
args
[
'ifa_id'
]
=
g
.
ifa_id
data
=
get_customer_list
(
args
)
data
=
get_customer_list
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
...
app/controller/report.py
View file @
ec03c6d1
...
@@ -13,16 +13,14 @@ import uuid
...
@@ -13,16 +13,14 @@ import uuid
import
oss2
import
oss2
from
flask_restful
import
Resource
,
reqparse
from
flask_restful
import
Resource
,
reqparse
from
flask
import
request
,
render_template
from
flask
import
request
,
render_template
,
g
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
,
make_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
get_make_report_data
from
app.service.template_manage_service
import
get_make_report_data
from
app.utils.auth
import
login_require
from
app.utils.format_transfer
import
npEncoder
from
app.utils.format_transfer
import
npEncoder
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.utils.jinjia2html_v2
import
DataIntegrate
class
ReportHandlers
(
Resource
):
class
ReportHandlers
(
Resource
):
...
@@ -30,20 +28,15 @@ class ReportHandlers(Resource):
...
@@ -30,20 +28,15 @@ class ReportHandlers(Resource):
def
__init__
(
self
):
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
()
self
.
parser
=
reqparse
.
RequestParser
()
@
login_require
def
get
(
self
):
def
get
(
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
(
'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
()
args
[
'ifa_id'
]
=
self
.
ifa_id
args
[
'ifa_id'
]
=
g
.
ifa_id
data
=
get_make_report_data
(
args
)
data
=
get_make_report_data
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
@@ -52,6 +45,7 @@ class ReportHandlers(Resource):
...
@@ -52,6 +45,7 @@ class ReportHandlers(Resource):
}
}
return
json
.
dumps
(
resp
,
cls
=
npEncoder
,
ensure_ascii
=
False
)
return
json
.
dumps
(
resp
,
cls
=
npEncoder
,
ensure_ascii
=
False
)
@
login_require
def
post
(
self
):
def
post
(
self
):
"""保存报告."""
"""保存报告."""
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周期报告'
)
...
@@ -59,7 +53,7 @@ class ReportHandlers(Resource):
...
@@ -59,7 +53,7 @@ class ReportHandlers(Resource):
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
(
'report_data'
,
type
=
str
,
required
=
True
,
help
=
'report_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'
]
=
g
.
ifa_id
make_report
(
args
)
make_report
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
@@ -68,11 +62,12 @@ class ReportHandlers(Resource):
...
@@ -68,11 +62,12 @@ class ReportHandlers(Resource):
}
}
return
resp
return
resp
@
login_require
def
put
(
self
,
id
):
def
put
(
self
,
id
):
"""."""
"""."""
pass
pass
@
login_require
def
delete
(
self
,
id
):
def
delete
(
self
,
id
):
"""."""
"""."""
pass
pass
...
@@ -83,14 +78,9 @@ class ReportList(Resource):
...
@@ -83,14 +78,9 @@ class ReportList(Resource):
def
__init__
(
self
):
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
()
self
.
parser
=
reqparse
.
RequestParser
()
@
login_require
def
get
(
self
):
def
get
(
self
):
"""获取我的报告列表."""
"""获取我的报告列表."""
self
.
parser
.
add_argument
(
'type'
,
type
=
int
,
required
=
True
,
help
=
'0为全部1为持仓报告2为诊断报告3周期报告'
)
self
.
parser
.
add_argument
(
'type'
,
type
=
int
,
required
=
True
,
help
=
'0为全部1为持仓报告2为诊断报告3周期报告'
)
...
@@ -100,7 +90,7 @@ class ReportList(Resource):
...
@@ -100,7 +90,7 @@ class ReportList(Resource):
self
.
parser
.
add_argument
(
'start_time'
,
type
=
str
,
required
=
False
)
self
.
parser
.
add_argument
(
'start_time'
,
type
=
str
,
required
=
False
)
self
.
parser
.
add_argument
(
'end_time'
,
type
=
str
,
required
=
False
)
self
.
parser
.
add_argument
(
'end_time'
,
type
=
str
,
required
=
False
)
args
=
self
.
parser
.
parse_args
()
args
=
self
.
parser
.
parse_args
()
args
[
'ifa_id'
]
=
self
.
ifa_id
args
[
'ifa_id'
]
=
g
.
ifa_id
data
=
get_report_list
(
args
)
data
=
get_report_list
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
@@ -109,17 +99,19 @@ class ReportList(Resource):
...
@@ -109,17 +99,19 @@ class ReportList(Resource):
}
}
return
resp
return
resp
@
login_require
def
post
(
self
):
def
post
(
self
):
"""保存报告."""
"""保存报告."""
pass
pass
@
login_require
def
put
(
self
):
def
put
(
self
):
"""编辑报告."""
"""编辑报告."""
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
(
'id'
,
type
=
int
,
required
=
True
,
help
=
'报告id不能为空'
)
self
.
parser
.
add_argument
(
'id'
,
type
=
int
,
required
=
True
,
help
=
'报告id不能为空'
)
self
.
parser
.
add_argument
(
'report_data'
,
type
=
str
,
required
=
True
,
help
=
'报告数据不能为空'
)
self
.
parser
.
add_argument
(
'report_data'
,
type
=
str
,
required
=
True
,
help
=
'报告数据不能为空'
)
args
=
self
.
parser
.
parse_args
()
args
=
self
.
parser
.
parse_args
()
args
[
'ifa_id'
]
=
self
.
ifa_id
args
[
'ifa_id'
]
=
g
.
ifa_id
data
=
edit_report
(
args
)
data
=
edit_report
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
@@ -128,13 +120,13 @@ class ReportList(Resource):
...
@@ -128,13 +120,13 @@ class ReportList(Resource):
}
}
return
resp
return
resp
@
login_require
def
delete
(
self
):
def
delete
(
self
):
"""."""
"""."""
self
.
parser
.
add_argument
(
'type'
,
type
=
int
,
required
=
True
,
help
=
'0为全部1为持仓报告2为诊断报告3周期报告'
)
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不能为空'
)
self
.
parser
.
add_argument
(
'id'
,
type
=
int
,
required
=
True
,
help
=
'报告id不能为空'
)
args
=
self
.
parser
.
parse_args
()
args
=
self
.
parser
.
parse_args
()
args
[
'ifa_id'
]
=
self
.
ifa_id
args
[
'ifa_id'
]
=
g
.
ifa_id
delete_report
(
args
)
delete_report
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
@@ -149,20 +141,15 @@ class FindReport(Resource):
...
@@ -149,20 +141,15 @@ class FindReport(Resource):
def
__init__
(
self
):
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
()
self
.
parser
=
reqparse
.
RequestParser
()
@
login_require
def
get
(
self
):
def
get
(
self
):
"""获取单个报告."""
"""获取单个报告."""
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
(
'id'
,
type
=
str
,
required
=
False
,
help
=
''
)
self
.
parser
.
add_argument
(
'id'
,
type
=
str
,
required
=
False
,
help
=
''
)
args
=
self
.
parser
.
parse_args
()
args
=
self
.
parser
.
parse_args
()
args
[
'ifa_id'
]
=
self
.
ifa_id
args
[
'ifa_id'
]
=
g
.
ifa_id
data
=
get_one_report
(
args
)
data
=
get_one_report
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
...
app/controller/template_manage.py
View file @
ec03c6d1
...
@@ -9,13 +9,14 @@
...
@@ -9,13 +9,14 @@
import
json
import
json
from
flask_restful
import
Resource
,
reqparse
from
flask_restful
import
Resource
,
reqparse
from
flask
import
request
from
flask
import
request
,
g
from
app.api.engine
import
redis
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
,
set_default_template
get_default_template
,
set_default_template
from
app.utils.auth
import
login_require
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
...
@@ -27,19 +28,14 @@ class TemplateManage(Resource):
...
@@ -27,19 +28,14 @@ class TemplateManage(Resource):
def
__init__
(
self
):
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
()
self
.
parser
=
reqparse
.
RequestParser
()
@
login_require
def
get
(
self
):
def
get
(
self
):
"""获取默认模版数据."""
"""获取默认模版数据."""
self
.
parser
.
add_argument
(
'type'
,
type
=
int
,
required
=
True
,
help
=
'type不能为空'
)
self
.
parser
.
add_argument
(
'type'
,
type
=
int
,
required
=
True
,
help
=
'type不能为空'
)
args
=
self
.
parser
.
parse_args
()
args
=
self
.
parser
.
parse_args
()
args
[
'ifa_id'
]
=
self
.
ifa_id
args
[
'ifa_id'
]
=
g
.
ifa_id
data
=
get_default_template
(
args
)
data
=
get_default_template
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
@@ -48,14 +44,14 @@ class TemplateManage(Resource):
...
@@ -48,14 +44,14 @@ class TemplateManage(Resource):
}
}
return
json
.
dumps
(
resp
,
cls
=
npEncoder
,
ensure_ascii
=
False
)
return
json
.
dumps
(
resp
,
cls
=
npEncoder
,
ensure_ascii
=
False
)
@
login_require
def
post
(
self
):
def
post
(
self
):
"""新建定义模版."""
"""新建定义模版."""
self
.
parser
.
add_argument
(
'name'
,
type
=
str
,
required
=
True
,
help
=
'模版名称不能为空'
)
self
.
parser
.
add_argument
(
'name'
,
type
=
str
,
required
=
True
,
help
=
'模版名称不能为空'
)
self
.
parser
.
add_argument
(
'custom_template'
,
type
=
str
,
required
=
True
,
help
=
'模版数据不能为空'
)
self
.
parser
.
add_argument
(
'custom_template'
,
type
=
str
,
required
=
True
,
help
=
'模版数据不能为空'
)
self
.
parser
.
add_argument
(
'type'
,
type
=
int
,
required
=
True
,
help
=
'模版类型不能为空'
)
self
.
parser
.
add_argument
(
'type'
,
type
=
int
,
required
=
True
,
help
=
'模版类型不能为空'
)
args
=
self
.
parser
.
parse_args
()
args
=
self
.
parser
.
parse_args
()
args
[
'ifa_id'
]
=
self
.
ifa_id
args
[
'ifa_id'
]
=
g
.
ifa_id
add_template
(
args
)
add_template
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
@@ -64,12 +60,13 @@ class TemplateManage(Resource):
...
@@ -64,12 +60,13 @@ class TemplateManage(Resource):
}
}
return
resp
return
resp
@
login_require
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
(
'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'
]
=
g
.
ifa_id
update_template
(
args
)
update_template
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
@@ -78,11 +75,12 @@ class TemplateManage(Resource):
...
@@ -78,11 +75,12 @@ class TemplateManage(Resource):
}
}
return
resp
return
resp
@
login_require
def
delete
(
self
):
def
delete
(
self
):
"""删除模版."""
"""删除模版."""
self
.
parser
.
add_argument
(
'id'
,
type
=
str
,
required
=
True
,
help
=
'模版id'
)
self
.
parser
.
add_argument
(
'id'
,
type
=
str
,
required
=
True
,
help
=
'模版id'
)
args
=
self
.
parser
.
parse_args
()
args
=
self
.
parser
.
parse_args
()
args
[
'ifa_id'
]
=
self
.
ifa_id
args
[
'ifa_id'
]
=
g
.
ifa_id
res
=
delete_template
(
args
)
res
=
delete_template
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
@@ -103,14 +101,9 @@ class TemplateList(Resource):
...
@@ -103,14 +101,9 @@ class TemplateList(Resource):
def
__init__
(
self
):
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
()
self
.
parser
=
reqparse
.
RequestParser
()
@
login_require
def
get
(
self
):
def
get
(
self
):
"""获取模版列表分页数据."""
"""获取模版列表分页数据."""
self
.
parser
.
add_argument
(
'type'
,
type
=
int
,
required
=
True
,
help
=
'0为全部1为持仓报告2为诊断报告'
)
self
.
parser
.
add_argument
(
'type'
,
type
=
int
,
required
=
True
,
help
=
'0为全部1为持仓报告2为诊断报告'
)
...
@@ -118,7 +111,7 @@ class TemplateList(Resource):
...
@@ -118,7 +111,7 @@ class TemplateList(Resource):
self
.
parser
.
add_argument
(
'pageNumber'
,
type
=
int
,
required
=
True
)
self
.
parser
.
add_argument
(
'pageNumber'
,
type
=
int
,
required
=
True
)
self
.
parser
.
add_argument
(
'pageSize'
,
type
=
int
,
required
=
True
)
self
.
parser
.
add_argument
(
'pageSize'
,
type
=
int
,
required
=
True
)
args
=
self
.
parser
.
parse_args
()
args
=
self
.
parser
.
parse_args
()
args
[
'ifa_id'
]
=
self
.
ifa_id
args
[
'ifa_id'
]
=
g
.
ifa_id
data
=
get_template_list
(
args
)
data
=
get_template_list
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
@@ -127,11 +120,12 @@ class TemplateList(Resource):
...
@@ -127,11 +120,12 @@ class TemplateList(Resource):
}
}
return
resp
return
resp
@
login_require
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'
)
args
=
self
.
parser
.
parse_args
()
args
=
self
.
parser
.
parse_args
()
args
[
'ifa_id'
]
=
self
.
ifa_id
args
[
'ifa_id'
]
=
g
.
ifa_id
data
=
set_default_template
(
args
)
data
=
set_default_template
(
args
)
resp
=
{
resp
=
{
"statusCode"
:
"0000"
,
"statusCode"
:
"0000"
,
...
...
app/model/tamp_diagnose_app.py
View file @
ec03c6d1
...
@@ -96,7 +96,10 @@ class FundReportManange(Base, BaseModel):
...
@@ -96,7 +96,10 @@ class FundReportManange(Base, BaseModel):
tamp_user_session
=
tamp_user
.
session
tamp_user_session
=
tamp_user
.
session
sql
=
"select ui_username_mp from user_info where id = '{}'"
.
format
(
self
.
ifa_id
)
sql
=
"select ui_username_mp from user_info where id = '{}'"
.
format
(
self
.
ifa_id
)
res
=
tamp_user_session
.
execute
(
sql
)
res
=
tamp_user_session
.
execute
(
sql
)
data
[
'author_name'
]
=
res
.
fetchone
()[
0
]
if
res
:
data
[
'author_name'
]
=
res
.
fetchone
()[
0
]
else
:
data
[
'author_name'
]
=
''
if
self
.
default_template
:
if
self
.
default_template
:
data
[
'sys_default'
]
=
1
data
[
'sys_default'
]
=
1
else
:
else
:
...
...
app/pdf/6a12a5d3-e826-4b49-82df-16fd2d0d67c1.pdf
deleted
100644 → 0
View file @
3e1f8b04
File deleted
app/service/template_manage_service.py
View file @
ec03c6d1
...
@@ -11,9 +11,6 @@ import json
...
@@ -11,9 +11,6 @@ import json
import
time
import
time
import
uuid
import
uuid
import
oss2
from
ftfy
import
fix_text
from
sqlalchemy
import
and_
from
sqlalchemy
import
and_
from
app.api.engine
import
TAMP_SQL
,
tamp_diagnose_app_engine
,
config
,
env
from
app.api.engine
import
TAMP_SQL
,
tamp_diagnose_app_engine
,
config
,
env
...
...
app/templates/v2/monthReportV2.1.html
View file @
ec03c6d1
...
@@ -934,13 +934,13 @@
...
@@ -934,13 +934,13 @@
<!-- 封面 -->
<!-- 封面 -->
<div
class=
"box0 clearfix"
>
<div
class=
"box0 clearfix"
>
<div
class=
"cover_head dtable"
>
<div
class=
"cover_head dtable"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"cover_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"cover_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"cover_line"
></div>
<div
class=
"cover_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"cover_text"
>
<div
class=
"cover_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -1017,13 +1017,13 @@
...
@@ -1017,13 +1017,13 @@
投资总览
投资总览
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -1298,13 +1298,13 @@
...
@@ -1298,13 +1298,13 @@
{%endif%}
{%endif%}
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -1524,13 +1524,13 @@
...
@@ -1524,13 +1524,13 @@
业绩的明细
业绩的明细
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -1661,13 +1661,13 @@
...
@@ -1661,13 +1661,13 @@
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -1696,13 +1696,13 @@
...
@@ -1696,13 +1696,13 @@
个基点评
个基点评
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -1719,13 +1719,13 @@
...
@@ -1719,13 +1719,13 @@
<div
class=
"page_title dcell"
>
<div
class=
"page_title dcell"
>
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -1779,13 +1779,13 @@
...
@@ -1779,13 +1779,13 @@
<div
class=
"page_title dcell"
>
<div
class=
"page_title dcell"
>
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -1823,13 +1823,13 @@
...
@@ -1823,13 +1823,13 @@
优化组合建议
优化组合建议
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -1920,13 +1920,13 @@
...
@@ -1920,13 +1920,13 @@
<div
class=
"page_title dcell"
>
<div
class=
"page_title dcell"
>
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -2065,13 +2065,13 @@
...
@@ -2065,13 +2065,13 @@
新增基金
新增基金
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -2089,13 +2089,13 @@
...
@@ -2089,13 +2089,13 @@
<div
class=
"page_title dcell"
>
<div
class=
"page_title dcell"
>
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
@@ -2146,13 +2146,15 @@
...
@@ -2146,13 +2146,15 @@
<div
class=
"comment_tri"
></div>
<div
class=
"comment_tri"
></div>
</div>
</div>
<div
class=
"comment_content"
>
<div
class=
"comment_content"
>
{% for item in group_result["new_group_evaluation"] %}
<div
class=
"comment_item"
>
<div
class=
"comment_item"
>
<div
class=
"comment_dot"
></div>
<div
class=
"comment_dot"
></div>
<div
class=
"comment_text"
>
<div
class=
"comment_text"
>
{{
group_result["new_group_evaluation"]
}}
{{
item
}}
</div>
</div>
</div>
</div>
</div>
</div>
{%endfor%}
</div>
</div>
</div>
</div>
...
@@ -2167,13 +2169,13 @@
...
@@ -2167,13 +2169,13 @@
<div
class=
"page_title dcell"
>
<div
class=
"page_title dcell"
>
</div>
</div>
<div
class=
"page_head dcell"
>
<div
class=
"page_head dcell"
>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{logo_display}}"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
<img
src=
{{logo}}
alt=
""
class=
"page_logo"
>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
>
<div
class=
"page_line"
></div>
<div
class=
"page_line"
></div>
</div>
</div>
<div
class=
"dcell"
>
<div
class=
"dcell"
style=
"display: {{brand_name_display}}"
>
<div
class=
"page_text"
>
<div
class=
"page_text"
>
{{brand_name}}
<br>
{{brand_name}}
<br>
工作室
工作室
...
...
app/
pdf/productionenv/__init__
.py
→
app/
utils/auth
.py
View file @
ec03c6d1
# -*- encoding: utf-8 -*-
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# @File Name :
__init__.py
.py
# @File Name :
auth
.py
# @Time : 2021/1/15
上午10:20
# @Time : 2021/1/15
下午4:54
# @Author : X. Peng
# @Author : X. Peng
# @Email : acepengxiong@163.com
# @Email : acepengxiong@163.com
# @Software : PyCharm
# @Software : PyCharm
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
from
flask
import
request
,
g
from
app.api.engine
import
redis
def
login_require
(
func
):
def
auth
(
*
args
,
**
kwargs
):
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"
:
[]}
g
.
ifa_id
=
ifa_id
.
decode
()
.
replace
(
'
\'
'
,
''
)
return
func
(
*
args
,
**
kwargs
)
return
auth
\ No newline at end of file
logs/fund_report.log
View file @
ec03c6d1
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment