Commit ba9039b4 authored by xianyang's avatar xianyang

Merge branch 'development' into develop/xp

parents 3c8b6a08 472f9f2f
......@@ -70,7 +70,8 @@ class HDUd():
platform_data = search({"uuid": i['uuid']}, 'Server.UserQuery.GetUserAsset')
if platform_data['status']:
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:
print(e)
i['consumable'] = 0
......@@ -262,6 +263,7 @@ def create_type(db: Session, data):
class AccountStatistics(object):
"""账户列表,查询"""
def __init__(self, page, size, uuid, user_id, start_time, end_time, type, gift_type, unique):
self.page = page
self.size = size
......@@ -277,7 +279,7 @@ class AccountStatistics(object):
def business_query(self, date, condition):
"""业务数据查询"""
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:
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"
......@@ -293,10 +295,11 @@ class AccountStatistics(object):
with ThreadPoolExecutor(max_workers=2) as pool:
guild = pool.submit(LinkMysql(env.DB_3YV2).query_mysql, guild_sql)
system = pool.submit(LinkMysql(env.DB_3YV2).query_mysql, system_sql)
guild_uuid_list = guild.result()
system_uuid_list = system.result()
guild_list = guild.result()
system_list = system.result()
res_list = []
if self.unique == 'guild_account':
guild_uuid_list = [i.get('uuid') for i in guild_list]
for info in data:
if info.get('uuid') in guild_uuid_list:
res_list.append(info)
......@@ -305,6 +308,8 @@ class AccountStatistics(object):
if info.get('amount_type') == 'backpack':
res_list.append(info)
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:
if info.get('uuid') not in guild_uuid_list and info.get('uuid') not in system_uuid_list:
res_list.append(info)
......@@ -341,6 +346,19 @@ class AccountStatistics(object):
ultimately_data = total_list + before_last_data if before_last_data else total_list
if self.unique in ["user_account", "guild_account", "knapsack_account"]:
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)
res = ultimately_data[int(self.page - 1) * self.size: self.page * self.size]
# 判断是列表还是导出接口
......@@ -355,3 +373,54 @@ class AccountStatistics(object):
return res, total, float(amount_total)
else:
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
from sqlalchemy.orm import Session
from app import get_db
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 libs.result_format import HttpResultResponse, HttpMessage
from libs.token_verify import login_required
......@@ -102,16 +102,17 @@ def finance_info_excel(data: schemas.FinanceDetails, request: Request,
@router.get("/finance/fourth/details")
def finance_fourth_info(page: int,
size: int,
uuid: str,
start_time: Optional[str] = "",
end_time: Optional[str] = "",
uuid: Optional[str] = "",
time: Optional[str] = "",
type: Optional[int] = None,
amount_type: Optional[str] = "",
reference_type: Optional[str] = "",
token=Depends(login_required)):
"""账户财务明细第四层"""
# res, total, count = AccountStatistics.get_finance_details(page, size, uuid, start_time, end_time, type,
# amount_type, l)
# return HttpResultResponse(total=total, data=res, count=count)
"""账户财务明细 第四层"""
if not all([uuid, time]):
return HttpResultResponse(code=500, msg="缺少必传参数")
res, total, count = SpecificAccountQuery(page, size, uuid, time, type,
reference_type).business_logic()
return HttpResultResponse(total=total, data=res, count=count)
@router.get("/type")
......
from datetime import datetime
from typing import Optional
from dateutil.relativedelta import relativedelta
from fastapi import Depends, APIRouter, Request
from sqlalchemy.orm import Session
......
......@@ -242,7 +242,6 @@ def menu_delte(id: Optional[int] = '',db: Session = Depends(get_db),page: Option
return HttpResultResponse(code=200, msg=HttpMessage.SUCCESS)
@router.get("/menu/config")
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