Files
Django/config/management/commands/sync_daily_income_from_log.py

69 lines
2.4 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.
"""
用 platform_income_log 重写 daily_income_stat纠正重复记账后的虚高数字。
权威数据源是 platform_income_log每笔支付一条biz_ref 唯一),不是扫订单重算。
"""
from datetime import date, timedelta
from django.core.management.base import BaseCommand
from jituan.services.szjilu_accounting import (
sync_daily_income_stat_for_date,
sync_szjilu_income_from_logs,
)
class Command(BaseCommand):
help = (
'按 platform_income_log 同步 daily_income_stat纠正今日收入虚高/笔数不准)。'
'不要用 repair_wechat_income那个会重复加钱。'
)
def add_arguments(self, parser):
parser.add_argument(
'--date',
type=str,
default='',
help='同步日期 YYYY-MM-DD默认今天',
)
parser.add_argument(
'--days',
type=int,
default=1,
help='从指定日期起向前同步几天,默认 1',
)
parser.add_argument(
'--reset-day',
action='store_true',
help='同步前先删除该日全部日统计行,再按日志重建(纠正重复记账必选)',
)
parser.add_argument(
'--sync-szjilu',
action='store_true',
help='同时按日志全量重算 szjilu 累计收入/今日流水',
)
def handle(self, *args, **options):
if options['date']:
end_day = date.fromisoformat(options['date'])
else:
end_day = date.today()
days = max(1, int(options['days'] or 1))
start_day = end_day - timedelta(days=days - 1)
reset_day = bool(options['reset_day'])
total = 0
for i in range(days):
d = start_day + timedelta(days=i)
n = sync_daily_income_stat_for_date(d, reset_day=reset_day)
total += n
self.stdout.write(f'{d}: 已同步 {n} 个俱乐部日统计行')
if options['sync_szjilu']:
sz = sync_szjilu_income_from_logs()
self.stdout.write(f'szjilu: 已重算 {sz} 个俱乐部累计收入')
self.stdout.write(self.style.SUCCESS(
f'完成。今日收入/笔数现与 platform_income_log 一致。'
f'若仍有漏记支付,请确认 migrate config 后等新支付自动入账。'
))