Commit ba9039b4 authored by xianyang's avatar xianyang

Merge branch 'development' into develop/xp

parents 3c8b6a08 472f9f2f
...@@ -70,7 +70,8 @@ class HDUd(): ...@@ -70,7 +70,8 @@ class HDUd():
platform_data = search({"uuid": i['uuid']}, 'Server.UserQuery.GetUserAsset') platform_data = search({"uuid": i['uuid']}, 'Server.UserQuery.GetUserAsset')
if platform_data['status']: if platform_data['status']:
try: try:
i['consumable'] = platform_data['data']['result']['data']['asset_balance']['consumable']['current_amount'] i['consumable'] = platform_data['data']['result']['data']['asset_balance']['consumable'][
'current_amount']
except Exception as e: except Exception as e:
print(e) print(e)
i['consumable'] = 0 i['consumable'] = 0
...@@ -262,6 +263,7 @@ def create_type(db: Session, data): ...@@ -262,6 +263,7 @@ def create_type(db: Session, data):
class AccountStatistics(object): class AccountStatistics(object):
"""账户列表,查询""" """账户列表,查询"""
def __init__(self, page, size, uuid, user_id, start_time, end_time, type, gift_type, unique): def __init__(self, page, size, uuid, user_id, start_time, end_time, type, gift_type, unique):
self.page = page self.page = page
self.size = size self.size = size
...@@ -277,7 +279,7 @@ class AccountStatistics(object): ...@@ -277,7 +279,7 @@ class AccountStatistics(object):
def business_query(self, date, condition): def business_query(self, date, condition):
"""业务数据查询""" """业务数据查询"""
if self.unique in ["user_account", "guild_account", "knapsack_account"]: if self.unique in ["user_account", "guild_account", "knapsack_account"]:
u_sql = f"select uuid,type,SUM(cast(amount as decimal(20,6)))/1000 as amount,FROM_UNIXTIME(create_time, '%y%m%d') as create_time,amount_type from {date} WHERE {' and '.join(condition)} GROUP BY uuid,type ORDER BY FROM_UNIXTIME(create_time, '%y%m%d') DESC" u_sql = f"select uuid,type,reference_type,SUM(cast(amount as decimal(20,6)))/1000 as amount,create_time,amount_type from {date} WHERE {' and '.join(condition)} GROUP BY uuid,type ORDER BY create_time DESC"
else: else:
if condition: if condition:
u_sql = f"select id,uuid,order_number,type,reference_type,amount/1000 as amount,create_time from {date} WHERE {' and '.join(condition)} ORDER BY create_time DESC" u_sql = f"select id,uuid,order_number,type,reference_type,amount/1000 as amount,create_time from {date} WHERE {' and '.join(condition)} ORDER BY create_time DESC"
...@@ -293,10 +295,11 @@ class AccountStatistics(object): ...@@ -293,10 +295,11 @@ class AccountStatistics(object):
with ThreadPoolExecutor(max_workers=2) as pool: with ThreadPoolExecutor(max_workers=2) as pool:
guild = pool.submit(LinkMysql(env.DB_3YV2).query_mysql, guild_sql) guild = pool.submit(LinkMysql(env.DB_3YV2).query_mysql, guild_sql)
system = pool.submit(LinkMysql(env.DB_3YV2).query_mysql, system_sql) system = pool.submit(LinkMysql(env.DB_3YV2).query_mysql, system_sql)
guild_uuid_list = guild.result() guild_list = guild.result()
system_uuid_list = system.result() system_list = system.result()
res_list = [] res_list = []
if self.unique == 'guild_account': if self.unique == 'guild_account':
guild_uuid_list = [i.get('uuid') for i in guild_list]
for info in data: for info in data:
if info.get('uuid') in guild_uuid_list: if info.get('uuid') in guild_uuid_list:
res_list.append(info) res_list.append(info)
...@@ -305,6 +308,8 @@ class AccountStatistics(object): ...@@ -305,6 +308,8 @@ class AccountStatistics(object):
if info.get('amount_type') == 'backpack': if info.get('amount_type') == 'backpack':
res_list.append(info) res_list.append(info)
if self.unique == 'user_account': if self.unique == 'user_account':
guild_uuid_list = [i.get('uuid') for i in guild_list]
system_uuid_list = [i.get('uuid') for i in system_list]
for info in data: for info in data:
if info.get('uuid') not in guild_uuid_list and info.get('uuid') not in system_uuid_list: if info.get('uuid') not in guild_uuid_list and info.get('uuid') not in system_uuid_list:
res_list.append(info) res_list.append(info)
...@@ -341,6 +346,19 @@ class AccountStatistics(object): ...@@ -341,6 +346,19 @@ class AccountStatistics(object):
ultimately_data = total_list + before_last_data if before_last_data else total_list ultimately_data = total_list + before_last_data if before_last_data else total_list
if self.unique in ["user_account", "guild_account", "knapsack_account"]: if self.unique in ["user_account", "guild_account", "knapsack_account"]:
ultimately_data = self.user_guild_query(total_list) ultimately_data = self.user_guild_query(total_list)
record = []
record_dict = {}
for info in ultimately_data:
res_dict = {'uuid': info.get("uuid"), 'create_time': info.get("create_time"), 'income': 0, 'outcome': 0}
if info.get("uuid") not in record:
record.append(info.get("uuid"))
record_dict[info.get("uuid")] = res_dict
if info.get("type") == 1:
record_dict[info.get("uuid")]['income'] = float(info.get("amount"))
else:
record_dict[info.get("uuid")]['outcome'] = float(info.get("amount"))
res_data = [v for k, v in record_dict.items()]
return res_data[int(self.page - 1) * self.size: self.page * self.size], len(res_data), 0
total = len(ultimately_data) total = len(ultimately_data)
res = ultimately_data[int(self.page - 1) * self.size: self.page * self.size] res = ultimately_data[int(self.page - 1) * self.size: self.page * self.size]
# 判断是列表还是导出接口 # 判断是列表还是导出接口
...@@ -355,3 +373,54 @@ class AccountStatistics(object): ...@@ -355,3 +373,54 @@ class AccountStatistics(object):
return res, total, float(amount_total) return res, total, float(amount_total)
else: else:
return res return res
class SpecificAccountQuery(object):
"""账户用户,背包,公会第四层查询"""
def __init__(self, page, size, uuid, time, type, reference_type):
self.page = page
self.size = size
self.uuid = uuid
self.start_time = time
self.end_time = time
self.type = type
self.reference_type = reference_type
self.total_list = []
def condition_query(self, date, cond_list):
sql = f"select uuid,type,cast(amount as decimal(20,6))/1000 as amount,reference_type,create_time,amount_type from {date} WHERE {' and '.join(cond_list)} ORDER BY create_time DESC"
result = LinkMysql(env.DB_HISTORY).query_mysql(sql)
return result
def business_logic(self):
condition = []
condition.append(f" uuid='{self.uuid}'")
condition.append(f" create_time >= {time_str_to_timestamp(self.start_time + ' 00:00:00')}")
end_time = time_str_to_timestamp(self.end_time + ' 00:00:00') + 86400 # 结束时间那天包含在内,固小于第二天凌晨
condition.append(f" create_time < {end_time}")
month, last_month, before_last_month = get_last_month()
with ThreadPoolExecutor(max_workers=3) as pool:
future1 = pool.submit(self.condition_query, 'assets_log_' + month, condition)
future2 = pool.submit(self.condition_query, 'assets_log_' + last_month, condition)
future3 = pool.submit(self.condition_query, 'assets_log_' + before_last_month, condition)
month_data = future1.result()
last_data = future2.result()
before_last_data = future3.result()
if month_data:
self.total_list = self.total_list + month_data if month_data[0]['uuid'] else self.total_list
if last_data:
self.total_list = self.total_list + last_data if last_data[0]['uuid'] else self.total_list
if before_last_data:
self.total_list = self.total_list + before_last_data if before_last_data[0]['uuid'] else self.total_list
total = len(self.total_list)
res = self.total_list[int(self.page - 1) * self.size: self.page * self.size]
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[
'reference_type']
data_pd = pd.DataFrame(self.total_list)
amount_total = data_pd['amount'].sum()
return res, total, float(amount_total)
...@@ -3,7 +3,7 @@ from fastapi import Depends, APIRouter, Request, Query ...@@ -3,7 +3,7 @@ from fastapi import Depends, APIRouter, Request, Query
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from app import get_db from app import get_db
from app.api.account import schemas, crud from app.api.account import schemas, crud
from app.api.account.crud import AccountStatistics from app.api.account.crud import AccountStatistics, SpecificAccountQuery
from app.api.statement import crud as statement_crud from app.api.statement import crud as statement_crud
from libs.result_format import HttpResultResponse, HttpMessage from libs.result_format import HttpResultResponse, HttpMessage
from libs.token_verify import login_required from libs.token_verify import login_required
...@@ -102,16 +102,17 @@ def finance_info_excel(data: schemas.FinanceDetails, request: Request, ...@@ -102,16 +102,17 @@ def finance_info_excel(data: schemas.FinanceDetails, request: Request,
@router.get("/finance/fourth/details") @router.get("/finance/fourth/details")
def finance_fourth_info(page: int, def finance_fourth_info(page: int,
size: int, size: int,
uuid: str, uuid: Optional[str] = "",
start_time: Optional[str] = "", time: Optional[str] = "",
end_time: Optional[str] = "",
type: Optional[int] = None, type: Optional[int] = None,
amount_type: Optional[str] = "", reference_type: Optional[str] = "",
token=Depends(login_required)): token=Depends(login_required)):
"""账户财务明细第四层""" """账户财务明细 第四层"""
# res, total, count = AccountStatistics.get_finance_details(page, size, uuid, start_time, end_time, type, if not all([uuid, time]):
# amount_type, l) return HttpResultResponse(code=500, msg="缺少必传参数")
# return HttpResultResponse(total=total, data=res, count=count) res, total, count = SpecificAccountQuery(page, size, uuid, time, type,
reference_type).business_logic()
return HttpResultResponse(total=total, data=res, count=count)
@router.get("/type") @router.get("/type")
......
from datetime import datetime from datetime import datetime
from typing import Optional from typing import Optional
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from fastapi import Depends, APIRouter, Request from fastapi import Depends, APIRouter, Request
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
......
...@@ -242,7 +242,6 @@ def menu_delte(id: Optional[int] = '',db: Session = Depends(get_db),page: Option ...@@ -242,7 +242,6 @@ def menu_delte(id: Optional[int] = '',db: Session = Depends(get_db),page: Option
return HttpResultResponse(code=200, msg=HttpMessage.SUCCESS) return HttpResultResponse(code=200, msg=HttpMessage.SUCCESS)
@router.get("/menu/config") @router.get("/menu/config")
def menu_list(db: Session = Depends(get_db),menu_type: Optional[int] = ""): def menu_list(db: Session = Depends(get_db),menu_type: Optional[int] = ""):
"""菜单配置下拉""" """菜单配置下拉"""
......
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