Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
financial-system
Project
Project
Details
Activity
Releases
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xianyang
financial-system
Commits
11237c65
Commit
11237c65
authored
May 30, 2023
by
xianyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化
parent
6a4792d4
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
82 additions
and
21 deletions
+82
-21
crud.py
app/api/account/crud.py
+9
-11
views.py
app/api/account/views.py
+3
-2
crud.py
app/api/export/crud.py
+4
-7
business.py
libs/business.py
+5
-1
export.py
libs/export.py
+61
-0
No files found.
app/api/account/crud.py
View file @
11237c65
...
...
@@ -468,12 +468,11 @@ class AccountStatistics(object):
total
=
len
(
ultimately_data
)
res
=
ultimately_data
[
int
(
self
.
page
-
1
)
*
self
.
size
:
self
.
page
*
self
.
size
]
# 判断是列表还是导出接口
type_name
=
query_fi_account_type
()
if
is_list
:
if
not
res
:
return
[],
0
,
0
for
i
in
res
:
i
[
'reference_name'
]
=
type_name
[
i
[
'reference_type'
]]
if
type_name
.
get
(
i
[
'reference_type'
])
else
i
[
i
[
'reference_name'
]
=
TYPE_NAME
[
i
[
'reference_type'
]]
if
TYPE_NAME
.
get
(
i
[
'reference_type'
])
else
i
[
'reference_type'
]
data_pd
=
pd
.
DataFrame
(
ultimately_data
)
amount_total
=
data_pd
[
'amount'
]
.
sum
()
...
...
@@ -532,18 +531,18 @@ def delete_specify_field(data, unique_tag):
for
i
in
data
:
if
unique_tag
in
[
"knapsack_account"
,
"user_account"
,
"guild_account"
,
"pledgeDeduction"
]:
structure
=
{
"uuid"
:
i
[
"uuid"
]
,
"income"
:
i
[
"income"
]
,
"outcome"
:
i
[
"outcome"
]
,
"create_time"
:
i
[
"create_time"
]
"uuid"
:
i
.
get
(
'uuid'
,
''
)
,
"income"
:
i
.
get
(
'income'
,
''
)
,
"outcome"
:
i
.
get
(
'outcome'
,
''
)
,
"create_time"
:
i
.
get
(
'create_time'
,
''
)
}
else
:
structure
=
{
"reference_number"
:
i
[
"reference_number"
]
,
"reference_number"
:
i
.
get
(
'reference_number'
,
''
)
,
"type"
:
'出账'
if
i
[
"type"
]
==
0
else
'入账'
,
"reference_type"
:
i
[
"reference_type"
]
,
"reference_type"
:
i
.
get
(
'reference_type'
,
''
)
,
"amount"
:
round
(
float
(
i
[
"amount"
]),
3
),
"create_time"
:
i
[
"create_time"
]
"create_time"
:
i
.
get
(
'create_time'
,
''
)
}
res_list
.
append
(
structure
)
return
res_list
...
...
@@ -607,9 +606,8 @@ class SpecificAccountQuery(object):
res
=
self
.
total_list
[
int
(
self
.
page
-
1
)
*
self
.
size
:
self
.
page
*
self
.
size
]
if
not
res
:
return
[],
0
,
0
type_name
=
query_fi_account_type
()
for
i
in
res
:
i
[
'reference_name'
]
=
type_name
[
i
[
'reference_type'
]]
if
type_name
.
get
(
i
[
'reference_type'
])
else
i
[
i
[
'reference_name'
]
=
TYPE_NAME
[
i
[
'reference_type'
]]
if
TYPE_NAME
.
get
(
i
[
'reference_type'
])
else
i
[
'reference_type'
]
data_pd
=
pd
.
DataFrame
(
self
.
total_list
)
amount_total
=
data_pd
[
'amount'
]
.
sum
()
...
...
app/api/account/views.py
View file @
11237c65
...
...
@@ -7,7 +7,7 @@ from app.api.account import schemas, crud
from
app.api.account.crud
import
AccountStatistics
,
SpecificAccountQuery
,
HomePageDisplay
from
app.api.statement
import
crud
as
statement_crud
from
libs
import
functions
from
libs.export
import
Export
from
libs.export
import
Export
,
TableToFile
from
libs.functions
import
get_date_list
from
libs.log_utils
import
Logger
from
libs.result_format
import
HttpResultResponse
,
HttpMessage
...
...
@@ -109,7 +109,8 @@ def finance_info_excel(data: schemas.FinanceDetails, request: Request,
else
:
field_head
=
[
'订单号'
,
'出入账方式'
,
'礼物类型'
,
'金额'
,
'时间'
]
data
=
crud
.
delete_specify_field
(
statement_list
,
data
.
unique_tag
)
return
statement_crud
.
data_to_file
(
db
,
data
,
"财务明细"
,
headers
,
field_head
)
# return statement_crud.data_to_file(db, data, "财务明细", headers, field_head)
return
TableToFile
(
db
,
data
,
"财务明细"
,
headers
,
field_head
)
.
main_method
()
@
router
.
get
(
"/finance/fourth/details"
)
...
...
app/api/export/crud.py
View file @
11237c65
...
...
@@ -127,8 +127,7 @@ class CalculationMonthlyBill(object):
def
kv_search
(
self
):
"""查询筛选的key, value"""
k_list
=
[]
type_name
=
query_fi_account_type
()
for
k
,
v
in
type_name
.
items
():
for
k
,
v
in
TYPE_NAME
.
items
():
if
v
==
self
.
name
or
self
.
name
in
v
:
k_list
.
append
(
k
)
return
k_list
...
...
@@ -272,8 +271,7 @@ class MonthDataDerive(object):
assert_list
=
[]
if
name
:
k_list
=
[]
type_name
=
query_fi_account_type
()
for
k
,
v
in
type_name
.
items
():
for
k
,
v
in
TYPE_NAME
.
items
():
if
v
==
name
or
name
in
v
:
k_list
.
append
(
k
)
if
len
(
k_list
)
>
1
:
...
...
@@ -293,9 +291,8 @@ class MonthDataDerive(object):
for
res
in
res_data
:
if
res
[
"reference_type"
]
in
self
.
derive_key
:
continue
type_name
=
query_fi_account_type
()
if
res
[
"reference_type"
]
in
type_name
:
name
=
type_name
[
res
[
"reference_type"
]]
if
res
[
"reference_type"
]
in
TYPE_NAME
:
name
=
TYPE_NAME
[
res
[
"reference_type"
]]
else
:
name
=
res
[
"reference_type"
]
out
=
[
i
[
'money'
]
for
i
in
res_data
if
i
[
'reference_type'
]
==
res
[
"reference_type"
]
and
i
[
'type'
]
==
0
]
...
...
libs/business.py
View file @
11237c65
...
...
@@ -9,7 +9,11 @@ def query_fi_account_type():
res_data
=
LinkMysql
(
env
.
DB_3YV2
)
.
query_mysql
(
sql
)
for
i
in
res_data
:
if
not
fi_type
.
get
(
i
[
'keyValue'
]):
fi_type
[
i
[
'keyValue'
]]
=
i
[
'keyName'
]
try
:
name
,
type
=
i
[
'keyName'
]
.
split
(
'-'
)
except
Exception
as
e
:
name
=
i
[
'keyName'
]
fi_type
[
i
[
'keyValue'
]]
=
name
return
fi_type
...
...
libs/export.py
View file @
11237c65
...
...
@@ -82,3 +82,64 @@ class Export(object):
Logger
(
40
)
.
logger
.
error
(
"导出失败:
%
s"
%
str
(
e
))
params
[
"status"
]
=
2
crud
.
create_export_data
(
self
.
db
,
params
,
user
)
class
TableToFile
(
object
):
def
__init__
(
self
,
db
,
data
,
name
,
header
,
field_list
):
self
.
db
=
db
self
.
data
=
data
self
.
name
=
name
self
.
header
=
header
self
.
field_list
=
field_list
self
.
lock
=
threading
.
Lock
()
self
.
wb
=
openpyxl
.
Workbook
()
# 创建一个新的 Excel 文件
self
.
lock
=
threading
.
Lock
()
def
thread_task
(
self
,
bk
,
writer
,
sheet_name
):
"""线程执行方法"""
self
.
lock
.
acquire
()
bk
.
to_excel
(
writer
,
sheet_name
=
sheet_name
,
index
=
False
)
self
.
lock
.
release
()
def
main_method
(
self
):
"""主函数"""
Logger
()
.
logger
.
info
(
'开始导出'
)
user
=
query_token
(
self
.
db
,
self
.
header
)
params
=
{
"source"
:
self
.
name
,
"method"
:
"data_to_file"
,
"status"
:
1
}
if
len
(
self
.
data
)
==
0
:
params
[
"status"
]
=
3
crud
.
create_export_data
(
self
.
db
,
params
,
user
)
Logger
()
.
logger
.
info
(
f
'导出没有数据'
)
return
None
try
:
bk
=
pd
.
DataFrame
(
self
.
data
)
if
self
.
data
[
0
]
.
get
(
'create_time'
):
if
isinstance
(
self
.
data
[
0
][
'create_time'
],
int
):
bk
[
'create_time'
]
=
bk
[
'create_time'
]
.
apply
(
lambda
x
:
time
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
,
time
.
localtime
(
x
)))
bk
.
columns
=
self
.
field_list
# 修改pandas头
write_data
=
bk
.
to_dict
(
orient
=
'records'
)
with
pd
.
ExcelWriter
(
f
'static/{self.name}.xlsx'
)
as
writer
:
# bk.to_excel(writer, sheet_name='Sheet1', index=False)
threads
=
[]
rows_per_thread
=
math
.
ceil
(
len
(
write_data
)
/
5
)
for
i
in
range
(
5
):
sheet_name
=
'sheet'
+
str
(
i
+
1
)
threads
.
append
(
threading
.
Thread
(
target
=
self
.
thread_task
,
args
=
[
bk
.
iloc
[
i
*
rows_per_thread
:
rows_per_thread
*
(
i
+
1
)],
writer
,
sheet_name
]))
# 启动线程
for
y
in
threads
:
y
.
start
()
# 等待所有线程完成
for
z
in
threads
:
z
.
join
()
file
=
open
(
writer
,
'rb'
)
# 记录导出
crud
.
create_export_data
(
self
.
db
,
params
,
user
)
return
StreamingResponse
(
file
,
media_type
=
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
)
except
Exception
as
e
:
Logger
()
.
logger
.
info
(
f
'导出异常:{str(e)}'
)
params
[
"status"
]
=
2
crud
.
create_export_data
(
self
.
db
,
params
,
user
)
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