fix: 调整手机号强制认证判定规则(身份触发)

This commit is contained in:
XingQue
2026-06-22 15:26:05 +08:00
parent 1ef7c62ab4
commit a07bd3d388

View File

@@ -3227,83 +3227,62 @@ class CheckPhoneAuthView(APIView):
判断当前登录用户是否需要强制手机号认证
规则:
- 已认证过手机号(shoujihao_renzheng=True → 不需要
- 未认证时,检查用户角色及其业务指标是否达到阈值
打手:有会员购买记录Huiyuangoumai 中存在记录)
商家:发布订单总数fabu>= 5
管事:充值分佣总额chongzhifenrun>= 15
组长:分佣总额fenyong_zonge>= 2
老板:消费总额zonge>= 20
- 满足任一角色的阈值 → 需要认证
- 否则 → 不需要认证
- 已认证过手机号(PhoneVerified=True → 不需要
- 未认证时,满足以下任一条件 → 需要认证
打手:有会员购买记录,或押金 > 0
商家:已是商家(存在商家扩展表)
管事:已是管事(存在管事扩展表)
组长:已是组长(存在组长扩展表)
老板:有下单记录alldingdan > 0
"""
permission_classes = [IsAuthenticated]
def post(self, request):
user = request.user # User 实例
user = request.user
# 已经认证过手机号,直接放行
if user.PhoneVerified:
return Response({'need_auth': False})
if getattr(user, 'PhoneVerified', False):
return Response({'code': 0, 'need_auth': False})
# 检查各角色是否满足阈值条件
if self._dashou_meets_threshold(user):
return Response({'need_auth': True})
return Response({'code': 0, 'need_auth': True})
if self._shangjia_meets_threshold(user):
return Response({'need_auth': True})
return Response({'code': 0, 'need_auth': True})
if self._guanshi_meets_threshold(user):
return Response({'need_auth': True})
return Response({'code': 0, 'need_auth': True})
if self._zuzhang_meets_threshold(user):
return Response({'need_auth': True})
return Response({'code': 0, 'need_auth': True})
if self._boss_meets_threshold(user):
return Response({'need_auth': True})
return Response({'code': 0, 'need_auth': True})
# 都不满足,无需认证
return Response({'need_auth': False})
# ==================== 各角色阈值判断方法 ====================
return Response({'code': 0, 'need_auth': False})
def _dashou_meets_threshold(self, user):
"""
打手条件存在会员购买记录Huiyuangoumai 表中有该用户的记录)
"""
"""打手:有会员记录,或押金 > 0"""
try:
# 先确认用户是打手
UserDashou.query.get(user=user)
dashou = UserDashou.query.get(user=user)
except UserDashou.DoesNotExist:
return False
# 检查是否有任意会员购买记录
if dashou.yajin and dashou.yajin > 0:
return True
return Huiyuangoumai.query.filter(yonghu_id=user.UserUID).exists()
def _shangjia_meets_threshold(self, user):
"""商家条件:发布订单总数 fabu >= 5"""
try:
shop = UserShangjia.query.get(user=user)
except UserShangjia.DoesNotExist:
return False
return shop.fabu >= 5
"""商家:已是商家身份"""
return UserShangjia.query.filter(user=user).exists()
def _guanshi_meets_threshold(self, user):
"""管事条件:充值分佣总额 chongzhifenrun >= 15"""
try:
guanshi = UserGuanshi.query.get(user=user)
except UserGuanshi.DoesNotExist:
return False
return guanshi.chongzhifenrun >= 15
"""管事:已是管事身份"""
return UserGuanshi.query.filter(user=user).exists()
def _zuzhang_meets_threshold(self, user):
"""组长条件:分佣总额 fenyong_zonge >= 2"""
try:
zuzhang = UserZuzhang.query.get(user=user)
except UserZuzhang.DoesNotExist:
return False
return zuzhang.fenyong_zonge >= 2
"""组长:已是组长身份"""
return UserZuzhang.query.filter(user=user).exists()
def _boss_meets_threshold(self, user):
"""老板条件:消费总额 zonge >= 20"""
"""老板:有下单记录"""
try:
boss = UserBoss.query.get(user=user)
except UserBoss.DoesNotExist:
return False
return boss.zonge >= 20
return (boss.alldingdan or 0) > 0