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
967b67bb
Commit
967b67bb
authored
Apr 11, 2023
by
xianyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
消费类型分类汇总接口,公会结算
parent
55d34639
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
146 additions
and
33 deletions
+146
-33
crud.py
app/api/export/crud.py
+54
-0
views.py
app/api/export/views.py
+9
-0
guild.py
app/api/statement/guild.py
+44
-10
schemas.py
app/api/statement/schemas.py
+8
-11
views.py
app/api/statement/views.py
+3
-3
business.py
libs/business.py
+27
-8
db_link.py
libs/db_link.py
+1
-1
No files found.
app/api/export/crud.py
View file @
967b67bb
...
...
@@ -219,3 +219,57 @@ class MonthDataDerive(object):
self
.
derive_list
.
append
(
a
)
return
self
.
derive_list
class
ReferenceTypeClassification
():
"""消费类型再分类汇总"""
def
__init__
(
self
,
date
,
reference_type
):
self
.
date
=
'assets_log_'
+
date
self
.
reference_type
=
reference_type
self
.
outcome
=
[]
self
.
income
=
[]
def
classification_summary
(
self
):
data_sql
=
f
"select uuid,type,amount/1000 as amount,create_time from {self.date} where reference_type='{self.reference_type}' GROUP BY uuid,type"
guild_sql
=
f
"select uuid from guild"
account_sql
=
f
"select uuid,name from fi_account"
anchor_sql
=
f
"select uuid from v2_user where is_achor in(1,2)"
with
ThreadPoolExecutor
(
max_workers
=
4
)
as
pool
:
future1
=
pool
.
submit
(
LinkMysql
(
env
.
DB_HISTORY
)
.
query_mysql
,
data_sql
)
future2
=
pool
.
submit
(
LinkMysql
(
env
.
DB_3YV2
)
.
query_mysql
,
guild_sql
)
future3
=
pool
.
submit
(
LinkMysql
(
env
.
DB_3YV2
)
.
query_mysql
,
account_sql
)
future4
=
pool
.
submit
(
LinkMysql
(
env
.
DB_3YV2
)
.
query_mysql
,
anchor_sql
)
data
=
future1
.
result
()
guild
=
future2
.
result
()
account
=
future3
.
result
()
anchor
=
future4
.
result
()
# 公会uuid列表
guild_data
=
[
i
.
get
(
'uuid'
)
for
i
in
guild
]
# 主播uuid列表
anchor_data
=
[
i
.
get
(
'uuid'
)
for
i
in
anchor
]
# 系统账户格式化{'系统账户uuid':'系统账户名字'}
account_dict
=
{}
for
k
in
account
:
account_dict
[
k
.
get
(
'uuid'
)]
=
k
.
get
(
'name'
)
# 数据分类
for
op
in
data
:
op
[
'money'
]
=
round
(
float
(
op
[
'amount'
]),
2
)
if
op
.
get
(
'uuid'
)
in
guild_data
:
op
[
'nickname'
]
=
'公会'
if
op
.
get
(
'uuid'
)
in
anchor_data
:
op
[
'nickname'
]
=
'主播'
if
account_dict
.
get
(
op
[
'uuid'
]):
op
[
'nickname'
]
=
account_dict
.
get
(
op
[
'uuid'
])
else
:
op
[
'nickname'
]
=
'用户'
if
op
.
get
(
'type'
)
==
0
:
self
.
outcome
.
append
(
op
)
else
:
self
.
income
.
append
(
op
)
print
(
f
"出账:{self.outcome}, 入账:{self.income}"
)
outcome
=
pd
.
DataFrame
(
self
.
outcome
)
income
=
pd
.
DataFrame
(
self
.
income
)
ogs
=
outcome
.
groupby
(
"nickname"
)
.
sum
()
igs
=
income
.
groupby
(
"nickname"
)
.
sum
()
return
{
"outcome"
:
ogs
.
to_dict
()
.
get
(
'money'
),
"income"
:
igs
.
to_dict
()
.
get
(
'money'
)}
app/api/export/views.py
View file @
967b67bb
...
...
@@ -98,3 +98,12 @@ def month_to_export(param: schemas.MonthStatistics, request: Request, token=Depe
result
=
crud
.
MonthDataDerive
()
.
derive_data
(
'assets_log_'
+
param
.
date
,
param
.
type
,
param
.
name
)
field_head
=
[
'业务名称'
,
'财务编码类型'
,
'出账金额'
,
'入账金额'
,
'是否异常'
,
'异常金额'
]
return
statement_crud
.
data_to_file
(
db
,
result
,
"业务类型汇总"
,
headers
,
field_head
)
@
router
.
get
(
"/referenceType/total"
)
def
reference_type_total
(
date
:
str
,
type
:
str
,
page
:
int
,
size
:
int
,
token
=
Depends
(
login_required
)):
"""消费类型分类汇总"""
if
not
all
([
date
,
type
]):
return
HttpResultResponse
(
code
=
500
,
msg
=
'缺少必传参数'
)
result
=
crud
.
ReferenceTypeClassification
(
date
,
type
)
.
classification_summary
()
return
HttpResultResponse
(
data
=
result
)
app/api/statement/guild.py
View file @
967b67bb
...
...
@@ -4,6 +4,7 @@ import socket
import
threading
from
concurrent.futures.thread
import
ThreadPoolExecutor
import
requests
from
sqlalchemy
import
and_
,
func
,
engine
from
sqlalchemy.orm
import
Session
from
core.config.env
import
env
,
COS_PATH
,
COS_RERURN_PATH
...
...
@@ -261,7 +262,7 @@ def query_token(db, h_list):
def
transfer_trigger_task
(
uuid
,
user_id
,
balance
,
type
,
amount_type
,
remark
=
'用户转账'
,
money_data
=
[],
isUser
=
1
,
dst_uuid
=
False
,
referNum
=
''
):
isUser
=
1
,
dst_uuid
=
""
,
referNum
=
''
):
"""转账验证"""
request_data
=
{
...
...
@@ -276,11 +277,13 @@ def transfer_trigger_task(uuid, user_id, balance, type, amount_type, remark='用
"notify_url"
:
""
}
res
=
search
(
request_data
,
'Server.UserExecute.Transfer'
)
try
:
if
not
res
[
'data'
][
'result'
][
'status'
]:
if
'Insufficient assets'
in
res
[
'data'
][
'result'
][
'msg'
]:
return
"资产不足,无法转账"
return
res
[
'data'
][
'result'
][
'msg'
]
print
(
res
)
except
Exception
as
e
:
return
f
"清算系统异常:{str(e)}"
status
=
2
if
res
[
'status'
]
==
0
:
errmsg
=
json
.
dumps
(
res
[
'data'
])
...
...
@@ -523,9 +526,40 @@ def transfer_query(data):
def
GuildSettlementAdd
(
db
,
data
):
guild_data
=
db
.
query
(
GuildSettlementLog
)
.
filter
(
GuildSettlementLog
.
work_id
==
data
.
id
)
.
first
()
if
guild_data
:
transfer_trigger_task
()
db_export
=
db
.
query
(
GuildSettlementLog
)
.
filter
(
GuildSettlementLog
.
work_id
==
data
.
id
)
.
update
(
{
GuildSettlementLog
.
status
:
data
.
status
})
# 修改状态
db
.
query
(
GuildSettlementLog
)
.
filter
(
GuildSettlementLog
.
work_id
==
data
.
id
)
.
update
(
{
GuildSettlementLog
.
status
:
data
.
status
,
GuildSettlementLog
.
update_time
:
get_now_timestamp
()})
db
.
commit
()
guild_sql
=
f
"select * from guild where id={guild_data.get('guild_id')} limit 0,1"
guild_info
=
LinkMysql
(
env
.
DB_3YV2
)
.
query_mysql
(
guild_sql
)
if
not
guild_info
:
return
'公会数据错误'
acc_sql
=
f
"select * from fi_account where config_key='guildSettlement' limit 0,1"
acc_info
=
LinkMysql
(
env
.
DB_3YV2
)
.
query_mysql
(
acc_sql
)
if
not
acc_info
:
return
'财务平台账户数据错误'
if
guild_data
[
'status'
]
==
0
:
first_sta
=
00
# 钻石处理
if
guild_data
[
'balance'
]
and
guild_data
[
'balance'
]
>
0
:
balance_refer_num
=
f
'guild_settlement_{data.id}_balance'
is_failure
=
transfer_trigger_task
(
guild_info
[
'uuid'
],
0
,
data
.
balance
,
'guild_clear'
,
'consumable'
,
balance_refer_num
,
[],
1
,
acc_info
[
'uuid'
])
if
is_failure
:
return
is_failure
first_sta
=
1
# 珍珠处理
if
guild_data
[
'pearl'
]
and
guild_data
[
'pearl'
]
>
0
:
pearl_refer_num
=
f
'guild_settlement_{data.id}_pearl'
is_lose
=
transfer_trigger_task
(
guild_info
[
'uuid'
],
0
,
data
.
balance
,
'guild_clear'
,
'withdrawable'
,
pearl_refer_num
,
[],
1
,
acc_info
[
'uuid'
])
if
is_lose
:
return
is_lose
first_sta
=
1
if
first_sta
:
url
=
"http://106.55.103.148:8787/api/guild/editSettlementLog"
res
=
requests
.
post
(
url
=
url
,
json
=
json
.
dumps
({
'id'
:
guild_data
[
'id'
],
'status'
:
2
}))
if
res
.
status_code
!=
200
:
return
'财务回调失败'
return
''
else
:
db_export
=
GuildSettlementLog
(
work_id
=
data
.
id
,
guild_id
=
data
.
guild_id
,
balance
=
data
.
balance
,
pearl
=
data
.
pearl
,
status
=
data
.
status
,
create_time
=
data
.
create_time
,
...
...
app/api/statement/schemas.py
View file @
967b67bb
...
...
@@ -27,7 +27,7 @@ class StatementList(BaseModel):
user_id
:
Optional
[
str
]
=
""
sid
:
Optional
[
str
]
=
""
pay_channel
:
Optional
[
str
]
=
""
month_type
:
Optional
[
int
]
=
None
month_type
:
Optional
[
int
]
=
None
menu_id
:
Optional
[
list
]
=
""
...
...
@@ -92,7 +92,7 @@ class PaymentAdd(BaseModel):
url
:
str
def
__str__
(
self
):
return
"uuid:
%
s, money:
%
s ,cont:
%
s ,url:
%
s"
%
(
str
(
self
.
uuid
),
self
.
money
,
self
.
cont
,
self
.
url
)
return
"uuid:
%
s, money:
%
s ,cont:
%
s ,url:
%
s"
%
(
str
(
self
.
uuid
),
self
.
money
,
self
.
cont
,
self
.
url
)
class
PaymentAccountlList
(
PaymentWithdrawalList
):
...
...
@@ -113,7 +113,6 @@ class UserNumber(BaseModel):
type
:
Optional
[
int
]
=
None
class
CreateBill
(
BaseModel
):
dst_id
:
Optional
[
str
]
=
""
dst_name
:
Optional
[
str
]
=
""
...
...
@@ -137,7 +136,6 @@ class CreateBill(BaseModel):
# return v
class
MenuAdd
(
BaseModel
):
menu_name
:
str
menu_label
:
str
...
...
@@ -153,16 +151,15 @@ class MenuEdit(BaseModel):
remark
:
Optional
[
str
]
=
None
class
GuildAddLog
(
BaseModel
):
id
:
int
guild_id
:
Optional
[
int
]
=
None
balance
:
Optional
[
str
]
=
None
pearl
:
Optional
[
str
]
=
None
status
:
int
create_time
:
Optional
[
int
]
=
None
update_time
:
Optional
[
str
]
=
None
guild_name
:
Optional
[
int
]
=
None
guild_per
:
Optional
[
str
]
=
None
actual_money
:
Optional
[
str
]
=
None
pledge_deposit_money
:
Optional
[
str
]
=
None
create_time
:
Optional
[
int
]
=
None
update_time
:
Optional
[
str
]
=
None
guild_name
:
Optional
[
int
]
=
None
guild_per
:
Optional
[
str
]
=
None
actual_money
:
Optional
[
str
]
=
None
pledge_deposit_money
:
Optional
[
str
]
=
None
app/api/statement/views.py
View file @
967b67bb
...
...
@@ -250,7 +250,7 @@ def menu_list(db: Session = Depends(get_db),menu_type: Optional[int] = ""):
@
router
.
post
(
"/guild/accounts"
)
def
guild_add
(
data
:
schemas
.
GuildAddLog
,
db
:
Session
=
Depends
(
get_db
)):
def
guild_add
(
data
:
schemas
.
GuildAddLog
,
db
:
Session
=
Depends
(
get_db
)):
"""公会结算"""
GuildSettlementAdd
(
db
,
data
)
return
HttpResultResponse
(
code
=
200
,
msg
=
HttpMessage
.
SUCCESS
)
\ No newline at end of file
GuildSettlementAdd
(
db
,
data
)
return
HttpResultResponse
(
code
=
200
,
msg
=
HttpMessage
.
SUCCESS
)
libs/business.py
View file @
967b67bb
from
core.config.env
import
env
TYPE_NAME
=
{
"updateUserNameFee"
:
"用户昵称修改"
,
"updateFamilyNameFee"
:
"
粉丝群名,家族名称修改
"
,
"updateFamilyNameFee"
:
"
家族改名
"
,
"userExchange"
:
"珍珠兑换钻石(用户)"
,
"userRecharge"
:
"充值"
,
"pay_discount"
:
"充值-折扣"
,
...
...
@@ -47,25 +49,25 @@ TYPE_NAME = {
"zhou_xing_consumable_account"
:
"周星奖励发放"
,
"NamedGift"
:
"冠名礼物"
,
"whoIsUndercoverJoin"
:
"谁是卧底游戏"
,
"game:NDJ"
:
"
参与游戏-扭蛋机
"
,
"game:NDJ"
:
"
扭蛋机消费
"
,
"gama:KMH"
:
"参与游戏-开盲盒"
,
"game_transfer"
:
"商城礼物盲盒-许愿池,八卦象"
,
"gama:ZJD"
:
"参与游戏-砸金蛋"
,
"guildExchange"
:
"公会
兑换-出账
"
,
"guildExchange"
:
"公会
钻石结算
"
,
"marginRecharge"
:
"保证金缴纳"
,
"pledgeDeduction"
:
"保证金扣减"
,
"guildExchangeDraw"
:
"公会钻石结算"
,
"fanExpansion"
:
"公会家族扩充"
,
"guildTrafficPromotion"
:
"公会流量推广"
,
"guildWithdrawal"
:
"公会提现"
,
"guildWithdrawal_ServiceFee"
:
"
公会提现
"
,
"free_guild_profit_Exchange"
:
"自由公会
主播收礼后产生公会管理
收益"
,
"guildWithdrawal_ServiceFee"
:
"
提现服务费
"
,
"free_guild_profit_Exchange"
:
"自由公会收益"
,
"subordinate_guild_ti_xian"
:
"下级公会提现"
,
"investmentIncome"
:
"招商收益"
,
"platformRecharge"
:
"财务后台内部转账"
,
"currencyUpgrade"
:
"旧币兑换(钻石)"
,
"PlatformDeduction"
:
"平台扣除"
,
"thrid_game_transfer_user"
:
"
游戏转用户钻石(引流转盘)
"
,
"thrid_game_transfer_user"
:
"
引流转盘奖励
"
,
"blind_box_mall_account_recharge"
:
"盲盒商城账户充值(人民币)"
,
"pk_season"
:
"PK赛季奖励"
,
"finance_admin_fix"
:
"财务系统修复"
,
...
...
@@ -98,8 +100,8 @@ TYPE_NAME = {
"HairSpotSong"
:
"点歌功能付费"
,
"RetreatSpotSong"
:
"点歌退款(主播拒绝、用户撤销)"
,
"BranchSpotSong"
:
"点歌收益分配"
,
"guild_transfer_to_anchor"
:
"公会转账
给用户(用户得珍珠)
"
,
"guild_transfer_to_anchor_trans_fee"
:
"公会转账手续费
支出
"
,
"guild_transfer_to_anchor"
:
"公会转账"
,
"guild_transfer_to_anchor_trans_fee"
:
"公会转账手续费"
,
"SmashGoldenEggs"
:
"参与游戏-钻石"
,
"game_backpack_account"
:
"游戏中奖"
,
"turntable_game_balance_add"
:
"用户中奖"
,
...
...
@@ -111,4 +113,21 @@ TYPE_NAME = {
"time_detective_award"
:
"时空侦探活动-榜单领奖"
,
"translate"
:
"翻译付费"
,
"userWithdrawal_dec"
:
"用户提现扣除项"
,
"heart_season_award"
:
"怦然心动活动榜单奖励"
,
"OnePieceActivityBuyItem"
:
"航海活动购买道具"
,
"challenge"
:
"用户发起挑战功能"
,
"AnnualCelebration"
:
"年度(20.12.24-21.1.3)"
,
"LaborDayActivityBuyProp"
:
"四季仙踪活动道具购买"
,
"april_fools_2022"
:
"4月活动奖励"
,
"wzzyn_2022_consume"
:
"端午活动用户购买道具"
,
"wzzyn_2022"
:
"端午活动奖励"
,
"april_fools_2022_consume"
:
"4月活动购买道具"
,
"LaborDayActivity"
:
"四季仙踪活动奖励"
,
"NewYearActivity"
:
"春节活动"
,
"OnePieceActivity"
:
"航海活动奖励"
,
"heart_season_buy_prop"
:
"怦然心动道具购买"
,
"baseSalaryExpend"
:
"底薪"
,
"guildRecharge"
:
"公会内充"
,
"blind_box_transfer_to_backpack"
:
"商城礼物盲盒预支"
,
"activity_fairy_star"
:
"三月活动奖励"
}
libs/db_link.py
View file @
967b67bb
...
...
@@ -41,7 +41,7 @@ class LinkMysql(object):
conn
.
close
()
return
last_id
#
执行
#
执行
def
excete_mysql
(
self
,
sql
):
conn
=
self
.
POOLMYSQL
.
connection
()
cursor
=
conn
.
cursor
(
cursor
=
pymysql
.
cursors
.
DictCursor
)
...
...
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