Files
Django/config/management/commands/repopulate_today_income.py
2026-06-24 21:35:55 +08:00

49 lines
2.0 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.
"""只恢复今日收入(修复后台四个板子显示 0"""
from datetime import date
from django.core.management.base import BaseCommand
from django.db.models import Sum
from config.models import DailyIncomeStat
from jituan.services.szjilu_accounting import repopulate_today_income_stats
class Command(BaseCommand):
help = '重建今日 daily_income_stat修复财务页今日收入为 0'
def add_arguments(self, parser):
parser.add_argument('--date', type=str, default='', help='日期 YYYY-MM-DD默认今天')
parser.add_argument('--yes', action='store_true', help='确认执行')
def handle(self, *args, **options):
stat_date = date.fromisoformat(options['date']) if options['date'] else date.today()
dry_run = not options['yes']
if dry_run:
self.stdout.write(self.style.WARNING('【预览】\n'))
else:
self.stdout.write(self.style.WARNING('【执行】重建今日收入...\n'))
r = repopulate_today_income_stats(stat_date, dry_run=dry_run)
self.stdout.write(f'日期: {r["date"]}')
self.stdout.write(f' 当前: {r["before_amount"]:.2f} 元 / {r["before_count"]}')
self.stdout.write(self.style.SUCCESS(
f' 重建后: {r["after_amount"]:.2f} 元 / {r["after_count"]}'
))
if r['items']:
for ref, cid, amt, kind in r['items']:
self.stdout.write(f' {ref} {amt}元 club={cid} ({kind})')
if not dry_run:
agg = DailyIncomeStat.objects.filter(date=stat_date).aggregate(
amt=Sum('total_amount'), cnt=Sum('total_count'),
)
self.stdout.write(self.style.SUCCESS(
f'\n完成。今日日统计: {float(agg["amt"] or 0):.2f} 元 / {int(agg["cnt"] or 0)}'
))
self.stdout.write('请刷新后台财务页。')
else:
self.stdout.write(self.style.WARNING(
'\n确认后: python manage.py repopulate_today_income --yes'
))