Commit b9d93b12 authored by xupeng's avatar xupeng

Merge remote-tracking branch 'origin/develop/xp' into develop/xp

# Conflicts:
#	app/api/statement/guild.py
#	app/api/statement/schemas.py
#	app/api/statement/views.py
parents 48b914f9 4fe1640e
from datetime import datetime
from fastapi import HTTPException, status
from sqlalchemy import and_
from sqlalchemy.orm import Session
from app.api.account import schemas
from libs.functions import wrapper_out
from models import account as models
from models.account import AccountFinance, AccountFinanceDetails
def get_account(db: Session, name: str):
......@@ -43,11 +45,29 @@ def get_account_list(db: Session, param):
return result_list
def get_gift_type(db: Session):
"""礼物类型"""
out_list = []
income_list = []
output = db.query(models.AccountType).all()
for i in output:
try:
zer_info = i.to_dict(only=('id', 'key_name', 'key_value', 'type'))
except:
zer_info = i
if zer_info.get("type") == 1:
income_list.append(zer_info)
else:
out_list.append(zer_info)
return {"income": income_list, "output": out_list}
def create_account(db: Session, param: schemas.AccountCreate):
"""创建"""
try:
db_account = models.Account(name=param.name, unique_tag=param.unique_tag, config_key=param.config_key,
remark=param.remark, create_time=datetime.now())
remark=param.remark, income=','.join(map(str, param.income)),
output=','.join(map(str, param.output)), create_time=datetime.now())
db.add(db_account)
db.commit()
db.refresh(db_account)
......@@ -74,7 +94,38 @@ def update_account_info(db: Session, old_data):
db.commit()
def get_finance_info(db: Session, role_id: int):
def get_finance_info(db, data):
"""账户财务信息"""
finance_condition = []
finance_condition.append(AccountFinance.account_id == data.aid)
if data.start_time:
finance_condition.append(AccountFinance.create_time >= data.start_time)
if data.end_time:
finance_condition.append(AccountFinance.create_time <= data.end_time)
if not finance_condition:
query_res = db.query(AccountFinance).all()
return [i.to_dict() for i in query_res][::-1]
else:
get_user_orm_sql = db.query(AccountFinance).filter(and_(*finance_condition))
query_res = db.execute(get_user_orm_sql).fetchall()
return [i[0].to_dict() for i in query_res][::-1]
db.query(models.Account).filter(models.Account.id == role_id).delete()
return True
def get_finance_details(db, data):
"""账户财务明细"""
finance_condition = []
if data.type or data.type == 0:
finance_condition.append(AccountFinanceDetails.type == data.type)
if data.gift_type:
finance_condition.append(AccountFinanceDetails.gift_type == data.gift_type)
if data.start_time:
finance_condition.append(AccountFinanceDetails.create_time >= data.start_time)
if data.end_time:
finance_condition.append(AccountFinanceDetails.create_time <= data.end_time)
if not finance_condition:
query_res = db.query(AccountFinanceDetails).all()
return [i.to_dict() for i in query_res][::-1]
else:
get_user_orm_sql = db.query(AccountFinanceDetails).filter(and_(*finance_condition))
query_res = db.execute(get_user_orm_sql).fetchall()
return [i[0].to_dict() for i in query_res][::-1]
......@@ -2,15 +2,24 @@ from typing import Optional
from pydantic import BaseModel
class PublicModel(BaseModel):
page: Optional[int] = None
size: Optional[int] = None
start_time: Optional[str] = ""
end_time: Optional[str] = ""
class AccountCreate(BaseModel):
name: str
remark: str
remark: Optional[str] = None
unique_tag: str
config_key: str
config_key: Optional[str] = None
income: Optional[list] = []
output: Optional[list] = []
class AccountList(BaseModel):
name: str
name: Optional[str] = None
page: Optional[int] = None
size: Optional[int] = None
......@@ -21,3 +30,12 @@ class AccountUpdate(BaseModel):
remark: str
income: list
output: list
class FinanceInfo(PublicModel):
aid: int
class FinanceDetails(PublicModel):
type: Optional[int] = None
gift_type: Optional[int] = None
......@@ -26,6 +26,13 @@ def user_list(data: schemas.AccountList, db: Session = Depends(get_db)):
return HttpResultResponse(total=len(result), data=result)
@router.get("/gift/type")
def gift_type_list(db: Session = Depends(get_db)):
"""礼物类型配置返回"""
result = crud.get_gift_type(db)
return HttpResultResponse(data=result)
@router.post("/update")
def read_account(data: schemas.AccountUpdate, db: Session = Depends(get_db)):
"""账户修改"""
......@@ -33,8 +40,15 @@ def read_account(data: schemas.AccountUpdate, db: Session = Depends(get_db)):
return HttpResultResponse()
@router.post("/finance/info/{aid}")
def finance_information(aid, db: Session = Depends(get_db)):
"""财务信息"""
crud.get_finance_info(db, aid)
return HttpResultResponse()
@router.post("/finance/info")
def finance_information(data: schemas.FinanceInfo, db: Session = Depends(get_db)):
"""账户财务信息"""
res = crud.get_finance_info(db, data)
return HttpResultResponse(total=len(res), data=res[int(data.page-1)*data.size:data.page*data.size])
@router.post("/finance/details")
def finance_details(data: schemas.FinanceDetails, db: Session = Depends(get_db)):
"""账户财务明细"""
res = crud.get_finance_details(db, data)
return HttpResultResponse(total=len(res), data=res[int(data.page-1)*data.size:data.page*data.size])
......@@ -3,9 +3,11 @@ from app.api.users import views as u_view
from app.api.statement import views as s_view
from app.api.role import views as r_view
from app.api.account import views as a_view
from app.api.margin import views as m_view
api_router = APIRouter()
api_router.include_router(u_view.router, prefix="/users", tags=["users"])
api_router.include_router(s_view.router, prefix="/statement", tags=["statement"])
api_router.include_router(r_view.router, prefix="/role", tags=["role"])
api_router.include_router(a_view.router, prefix="/account", tags=["account"])
api_router.include_router(m_view.router, prefix="/margin", tags=["margin"])
from sqlalchemy import and_
from sqlalchemy.orm import Session
from libs.functions import wrapper_out
from models.margin import GuildMargin
@wrapper_out()
def get_margin(db: Session, param):
guild_filters = []
if param.guild_id:
guild_filters.append(GuildMargin.guild_id == param.guild_id)
if param.status:
guild_filters.append(GuildMargin.status == param.status)
if param.start_time:
guild_filters.append(GuildMargin.create_time >= param.start_time)
if param.end_time:
guild_filters.append(GuildMargin.create_time <= param.end_time)
if not guild_filters:
query_res = db.query(GuildMargin).all()
return [i.to_dict() for i in query_res][::-1]
else:
get_user_orm_sql = db.query(GuildMargin).filter(and_(*guild_filters))
query_res = db.execute(get_user_orm_sql).fetchall()
return [i[0].to_dict() for i in query_res][::-1]
from pydantic import BaseModel
from typing import Optional
class GuildMarginList(BaseModel):
page: Optional[int] = None
size: Optional[int] = None
guild_id: Optional[int] = None
status: Optional[int] = None
start_time: Optional[int] = None
end_time: Optional[int] = None
from fastapi import Depends, APIRouter
from sqlalchemy.orm import Session
from app import get_db
from app.api.margin import schemas, crud
from libs.result_format import HttpResultResponse
router = APIRouter()
@router.post("/list")
def guild_margin_list(data: schemas.GuildMarginList, db: Session = Depends(get_db)):
"""保证金列表"""
result = crud.get_margin(db, data)
return HttpResultResponse(total=len(result), data=result[int(data.page-1)*data.size:data.page*data.size])
from pydantic import BaseModel
from typing import Optional
from sqlalchemy.orm import Session
from models import roles as models
class RoleCreate(BaseModel):
......
......@@ -208,5 +208,3 @@ class WithdrawStatement(object):
final_count = df['final_money'].apply(lambda x: float(x)).sum()
return guild_info[(int(cond.page) - 1) * cond.size:cond.size * cond.page], total, count, final_count
return [], 0, 0, 0
import math
import threading
from fastapi_pagination import paginate
from sqlalchemy import and_, func
from sqlalchemy.orm import Session
......@@ -113,3 +111,9 @@ def accout_list_data(db:Session,dbname,params):
querydata, count = QueryAllData(db, dbname, params,accout_filters).query_data()
data = [QueryAllData.serialization(item) for item in querydata]
return data, count
def update_guild_info(self, db: Session, data):
"""公会结算修改"""
if (data.status or data.status == 0) and data.status < 2:
db.query(Settlement).filter(Settlement.id == data.id).update({Settlement.status: data.status + 1})
db.commit()
......@@ -96,3 +96,9 @@ class PaymentAdd(BaseModel):
class PaymentAccountlList(PaymentWithdrawalList):
uuid : int=None
class GuildUpdate(BaseModel):
id: int
status: int
......@@ -92,3 +92,10 @@ def outon_account(data:PaymentAccountlList,db: Session = Depends(get_db)):
@router.post("/guild/update")
def guild_update_list(data: schemas.GuildUpdate, db: Session = Depends(get_db)):
"""公会结算"""
GuildSet().update_guild_info(db, data)
return HttpResultResponse()
from core.storage.db import engine
from models import users, roles, recharge, account
from models import users, roles, recharge, account, margin
# 映射模型表
users.Base.metadata.create_all(bind=engine)
roles.Base.metadata.create_all(bind=engine)
recharge.Base.metadata.create_all(bind=engine)
account.Base.metadata.create_all(bind=engine)
margin.Base.metadata.create_all(bind=engine)
from sqlalchemy import Column, Integer, String, Text, DateTime, Index
from sqlalchemy import Column, Integer, String, Text, DateTime, Float
from core.storage.db import Base
from sqlalchemy_serializer import SerializerMixin
......@@ -13,6 +13,7 @@ class Account(Base, SerializerMixin):
name = Column(String(255), index=True, comment="账户名称")
unique_tag = Column(String(100), unique=True, comment="唯一标记")
beneficiary = Column(String(100), comment="受益人")
consumable = Column(String(255), comment="账户余额")
remark = Column(String(255), comment="描述")
uuid = Column(String(60), default=functions.uuid(), comment="uuid")
config_key = Column(String(150), comment="配置key,和api接口约定好的标识")
......@@ -23,3 +24,49 @@ class Account(Base, SerializerMixin):
create_time = Column(DateTime, comment="创建时间")
__table_args__ = {'comment': '财务系统-账号管理'}
class AccountType(Base, SerializerMixin):
"""礼物类型配置"""
__tablename__ = "account_type"
id = Column(Integer, primary_key=True, index=True)
key_name = Column(String(255), comment="礼物类型名字")
key_value = Column(String(255), comment="礼物类型value")
type = Column(Integer, comment="方式:0出账,1:入账")
create_time = Column(DateTime, comment="创建时间")
__table_args__ = {'comment': '礼物类型配置'}
class AccountFinance(Base, SerializerMixin):
"""账号财务数据(单位:天)"""
__tablename__ = "account_finance"
id = Column(Integer, primary_key=True, index=True)
account_id = Column(Integer, comment="账户id")
account_tag = Column(String(255), comment="账户标识")
account_uuid = Column(String(100), comment="账户uuid")
balance = Column(String(255), comment="当日余额")
income = Column(Float, comment="当日入账")
output = Column(Float, comment="当日出账")
create_time = Column(DateTime, comment="创建时间")
__table_args__ = {'comment': '账号财务数据表'}
class AccountFinanceDetails(Base, SerializerMixin):
"""账号财务数据详情"""
__tablename__ = "account_finance_details"
id = Column(Integer, primary_key=True, index=True)
account_id = Column(Integer, comment="账户id")
account_tag = Column(String(255), comment="账户标识")
account_uuid = Column(String(100), comment="账户uuid")
order_number = Column(String(255), comment="订单号")
gift_type = Column(String(255), comment="礼物类型")
type = Column(Integer, comment="方式:0出账,1:入账")
amount = Column(Float, comment="金额")
create_time = Column(DateTime, comment="创建时间")
__table_args__ = {'comment': '账号财务数据详情表'}
from sqlalchemy import Column, Integer, String, Text, DateTime, Float
from core.storage.db import Base
from sqlalchemy_serializer import SerializerMixin
class GuildMargin(Base, SerializerMixin):
"""公会保证金表"""
__tablename__ = "guild_margin"
id = Column(Integer, primary_key=True, index=True)
guild_id = Column(Integer, index=True, comment="公会id")
guild_name = Column(String(100), comment="公会名字")
amount = Column(Float, comment="操作金额")
type = Column(Integer, default=1, comment="1:缴纳保证金 -1:扣减保证金")
remark = Column(String(255), comment="扣减理由")
violate_images = Column(String(255), comment="违规图片地址")
deduction_images = Column(String(255), comment="扣减图片地址")
status = Column(Integer, comment="3表示未处理 4表示成功 5表示拒绝")
create_time = Column(Integer, comment="添加时间")
__table_args__ = {'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