抢单池列表对押金单按可用押金(含冻结池)伪装门槛为0,前端无需改动即可抢单。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-17 02:09:31 +08:00
parent 27d203810e
commit 2387d00b7e

View File

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