From 3fecb9390fb82d257d949e41a17c41688ed4bcc5 Mon Sep 17 00:00:00 2001 From: XingQue Date: Sat, 20 Jun 2026 01:17:59 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AE=A2=E5=8D=95=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=20leixing=5Fid=20=E4=B8=8E=20ProductTypeID?= =?UTF-8?q?=20=E5=95=86=E5=93=81=E7=B1=BB=E5=9E=8B=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/utils.py | 13 +++++++++++++ orders/views.py | 32 ++++++++++---------------------- rank/views.py | 2 +- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/backend/utils.py b/backend/utils.py index 17216c1..9cb54c7 100644 --- a/backend/utils.py +++ b/backend/utils.py @@ -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() diff --git a/orders/views.py b/orders/views.py index aa4ca4c..81ad512 100644 --- a/orders/views.py +++ b/orders/views.py @@ -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') # 🔴 构建返回数据列表 diff --git a/rank/views.py b/rank/views.py index 2c90d3e..323b23e 100644 --- a/rank/views.py +++ b/rank/views.py @@ -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'})