diff --git a/jituan/services/club_penalty.py b/jituan/services/club_penalty.py index acba680..8c96bcf 100644 --- a/jituan/services/club_penalty.py +++ b/jituan/services/club_penalty.py @@ -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)