fix: 订单列表兼容 leixing_id 与 ProductTypeID 商品类型筛选

This commit is contained in:
XingQue
2026-06-20 01:17:59 +08:00
parent 4ded4ea50a
commit 3fecb9390f
3 changed files with 24 additions and 23 deletions

View File

@@ -501,6 +501,19 @@ def pick_order_id(data):
return str(data.get('OrderID') or data.get('dingdan_id') or '').strip()
def pick_leixing_id(data):
"""兼容前端 leixing_id 与 SDK 字段 ProductTypeID。"""
val = data.get('leixing_id')
if val is None or val == '':
val = data.get('ProductTypeID')
if val is None or val == '':
return None
try:
return int(val)
except (ValueError, TypeError):
return None
def pick_penalty_create_params(data):
"""兼容罚单创建SDK 字段名与旧版拼音字段名。"""
penalized_id = str(data.get('PenalizedUserID') or data.get('beichufa_id') or '').strip()

View File

@@ -48,7 +48,7 @@ from orders.utils import (
)
from shop.utils import calculate_pingtai_and_dianpu_shouyi, validate_shangpin_and_dianpu, update_dianpu_daily_stat
from products.utils import update_shangpin_daily_stat
from backend.utils import update_shangjia_daily, update_dashou_daily_by_action
from backend.utils import update_shangjia_daily, update_dashou_daily_by_action, pick_leixing_id
from rank.services import record_dashou_biaoxian
from rank.utils import check_dashou_biaoqian_required
@@ -2049,8 +2049,8 @@ class ShangjiaDingdanHuoquView(APIView):
page = max(1, int(data.get('page', 1)))
page_size = min(100, max(1, int(data.get('page_size', 10))))
# 🆕 商品类型筛选
leixing_id = data.get('ProductTypeID', None)
# 🆕 商品类型筛选(兼容 leixing_id / ProductTypeID
leixing_id = pick_leixing_id(data)
# 🆕 模糊搜索关键字支持订单ID、订单介绍、游戏昵称、打手ID
keyword = data.get('keyword', '').strip()
@@ -2080,12 +2080,7 @@ class ShangjiaDingdanHuoquView(APIView):
# 6. 商品类型筛选
if leixing_id is not None:
try:
leixing_id_int = int(leixing_id)
base_qs = base_qs.filter(Order__ProductTypeID=leixing_id_int)
except (ValueError, TypeError):
# 如果leixing_id不是有效整数忽略该筛选
pass
base_qs = base_qs.filter(Order__ProductTypeID=leixing_id)
# 7. 模糊搜索支持订单ID、订单介绍、游戏昵称、打手ID
if keyword:
@@ -2977,14 +2972,14 @@ class DashouDingdanHuoquView(APIView):
try:
# 1. 获取请求参数
data = request.data
leixing_id = data.get('ProductTypeID')
leixing_id = pick_leixing_id(data)
page = int(data.get('page', 1))
page_size = int(data.get('page_size', 10))
biaoqian_id = data.get('biaoqian_id')
# 2. 构建基础查询条件
base_query = Q(Status__in=[1, 7])
if leixing_id:
if leixing_id is not None:
base_query &= Q(ProductTypeID=leixing_id)
# 3. 标签筛选先查出符合条件的订单ID避免跨表 JOIN 排序冲突
@@ -3706,7 +3701,7 @@ class DashouDingdanHuoquView1(APIView):
zhuangtai_list = data.get('zhuangtai_list', []) # 可选,默认空列表(全部)
page = max(1, int(data.get('page', 1)))
page_size = min(100, max(1, int(data.get('page_size', 10))))
leixing_id = data.get('ProductTypeID', None) # 可选商品类型ID
leixing_id = pick_leixing_id(data) # 可选商品类型ID
keyword = data.get('keyword', '').strip() # 可选,搜索关键词
except (ValueError, TypeError):
return Response({
@@ -3718,11 +3713,6 @@ class DashouDingdanHuoquView1(APIView):
# 3. 参数默认值与类型修正
if not isinstance(zhuangtai_list, list):
zhuangtai_list = [] # 非列表则视为全部
if leixing_id is not None:
try:
leixing_id = int(leixing_id)
except (ValueError, TypeError):
leixing_id = None
# 4. 构建查询条件
try:
@@ -5737,11 +5727,9 @@ class DashouHuoquLeixingView(APIView):
try:
logger.info(f"打手获取商品类型请求 - 用户ID: {request.user.UserUID}")
# 🔴 查询所有正常状态的商品类型
# 条件shenhezhuangtai=1正常状态
# 排序:先按 paixu 降序(数值大的在前),再按 id 升序
leixing_queryset = ShangpinLeixing.query.filter(
shenhezhuangtai=1 # 🔴 只取正常状态,排除审核专用
# 排除审核专用类型shenhezhuangtai=2兼容历史数据 shenhezhuangtai 为空或 0
leixing_queryset = ShangpinLeixing.query.exclude(
shenhezhuangtai=2
).order_by('-paixu', 'id')
# 🔴 构建返回数据列表

View File

@@ -62,7 +62,7 @@ class BankuaiBiaoqianView(APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
leixing_id = request.data.get('leixing_id')
leixing_id = request.data.get('leixing_id') or request.data.get('ProductTypeID')
if not leixing_id:
return Response({'code': 1, 'msg': '缺少leixing_id'})