feat: 假单按俱乐部开关,并按商品类型会员资格展示
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
"""抢单大厅假单:无资格/封禁打手仅展示假数据。"""
|
||||
"""抢单大厅假单:按俱乐部开关 + 按商品类型会员资格展示假数据。"""
|
||||
import random
|
||||
from datetime import datetime, timedelta
|
||||
from decimal import Decimal
|
||||
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.db import transaction
|
||||
@@ -11,19 +10,41 @@ 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 jituan.services.fake_grab_switch import is_club_fake_grab_enabled
|
||||
from jituan.services.huiyuan_bundle import normalize_huiyuan_id, user_has_huiyuan_access
|
||||
from orders.models import FakeGrabOrder, FakeGrabOrderShuffleState
|
||||
|
||||
DEFAULT_DISPATCHER_AVATAR = 'beijing/morentouxiang.jpg'
|
||||
SHUFFLE_STATE_PK = 1
|
||||
|
||||
|
||||
def dashou_should_use_fake_pool(user):
|
||||
def _leixing_required_huiyuan_id(leixing_id):
|
||||
"""商品类型绑定的会员 ID;无绑定则视为不要求会员。"""
|
||||
if leixing_id is None:
|
||||
return ''
|
||||
try:
|
||||
from products.models import ShangpinLeixing
|
||||
row = ShangpinLeixing.query.filter(id=int(leixing_id)).values('huiyuan_id').first()
|
||||
if not row:
|
||||
return ''
|
||||
return normalize_huiyuan_id(row.get('huiyuan_id'))
|
||||
except Exception:
|
||||
return ''
|
||||
|
||||
|
||||
def dashou_should_use_fake_pool(user, club_id=None, leixing_id=None):
|
||||
"""
|
||||
打手是否只能看假单:
|
||||
- 账号封禁(zhanghaozhuangtai != 1)
|
||||
- 或未开通有效会员 且 押金不大于 5
|
||||
当前 Tab(商品类型)是否只展示假单:
|
||||
- 俱乐部未开启假单功能 → 否(看真实单)
|
||||
- 账号封禁 → 是
|
||||
- 该类型要求的会员:已充(含总会员覆盖子类型)→ 否
|
||||
- 未充对应会员 → 是
|
||||
不同类型互不影响;假单在独立表,抢不了。
|
||||
"""
|
||||
cid = (club_id or '').strip()
|
||||
if not cid or not is_club_fake_grab_enabled(cid):
|
||||
return False
|
||||
|
||||
try:
|
||||
dashou = user.DashouProfile
|
||||
except ObjectDoesNotExist:
|
||||
@@ -32,11 +53,16 @@ def dashou_should_use_fake_pool(user):
|
||||
if dashou.zhanghaozhuangtai != 1:
|
||||
return True
|
||||
|
||||
yajin = Decimal(str(dashou.yajin or 0))
|
||||
if yajin > Decimal('5'):
|
||||
if leixing_id is None:
|
||||
# 未指定类型时不整池切假单,走真实单列表
|
||||
return False
|
||||
|
||||
if user_has_active_member(user.UserUID):
|
||||
required = _leixing_required_huiyuan_id(leixing_id)
|
||||
if not required:
|
||||
# 类型未绑会员 → 不推假单
|
||||
return False
|
||||
|
||||
if user_has_huiyuan_access(user.UserUID, required, club_id=cid):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
@@ -97,14 +97,10 @@ class DashouDingdanHuoquView(APIView):
|
||||
|
||||
def post(self, request):
|
||||
try:
|
||||
from django.conf import settings
|
||||
from orders.services.fake_order_pool import (
|
||||
dashou_should_use_fake_pool,
|
||||
build_fake_order_pool_response,
|
||||
)
|
||||
if getattr(settings, 'FAKE_GRAB_ORDER_POOL_ENABLED', False):
|
||||
if dashou_should_use_fake_pool(request.user):
|
||||
return build_fake_order_pool_response(request)
|
||||
|
||||
# 1. 获取请求参数
|
||||
data = request.data
|
||||
@@ -119,6 +115,11 @@ class DashouDingdanHuoquView(APIView):
|
||||
resolve_grab_pool_member_display,
|
||||
)
|
||||
club_id = resolve_effective_club_id(request, getattr(request, 'user', None))
|
||||
|
||||
# 假单:按俱乐部开关 + 当前商品类型是否具备对应会员(含总会员覆盖)
|
||||
if dashou_should_use_fake_pool(request.user, club_id=club_id, leixing_id=leixing_id):
|
||||
return build_fake_order_pool_response(request)
|
||||
|
||||
yonghuid = request.user.UserUID
|
||||
_has_member, user_clumber = refresh_grab_pool_membership_state(
|
||||
yonghuid, club_id=club_id,
|
||||
|
||||
Reference in New Issue
Block a user