From 627eeeb29b18e52d6c643e148fca636c9c07034d Mon Sep 17 00:00:00 2001 From: XingQue Date: Wed, 8 Jul 2026 16:26:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20rollback=20--since?= =?UTF-8?q?=20=E6=97=A5=E6=9C=9F=E5=AD=97=E7=AC=A6=E4=B8=B2=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- .../commands/audit_member_bug_impact.py | 4 +++- jituan/services/member_recharge.py | 23 +++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/jituan/management/commands/audit_member_bug_impact.py b/jituan/management/commands/audit_member_bug_impact.py index 18c23e2..324f98f 100644 --- a/jituan/management/commands/audit_member_bug_impact.py +++ b/jituan/management/commands/audit_member_bug_impact.py @@ -25,6 +25,7 @@ from jituan.services.member_recharge import ( MEMBER_PAID_STATUS, _czjilu_entitlement_end, _czjilu_entitlement_revoked, + _parse_since_option, club_huiyuan_sellable, _order_is_trial_like, ) @@ -58,7 +59,8 @@ def _suspected_repair_restore(rec, since=None): 且存在匹配充值单原定期限在 UpdateTime 之前已结束。 """ updated = _normalize_datetime_for_compare(rec.UpdateTime) - if since and updated < _normalize_datetime_for_compare(since): + since_dt = _parse_since_option(since) + if since_dt and updated < since_dt: return None daoqi = _normalize_datetime_for_compare(rec.daoqi_time) gap = daoqi - updated diff --git a/jituan/services/member_recharge.py b/jituan/services/member_recharge.py index 76e809b..d59efee 100644 --- a/jituan/services/member_recharge.py +++ b/jituan/services/member_recharge.py @@ -17,7 +17,7 @@ import hashlib import logging import random import string -from datetime import timedelta +from datetime import datetime, timedelta from decimal import Decimal import defusedxml.ElementTree as ET @@ -696,6 +696,24 @@ def order_purchase_days_locked(order, club_id=None): return max(int(days or 0), 1) +def _parse_since_option(since): + """管理命令 --since 字符串 → 可比较的 datetime。""" + from django.utils.dateparse import parse_date, parse_datetime + from jituan.services.huiyuan_bundle import _normalize_datetime_for_compare + + if not since: + return None + if not isinstance(since, str): + return _normalize_datetime_for_compare(since) + dt = parse_datetime(since) + if dt is None: + d = parse_date(since) + if d is None: + return None + dt = datetime.combine(d, datetime.min.time()) + return _normalize_datetime_for_compare(dt) + + def is_suspected_bug_repair_restore(rec, since=None): """ Bug repair 指纹:UpdateTime 时将 daoqi 设为 UpdateTime+days, @@ -705,7 +723,8 @@ def is_suspected_bug_repair_restore(rec, since=None): from jituan.services.huiyuan_bundle import _normalize_datetime_for_compare updated = _normalize_datetime_for_compare(rec.UpdateTime) - if since and updated < _normalize_datetime_for_compare(since): + since_dt = _parse_since_option(since) + if since_dt and updated < since_dt: return None daoqi = _normalize_datetime_for_compare(rec.daoqi_time) gap_days = (daoqi - updated).days