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
f0925b50
Commit
f0925b50
authored
Mar 01, 2023
by
xianyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
报表-转账,财务优化
parent
885f6a7f
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
460 additions
and
152 deletions
+460
-152
schemas.py
app/api/account/schemas.py
+8
-0
guild.py
app/api/statement/guild.py
+94
-12
schemas.py
app/api/statement/schemas.py
+42
-29
views.py
app/api/statement/views.py
+39
-14
functions.py
libs/functions.py
+20
-0
orm.py
libs/orm.py
+61
-61
guild.py
models/guild.py
+115
-0
recharge.py
models/recharge.py
+37
-36
users.py
models/users.py
+44
-0
No files found.
app/api/account/schemas.py
View file @
f0925b50
...
...
@@ -39,3 +39,11 @@ class FinanceInfo(PublicModel):
class
FinanceDetails
(
PublicModel
):
type
:
Optional
[
int
]
=
None
gift_type
:
Optional
[
str
]
=
None
class
FixTable
(
BaseModel
):
type
:
int
account_id
:
int
money
:
float
amount_type
:
str
remark
:
str
app/api/statement/guild.py
View file @
f0925b50
...
...
@@ -3,8 +3,13 @@ import threading
from
sqlalchemy
import
and_
,
func
from
sqlalchemy.orm
import
Session
from
libs.functions
import
get_now_timestamp
,
get_now_datetime
from
libs.orm
import
QueryAllData
from
models.recharge
import
Settlement
from
libs.token_verify
import
get_current_user
from
models.recharge
import
Settlement
,
Fitransferlog
,
FinanceFixLog
from
models.users
import
V2User
from
models.guild
import
Guild
from
models.account
import
Account
locka
=
threading
.
Lock
()
...
...
@@ -71,8 +76,7 @@ class GuildSet(object):
db
.
commit
()
def
paymentset_guild_data
(
db
:
Session
,
dbname
,
params
):
def
paymentset_guild_data
(
db
:
Session
,
dbname
,
params
):
paymentset_filters
=
[]
if
params
.
get
(
"id"
):
paymentset_filters
.
append
(
dbname
.
guild_id
==
params
.
get
(
"guild_id"
))
...
...
@@ -88,20 +92,28 @@ def paymentset_guild_data(db: Session,dbname,params):
paymentset_filters
.
append
(
dbname
.
create_time
>=
params
.
get
(
"start_time"
))
if
params
.
get
(
"end_time"
):
paymentset_filters
.
append
(
dbname
.
create_time
<=
params
.
get
(
"end_time"
))
querydata
,
count
=
QueryAllData
(
db
,
dbname
,
params
,
paymentset_filters
)
.
query_data
()
data
=
[
QueryAllData
.
serialization
(
item
)
for
item
in
querydata
]
return
data
,
count
querydata
,
count
=
QueryAllData
(
db
,
dbname
,
params
,
paymentset_filters
)
.
query_data
()
data
=
[
QueryAllData
.
serialization
(
item
)
for
item
in
querydata
]
return
data
,
count
def
outon_account_data
(
db
:
Session
,
dbname
,
params
):
querydata
,
count
=
QueryAllData
(
db
,
dbname
,
params
,
None
)
.
query_data
()
data
=
[
QueryAllData
.
serialization
(
item
,
remove
=
{
'operator'
,
'unique_tag'
,
'create_time'
,
'beneficiary'
,
'description'
,
'create_time'
,
'config_key'
,
'income'
,
'output'
,
'operator_id'
})
for
item
in
querydata
]
return
data
,
count
def
outon_account_data
(
db
:
Session
,
dbname
,
params
):
querydata
,
count
=
QueryAllData
(
db
,
dbname
,
params
,
None
)
.
query_data
()
data
=
[
QueryAllData
.
serialization
(
item
,
remove
=
{
'operator'
,
'unique_tag'
,
'create_time'
,
'beneficiary'
,
'description'
,
'create_time'
,
'config_key'
,
'income'
,
'output'
,
'operator_id'
})
for
item
in
querydata
]
return
data
,
count
def
accout_list_data
(
db
:
Session
,
dbname
,
params
):
def
accout_list_data
(
db
:
Session
,
dbname
,
params
):
accout_filters
=
[]
if
params
.
get
(
"id"
):
accout_filters
.
append
(
dbname
.
guild_id
==
params
.
get
(
"guild_id"
))
if
params
.
get
(
"transfer_id"
):
accout_filters
.
append
(
dbname
.
transfer_id
==
params
.
get
(
"transfer_id"
))
if
params
.
get
(
"dst_id"
):
accout_filters
.
append
(
dbname
.
dst_id
==
params
.
get
(
"dst_id"
))
if
params
.
get
(
"cont"
):
accout_filters
.
append
(
dbname
.
cont
==
params
.
get
(
"cont"
))
if
params
.
get
(
"money"
):
...
...
@@ -114,6 +126,76 @@ def accout_list_data(db:Session,dbname,params):
accout_filters
.
append
(
dbname
.
create_time
>=
params
.
get
(
"start_time"
))
if
params
.
get
(
"end_time"
):
accout_filters
.
append
(
dbname
.
create_time
<=
params
.
get
(
"end_time"
))
querydata
,
count
=
QueryAllData
(
db
,
dbname
,
params
,
accout_filters
)
.
query_data
()
querydata
,
count
=
QueryAllData
(
db
,
dbname
,
params
,
accout_filters
)
.
query_data
()
data
=
[
QueryAllData
.
serialization
(
item
)
for
item
in
querydata
]
return
data
,
count
def
query_uuid_or_user_number
(
db
:
Session
,
param
):
"""查询uuid和user_number"""
if
param
.
uuid
:
user
=
db
.
query
(
V2User
)
.
filter
(
V2User
.
uuid
==
param
.
uuid
)
.
first
()
if
not
user
:
guild
=
db
.
query
(
Guild
)
.
filter
(
Guild
.
uuid
==
param
.
uuid
)
.
first
()
if
not
guild
:
return
{}
return
{
"nick_name"
:
"(公会)"
+
guild
.
guild_name
,
"user_number"
:
guild
.
id
}
return
{
"nick_name"
:
user
.
nick_name
,
"user_number"
:
user
.
user_id
}
if
param
.
user_number
:
user
=
db
.
query
(
V2User
)
.
filter
(
V2User
.
user_number
==
param
.
user_number
)
.
first
()
return
{
"nick_name"
:
user
.
nick_name
,
"user_id"
:
user
.
user_id
,
"uuid"
:
user
.
uuid
}
def
account_money
(
db
:
Session
,
param
):
"""查询账户余额"""
account
=
db
.
query
(
Account
)
.
filter
(
Account
.
id
==
param
.
id
)
.
first
()
if
not
account
:
return
0
return
account
.
consumable
if
account
.
consumable
else
0
def
query_token
(
db
,
h_list
):
"""获取请求头token"""
token
=
''
for
k
,
v
in
dict
(
h_list
)
.
items
():
key
=
k
.
decode
(
'utf-8'
)
if
key
==
'authorization'
:
tokens
=
v
.
decode
(
'utf-8'
)
_
,
token
=
tokens
.
split
(
' '
)
break
# 通过token获取用户信息
user_info
=
get_current_user
(
db
=
db
,
token
=
token
)
return
user_info
def
transfer_money
(
db
:
Session
,
param
,
h_list
):
"""转账"""
user
=
query_token
(
db
,
h_list
)
try
:
present
=
Fitransferlog
(
dst_id
=
param
.
dst_id
,
amount
=
param
.
amount
,
type
=
param
.
type
,
transfer_id
=
param
.
transfer_id
,
nick_name
=
param
.
nick_name
,
remark
=
param
.
remark
,
operator
=
user
.
get
(
"username"
),
transfer_type
=
param
.
transfer_type
,
create_time
=
get_now_timestamp
())
db
.
add
(
present
)
db
.
commit
()
db
.
refresh
(
present
)
except
Exception
as
e
:
print
(
e
)
return
{}
return
present
def
create_fix_table
(
db
:
Session
,
param
,
h_list
):
"""增加修复报表"""
user
=
query_token
(
db
,
h_list
)
try
:
present
=
FinanceFixLog
(
type
=
param
.
type
,
account_id
=
param
.
account_id
,
money
=
param
.
money
,
remark
=
param
.
remark
,
operator
=
user
.
get
(
"username"
),
amount_type
=
param
.
amount_type
,
create_time
=
get_now_datetime
())
db
.
add
(
present
)
db
.
commit
()
db
.
refresh
(
present
)
except
Exception
as
e
:
print
(
e
)
return
{}
return
present
app/api/statement/schemas.py
View file @
f0925b50
...
...
@@ -9,7 +9,6 @@ class StatementBase(BaseModel):
class
StatementCreate
(
StatementBase
):
nickname
:
str
recharge_amount
:
float
recharge_channel
:
str
...
...
@@ -19,7 +18,7 @@ class StatementCreate(StatementBase):
class
StatementList
(
BaseModel
):
page
:
Optional
[
int
]
=
None
size
:
Optional
[
int
]
=
None
start_time
:
Optional
[
str
]
=
""
start_time
:
Optional
[
str
]
=
""
end_time
:
Optional
[
str
]
=
""
order_number
:
Optional
[
str
]
=
""
user_id
:
Optional
[
str
]
=
""
...
...
@@ -37,7 +36,7 @@ class Statement(StatementBase):
class
UserWithdrawalList
(
BaseModel
):
page
:
Optional
[
int
]
=
None
size
:
Optional
[
int
]
=
None
start_time
:
Optional
[
str
]
=
""
start_time
:
Optional
[
str
]
=
""
end_time
:
Optional
[
str
]
=
""
status
:
Optional
[
int
]
=
None
user_id
:
Optional
[
int
]
=
None
...
...
@@ -46,59 +45,73 @@ class UserWithdrawalList(BaseModel):
class
GuildWithdrawalList
(
BaseModel
):
page
:
int
size
:
int
start_time
:
str
=
None
end_time
:
str
=
None
status
:
int
=
None
guild_id
:
int
=
None
start_time
:
str
=
None
end_time
:
str
=
None
status
:
int
=
None
guild_id
:
int
=
None
class
PaymentWithdrawalList
(
BaseModel
):
page
:
int
=
None
size
:
int
=
None
start_time
:
str
=
None
end_time
:
str
=
None
status
:
int
=
None
guild_id
:
int
=
None
page
:
int
=
None
size
:
int
=
None
start_time
:
str
=
None
end_time
:
str
=
None
status
:
int
=
None
guild_id
:
int
=
None
@
validator
(
'start_time'
)
def
validate_start_time
(
cls
,
val
):
if
val
!=
''
:
if
val
!=
''
:
return
val
@
validator
(
'end_time'
)
def
validate_end_time
(
cls
,
val
):
if
val
!=
''
:
if
val
!=
''
:
return
val
@
validator
(
'status'
)
def
validate_status
(
cls
,
val
):
if
val
!=
''
:
if
val
!=
''
:
return
val
@
validator
(
'guild_id'
)
def
validate_guild_id
(
cls
,
val
):
if
val
!=
''
:
if
val
!=
''
:
return
val
class
PaymentAdd
(
BaseModel
):
uuid
:
str
money
:
int
cont
:
str
url
:
str
def
__str__
(
self
):
return
"uuid:
%
s, money:
%
s"
%
(
str
(
self
.
uuid
),
self
.
money
)
uuid
:
str
money
:
int
cont
:
str
url
:
str
def
__str__
(
self
):
return
"uuid:
%
s, money:
%
s"
%
(
str
(
self
.
uuid
),
self
.
money
)
class
PaymentAccountlList
(
PaymentWithdrawalList
):
uuid
:
int
=
None
uuid
:
int
=
None
transfer_id
:
int
=
None
dst_id
:
int
=
None
class
GuildUpdate
(
BaseModel
):
id
:
int
status
:
int
class
UserNumber
(
BaseModel
):
id
:
Optional
[
int
]
=
None
uuid
:
Optional
[
str
]
=
""
user_number
:
Optional
[
int
]
=
None
class
CreateBill
(
BaseModel
):
dst_id
:
int
amount
:
float
transfer_id
:
int
remark
:
str
type
:
int
nick_name
:
Optional
[
str
]
=
""
transfer_type
:
Optional
[
str
]
=
""
app/api/statement/views.py
View file @
f0925b50
from
datetime
import
datetime
from
app.api.statement
import
crud
,
schemas
from
app.api.statement
import
crud
,
schemas
,
guild
from
app.api.account
import
schemas
as
acc_schemas
from
app
import
get_db
from
fastapi
import
Depends
,
APIRouter
,
File
from
fastapi
import
Depends
,
APIRouter
,
File
,
Request
from
sqlalchemy.orm
import
Session
from
app.api.statement.crud
import
RechargeStatement
,
WithdrawStatement
from
app.api.statement.guild
import
GuildSet
,
paymentset_guild_data
,
outon_account_data
,
accout_list_data
from
app.api.statement.schemas
import
PaymentWithdrawalList
,
PaymentAdd
,
PaymentAccountlList
from
app.api.statement.guild
import
GuildSet
,
paymentset_guild_data
,
outon_account_data
,
accout_list_data
,
\
query_uuid_or_user_number
,
account_money
,
transfer_money
from
app.api.statement.schemas
import
PaymentWithdrawalList
,
PaymentAdd
,
PaymentAccountlList
,
UserNumber
,
CreateBill
from
libs.img_code
import
new_upload_file
,
random_number
from
libs.result_format
import
HttpResultResponse
from
models.recharge
import
Paymentlog
,
Fiaccount
from
models.recharge
import
Paymentlog
,
Fiaccount
,
Fitransferlog
router
=
APIRouter
()
...
...
@@ -49,7 +50,6 @@ def guild_settlement_list(data: schemas.GuildWithdrawalList, db: Session = Depen
return
HttpResultResponse
(
total
=
total
,
data
=
guild_list
)
@
router
.
post
(
"/guild/payment"
)
def
guild_payment_list
(
data
:
PaymentWithdrawalList
,
db
:
Session
=
Depends
(
get_db
)):
"""打款记录"""
...
...
@@ -60,15 +60,15 @@ def guild_payment_list(data:PaymentWithdrawalList,db: Session = Depends(get_db))
@
router
.
post
(
'/upload'
)
async
def
uploadFile
(
a_file
:
bytes
=
File
(
...
)):
a_content
=
a_file
image_name
=
random_number
()
cos_path
=
new_upload_file
(
a_content
,
image_name
)
image_name
=
random_number
()
cos_path
=
new_upload_file
(
a_content
,
image_name
)
return
HttpResultResponse
(
data
=
cos_path
)
@
router
.
post
(
"/payment/add"
)
def
guild_payment_list
(
data
:
PaymentAdd
,
db
:
Session
=
Depends
(
get_db
)):
"""提交打款"""
dataPayment
=
Paymentlog
(
uuid
=
data
.
uuid
,
money
=
data
.
money
,
cont
=
data
.
cont
,
url
=
data
.
url
,
create_time
=
datetime
.
now
())
dataPayment
=
Paymentlog
(
uuid
=
data
.
uuid
,
money
=
data
.
money
,
cont
=
data
.
cont
,
url
=
data
.
url
,
create_time
=
datetime
.
now
())
db
.
add
(
dataPayment
)
db
.
commit
()
db
.
refresh
(
dataPayment
)
...
...
@@ -76,7 +76,6 @@ def guild_payment_list(data:PaymentAdd,db: Session = Depends(get_db)):
return
HttpResultResponse
(
data
=
''
)
@
router
.
get
(
"/onaccount"
)
def
outon_account
(
db
:
Session
=
Depends
(
get_db
)):
"""转出和转入账户人员列表"""
...
...
@@ -84,15 +83,33 @@ def outon_account(db: Session = Depends(get_db)):
return
HttpResultResponse
(
total
=
total
,
data
=
account_list
)
@
router
.
post
(
"/transferlist"
)
def
outon_account
(
data
:
PaymentAccountlList
,
db
:
Session
=
Depends
(
get_db
)):
def
outon_account
(
data
:
PaymentAccountlList
,
db
:
Session
=
Depends
(
get_db
)):
"""转账列表"""
account_list
,
total
=
accout_list_data
(
db
,
Fi
account
,
data
.
dict
(
exclude_none
=
True
))
account_list
,
total
=
accout_list_data
(
db
,
Fi
transferlog
,
data
.
dict
(
exclude_none
=
True
))
return
HttpResultResponse
(
total
=
total
,
data
=
account_list
)
@
router
.
post
(
"/query/consumable"
)
def
query_account_money
(
data
:
UserNumber
,
db
:
Session
=
Depends
(
get_db
)):
"""查询账户余额"""
consumable
=
account_money
(
db
,
data
)
return
HttpResultResponse
(
data
=
int
(
consumable
))
@
router
.
post
(
"/query/uuid"
)
def
query_uuid_account
(
data
:
UserNumber
,
db
:
Session
=
Depends
(
get_db
)):
"""uuid user_number查询"""
user_info
=
query_uuid_or_user_number
(
db
,
data
)
return
HttpResultResponse
(
data
=
user_info
)
@
router
.
post
(
"/transfer/money"
)
def
account_transfer_money
(
data
:
CreateBill
,
request
:
Request
,
db
:
Session
=
Depends
(
get_db
)):
"""账户转账"""
header_list
=
request
.
get
(
"headers"
)
res_info
=
transfer_money
(
db
,
data
,
header_list
)
return
HttpResultResponse
(
data
=
res_info
.
id
)
@
router
.
post
(
"/guild/update"
)
...
...
@@ -106,4 +123,12 @@ def guild_update_list(data: schemas.GuildUpdate, db: Session = Depends(get_db)):
def
finance_fix
(
data
:
acc_schemas
.
PublicModel
,
db
:
Session
=
Depends
(
get_db
)):
"""账户修复报表"""
res
,
num
=
crud
.
FinanceFix
.
get_finance_fix_data
(
db
,
data
)
return
HttpResultResponse
(
total
=
num
,
data
=
res
)
\ No newline at end of file
return
HttpResultResponse
(
total
=
num
,
data
=
res
)
@
router
.
post
(
"/submit/fixTable"
)
def
finance_fix
(
data
:
acc_schemas
.
FixTable
,
request
:
Request
,
db
:
Session
=
Depends
(
get_db
)):
"""新增修复报表"""
header_list
=
request
.
get
(
"headers"
)
res
=
guild
.
create_fix_table
(
db
,
data
,
header_list
)
return
HttpResultResponse
(
data
=
res
.
id
)
libs/functions.py
View file @
f0925b50
import
hashlib
import
time
import
uuid
as
u
from
datetime
import
datetime
def
get_now_timestamp
():
"""
获取现在时间
return int eg:1667664000
"""
now_time
=
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
time_array
=
time
.
strptime
(
now_time
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
return
int
(
time
.
mktime
(
time_array
))
def
get_now_datetime
():
"""
获取现在时间
return int eg:1667664000
"""
return
datetime
.
now
()
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
def
md5
(
s
):
...
...
libs/orm.py
View file @
f0925b50
import
datetime
from
sqlalchemy
import
and_
,
func
_privacy_fields
=
{
''
}
_privacy_fields
=
{
''
}
class
QueryAllData
:
def
__init__
(
self
,
db
,
dbname
,
params
,
params_list
):
'''
初始化参数
'''
self
.
db
=
db
self
.
dbname
=
dbname
self
.
page
=
params
.
get
(
"page"
,
1
)
self
.
limit
=
params
.
get
(
"size"
,
10
)
self
.
params
=
params
self
.
params_list
=
params_list
def
query_data
(
self
):
'''
查询所有
'''
print
(
self
.
params_list
)
if
self
.
params
==
{}:
queryData
=
self
.
db
.
query
(
self
.
dbname
)
.
filter
()
.
order_by
(
self
.
dbname
.
id
.
desc
())
.
all
()
elif
self
.
params_list
==
None
:
queryData
=
self
.
db
.
query
(
self
.
dbname
)
.
filter
()
.
order_by
(
self
.
dbname
.
id
.
desc
())
.
offset
((
int
(
self
.
page
)
-
1
)
*
self
.
limit
)
.
limit
(
self
.
limit
)
.
all
()
else
:
queryData
=
self
.
db
.
query
(
self
.
dbname
)
.
filter
(
and_
(
*
self
.
params_list
))
.
order_by
(
self
.
dbname
.
id
.
desc
())
.
offset
((
int
(
self
.
page
)
-
1
)
*
self
.
limit
)
.
limit
(
self
.
limit
)
.
all
()
count
=
self
.
db
.
query
(
func
.
count
(
self
.
dbname
.
id
))
.
scalar
()
return
queryData
,
count
class
QueryAllData
:
def
query_filter
(
self
):
'''
单个查询
'''
pass
def
__init__
(
self
,
db
,
dbname
,
params
,
params_list
):
'''
初始化参数
'''
self
.
db
=
db
self
.
dbname
=
dbname
self
.
page
=
params
.
get
(
"page"
,
1
)
self
.
limit
=
params
.
get
(
"size"
,
10
)
self
.
params
=
params
self
.
params_list
=
params_list
def
set_attrs
(
self
,
attrs_dict
):
"""批量更新模型的字段数据
"""
for
key
,
value
in
attrs_dict
.
items
():
setattr
(
self
,
key
,
value
)
return
self
def
query_data
(
self
):
'''
查询所有
'''
if
self
.
params
==
{}:
queryData
=
self
.
db
.
query
(
self
.
dbname
)
.
filter
()
.
order_by
(
self
.
dbname
.
id
.
desc
())
.
all
()
elif
self
.
params_list
==
None
:
queryData
=
self
.
db
.
query
(
self
.
dbname
)
.
filter
()
.
order_by
(
self
.
dbname
.
id
.
desc
())
.
offset
(
(
int
(
self
.
page
)
-
1
)
*
self
.
limit
)
.
limit
(
self
.
limit
)
.
all
()
else
:
queryData
=
self
.
db
.
query
(
self
.
dbname
)
.
filter
(
and_
(
*
self
.
params_list
))
.
order_by
(
self
.
dbname
.
id
.
desc
())
.
offset
((
int
(
self
.
page
)
-
1
)
*
self
.
limit
)
.
limit
(
self
.
limit
)
.
all
()
count
=
self
.
db
.
query
(
func
.
count
(
self
.
dbname
.
id
))
.
scalar
()
return
queryData
,
count
def
serialization
(
self
,
funcs
:
list
=
None
,
remove
:
set
=
None
,
increase
:
set
=
None
)
->
dict
:
"""序列化指定字段
:return: dict({'field_name': field_value})
"""
if
funcs
is
None
:
funcs
=
list
()
if
remove
is
None
:
remove
=
set
()
if
increase
is
None
:
increase
=
set
()
result
=
dict
()
fields
=
set
(
name
.
name
for
name
in
self
.
__table__
.
_columns
)
fields
=
fields
-
remove
# 需要被隐藏的字段
fields
=
fields
|
increase
# 取消被隐藏的字段
for
column
in
fields
:
value
=
getattr
(
self
,
column
)
if
isinstance
(
value
,
datetime
.
datetime
):
value
=
value
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
result
[
column
]
=
value
if
funcs
:
for
func
in
funcs
:
func
,
args
,
kwargs
=
func
getattr
(
self
,
func
)(
result
,
*
args
,
**
kwargs
)
return
result
def
query_filter
(
self
):
'''
单个查询
'''
pass
def
set_attrs
(
self
,
attrs_dict
):
"""批量更新模型的字段数据
"""
for
key
,
value
in
attrs_dict
.
items
():
setattr
(
self
,
key
,
value
)
return
self
def
serialization
(
self
,
funcs
:
list
=
None
,
remove
:
set
=
None
,
increase
:
set
=
None
)
->
dict
:
"""序列化指定字段
:return: dict({'field_name': field_value})
"""
if
funcs
is
None
:
funcs
=
list
()
if
remove
is
None
:
remove
=
set
()
if
increase
is
None
:
increase
=
set
()
result
=
dict
()
fields
=
set
(
name
.
name
for
name
in
self
.
__table__
.
_columns
)
fields
=
fields
-
remove
# 需要被隐藏的字段
fields
=
fields
|
increase
# 取消被隐藏的字段
for
column
in
fields
:
value
=
getattr
(
self
,
column
)
if
isinstance
(
value
,
datetime
.
datetime
):
value
=
value
.
strftime
(
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
result
[
column
]
=
value
if
funcs
:
for
func
in
funcs
:
func
,
args
,
kwargs
=
func
getattr
(
self
,
func
)(
result
,
*
args
,
**
kwargs
)
return
result
models/guild.py
0 → 100644
View file @
f0925b50
from
sqlalchemy
import
Column
,
Integer
,
String
,
Text
,
DateTime
,
Float
from
core.storage.db
import
Base
from
sqlalchemy_serializer
import
SerializerMixin
class
Guild
(
Base
,
SerializerMixin
):
"""公会表"""
__tablename__
=
"guild"
id
=
Column
(
Integer
,
primary_key
=
True
,
index
=
True
)
merchants_id
=
Column
(
Integer
,
comment
=
"招商id"
)
guild_name
=
Column
(
String
(
255
),
default
=
''
,
comment
=
"公会名称"
)
guild_per
=
Column
(
String
(
10
),
comment
=
"公会比例"
)
guild_card
=
Column
(
String
(
255
),
comment
=
"身份证号码"
)
parentid
=
Column
(
Integer
,
default
=
0
,
comment
=
"父级ID"
)
parentids
=
Column
(
String
(
150
),
comment
=
"父级类别"
)
merchants_per
=
Column
(
Integer
,
default
=
0
,
comment
=
"招商比例"
)
current
=
Column
(
Integer
,
default
=
0
)
guild_level
=
Column
(
Integer
,
default
=
1
)
user_id
=
Column
(
Integer
,
comment
=
"公会所有人id"
)
anchor_default_per
=
Column
(
String
(
10
),
default
=
'0'
,
comment
=
"主播默认比例"
)
user_default_per
=
Column
(
String
(
10
),
default
=
'0'
,
comment
=
"分享者默认比例,两者比例不能超过公会比例"
)
anchor_max_per
=
Column
(
String
(
10
))
user_max_per
=
Column
(
String
(
10
))
anchor_min_per
=
Column
(
String
(
10
))
redbox_sta
=
Column
(
Integer
,
default
=
0
,
comment
=
'是否开启红包0否1是'
)
redbox_per
=
Column
(
String
(
10
),
default
=
0
,
comment
=
'红包收续费百分比'
)
user_min_per
=
Column
(
String
(
10
))
remark
=
Column
(
Text
,
comment
=
"公会简介"
)
status
=
Column
(
Integer
,
default
=
0
,
comment
=
"-1:结算状态 0,有效,1无效 2:待审核 3:驳回"
)
contacts
=
Column
(
String
(
255
),
comment
=
"联系人"
)
mobile
=
Column
(
String
(
255
),
comment
=
"联系电话"
)
total
=
Column
(
Float
,
default
=
0.00
,
comment
=
"公会收益计算(人民币)"
)
genuine_pearl
=
Column
(
Float
,
default
=
0.00
,
comment
=
"珍珠数"
)
frost_genuine_pearl
=
Column
(
Float
,
default
=
0.00
,
comment
=
"冻结珍珠数(真)[当前用于幸运礼物奖励]"
)
fake_frost_genuine_pearl
=
Column
(
Float
,
default
=
0.00
,
comment
=
"冻结珍珠数(假)[当前用于幸运礼物奖励]"
)
rand_genuine_pearl
=
Column
(
Float
,
default
=
0.00
,
comment
=
"冗余珍珠数[当前用户幸运礼物奖励]"
)
merchants_pearl
=
Column
(
Float
,
default
=
0.00
,
comment
=
"招商珍珠数"
)
type
=
Column
(
Integer
,
default
=
1
,
comment
=
"1:普通公会 2.普通招商公会 3.签约公会 4.签约招商公会"
)
quality
=
Column
(
Integer
,
default
=
1
,
comment
=
"1:个人 2:公司"
)
company_name
=
Column
(
String
(
255
),
comment
=
"公司名称"
)
company_juridical_person
=
Column
(
String
(
150
),
comment
=
"法人"
)
guild_level_id
=
Column
(
Integer
,
default
=
0
,
comment
=
"公会等级"
)
guild_generalize
=
Column
(
Float
,
default
=
0.00
,
comment
=
"公会推广收益"
)
status_time
=
Column
(
Integer
,
comment
=
"被禁用时间"
)
weixin
=
Column
(
String
(
50
),
comment
=
"微信号"
)
business_license
=
Column
(
String
(
255
),
comment
=
"营业执照"
)
audit_time
=
Column
(
Integer
,
default
=
0
,
comment
=
"审核时间"
)
audit_remark
=
Column
(
String
(
255
),
comment
=
"驳回原因"
)
guild_no
=
Column
(
String
(
30
),
comment
=
"工会账号"
)
guildPwd
=
Column
(
String
(
100
),
default
=
''
,
comment
=
"密码"
)
guildPwdStr
=
Column
(
String
(
30
),
default
=
''
,
comment
=
"密码明文"
)
guild_no_switch
=
Column
(
Integer
,
default
=
1
,
comment
=
"是否启用公会充值账号权限: 1:开启 2: 关闭"
)
guild_no_limit
=
Column
(
String
(
100
),
comment
=
"公会账号配置(json): 键名:startHour、endHour、singleLimit、dayLimit"
)
guildMobile
=
Column
(
String
(
100
),
default
=
''
,
comment
=
"充值账号绑定的手机号"
)
today_redbox_num
=
Column
(
Integer
,
default
=-
1
,
comment
=
"每日红包数量"
)
today_redbox_money
=
Column
(
Integer
,
default
=-
1
,
comment
=
"每日红包总量"
)
month_redbox_money
=
Column
(
Integer
,
default
=-
1
,
comment
=
"每月红包总量"
)
idcard_face
=
Column
(
String
(
255
))
idcard_back
=
Column
(
String
(
255
))
pay_status
=
Column
(
Integer
,
default
=
1
,
comment
=
"公会用余额充值钻石权限0关闭1开启"
)
today_guild_pay_start
=
Column
(
Integer
,
default
=-
1
,
comment
=
"公会充值开放开始时间"
)
today_guild_pay_end
=
Column
(
Integer
,
default
=-
1
,
comment
=
"公会充值开放结束时间"
)
guild_today_pay_balance
=
Column
(
Integer
,
default
=-
1
,
comment
=
"公户充值每日钻石数"
)
guild_month_pay_balance
=
Column
(
Integer
,
default
=-
1
,
comment
=
"公会充值每月钻石数"
)
today_guild_pay_charge
=
Column
(
Integer
,
default
=-
1
,
comment
=
"公会充值手续费"
)
pay_pwd
=
Column
(
String
(
255
),
comment
=
"交易密码"
)
pay_phone
=
Column
(
String
(
20
),
default
=
'0'
,
comment
=
"交易密码手机号"
)
pay_see_sta
=
Column
(
Integer
,
default
=
0
,
comment
=
"是否查看协议"
)
see_money_sta
=
Column
(
Integer
,
default
=
1
,
comment
=
"0不可看1可看"
)
is_ban
=
Column
(
Integer
,
default
=
0
,
comment
=
"工会是否被后台封禁 0:正常 1:被封禁"
)
is_disband
=
Column
(
Integer
,
default
=
0
,
comment
=
"公会是否被解散,0 没有 1 被解散"
)
bindnum
=
Column
(
Integer
,
default
=
0
,
comment
=
"公会可绑定人数"
)
last_keyword
=
Column
(
String
(
255
),
default
=
''
,
comment
=
"上一次查询的朱贝号"
)
over_limit_ratio
=
Column
(
String
(
10
),
default
=-
1
,
comment
=
"超出充值钻石比"
)
investment_ids
=
Column
(
String
(
20
),
default
=
''
,
comment
=
"公会招商权限,1:普通,2:普通招商,3:签约,4:签约招商"
)
last_login_time
=
Column
(
Integer
,
default
=
0
,
comment
=
"上次登录时间"
)
margin
=
Column
(
Float
,
default
=
0.00
,
comment
=
"公会保证金"
)
attract_investment_money
=
Column
(
Float
,
default
=
0.00
,
comment
=
"招商收益不计入直播收益"
)
balance
=
Column
(
Float
,
default
=
0.000
,
comment
=
"钻石余额"
)
pay_margin
=
Column
(
Integer
,
default
=
0
,
comment
=
"是否缴纳过保证金,0:没有 1:有"
)
is_lucky_gift
=
Column
(
Integer
,
default
=
1
,
comment
=
"幸运礼物是否开启,1为开启,0为未开启"
)
is_binding
=
Column
(
Integer
,
default
=
1
,
comment
=
"默认开启绑定,,1为开启,0为未开启"
)
first_jurisdiction
=
Column
(
Integer
,
default
=
0
,
comment
=
"手动修改为最高优先1 幸运 2 绑定 4 充值 8 手续费 16 提现方式 32分享者绑定"
)
uuid
=
Column
(
String
(
100
),
default
=
0
)
bind_authority
=
Column
(
Integer
,
default
=
1
,
comment
=
"公会分享者绑定权限"
)
exchange_pearl_authority
=
Column
(
Integer
,
default
=
1
,
comment
=
"公会分兑换珍珠权限"
)
pick_pearl_authority
=
Column
(
Integer
,
default
=
1
,
comment
=
"公会分拾取珍珠权限"
)
withdrawal_time
=
Column
(
Integer
,
default
=
0
,
comment
=
"提现时间,目前是具体的天数,0-7"
)
settlement_time
=
Column
(
Integer
,
default
=
24
,
comment
=
"钻石结算周期小时"
)
idcard_sc
=
Column
(
String
(
255
),
default
=
24
,
comment
=
"手持身份证"
)
business_license_sc
=
Column
(
String
(
255
),
comment
=
"手持营业执照"
)
videoaddress
=
Column
(
String
(
255
),
comment
=
"承诺视频地址"
)
make_up_the_difference
=
Column
(
Integer
,
default
=
0
,
comment
=
"1开启,默认0关闭"
)
source
=
Column
(
Integer
,
default
=
0
,
comment
=
"新增公会来源:0-公会后台,1-总后台"
)
v2_user_id
=
Column
(
Integer
,
default
=
0
,
comment
=
"主播创建自由公会用户id"
)
ice_gift
=
Column
(
Integer
,
default
=
0
,
comment
=
"是否可以自由解除冻结幸运礼物,0:不能 1:可以"
)
ty_school
=
Column
(
Integer
,
default
=
0
,
comment
=
"是否为天颜培训机构公司(0-否,1-是)"
)
pledge_pearl
=
Column
(
Float
,
default
=
0.00
,
comment
=
"质押金(元)"
)
user_pledge_pearl
=
Column
(
Float
,
default
=
0.00
,
comment
=
"用户可提现的质押金(元)"
)
pledge_rate
=
Column
(
Float
,
default
=
0.00
,
comment
=
"质押金比例"
)
ice_uuid
=
Column
(
String
(
100
),
default
=
''
,
comment
=
"冻结账户uuid"
)
is_open_user_frozen
=
Column
(
Integer
,
default
=
2
,
comment
=
"是否开通财务冻结账户 1为开通 2为没有开通"
)
partner
=
Column
(
Integer
,
default
=
0
,
comment
=
"合作方,0为平台,1为上级"
)
settlement
=
Column
(
Integer
,
default
=
0
,
comment
=
"是否已结算"
)
rescind
=
Column
(
Integer
,
default
=
0
,
comment
=
"0未解约,1解约"
)
update_time
=
Column
(
Integer
,
default
=
0
,
comment
=
"修改时间"
)
can_do_trans
=
Column
(
Integer
,
default
=
1
,
comment
=
"1,不能转账 2,可以转账"
)
trans_fee
=
Column
(
Float
,
comment
=
"转账手续费,单精度"
)
master_user_number
=
Column
(
Integer
,
comment
=
"公会长朱贝号"
)
package_group_id
=
Column
(
Integer
,
default
=
0
,
comment
=
"包分组id"
)
investment_switch
=
Column
(
Integer
,
default
=
0
,
comment
=
"1:开启 0关闭 ,招商管理权限开关"
)
operation_pwd
=
Column
(
String
(
255
),
default
=
0
,
comment
=
"操作密码"
)
__table_args__
=
{
'comment'
:
'公会表'
}
models/recharge.py
View file @
f0925b50
from
sqlalchemy
import
Column
,
Integer
,
String
,
Float
,
DateTime
,
DECIMAL
,
Text
from
sqlalchemy
import
Column
,
Integer
,
String
,
Float
,
DateTime
,
DECIMAL
,
Text
from
core.storage.db
import
Base
from
sqlalchemy_serializer
import
SerializerMixin
...
...
@@ -84,53 +84,55 @@ class Settlement(Base, SerializerMixin):
__table_args__
=
{
'comment'
:
'公会结算表'
}
class
Paymentlog
(
Base
,
SerializerMixin
):
class
Paymentlog
(
Base
,
SerializerMixin
):
"""打款记录"""
__tablename__
=
"payment_log"
id
=
Column
(
Integer
,
primary_key
=
True
,
index
=
True
)
cont
=
Column
(
String
(
255
),
comment
=
"打款备注"
)
money
=
Column
(
DECIMAL
(
10
,
2
),
comment
=
"打款金额"
,
default
=
'0.00'
)
url
=
Column
(
String
(
255
),
comment
=
"凭证图片"
,
default
=
'0'
)
uuid
=
Column
(
String
(
255
),
comment
=
"出账账户"
)
cont
=
Column
(
String
(
255
),
comment
=
"打款备注"
)
money
=
Column
(
DECIMAL
(
10
,
2
),
comment
=
"打款金额"
,
default
=
'0.00'
)
url
=
Column
(
String
(
255
),
comment
=
"凭证图片"
,
default
=
'0'
)
uuid
=
Column
(
String
(
255
),
comment
=
"出账账户"
)
create_time
=
Column
(
DateTime
,
comment
=
"打款时间"
)
__table_args__
=
{
'comment'
:
'打款记录表'
}
class
Fiaccount
(
Base
,
SerializerMixin
):
class
Fiaccount
(
Base
,
SerializerMixin
):
'''
账户
列表
账户
'''
__tablename__
=
"fi_account"
id
=
Column
(
Integer
,
primary_key
=
True
,
index
=
True
)
name
=
Column
(
String
(
100
),
comment
=
"账户名称"
)
unique_tag
=
Column
(
String
(
100
),
comment
=
"唯一标记"
)
beneficiary
=
Column
(
String
(
100
),
comment
=
"受益人"
)
description
=
Column
(
String
(
100
),
comment
=
"描述信息"
)
uuid
=
Column
(
String
(
60
),
comment
=
"用户id"
,
index
=
True
)
create_time
=
Column
(
Integer
,
comment
=
"创建时间"
)
config_key
=
Column
(
String
(
150
),
comment
=
"配置key,和api接口约定好的标识"
)
income
=
Column
(
Text
,
comment
=
"入账"
)
output
=
Column
(
Text
,
comment
=
"出账"
)
operator
=
Column
(
String
(
255
),
comment
=
""
)
operator_id
=
Column
(
Integer
,
comment
=
"操作id"
)
class
Fitransferlog
(
Base
,
SerializerMixin
):
name
=
Column
(
String
(
100
),
comment
=
"账户名称"
)
unique_tag
=
Column
(
String
(
100
),
comment
=
"唯一标记"
)
beneficiary
=
Column
(
String
(
100
),
comment
=
"受益人"
)
description
=
Column
(
String
(
100
),
comment
=
"描述信息"
)
uuid
=
Column
(
String
(
60
),
comment
=
"用户id"
,
index
=
True
)
create_time
=
Column
(
Integer
,
comment
=
"创建时间"
)
config_key
=
Column
(
String
(
150
),
comment
=
"配置key,和api接口约定好的标识"
)
income
=
Column
(
Text
,
comment
=
"入账"
)
output
=
Column
(
Text
,
comment
=
"出账"
)
operator
=
Column
(
String
(
255
),
comment
=
""
)
operator_id
=
Column
(
Integer
,
comment
=
"操作id"
)
class
Fitransferlog
(
Base
,
SerializerMixin
):
'''
账户列表
转账列表, 商量说存id
'''
__tablename__
=
"fi_transfer_log"
id
=
Column
(
Integer
,
primary_key
=
True
,
index
=
True
)
amount
=
Column
(
DECIMAL
(
20
,
6
),
comment
=
"转入金额"
)
dst_name
=
Column
(
String
(
100
),
comment
=
"转出账户"
)
create_time
=
Column
(
Integer
,
comment
=
"创建时间"
)
dst_uuid
=
Column
(
String
(
60
),
comment
=
"转出账户"
)
transfer_uuid
=
Column
(
String
(
60
),
comment
=
"转入账户"
)
user_id
=
Column
(
Integer
,
comment
=
"用户id"
)
remarks
=
Column
(
String
(
255
),
comment
=
"转账备注"
)
operator
=
Column
(
String
(
255
),
comment
=
"操作员"
)
operator_id
=
Column
(
String
(
255
),
comment
=
"操作员id"
)
id
=
Column
(
Integer
,
primary_key
=
True
,
index
=
True
)
amount
=
Column
(
DECIMAL
(
20
,
6
),
comment
=
"转入金额"
)
dst_id
=
Column
(
Integer
,
comment
=
"转出账户id"
)
create_time
=
Column
(
Integer
,
comment
=
"创建时间"
)
transfer_id
=
Column
(
Integer
,
comment
=
"转入账户id"
)
type
=
Column
(
Integer
,
comment
=
"转账类型(0:对企业,1:对个人)"
)
nick_name
=
Column
(
String
(
100
),
comment
=
"用户昵称"
)
remark
=
Column
(
String
(
255
),
comment
=
"转账备注"
)
transfer_type
=
Column
(
String
(
255
),
comment
=
"转账类型"
)
operator
=
Column
(
String
(
255
),
comment
=
"操作员"
)
__table_args__
=
{
'comment'
:
'转账信息表'
}
class
FinanceFixLog
(
Base
,
SerializerMixin
):
...
...
@@ -139,11 +141,10 @@ class FinanceFixLog(Base, SerializerMixin):
id
=
Column
(
Integer
,
primary_key
=
True
,
index
=
True
)
type
=
Column
(
Integer
,
comment
=
"0系统账户1私有账户"
)
money
=
Column
(
Float
,
comment
=
"修复金额"
)
unique_tag
=
Column
(
String
(
128
),
comment
=
"唯一标识"
)
amount_type
=
Column
(
String
(
128
),
comment
=
"账户类型"
)
remark
=
Column
(
String
(
255
),
comment
=
"备注"
)
operator
=
Column
(
String
(
255
),
comment
=
"操作员
(每笔转账都要记录一下)
"
)
operator_id
=
Column
(
Integer
,
comment
=
"操作员id(可能设计到改了名字,记id比较好)
"
)
operator
=
Column
(
String
(
255
),
comment
=
"操作员"
)
account_id
=
Column
(
Integer
,
comment
=
"账户id
"
)
create_time
=
Column
(
DateTime
,
comment
=
"创建时间"
)
__table_args__
=
{
'comment'
:
'财务修复日志'
}
models/users.py
View file @
f0925b50
...
...
@@ -33,3 +33,47 @@ class Authority(Base):
create_time
=
Column
(
DateTime
,
comment
=
"创建时间"
)
__table_args__
=
{
'comment'
:
'菜单权限表'
}
class
V2User
(
Base
,
SerializerMixin
):
__tablename__
=
"v2_user"
user_id
=
Column
(
Integer
,
primary_key
=
True
,
index
=
True
)
nick_name
=
Column
(
String
(
255
),
comment
=
"昵称"
)
user_number
=
Column
(
Integer
,
comment
=
"用户靓号"
)
mobile
=
Column
(
String
(
45
),
comment
=
"用户手机号"
)
user_name
=
Column
(
String
(
30
),
comment
=
"帐号"
)
password
=
Column
(
String
(
32
),
comment
=
"密码"
)
register_time
=
Column
(
Integer
,
comment
=
"注册时间"
)
last_login_time
=
Column
(
Integer
,
default
=
0
,
comment
=
"最后登录时间[时间戳]"
)
last_login_device
=
Column
(
String
(
64
),
default
=
''
,
comment
=
"最后登录设备"
)
last_login_ip
=
Column
(
Integer
,
default
=
0
,
comment
=
"最后登录ip[长整形]"
)
heade_portrait
=
Column
(
String
(
255
),
default
=
''
,
comment
=
"头像[不存oss前缀]"
)
is_no_play
=
Column
(
Integer
,
default
=
0
,
comment
=
"是否禁播(0可以播,1禁播)"
)
is_achor
=
Column
(
Integer
,
default
=
0
,
comment
=
"是否是主播,0不是,1是线上,2是线下,3未知"
)
parent_id
=
Column
(
Integer
,
default
=
0
,
comment
=
"上级用户ID(分享者父ID)"
)
user_status
=
Column
(
Integer
,
default
=
0
,
comment
=
"用户注销状态:-2注销 -1:禁用 0正常"
)
anchor_level
=
Column
(
Integer
,
default
=
1
,
comment
=
"主播等级"
)
user_level
=
Column
(
Integer
,
default
=
1
,
comment
=
"活跃值等级(原用户等级)"
)
wealth_level
=
Column
(
Integer
,
default
=
0
,
comment
=
"财富等级"
)
is_pk
=
Column
(
Integer
,
default
=
0
,
comment
=
"是否在pk中"
)
is_showing
=
Column
(
Integer
,
default
=
0
,
comment
=
"主播是否正在直播(1在直播,0不在直播)"
)
third_user_id
=
Column
(
String
(
50
),
default
=
0
,
comment
=
"第三方用户id"
)
user_type
=
Column
(
Integer
,
default
=
0
,
comment
=
"用户类型(0:普通用户,9:机器人,6:客服,8:运营,7:代理,11水军[在分销商统计,主播统计中会排除这些人的统计])"
)
mac
=
Column
(
String
(
255
),
default
=
''
,
comment
=
"设备的mac"
)
channel_name
=
Column
(
String
(
100
),
default
=
''
,
comment
=
"渠道"
)
version
=
Column
(
String
(
50
),
default
=
''
,
comment
=
"注册版本号"
)
show_title
=
Column
(
String
(
100
),
default
=
''
,
comment
=
"开播标题"
)
upload_cover
=
Column
(
String
(
255
),
default
=
''
,
comment
=
"主播封面[去除OSS前缀]"
)
agent_addtime
=
Column
(
Integer
,
default
=
0
,
comment
=
"添加代理时间"
)
withdraw_state
=
Column
(
Integer
,
default
=
0
,
comment
=
"禁止提现状态0可以1不可以"
)
show_background
=
Column
(
String
(
200
),
comment
=
"直播间背景图"
)
uuid
=
Column
(
String
(
100
),
default
=
0
,
comment
=
"UUID"
)
reg_source
=
Column
(
String
(
100
),
comment
=
"冗余包名"
)
show_wish_status
=
Column
(
Integer
,
default
=
0
,
comment
=
"冗余包名"
)
wish_status
=
Column
(
Integer
,
default
=
0
,
comment
=
"直播间心愿任务状态(0:关闭,1:开启)"
)
titleid
=
Column
(
Integer
,
comment
=
"称号id"
)
update_time
=
Column
(
DateTime
,
comment
=
"修改时间"
)
task_level
=
Column
(
Integer
,
default
=
0
,
comment
=
"任务等级"
)
__table_args__
=
{
'comment'
:
'用户基础表'
}
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