fix: 体验会员按正式会员返回抢单池数据 + 修复 MerchantStaffMember

clumber/dashouxinxi 有效期内体验会员与正式会员同格式返回;ddhq 保持原 yaoqiuleixing/huiyuan_id 供老端匹配;补 merchant-staff 缺 import。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-08 14:09:12 +08:00
parent 86e7a60642
commit eedd5fbd46
2 changed files with 11 additions and 21 deletions

View File

@@ -147,35 +147,24 @@ def resolve_order_membership_id(order_dict):
def resolve_grab_pool_member_display(order_dict, yonghu_id, club_id=None): def resolve_grab_pool_member_display(order_dict, yonghu_id, club_id=None):
""" """
老小程序抢单池适配(仅改接口返回,无需发版): 抢单池订单字段:保持原 yaoqiuleixing / huiyuan_id供老端用 clumber 匹配。
- 老端展示yaoqiuleixing==1 && huiyuan_id 时才判「未开通会员」 体验会员已在 clumber 中按正式会员返回;抢单权限由 /dingdan/qiangdan 服务端校验。
- 老端抢单yaoqiuleixing==1 时校验会员
已有权限时统一返回 yaoqiuleixing=0、huiyuan_id=''
""" """
grab_req = int(order_dict.get('GrabRequirement') or 0) grab_req = int(order_dict.get('GrabRequirement') or 0)
if grab_req != 1: membership_id = resolve_order_membership_id(order_dict)
return grab_req, '', True return grab_req, membership_id, True
required_ids = resolve_order_membership_ids(order_dict)
if not required_ids:
return 0, '', True
has_access = user_has_huiyuan_access_any(yonghu_id, required_ids, club_id=club_id)
if has_access:
return 0, '', True
return 1, required_ids[0], False
def enrich_clumber_item(record): def enrich_clumber_item(record):
"""老端 clumber 条目:必须有 huiyuanid + 字符串 daoqi""" """老端 clumber:有效期内体验会员与正式会员返回格式完全一致"""
daoqi_str = format_legacy_daoqi(record.daoqi_time) daoqi_str = format_legacy_daoqi(record.daoqi_time)
item = { item = {
'huiyuanid': record.huiyuan_id, 'huiyuanid': record.huiyuan_id,
'huiyuan_id': record.huiyuan_id, 'huiyuan_id': record.huiyuan_id,
'huiyuanming': record.jieshao or f'会员{record.huiyuan_id}', 'huiyuanming': record.jieshao or f'会员{record.huiyuan_id}',
'daoqi': daoqi_str, 'daoqi': daoqi_str,
'is_trial': bool(getattr(record, 'is_trial', False)), 'huiyuan_zhuangtai': 1,
'shifou_daoqi': False,
} }
if is_bundle_huiyuan(record.huiyuan_id): if is_bundle_huiyuan(record.huiyuan_id):
item['is_bundle'] = True item['is_bundle'] = True
@@ -211,7 +200,8 @@ def _append_bundle_sub_clumber(items, seen, record, base_item):
'huiyuanming': base_item.get('huiyuanming', ''), 'huiyuanming': base_item.get('huiyuanming', ''),
'daoqi': base_item.get('daoqi', ''), 'daoqi': base_item.get('daoqi', ''),
'from_bundle': bundle_hid, 'from_bundle': bundle_hid,
'is_trial': bool(getattr(record, 'is_trial', False)), 'huiyuan_zhuangtai': 1,
'shifou_daoqi': False,
} }
_append_clumber_id_variants(items, seen, sub_base, sid) _append_clumber_id_variants(items, seen, sub_base, sid)
@@ -248,7 +238,7 @@ def build_auth_clumber(yonghu_id):
shifou_daoqi = record.jiance_shifou_daoqi() shifou_daoqi = record.jiance_shifou_daoqi()
base = enrich_clumber_item(record) base = enrich_clumber_item(record)
base.update({ base.update({
'huiyuan_zhuangtai': record.huiyuan_zhuangtai, 'huiyuan_zhuangtai': 1 if (not shifou_daoqi and record.huiyuan_zhuangtai == 1) else record.huiyuan_zhuangtai,
'daoqi_time': record.daoqi_time.isoformat() if record.daoqi_time else None, 'daoqi_time': record.daoqi_time.isoformat() if record.daoqi_time else None,
'shifou_daoqi': shifou_daoqi, 'shifou_daoqi': shifou_daoqi,
'jieshao': record.jieshao, 'jieshao': record.jieshao,

View File

@@ -15,7 +15,7 @@ from django.utils import timezone
from config.models import ShangjiaLianjie, ShangjiaMoban from config.models import ShangjiaLianjie, ShangjiaMoban
from merchant_ops.constants import ACTOR_STAFF from merchant_ops.constants import ACTOR_STAFF
from merchant_ops.models import MerchantOrderDispatch from merchant_ops.models import MerchantOrderDispatch, MerchantStaffMember
from merchant_ops.services.wallet import check_wallet_available, confirm_dispatch_deduct from merchant_ops.services.wallet import check_wallet_available, confirm_dispatch_deduct
from orders.models import MerchantOrderExt, Order, CommissionRate from orders.models import MerchantOrderExt, Order, CommissionRate
from products.models import ShangpinLeixing from products.models import ShangpinLeixing