mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-14 21:52:56 +08:00
124 lines
3.8 KiB
Python
124 lines
3.8 KiB
Python
from datetime import datetime
|
|
from typing_extensions import Self
|
|
|
|
from tortoise import fields
|
|
|
|
from zhenxun.services.db_context import Model
|
|
|
|
from .mahiro_bank_log import BankHandleType, MahiroBankLog
|
|
|
|
|
|
class MahiroBank(Model):
|
|
id = fields.IntField(pk=True, generated=True, auto_increment=True)
|
|
"""自增id"""
|
|
user_id = fields.CharField(255, description="用户id")
|
|
"""用户id"""
|
|
amount = fields.BigIntField(default=0, description="存款")
|
|
"""用户存款"""
|
|
rate = fields.FloatField(default=0.0005, description="小时利率")
|
|
"""小时利率"""
|
|
loan_amount = fields.BigIntField(default=0, description="贷款")
|
|
"""用户贷款"""
|
|
loan_rate = fields.FloatField(default=0.0005, description="贷款利率")
|
|
"""贷款利率"""
|
|
update_time = fields.DatetimeField(auto_now=True)
|
|
"""修改时间"""
|
|
create_time = fields.DatetimeField(auto_now_add=True)
|
|
"""创建时间"""
|
|
|
|
class Meta: # pyright: ignore [reportIncompatibleVariableOverride]
|
|
table = "mahiro_bank"
|
|
table_description = "小真寻银行"
|
|
|
|
@classmethod
|
|
async def deposit(cls, user_id: str, amount: int, rate: float) -> Self:
|
|
"""存款
|
|
|
|
参数:
|
|
user_id: 用户id
|
|
amount: 金币数量
|
|
rate: 小时利率
|
|
|
|
返回:
|
|
Self: MahiroBank
|
|
"""
|
|
effective_hour = int(24 - datetime.now().hour)
|
|
user, _ = await cls.get_or_create(user_id=user_id)
|
|
user.amount += amount
|
|
await user.save(update_fields=["amount", "rate"])
|
|
await MahiroBankLog.create(
|
|
user_id=user_id,
|
|
amount=amount,
|
|
rate=rate,
|
|
effective_hour=effective_hour,
|
|
handle_type=BankHandleType.DEPOSIT,
|
|
)
|
|
return user
|
|
|
|
@classmethod
|
|
async def withdraw(cls, user_id: str, amount: int) -> Self:
|
|
"""取款
|
|
|
|
参数:
|
|
user_id: 用户id
|
|
amount: 金币数量
|
|
|
|
返回:
|
|
Self: MahiroBank
|
|
"""
|
|
if amount <= 0:
|
|
raise ValueError("取款金额必须大于0")
|
|
user, _ = await cls.get_or_create(user_id=user_id)
|
|
if user.amount < amount:
|
|
raise ValueError("取款金额不能大于存款金额")
|
|
user.amount -= amount
|
|
await user.save(update_fields=["amount"])
|
|
await MahiroBankLog.create(
|
|
user_id=user_id, amount=amount, handle_type=BankHandleType.WITHDRAW
|
|
)
|
|
return user
|
|
|
|
@classmethod
|
|
async def loan(cls, user_id: str, amount: int, rate: float) -> Self:
|
|
"""贷款
|
|
|
|
参数:
|
|
user_id: 用户id
|
|
amount: 贷款金额
|
|
rate: 贷款利率
|
|
|
|
返回:
|
|
Self: MahiroBank
|
|
"""
|
|
user, _ = await cls.get_or_create(user_id=user_id)
|
|
user.loan_amount += amount
|
|
user.loan_rate = rate
|
|
await user.save(update_fields=["loan_amount", "loan_rate"])
|
|
await MahiroBankLog.create(
|
|
user_id=user_id, amount=amount, rate=rate, handle_type=BankHandleType.LOAN
|
|
)
|
|
return user
|
|
|
|
@classmethod
|
|
async def repayment(cls, user_id: str, amount: int) -> Self:
|
|
"""还款
|
|
|
|
参数:
|
|
user_id: 用户id
|
|
amount: 还款金额
|
|
|
|
返回:
|
|
Self: MahiroBank
|
|
"""
|
|
if amount <= 0:
|
|
raise ValueError("还款金额必须大于0")
|
|
user, _ = await cls.get_or_create(user_id=user_id)
|
|
if user.loan_amount < amount:
|
|
raise ValueError("还款金额不能大于贷款金额")
|
|
user.loan_amount -= amount
|
|
await user.save(update_fields=["loan_amount"])
|
|
await MahiroBankLog.create(
|
|
user_id=user_id, amount=amount, handle_type=BankHandleType.REPAYMENT
|
|
)
|
|
return user
|