Commit 41ca6def authored by xianyang's avatar xianyang

公会结算接口

parent b0310bf0
import math
import threading
import pandas as pd
from sqlalchemy import and_, func
from sqlalchemy.orm import Session
from models.recharge import Settlement
locka = threading.Lock()
class GuildSet(object):
def __init__(self):
self.settlement_list = []
def dispose_guild_data(self, db, num):
guild_list = []
locka.acquire()
once_res = db.query(Settlement).filter().offset(num * 10).limit(10).all()
locka.release()
for i in once_res:
info_dict = i.to_dict()
guild_list.append(info_dict)
self.settlement_list += guild_list
def query_guild_data(self, db):
msg_count = db.query(func.count(Settlement.id)).scalar()
num = math.ceil(msg_count / 10)
# 创建线程
ths = []
for x in range(num):
ths.append(threading.Thread(target=self.dispose_guild_data, args=[db, x]))
for y in range(num):
ths[y].start()
for z in range(num):
ths[z].join()
return self.settlement_list
def get_guild_data(self, db: Session, param):
"""公会结算"""
is_guild_filters = []
if param.guild_id:
is_guild_filters.append(Settlement.guild_id == param.guild_id)
if param.status or param.status == 0:
is_guild_filters.append(Settlement.status == param.status)
if param.start_time:
is_guild_filters.append(Settlement.update_time >= param.start_time)
if param.end_time:
is_guild_filters.append(Settlement.update_time <= param.end_time)
# 判断有无条件
try:
if len(is_guild_filters) > 0:
get_user_orm_sql = db.query(Settlement).filter(and_(*is_guild_filters))
condition_data = db.execute(get_user_orm_sql).fetchall()
guild_info = [i[0].to_dict() for i in condition_data]
else:
guild_info = self.query_guild_data(db)
except Exception as e:
print(e)
return [], 0
# 判断是列表还是导出接口
guild_info.reverse()
if guild_info:
return guild_info[(int(param.page) - 1) * param.size:param.size * param.page], len(guild_info)
return [], 0
...@@ -3,6 +3,7 @@ from app import get_db ...@@ -3,6 +3,7 @@ from app import get_db
from fastapi import Depends, APIRouter from fastapi import Depends, APIRouter
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from app.api.statement.crud import RechargeStatement, WithdrawStatement from app.api.statement.crud import RechargeStatement, WithdrawStatement
from app.api.statement.guild import GuildSet
from libs.result_format import HttpResultResponse from libs.result_format import HttpResultResponse
router = APIRouter() router = APIRouter()
...@@ -35,3 +36,9 @@ def guild_withdrawal_list(data: schemas.GuildWithdrawalList, db: Session = Depen ...@@ -35,3 +36,9 @@ def guild_withdrawal_list(data: schemas.GuildWithdrawalList, db: Session = Depen
guild_list, total, money, final_money = WithdrawStatement().get_guild_withdraw_cash(db, data) guild_list, total, money, final_money = WithdrawStatement().get_guild_withdraw_cash(db, data)
return HttpResultResponse(total=total, count=float(money), actual_count=final_money, data=guild_list) return HttpResultResponse(total=total, count=float(money), actual_count=final_money, data=guild_list)
@router.post("/guild/settlement")
def guild_settlement_list(data: schemas.GuildWithdrawalList, db: Session = Depends(get_db)):
"""公会结算"""
guild_list, total = GuildSet().get_guild_data(db, data)
return HttpResultResponse(total=total, data=guild_list)
...@@ -61,4 +61,16 @@ class GuildWC(Base, SerializerMixin): ...@@ -61,4 +61,16 @@ class GuildWC(Base, SerializerMixin):
class Settlement(Base, SerializerMixin): class Settlement(Base, SerializerMixin):
"""公会结算""" """公会结算"""
pass __tablename__ = "guild_settlement"
id = Column(Integer, primary_key=True, index=True)
guild_id = Column(Integer, comment="公会ID")
guild_name = Column(String(255), comment="公会名称")
is_calculate = Column(String(10), comment="是否结算")
is_settlement = Column(String(10), comment="是否结款")
status = Column(Integer, comment="状态,0待结算,1待结款,2已完成")
all_money = Column(Float, comment="应结款")
account = Column(String(255), comment="账号")
bank_name = Column(String(255), comment="开户行名称")
bank_no = Column(String(255), comment="户头名称")
create_time = Column(DateTime, comment="申请结算时间")
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