Commit 967b67bb authored by xianyang's avatar xianyang

消费类型分类汇总接口,公会结算

parent 55d34639
......@@ -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')}
......@@ -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)
......@@ -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')
if not res['data']['result']['status']:
if 'Insufficient assets' in res['data']['result']['msg']:
return "资产不足,无法转账"
return res['data']['result']['msg']
print(res)
try:
if not res['data']['result']['status']:
if 'Insufficient assets' in res['data']['result']['msg']:
return "资产不足,无法转账"
return res['data']['result']['msg']
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,
......@@ -533,4 +567,4 @@ def GuildSettlementAdd(db, data):
guild_per=data.guild_per, actual_money=data.actual_money,
pledge_deposit_money=data.pledge_deposit_money)
db.add(db_export)
db.commit()
db.commit()
......@@ -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
......@@ -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)
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": "三月活动奖励"
}
......@@ -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)
......
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