From aaa745baf43973dbdff975bde0c4c4b9ffd40be9 Mon Sep 17 00:00:00 2001 From: XingQue Date: Wed, 8 Jul 2026 15:34:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20dddhq=E4=B8=8Edashouxinxi=E6=AF=8F?= =?UTF-8?q?=E6=AC=A1=E8=AF=B7=E6=B1=82=E5=90=8C=E6=AD=A5=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E4=BC=9A=E5=91=98clumber?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 抢单池拉单前先 sync 权益;老端依赖 yaoqiuleixing=0 与 clumber 即时更新。 Co-authored-by: Cursor --- jituan/services/huiyuan_bundle.py | 22 ++++++++++++++++------ orders/views/dashou.py | 17 ++++++++++------- users/views/user_info.py | 6 +++--- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/jituan/services/huiyuan_bundle.py b/jituan/services/huiyuan_bundle.py index 09e81b5..6c78151 100644 --- a/jituan/services/huiyuan_bundle.py +++ b/jituan/services/huiyuan_bundle.py @@ -186,6 +186,9 @@ def resolve_order_membership_ids(order_dict): ) if mid: ids.append(mid) + grab_req = int(order_dict.get('GrabRequirement') or order_dict.get('yaoqiuleixing') or 0) + if grab_req != 1: + return ids leixing_id = order_dict.get('ProductTypeID') or order_dict.get('leixing_id') if leixing_id: try: @@ -357,12 +360,12 @@ def _build_clumber_from_paid_czjilu(yonghu_id): def ensure_grab_pool_clumber(yonghu_id, club_id=None): """ - 【仅抢单池 dddhq 展示】体验会员与正式会员同格式写入 clumber。 - 不得用于提现;提现须 check_dashou_has_formal_huiyuan_for_withdraw。 + 【ddhq / dashouxinxi 展示专用】每次请求:先同步已付会员权益,再生成 clumber(体验=正式)。 + 提现校验不得使用此函数。 """ from jituan.services.member_recharge import sync_member_entitlements_for_user - sync_member_entitlements_for_user(yonghu_id) + sync_member_entitlements_for_user(yonghu_id, limit=30) items = _build_user_clumber_core(yonghu_id) extra = _build_clumber_from_paid_czjilu(yonghu_id) if extra: @@ -382,6 +385,14 @@ def ensure_grab_pool_clumber(yonghu_id, club_id=None): return bool(items), items +def refresh_grab_pool_membership_state(yonghu_id, club_id=None): + """ + 抢单池/打手资料:请求入口统一刷新会员状态(同步权益 + clumber)。 + 供 /dingdan/ddhq、/yonghu/dashouxinxi、登录 clumber 调用。 + """ + return ensure_grab_pool_clumber(yonghu_id, club_id=club_id) + + def build_user_clumber(yonghu_id, club_id=None): """ 老小程序抢单页 clumber(体验=正式格式)。 @@ -392,9 +403,8 @@ def build_user_clumber(yonghu_id, club_id=None): def build_auth_clumber(yonghu_id, club_id=None): - """登录/刷新 clumber:与 dddhq 同源(含体验会员 czjilu 兜底),老端只认 huiyuanid。""" - _, items = ensure_grab_pool_clumber(yonghu_id, club_id=club_id) - return items + """登录 clumber:与 dddhq / dashouxinxi 同源,每次刷新会员状态。""" + return refresh_grab_pool_membership_state(yonghu_id, club_id=club_id)[1] def save_bundle_includes(club_id, bundle_huiyuan_id, included_ids): diff --git a/orders/views/dashou.py b/orders/views/dashou.py index 4f86ade..30bd943 100644 --- a/orders/views/dashou.py +++ b/orders/views/dashou.py @@ -111,6 +111,16 @@ class DashouDingdanHuoquView(APIView): page_size = int(data.get('page_size', 10)) biaoqian_id = data.get('biaoqian_id') + club_id = resolve_effective_club_id(request, getattr(request, 'user', None)) + yonghuid = request.user.UserUID + from jituan.services.huiyuan_bundle import ( + refresh_grab_pool_membership_state, + resolve_grab_pool_member_display, + ) + _has_member, user_clumber = refresh_grab_pool_membership_state( + yonghuid, club_id=club_id, + ) + # 2. 构建基础查询条件 base_query = Q(Status__in=[1, 7]) if leixing_id is not None: @@ -296,13 +306,6 @@ class DashouDingdanHuoquView(APIView): club_id = resolve_effective_club_id(request, getattr(request, 'user', None)) identity_tag_map = batch_identity_tags(club_id, identity_pairs) if identity_pairs else {} - from jituan.services.huiyuan_bundle import ( - ensure_grab_pool_clumber, - resolve_grab_pool_member_display, - ) - yonghuid = request.user.UserUID - _has_member, user_clumber = ensure_grab_pool_clumber(yonghuid, club_id=club_id) - # 12. 格式化返回数据 formatted_list = [] for order in dingdan_list: diff --git a/users/views/user_info.py b/users/views/user_info.py index b3cfc75..6769443 100644 --- a/users/views/user_info.py +++ b/users/views/user_info.py @@ -337,12 +337,12 @@ class DashouXinxiAPIView(APIView): 'chenghao': dashou_profile.chenghao or '', } - # 4. 查询会员信息(老端 clumber:huiyuanid + daoqi,体验=正式) + # 4. 查询会员信息(每次请求同步权益 + clumber,体验=正式) try: - from jituan.services.huiyuan_bundle import build_user_clumber + from jituan.services.huiyuan_bundle import refresh_grab_pool_membership_state from jituan.services.club_context import resolve_effective_club_id cid = resolve_effective_club_id(request, request.user) - huiyuan_list = build_user_clumber(yonghuid, club_id=cid) + _, huiyuan_list = refresh_grab_pool_membership_state(yonghuid, club_id=cid) except Exception: huiyuan_list = []