feat: 抢单大厅假单池,仅改造 ddhq 接口
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
107
orders/services/fake_order_pool.py
Normal file
107
orders/services/fake_order_pool.py
Normal file
@@ -0,0 +1,107 @@
|
||||
"""抢单大厅假单:无资格/封禁打手仅展示假数据。"""
|
||||
from decimal import Decimal
|
||||
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from rest_framework.response import Response
|
||||
|
||||
from backend.utils import fmt_datetime, pick_leixing_id
|
||||
from jituan.services.club_context import resolve_effective_club_id
|
||||
from jituan.services.dashou_exam import user_has_active_member
|
||||
from orders.models import FakeGrabOrder
|
||||
|
||||
DEFAULT_DISPATCHER_AVATAR = 'a_long/morentouxiang.jpg'
|
||||
|
||||
|
||||
def dashou_should_use_fake_pool(user):
|
||||
"""
|
||||
打手是否只能看假单:
|
||||
- 账号封禁(zhanghaozhuangtai != 1)
|
||||
- 或未开通有效会员 且 押金不大于 5
|
||||
"""
|
||||
try:
|
||||
dashou = user.DashouProfile
|
||||
except ObjectDoesNotExist:
|
||||
return True
|
||||
|
||||
if dashou.zhanghaozhuangtai != 1:
|
||||
return True
|
||||
|
||||
yajin = Decimal(str(dashou.yajin or 0))
|
||||
if yajin > Decimal('5'):
|
||||
return False
|
||||
|
||||
if user_has_active_member(user.UserUID):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def _format_fake_row(row):
|
||||
"""字段与 DashouDingdanHuoquView 真实单列表保持一致。"""
|
||||
avatar = DEFAULT_DISPATCHER_AVATAR
|
||||
platform = int(row.Platform or 1)
|
||||
oid = row.OrderID
|
||||
price = float(row.Amount or 0)
|
||||
ct = fmt_datetime(row.CreateTime)
|
||||
zid = (row.DispatcherUserID or '').strip()
|
||||
|
||||
return {
|
||||
'dingdan_id': oid,
|
||||
'zhuangtai': 1,
|
||||
'pingtai': platform,
|
||||
'dashou_fencheng': price,
|
||||
'leixing_id': row.ProductTypeID or 0,
|
||||
'tupian': avatar,
|
||||
'yaoqiuleixing': 0,
|
||||
'huiyuan_id': '',
|
||||
'yajin': 0.0,
|
||||
'jieshao': row.Description or '',
|
||||
'beizhu': row.Remark or '',
|
||||
'creat_time': ct,
|
||||
'create_time': ct,
|
||||
'sjnicheng': '',
|
||||
'sj_avatar': avatar if platform == 2 else '',
|
||||
'zhiding_uid': zid,
|
||||
'zhiding_avatar': avatar,
|
||||
'zhiding_nicheng': '',
|
||||
'xuqiu_biaoqian': [],
|
||||
'dashou_biaoqian': [],
|
||||
'shangjia_biaoqian': [],
|
||||
'shangjia_identity_biaoqian': [],
|
||||
'zhiding_identity_biaoqian': [],
|
||||
'shangjia_youzhi': bool(row.IsPremiumMerchant) if platform == 2 else False,
|
||||
}
|
||||
|
||||
|
||||
def build_fake_order_pool_response(request):
|
||||
data = request.data
|
||||
leixing_id = pick_leixing_id(data)
|
||||
page = max(1, int(data.get('page', 1)))
|
||||
page_size = max(1, min(int(data.get('page_size', 10)), 50))
|
||||
|
||||
club_id = resolve_effective_club_id(request, getattr(request, 'user', None))
|
||||
|
||||
qs = FakeGrabOrder.query.filter(ClubID=club_id)
|
||||
if leixing_id is not None:
|
||||
qs = qs.filter(ProductTypeID=leixing_id)
|
||||
|
||||
qs = qs.order_by('-SortOrder', '-CreateTime')
|
||||
total = qs.count()
|
||||
offset = (page - 1) * page_size
|
||||
rows = list(qs[offset:offset + page_size])
|
||||
|
||||
formatted_list = [_format_fake_row(r) for r in rows]
|
||||
has_more = (page * page_size) < total
|
||||
|
||||
return Response({
|
||||
'code': 200,
|
||||
'msg': '获取成功',
|
||||
'data': {
|
||||
'list': formatted_list,
|
||||
'has_more': has_more,
|
||||
'total': total,
|
||||
'current_page': page,
|
||||
'page_size': page_size,
|
||||
'total_pages': (total + page_size - 1) // page_size if page_size else 0,
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user