fix: 俱乐部类型排序隔离;商家派单仅本店已上架类型
单店排序写入 ClubShangpinLeixingConfig;sjspleixing/派单/链接/模板校验本店上架。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
be2892f419
commit
c10727c356
7 files changed
+113
-31
No files matched your search
+27
-23
@@ -116,21 +116,23 @@ class ShangpinLeixingView(APIView):
|
||||
return Response({'code': 403, 'msg': '非商家或有效客服,无权获取订单类型', 'data': []})
|
||||
|
||||
try:
|
||||
# 1. 查询审核通过且抢单要求类型为1的商品类型,按排序权重升序
|
||||
shangpin_queryset = ShangpinLeixing.query.filter(
|
||||
yaoqiuleixing=1,
|
||||
shenhezhuangtai=1
|
||||
).select_related('bankuai').order_by('paixu')
|
||||
from jituan.services.club_shangpin_leixing import build_club_leixing_list_for_api
|
||||
|
||||
# 2. 收集所有涉及到的板块ID
|
||||
bankuai_ids = shangpin_queryset.values_list('bankuai_id', flat=True).distinct()
|
||||
# 仅本俱乐部已上架类型(生成链接 / 自定义发单 / 常规单统一入口)
|
||||
club_id = resolve_club_id_from_request(request)
|
||||
club_rows = [
|
||||
r for r in build_club_leixing_list_for_api(club_id)
|
||||
if int(r.get('yaoqiuleixing') or 0) == 1
|
||||
and int(r.get('shenhezhuangtai') or 0) == 1
|
||||
]
|
||||
|
||||
# 3. 查询这些板块下的所有称号(每个称号绑定到一个板块)
|
||||
bankuai_ids = {
|
||||
r.get('bankuai_id') for r in club_rows if r.get('bankuai_id')
|
||||
}
|
||||
chenghao_list = Chenghao.query.filter(
|
||||
bankuai_id__in=bankuai_ids
|
||||
).values('id', 'mingcheng', 'texiao_miaoshu', 'bankuai_id')
|
||||
).values('id', 'mingcheng', 'texiao_miaoshu', 'bankuai_id') if bankuai_ids else []
|
||||
|
||||
# 4. 构建 板块ID -> 称号列表 的映射(确保准确关联)
|
||||
bankuai_chenghao_map = {}
|
||||
for ch in chenghao_list:
|
||||
bid = ch['bankuai_id']
|
||||
@@ -139,21 +141,18 @@ class ShangpinLeixingView(APIView):
|
||||
bankuai_chenghao_map[bid].append({
|
||||
'id': ch['id'],
|
||||
'mingcheng': ch['mingcheng'],
|
||||
'texiao_json': ch['texiao_miaoshu'] # 前端 chenghao-tag 组件需要
|
||||
'texiao_json': ch['texiao_miaoshu'],
|
||||
})
|
||||
|
||||
# 5. 组装最终数据
|
||||
data_list = []
|
||||
for sp in shangpin_queryset:
|
||||
item = {
|
||||
'id': sp.id,
|
||||
'yaoqiuleixing': sp.yaoqiuleixing,
|
||||
'huiyuan_id': sp.huiyuan_id,
|
||||
'jieshao': sp.jieshao,
|
||||
# 当前类型所属板块的称号列表(无板块则为空数组)
|
||||
'chenghaoList': bankuai_chenghao_map.get(sp.bankuai_id, [])
|
||||
}
|
||||
data_list.append(item)
|
||||
for sp in club_rows:
|
||||
data_list.append({
|
||||
'id': sp['id'],
|
||||
'yaoqiuleixing': sp.get('yaoqiuleixing'),
|
||||
'huiyuan_id': sp.get('huiyuan_id'),
|
||||
'jieshao': sp.get('jieshao') or '',
|
||||
'chenghaoList': bankuai_chenghao_map.get(sp.get('bankuai_id'), []),
|
||||
})
|
||||
|
||||
return Response({
|
||||
'code': 200,
|
||||
@@ -214,13 +213,18 @@ class ShangjiaPaifaView(APIView):
|
||||
except ValueError:
|
||||
return Response({'code': 400, 'msg': '价格格式错误'})
|
||||
|
||||
# ----- 5. 商品类型 -----
|
||||
# ----- 5. 商品类型(必须本俱乐部已上架)-----
|
||||
try:
|
||||
shangpin_type = ShangpinLeixing.query.get(id=shangpin_type_id)
|
||||
except ShangpinLeixing.DoesNotExist:
|
||||
logger.error(f"商品类型不存在: {shangpin_type_id}")
|
||||
return Response({'code': 400, 'msg': '商品类型不存在'})
|
||||
|
||||
from jituan.services.club_shangpin_leixing import is_leixing_enabled_for_club
|
||||
_dispatch_club = resolve_club_id_from_request(request)
|
||||
if not is_leixing_enabled_for_club(_dispatch_club, shangpin_type.id):
|
||||
return Response({'code': 400, 'msg': '该商品类型未在本俱乐部上架'})
|
||||
|
||||
# ----- 6. 押金 / 会员模式决定 -----
|
||||
final_yongjin = None
|
||||
if commission_enabled and commission_value_str:
|
||||
|
||||
Reference in new issue
Block a user