feat: 打手订单列表组队标记,队友也可看单;详情返回队友昵称
列表附 has_team/角色/人数;组队在队成员纳入订单列表查询。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -688,14 +688,71 @@ def serialize_recruit_public(rec, order=None, *, include_game_ids=False) -> dict
|
||||
|
||||
if include_game_ids:
|
||||
from orders.models import TeamMember
|
||||
mems = TeamMember.query.filter(recruit_id=rec.id, join_status=1)
|
||||
from users.business_models import User
|
||||
mems = list(TeamMember.query.filter(recruit_id=rec.id, join_status=1))
|
||||
uids = [m.user_uid for m in mems]
|
||||
nick_map = {}
|
||||
if uids:
|
||||
for u in User.query.filter(UserUID__in=uids).select_related('DashouProfile'):
|
||||
try:
|
||||
nick_map[u.UserUID] = (u.DashouProfile.nicheng or '') if getattr(u, 'DashouProfile', None) else ''
|
||||
except Exception:
|
||||
nick_map[u.UserUID] = ''
|
||||
data['members'] = [
|
||||
{
|
||||
'user_uid': m.user_uid,
|
||||
'role': m.role,
|
||||
'role_text': '队长' if m.role == 'leader' else '队友',
|
||||
'nicheng': nick_map.get(m.user_uid, ''),
|
||||
'game_id': m.game_id,
|
||||
'share_amount': float(_d(m.share_amount)),
|
||||
}
|
||||
for m in mems
|
||||
]
|
||||
return data
|
||||
|
||||
|
||||
def batch_team_list_flags(order_ids: list, viewer_uid: str = '') -> dict:
|
||||
"""订单列表用:{order_id: {has_team, team_status, ...}},不含游戏ID。"""
|
||||
from orders.models import TeamRecruit, TeamMember
|
||||
if not order_ids:
|
||||
return {}
|
||||
recs = list(
|
||||
TeamRecruit.query.filter(
|
||||
order_id__in=list(order_ids),
|
||||
status__in=[
|
||||
TeamRecruit.STATUS_RECRUITING,
|
||||
TeamRecruit.STATUS_LOCKED,
|
||||
TeamRecruit.STATUS_FINISHED,
|
||||
],
|
||||
)
|
||||
)
|
||||
if not recs:
|
||||
return {}
|
||||
# 一单一帖取最新
|
||||
best = {}
|
||||
for r in recs:
|
||||
prev = best.get(r.order_id)
|
||||
if not prev or r.id > prev.id:
|
||||
best[r.order_id] = r
|
||||
rids = [r.id for r in best.values()]
|
||||
my_roles = {}
|
||||
if viewer_uid and rids:
|
||||
for m in TeamMember.query.filter(
|
||||
recruit_id__in=rids, user_uid=viewer_uid, join_status=TeamMember.JOIN_ACTIVE,
|
||||
):
|
||||
my_roles[m.recruit_id] = m.role
|
||||
out = {}
|
||||
status_text = {1: '招募中', 2: '已锁定', 3: '已结束'}
|
||||
for oid, r in best.items():
|
||||
role = my_roles.get(r.id) or ('leader' if viewer_uid and r.leader_uid == viewer_uid else '')
|
||||
out[oid] = {
|
||||
'has_team': True,
|
||||
'team_status': r.status,
|
||||
'team_status_text': status_text.get(r.status, ''),
|
||||
'team_joined': int(r.joined_count or 0),
|
||||
'team_need': int(r.need_count or 0),
|
||||
'team_role': role,
|
||||
'team_role_text': '队长' if role == 'leader' else ('队友' if role == 'member' else ''),
|
||||
}
|
||||
return out
|
||||
|
||||
Reference in New Issue
Block a user