From 08732feecf76876349c91413babf02ec81b5e449 Mon Sep 17 00:00:00 2001 From: XingQue Date: Tue, 11 Aug 2026 10:09:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=8A=E6=97=A5=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=81=87=E5=8D=95=E6=89=B9=E6=AC=A1=E5=B9=B6=E5=8F=91=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E9=98=B2=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- orders/services/today_orders.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/orders/services/today_orders.py b/orders/services/today_orders.py index 4668c32..5e2ddc6 100644 --- a/orders/services/today_orders.py +++ b/orders/services/today_orders.py @@ -7,6 +7,7 @@ from datetime import datetime, time, timedelta from decimal import Decimal from django.conf import settings +from django.db import IntegrityError from django.db.models import Count, Q from django.utils import timezone @@ -51,7 +52,12 @@ def get_or_create_config(club_id: str) -> TodayOrderShowConfig: if row: return row row = TodayOrderShowConfig(club_id=cid, mix_enabled=False, batch_size=5, interval_seconds=120) - row.save() + try: + row.save() + except IntegrityError: + row = TodayOrderShowConfig.query.filter(club_id=cid).first() + if not row: + raise return row @@ -143,7 +149,15 @@ def _pick_fake_batch(club_id: str, cfg: TodayOrderShowConfig) -> list[TodayOrder state = TodayOrderFakeBatchState(club_id=club_id) state.last_shuffle_at = now state.fake_ids = ids - state.save() + try: + state.save() + except IntegrityError: + # 并发首次创建同一 club 批次行:改更新已有行 + state = TodayOrderFakeBatchState.query.filter(club_id=club_id).first() + if state: + state.last_shuffle_at = now + state.fake_ids = ids + state.save() return chosen id_set = set(ids) return [x for x in pool if int(x.id) in id_set]