Files
Django/jituan/management/commands/backfill_penalty_club_id.py

43 lines
1.6 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.
"""回填罚单 club_id从关联订单或被罚用户"""
from django.core.management.base import BaseCommand
from django.db import transaction
from jituan.constants import CLUB_ID_DEFAULT
from jituan.services.club_penalty import resolve_penalty_club_id
from orders.models import Order, Penalty
from users.business_models import User
class Command(BaseCommand):
help = '按关联订单/被罚用户回填 fadan.club_id默认仅处理仍为 xq 的记录)'
def add_arguments(self, parser):
parser.add_argument('--all', action='store_true', help='重算全部罚单(慎用)')
parser.add_argument('--dry-run', action='store_true')
def handle(self, *args, **options):
dry = options['dry_run']
qs = Penalty.query.all()
if not options['all']:
qs = qs.filter(ClubID=CLUB_ID_DEFAULT)
updated = 0
with transaction.atomic():
for p in qs.to_list():
order = None
if p.RelatedOrderID:
order = Order.query.filter(OrderID=p.RelatedOrderID).first()
cid = resolve_penalty_club_id(
order=order,
penalized_user_id=p.PenalizedUserID,
)
if cid and cid != p.ClubID:
if dry:
self.stdout.write(f'would update penalty {p.id}: {p.ClubID} -> {cid}')
else:
p.ClubID = cid
p.save(update_fields=['ClubID'])
updated += 1
self.stdout.write(self.style.SUCCESS(f'罚单 club_id 更新 {updated}'))