fix: 修复 rollback --since 日期字符串解析报错

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-08 16:26:19 +08:00
parent c464c31140
commit 627eeeb29b
2 changed files with 24 additions and 3 deletions

View File

@@ -25,6 +25,7 @@ from jituan.services.member_recharge import (
MEMBER_PAID_STATUS, MEMBER_PAID_STATUS,
_czjilu_entitlement_end, _czjilu_entitlement_end,
_czjilu_entitlement_revoked, _czjilu_entitlement_revoked,
_parse_since_option,
club_huiyuan_sellable, club_huiyuan_sellable,
_order_is_trial_like, _order_is_trial_like,
) )
@@ -58,7 +59,8 @@ def _suspected_repair_restore(rec, since=None):
且存在匹配充值单原定期限在 UpdateTime 之前已结束。 且存在匹配充值单原定期限在 UpdateTime 之前已结束。
""" """
updated = _normalize_datetime_for_compare(rec.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 return None
daoqi = _normalize_datetime_for_compare(rec.daoqi_time) daoqi = _normalize_datetime_for_compare(rec.daoqi_time)
gap = daoqi - updated gap = daoqi - updated

View File

@@ -17,7 +17,7 @@ import hashlib
import logging import logging
import random import random
import string import string
from datetime import timedelta from datetime import datetime, timedelta
from decimal import Decimal from decimal import Decimal
import defusedxml.ElementTree as ET 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) 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): def is_suspected_bug_repair_restore(rec, since=None):
""" """
Bug repair 指纹UpdateTime 时将 daoqi 设为 UpdateTime+days 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 from jituan.services.huiyuan_bundle import _normalize_datetime_for_compare
updated = _normalize_datetime_for_compare(rec.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 return None
daoqi = _normalize_datetime_for_compare(rec.daoqi_time) daoqi = _normalize_datetime_for_compare(rec.daoqi_time)
gap_days = (daoqi - updated).days gap_days = (daoqi - updated).days