fix: 体验/总会员抢单池显示与接单权限

统一 clumber 返回 huiyuanid 并展开总会员子类型;抢单池接口对已具备会员权限的用户将 yaoqiuleixing 置 0,使小程序无需发版即可正常显示分佣并抢单。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-08 13:47:05 +08:00
parent 0062d495c9
commit 3a2b8a2bba
4 changed files with 98 additions and 66 deletions

View File

@@ -63,8 +63,10 @@ def enrich_clumber_item(record):
"""为 clumber 条目附加总会员覆盖的子会员 ID 列表(旧端忽略该字段)。"""
item = {
'huiyuanid': record.huiyuan_id,
'huiyuan_id': record.huiyuan_id,
'huiyuanming': record.jieshao or f'会员{record.huiyuan_id}',
'daoqi': record.daoqi_time,
'is_trial': bool(getattr(record, 'is_trial', False)),
}
if is_bundle_huiyuan(record.huiyuan_id):
item['is_bundle'] = True
@@ -74,6 +76,71 @@ def enrich_clumber_item(record):
return item
def _append_bundle_sub_clumber(items, seen, record, base_item):
"""总会员有效时,为抢单页展开子会员虚拟条目。"""
if not base_item.get('is_bundle'):
return
bundle_hid = str(record.huiyuan_id)
for sub_id in base_item.get('included_huiyuan_ids') or []:
sid = str(sub_id).strip()
if not sid or sid in seen:
continue
seen.add(sid)
items.append({
'huiyuanid': sid,
'huiyuan_id': sid,
'huiyuanming': base_item.get('huiyuanming', ''),
'daoqi': base_item.get('daoqi'),
'from_bundle': bundle_hid,
'is_trial': bool(getattr(record, 'is_trial', False)),
})
def build_user_clumber(yonghu_id):
"""
构建抢单页可用的 clumber 列表。
- 仅包含未过期且状态有效的会员(含体验会员)
- 总会员自动展开所覆盖的子会员 ID
- 同时返回 huiyuanid / huiyuan_id兼容小程序各页面字段名
"""
items = []
seen = set()
for record in Huiyuangoumai.query.filter(yonghu_id=yonghu_id):
if record.jiance_shifou_daoqi():
continue
if record.huiyuan_zhuangtai != 1:
continue
base = enrich_clumber_item(record)
hid = str(record.huiyuan_id)
if hid not in seen:
seen.add(hid)
items.append(base)
_append_bundle_sub_clumber(items, seen, record, base)
return items
def build_auth_clumber(yonghu_id):
"""登录/注册返回的 clumber保留状态字段并补齐抢单页所需的 huiyuanid。"""
items = []
seen = set()
for record in Huiyuangoumai.query.filter(yonghu_id=yonghu_id):
shifou_daoqi = record.jiance_shifou_daoqi()
base = enrich_clumber_item(record)
base.update({
'huiyuan_zhuangtai': record.huiyuan_zhuangtai,
'daoqi_time': record.daoqi_time.isoformat() if record.daoqi_time else None,
'shifou_daoqi': shifou_daoqi,
'jieshao': record.jieshao,
})
hid = str(record.huiyuan_id)
if hid not in seen:
seen.add(hid)
items.append(base)
if not shifou_daoqi and record.huiyuan_zhuangtai == 1:
_append_bundle_sub_clumber(items, seen, record, base)
return items
def save_bundle_includes(club_id, bundle_huiyuan_id, included_ids):
"""保存俱乐部总会员包含的子会员(须为本俱乐部已上架的普通会员)。"""
from jituan.models import ClubHuiyuanBundleInclude, ClubHuiyuanPrice