fix: 修复抢单池 clumber 合成时 naive/aware 时间比较报错
统一 czjilu 到期时间与 now 的时区类型,修复 ddhq 500。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -51,6 +51,21 @@ def format_legacy_daoqi(dt):
|
|||||||
return dt.strftime('%Y-%m-%d %H:%M:%S')
|
return dt.strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
|
|
||||||
|
def _normalize_datetime_for_compare(dt):
|
||||||
|
"""统一 naive/aware,避免 daoqi 与 now 比较时报 TypeError。"""
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
if dt is None:
|
||||||
|
return timezone.now()
|
||||||
|
if settings.USE_TZ:
|
||||||
|
if timezone.is_naive(dt):
|
||||||
|
return timezone.make_aware(dt, timezone.get_current_timezone())
|
||||||
|
return dt
|
||||||
|
if timezone.is_aware(dt):
|
||||||
|
return timezone.make_naive(dt, timezone.get_current_timezone())
|
||||||
|
return dt
|
||||||
|
|
||||||
|
|
||||||
def get_bundle_included_ids(club_id, bundle_huiyuan_id):
|
def get_bundle_included_ids(club_id, bundle_huiyuan_id):
|
||||||
from jituan.models import ClubHuiyuanBundleInclude
|
from jituan.models import ClubHuiyuanBundleInclude
|
||||||
|
|
||||||
@@ -128,7 +143,7 @@ def _czjilu_grants_huiyuan_access(yonghu_id, required_huiyuan_id, club_id=None):
|
|||||||
req = normalize_huiyuan_id(required_huiyuan_id)
|
req = normalize_huiyuan_id(required_huiyuan_id)
|
||||||
if not req:
|
if not req:
|
||||||
return False
|
return False
|
||||||
now = timezone.now()
|
now = _normalize_datetime_for_compare(timezone.now())
|
||||||
for order in Czjilu.query.filter(
|
for order in Czjilu.query.filter(
|
||||||
yonghuid=yonghu_id,
|
yonghuid=yonghu_id,
|
||||||
leixing=MEMBER_LEIXING,
|
leixing=MEMBER_LEIXING,
|
||||||
@@ -142,9 +157,7 @@ def _czjilu_grants_huiyuan_access(yonghu_id, required_huiyuan_id, club_id=None):
|
|||||||
if days <= 0:
|
if days <= 0:
|
||||||
_, _, days = club_huiyuan_sellable(cid, order.huiyuan_id, is_trial=is_trial)
|
_, _, days = club_huiyuan_sellable(cid, order.huiyuan_id, is_trial=is_trial)
|
||||||
days = max(int(days or 0), 1)
|
days = max(int(days or 0), 1)
|
||||||
start = order.CreateTime or now
|
start = _normalize_datetime_for_compare(order.CreateTime or now)
|
||||||
if timezone.is_naive(start):
|
|
||||||
start = timezone.make_aware(start, timezone.get_current_timezone())
|
|
||||||
if start + timedelta(days=days) > now:
|
if start + timedelta(days=days) > now:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
@@ -305,7 +318,7 @@ def _build_clumber_from_paid_czjilu(yonghu_id):
|
|||||||
|
|
||||||
items = []
|
items = []
|
||||||
seen = set()
|
seen = set()
|
||||||
now = timezone.now()
|
now = _normalize_datetime_for_compare(timezone.now())
|
||||||
for order in Czjilu.query.filter(
|
for order in Czjilu.query.filter(
|
||||||
yonghuid=yonghu_id,
|
yonghuid=yonghu_id,
|
||||||
leixing=MEMBER_LEIXING,
|
leixing=MEMBER_LEIXING,
|
||||||
@@ -320,9 +333,7 @@ def _build_clumber_from_paid_czjilu(yonghu_id):
|
|||||||
if days <= 0:
|
if days <= 0:
|
||||||
_, _, days = club_huiyuan_sellable(cid, hid, is_trial=is_trial)
|
_, _, days = club_huiyuan_sellable(cid, hid, is_trial=is_trial)
|
||||||
days = max(int(days or 0), 1)
|
days = max(int(days or 0), 1)
|
||||||
start = order.CreateTime or now
|
start = _normalize_datetime_for_compare(order.CreateTime or now)
|
||||||
if timezone.is_naive(start):
|
|
||||||
start = timezone.make_aware(start, timezone.get_current_timezone())
|
|
||||||
daoqi = start + timedelta(days=days)
|
daoqi = start + timedelta(days=days)
|
||||||
if daoqi <= now:
|
if daoqi <= now:
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user