fix: 罚单/积分处罚仅归属申请人俱乐部,查询不再按被罚人/订单混入
This commit is contained in:
@@ -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):
|
||||
"""俱乐部下属用户 UID(User.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)
|
||||
|
||||
Reference in New Issue
Block a user