From 2387d00b7e5c111a7ac1a2a2a4e0e965cc358e00 Mon Sep 17 00:00:00 2001 From: XingQue Date: Fri, 17 Jul 2026 02:09:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A2=E5=8D=95=E6=B1=A0=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=AF=B9=E6=8A=BC=E9=87=91=E5=8D=95=E6=8C=89=E5=8F=AF=E7=94=A8?= =?UTF-8?q?=E6=8A=BC=E9=87=91=EF=BC=88=E5=90=AB=E5=86=BB=E7=BB=93=E6=B1=A0?= =?UTF-8?q?=EF=BC=89=E4=BC=AA=E8=A3=85=E9=97=A8=E6=A7=9B=E4=B8=BA0?= =?UTF-8?q?=EF=BC=8C=E5=89=8D=E7=AB=AF=E6=97=A0=E9=9C=80=E6=94=B9=E5=8A=A8?= =?UTF-8?q?=E5=8D=B3=E5=8F=AF=E6=8A=A2=E5=8D=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- dingdan/views.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/dingdan/views.py b/dingdan/views.py index 367d98f..06b3670 100644 --- a/dingdan/views.py +++ b/dingdan/views.py @@ -3813,11 +3813,18 @@ class DashouDingdanHuoquView(APIView): 获取可抢订单列表(支持标签筛选) POST /dingdan/ddhq 需要JWT Token认证 + + 押金单特殊处理(前端不改也能抢): + 若当前打手「未冻结押金 + 冻结押金池」足够本单押金要求, + 则响应里把 yajin 写成 0,骗过前端本地校验;库中真实要求不变, + 真正抢单仍由 /dingdan/qiangdan 按可用押金(含冻结)校验。 + 仅处理押金要求(yaoqiuleixing=2),与佣金无关。 """ permission_classes = [IsAuthenticated] def post(self, request): try: + from decimal import Decimal # 1. 获取请求参数 data = request.data leixing_id = data.get('leixing_id') @@ -3825,6 +3832,17 @@ class DashouDingdanHuoquView(APIView): page_size = int(data.get('page_size', 10)) biaoqian_id = data.get('biaoqian_id') + # 当前打手押金快照(未冻结 + 冻结池),仅用于列表展示伪装 + free_yajin = Decimal('0') + frozen_yajin = Decimal('0') + try: + dashou_profile = request.user.dashou_profile + free_yajin = Decimal(str(dashou_profile.yajin or 0)) + frozen_yajin = Decimal(str(getattr(dashou_profile, 'dongjie_chi_yajin', 0) or 0)) + except Exception: + pass + usable_yajin = free_yajin + frozen_yajin + # 2. 构建基础查询条件 base_query = Q(zhuangtai__in=[1, 7]) if leixing_id: @@ -3859,6 +3877,13 @@ class DashouDingdanHuoquView(APIView): # 9. 转换为列表并格式化 dingdan_list = [] for order in dingdan_values: + yaoqiu = order['yaoqiuleixing'] or 0 + # 列表里的 yajin 对押金单 = 订单押金要求(字段名历史遗留,存的是押金门槛) + real_yajin_req = Decimal(str(order['yongjin'] or 0)) + show_yajin = float(real_yajin_req) + # 仅押金单:可用押金(含冻结池)够门槛 → 返回 0,前端不再拦截 + if yaoqiu == 2 and real_yajin_req > 0 and usable_yajin >= real_yajin_req: + show_yajin = 0.0 dingdan_list.append({ 'dingdan_id': order['dingdan_id'], 'zhuangtai': order['zhuangtai'], @@ -3868,9 +3893,9 @@ class DashouDingdanHuoquView(APIView): 'zhiding_id': order['zhiding_id'] or '', 'leixing_id': order['leixing_id'] or 0, 'tupian': order['tupian'] or '', - 'yaoqiuleixing': order['yaoqiuleixing'] or 0, + 'yaoqiuleixing': yaoqiu, 'huiyuan_id': order['huiyuan_id'] or '', - 'yajin': float(order['yongjin']) if order['yongjin'] else 0.0, + 'yajin': show_yajin, 'yongjin': float(order['yongjin']) if order['yongjin'] else 0.0, 'jieshao': order['jieshao'] or '', 'beizhu': order['beizhu'] or '',