fix: 组队强制本俱乐部隔离,修复组队分账冻结幂等键

组队接口一律校验 X-Club-Id=订单=帖;不走跨店互通。分账 biz_id 按队员区分。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-27 03:25:52 +08:00
parent 193a82930e
commit 454f5abe90
3 changed files with 85 additions and 29 deletions

View File

@@ -315,7 +315,7 @@ def on_order_enter_status_8(order):
@transaction.atomic
def join_recruit(*, recruit_id: int, user_uid: str, game_id: str, request=None):
def join_recruit(*, recruit_id: int, user_uid: str, game_id: str, request=None, require_club_id=None):
from orders.models import TeamRecruit, TeamMember, Order
from users.models import UserDashou
from utils.fadan_utils import check_fadan_qiangdan_eligible
@@ -327,6 +327,9 @@ def join_recruit(*, recruit_id: int, user_uid: str, game_id: str, request=None):
rec = TeamRecruit.objects.select_for_update().filter(id=recruit_id).first()
if not rec:
raise ValueError('组队不存在')
# 组队强制本俱乐部:不认跨店互通抢单
if require_club_id and (rec.club_id or '') != require_club_id:
raise ValueError('仅本俱乐部可加入组队')
if rec.status != TeamRecruit.STATUS_RECRUITING:
raise ValueError('招募已结束')
if int(rec.joined_count or 0) >= int(rec.need_count or 0):
@@ -341,6 +344,8 @@ def join_recruit(*, recruit_id: int, user_uid: str, game_id: str, request=None):
raise ValueError('订单状态不可加入')
if (getattr(order, 'ClubID', '') or '') != rec.club_id:
raise ValueError('俱乐部不匹配')
if require_club_id and (order.ClubID or '') != require_club_id:
raise ValueError('仅本俱乐部订单可加入组队')
# 忙碌 / 罚单
try:
@@ -541,6 +546,7 @@ def settle_team_or_legacy(order, *, set_idle_leader=False) -> bool:
amount=amt,
set_idle_status=True,
increment_chengjiao=True,
settle_biz_id=biz_id,
)
TeamSettleLedger(
club_id=rec.club_id,