Files
Django/orders/services/fake_order_pool.py

121 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""抢单大厅假单:无资格/封禁打手仅展示假数据。"""
import random
from datetime import timedelta
from decimal import Decimal
from django.core.exceptions import ObjectDoesNotExist
from django.utils import timezone
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 _random_display_time_str():
"""返回给前端的创建时间:当前请求时刻 2~5 分钟前的随机时间。"""
seconds_ago = random.randint(120, 300)
dt = timezone.now() - timedelta(seconds=seconds_ago)
return fmt_datetime(dt)
def _format_fake_row(row, display_time=None):
"""字段与 DashouDingdanHuoquView 真实单列表保持一致。"""
avatar = DEFAULT_DISPATCHER_AVATAR
platform = int(row.Platform or 1)
oid = row.OrderID
price = float(row.Amount or 0)
ct = display_time or _random_display_time_str()
zid = (row.DispatcherUserID or '').strip()
sj_name = (getattr(row, 'MerchantNickname', None) 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_name if platform == 2 else '',
'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)
rows = list(qs)
random.shuffle(rows)
total = len(rows)
offset = (page - 1) * page_size
page_rows = rows[offset:offset + page_size]
formatted_list = [_format_fake_row(r) for r in page_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,
},
})