Files
Django/jituan/services/szjilu_accounting.py

85 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""各俱乐部全局收支流水szjilu统一记账。"""
from decimal import Decimal
from django.db import transaction
from config.models import Szjilu
from jituan.constants import CLUB_ID_DEFAULT
_ZERO = Decimal('0.00')
_SZJILU_DEFAULTS = {
'TotalIncome': _ZERO,
'TotalFlow': _ZERO,
'TotalExpense': _ZERO,
'DailyExpense': _ZERO,
'DailyFlow': _ZERO,
}
def normalize_szjilu_club_id(club_id):
return (club_id or '').strip() or CLUB_ID_DEFAULT
def _get_szjilu_for_update(club_id):
cid = normalize_szjilu_club_id(club_id)
szjilu, _ = Szjilu.objects.select_for_update().get_or_create(
club_id=cid,
defaults=dict(_SZJILU_DEFAULTS),
)
return szjilu
def apply_szjilu_income(amount, club_id=None):
"""平台收入:总收益、总流水、今日流水增加。"""
jine = Decimal(str(amount))
with transaction.atomic():
szjilu = _get_szjilu_for_update(club_id)
szjilu.TotalIncome += jine
szjilu.TotalFlow += jine
szjilu.DailyFlow += jine
szjilu.save()
def apply_szjilu_expense(amount, club_id=None):
"""平台出款/支出:总收益减少,总支出、今日支出增加。"""
jine = Decimal(str(amount))
with transaction.atomic():
szjilu = _get_szjilu_for_update(club_id)
szjilu.TotalIncome -= jine
szjilu.TotalExpense += jine
szjilu.DailyExpense += jine
szjilu.save()
def get_szjilu_snapshot(club_id=None):
"""读取某俱乐部收支汇总;无记录时返回零值。"""
cid = normalize_szjilu_club_id(club_id)
row = Szjilu.query.filter(club_id=cid).first()
if not row:
return {
'zongliushui': 0.0,
'zongshouyi': 0.0,
'zongzhichu': 0.0,
'jrls': 0.0,
'jrzc': 0.0,
}
return {
'zongliushui': float(row.TotalFlow or _ZERO),
'zongshouyi': float(row.TotalIncome or _ZERO),
'zongzhichu': float(row.TotalExpense or _ZERO),
'jrls': float(row.DailyFlow or _ZERO),
'jrzc': float(row.DailyExpense or _ZERO),
}
def reset_all_daily_szjilu():
"""每日清零:所有俱乐部的今日流水/今日支出。"""
updated = 0
with transaction.atomic():
for szjilu in Szjilu.objects.select_for_update().all():
szjilu.DailyExpense = _ZERO
szjilu.DailyFlow = _ZERO
szjilu.save(update_fields=['DailyExpense', 'DailyFlow', 'UpdateTime'])
updated += 1
return updated