fix: 俱乐部ID统一解析;会员支付/分红/展示按club隔离
This commit is contained in:
@@ -82,9 +82,29 @@ def filter_queryset_by_club(qs, request, club_field='club_id'):
|
||||
return qs.filter(**{club_field: club_id})
|
||||
|
||||
|
||||
def club_id_for_write(request):
|
||||
def resolve_effective_club_id(request, user=None):
|
||||
"""
|
||||
小程序/API 实际生效俱乐部(展示价、支付价、分红须一致)。
|
||||
优先级:Header X-Club-Id > 用户归属 ClubID > 默认 xq。
|
||||
勿用 middleware 注入的 request.club_id(无 Header 时恒为 xq)。
|
||||
"""
|
||||
header = request.META.get(f'HTTP_{CLUB_HEADER.upper().replace("-", "_")}', '')
|
||||
if not header and hasattr(request, 'headers'):
|
||||
header = request.headers.get(CLUB_HEADER, '')
|
||||
header = (header or '').strip()
|
||||
if header:
|
||||
return header
|
||||
if user is not None:
|
||||
from jituan.services.club_user import get_user_club_id
|
||||
user_club = get_user_club_id(user)
|
||||
if user_club:
|
||||
return user_club
|
||||
return CLUB_ID_DEFAULT
|
||||
|
||||
|
||||
def club_id_for_write(request, user=None):
|
||||
"""写入业务流水时使用的 club_id(集团汇总视图写入仍须指定目标 club)。"""
|
||||
return resolve_club_id_from_request(request)
|
||||
return resolve_effective_club_id(request, user)
|
||||
|
||||
|
||||
def orders_for_request(request):
|
||||
|
||||
@@ -12,7 +12,7 @@ def resolve_club_id_for_write(request=None, user=None, club_id=None):
|
||||
if club_id:
|
||||
return club_id
|
||||
if request is not None:
|
||||
return club_id_for_write(request)
|
||||
return club_id_for_write(request, user)
|
||||
if user is not None:
|
||||
return get_user_club_id(user)
|
||||
return CLUB_ID_DEFAULT
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
"""轮播 / 公告 / 弹窗按俱乐部读取与写入。"""
|
||||
from jituan.constants import CLUB_ID_DEFAULT, DATA_SCOPE_ALL
|
||||
from jituan.services.club_context import filter_queryset_by_club, resolve_club_id_from_request, resolve_club_scope
|
||||
from jituan.services.club_context import (
|
||||
filter_queryset_by_club,
|
||||
resolve_club_id_from_request,
|
||||
resolve_club_scope,
|
||||
resolve_effective_club_id,
|
||||
)
|
||||
from rest_framework.response import Response
|
||||
|
||||
# 定稿 B 方案 page_key
|
||||
@@ -46,16 +51,23 @@ def forbid_popup_page_out_of_scope(request, page):
|
||||
return None
|
||||
|
||||
|
||||
def _display_club_id(request):
|
||||
user = getattr(request, 'user', None)
|
||||
if user is not None and getattr(user, 'is_authenticated', False):
|
||||
return resolve_effective_club_id(request, user)
|
||||
return resolve_effective_club_id(request, None)
|
||||
|
||||
|
||||
def get_gonggao_content(request, notice_type=1):
|
||||
from config.models import Gonggao
|
||||
club_id = resolve_club_id_from_request(request)
|
||||
club_id = _display_club_id(request)
|
||||
obj = Gonggao.query.filter(club_id=club_id, NoticeType=notice_type).first()
|
||||
return obj.Content if obj and obj.Content else ''
|
||||
|
||||
|
||||
def get_lunbo_urls(request, page_key=None, image_type=1):
|
||||
from config.models import Lunbo
|
||||
club_id = resolve_club_id_from_request(request)
|
||||
club_id = _display_club_id(request)
|
||||
pk = normalize_page_key(page_key, image_type=image_type)
|
||||
qs = Lunbo.query.filter(club_id=club_id, ImageType=image_type, page_key=pk)
|
||||
return [row.ImageURL for row in qs.order_by('id') if row.ImageURL]
|
||||
@@ -67,13 +79,11 @@ def list_response_meta(request):
|
||||
|
||||
|
||||
def get_tupianpeizhi_url(request, image_type):
|
||||
"""按俱乐部读图片配置(无则 xq 回退,避免 xzj 未配时全空)。"""
|
||||
"""按俱乐部读图片配置(各俱乐部独立,不回退 xq,避免串台)。"""
|
||||
from config.models import Tupianpeizhi
|
||||
|
||||
club_id = resolve_club_id_from_request(request)
|
||||
club_id = _display_club_id(request)
|
||||
row = Tupianpeizhi.query.filter(club_id=club_id, ImageType=image_type).first()
|
||||
if not row and club_id != CLUB_ID_DEFAULT:
|
||||
row = Tupianpeizhi.query.filter(club_id=CLUB_ID_DEFAULT, ImageType=image_type).first()
|
||||
return (row.ImageURL or '').strip() if row else ''
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user