feat: 组队招募(/zudui)+ 结单/自动结算/罚款挂钩

新增 Team 表与接口;进8强制锁、组队分账优先且失败不回退全额队长。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-27 03:12:04 +08:00
parent e9e5ee85e2
commit 7002da6093
14 changed files with 1466 additions and 63 deletions

View File

@@ -1264,8 +1264,20 @@ class DashouDingdanXiangqingView(APIView):
'data': None
}, status=status.HTTP_404_NOT_FOUND)
# 4. 验证订单是否属于当前打手
if dingdan.PlayerID != yonghuid:
# 4. 验证:接单打手,或本单在队成员(含已分账结束仍在队)
is_player = dingdan.PlayerID == yonghuid
is_team_member = False
if not is_player:
try:
from orders.models import TeamMember
is_team_member = TeamMember.query.filter(
order_id=dingdan_id,
user_uid=yonghuid,
join_status=TeamMember.JOIN_ACTIVE,
).exists()
except Exception:
is_team_member = False
if not is_player and not is_team_member:
return Response({
'code': 4,
'msg': '没有权限查看此订单',
@@ -1292,6 +1304,24 @@ class DashouDingdanXiangqingView(APIView):
dingdan_data.update(order_auto_settle_payload(dingdan))
except Exception:
pass
try:
from orders.services.team_recruit import get_active_recruit, serialize_recruit_public
from orders.models import TeamMember
rec = get_active_recruit(dingdan.OrderID)
if not rec:
from orders.models import TeamRecruit
rec = TeamRecruit.query.filter(order_id=dingdan.OrderID).order_by('-id').first()
if rec:
is_mem = TeamMember.query.filter(
recruit_id=rec.id, user_uid=yonghuid, join_status=1,
).exists() or rec.leader_uid == yonghuid
dingdan_data['team'] = serialize_recruit_public(
rec, dingdan, include_game_ids=is_mem,
)
else:
dingdan_data['team'] = None
except Exception:
dingdan_data['team'] = None
# 6. 查询打手提交的图片
dashou_tupian_list = PlayerDeliveryImage.query.filter(