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 '',