fix: 罚单/积分处罚仅归属申请人俱乐部,查询不再按被罚人/订单混入

This commit is contained in:
XingQue
2026-06-27 18:26:22 +08:00
parent a6d32f848e
commit 65477592af

View File

@@ -29,7 +29,7 @@ def resolve_penalty_club_id(
):
"""
创建金额罚单时写入 club_id。
归属:申请人俱乐部 > 当前操作人/请求俱乐部 > 订单俱乐部 > 被罚人俱乐部 > xq
只认申请人/操作人俱乐部,不看订单、不看被罚人(交款打手)
"""
cid = _club_id_from_user_uid(applicant_id)
if cid:
@@ -42,15 +42,6 @@ def resolve_penalty_club_id(
if cid:
return cid
if order is not None:
cid = getattr(order, 'ClubID', None)
if cid:
return cid
cid = _club_id_from_user_uid(penalized_user_id)
if cid:
return cid
return CLUB_ID_DEFAULT
@@ -63,7 +54,7 @@ def resolve_penalty_record_club_id(
):
"""
创建积分处罚chufajilu时写入 club_id。
归属规则与金额罚单一致:申请人俱乐部优先
只认申请人/操作人俱乐部,不看订单、不看被罚打手
"""
cid = _club_id_from_user_uid(applicant_id)
if cid:
@@ -76,16 +67,6 @@ def resolve_penalty_record_club_id(
if cid:
return cid
if order_id:
from orders.models import Order
o = Order.query.filter(OrderID=order_id).first()
if o and getattr(o, 'ClubID', None):
return o.ClubID
cid = _club_id_from_user_uid(player_id)
if cid:
return cid
return CLUB_ID_DEFAULT
@@ -113,55 +94,28 @@ def resolve_gsfenhong_club_id(dingdan_id=None, dashouid=None, order=None, czjilu
return CLUB_ID_DEFAULT
def _collect_club_user_ids(club_id):
"""俱乐部下属用户 UIDUser.ClubID + 微信绑定 club"""
from users.business_models import User
from jituan.models import UserWxOpenid
ids = set(User.query.filter(ClubID=club_id).values_list('UserUID', flat=True))
ids.update(UserWxOpenid.query.filter(club_id=club_id).values_list('yonghuid', flat=True))
return [x for x in ids if x]
def _filter_club_penalty_like_qs(qs, request, user_id_field, order_id_field):
"""罚单/积分处罚共用ClubID + 被罚人 + 关联订单 归属当前俱乐部。"""
def _filter_by_penalty_club_id(qs, request):
"""
罚单/积分处罚列表:只按记录自身 club_id=申请人俱乐部)过滤。
不按被罚人、不按订单、不按交款人俱乐部掺数据。
"""
if resolve_club_scope(request) == DATA_SCOPE_ALL:
return qs
club_id = resolve_club_id_from_request(request)
if not hasattr(qs.model, 'ClubID'):
return qs
from django.db.models import Q
from orders.models import Order
parts = []
if hasattr(qs.model, 'ClubID'):
if club_id == CLUB_ID_DEFAULT:
parts.append(
Q(ClubID=club_id) | Q(ClubID__isnull=True) | Q(ClubID='')
)
else:
parts.append(Q(ClubID=club_id))
user_ids = _collect_club_user_ids(club_id)
if user_ids:
parts.append(Q(**{f'{user_id_field}__in': user_ids}))
order_q = Q(ClubID=club_id)
club_id = resolve_club_id_from_request(request)
if club_id == CLUB_ID_DEFAULT:
order_q = Q(ClubID=club_id) | Q(ClubID__isnull=True) | Q(ClubID='')
order_ids = list(Order.query.filter(order_q).values_list('OrderID', flat=True))
if order_ids:
parts.append(Q(**{f'{order_id_field}__in': order_ids}))
if not parts:
return qs.none()
combined = parts[0]
for p in parts[1:]:
combined |= p
return qs.filter(combined)
return qs.filter(
Q(ClubID=club_id) | Q(ClubID__isnull=True) | Q(ClubID='')
)
return qs.filter(ClubID=club_id)
def filter_penalty_qs(qs, request):
return _filter_club_penalty_like_qs(
qs, request, user_id_field='PenalizedUserID', order_id_field='RelatedOrderID'
)
return _filter_by_penalty_club_id(qs, request)
def filter_gsfenhong_qs(qs, request):
@@ -182,7 +136,5 @@ def forbid_penalty_out_of_scope(request, penalty):
def filter_penalty_record_qs(qs, request):
"""积分处罚记录chufajilu俱乐部过滤。"""
return _filter_club_penalty_like_qs(
qs, request, user_id_field='PlayerID', order_id_field='OrderID'
)
"""积分处罚记录chufajilu申请人俱乐部 club_id 过滤。"""
return _filter_by_penalty_club_id(qs, request)