fix: 专家库connected和我的团队改为查expert_services,选定专家后即时体现
CI / 后端测试 (push) Has been cancelled
CI / 前端构建 (push) Has been cancelled

This commit is contained in:
selfrelease
2026-09-01 09:47:04 +08:00
parent eab1efa323
commit 06f046de1e
+25 -15
View File
@@ -1384,8 +1384,8 @@ def list_experts(category: str | None = None, authorization: str | None = Header
cur = conn.cursor()
expert_ids = [r["id"] for r in results]
cur.execute(
"SELECT DISTINCT expert_id FROM expert_consultations "
"WHERE user_phone = %s AND expert_id = ANY(%s)",
"SELECT DISTINCT expert_id FROM expert_services "
"WHERE user_phone = %s AND expert_id = ANY(%s) AND status IN ('pending', 'active')",
(phone, expert_ids),
)
connected_ids = {r[0] for r in cur.fetchall()}
@@ -2750,31 +2750,41 @@ def dashboard_timeline(authorization: str | None = Header(default=None)):
@app.get("/team")
def my_team(authorization: str | None = Header(default=None)):
"""我的团队:咨询过的专家自动沉淀"""
"""我的团队:已建立服务联系的专家(pending/active),含咨询统计"""
phone = get_current_phone(authorization)
if not phone:
raise HTTPException(401, "未登录")
conn = _matter_dsn()
try:
cur = conn.cursor()
# 从 expert_consultations 聚合关系
# 从 expert_services 查已建立联系的专家,左连 expert_consultations 获取咨询统计
cur.execute(
"SELECT e.id, e.name, e.avatar_url, e.category, e.title, e.expertise, "
"COUNT(c.id) as cnt, MAX(c.replied_at) as last_at, "
"(SELECT c2.topic FROM expert_consultations c2 WHERE c2.expert_id = e.id AND c2.user_phone = %s ORDER BY c2.created_at DESC LIMIT 1) as last_topic "
"FROM experts e JOIN expert_consultations c ON c.expert_id = e.id "
"WHERE c.user_phone = %s "
"GROUP BY e.id, e.name, e.avatar_url, e.category, e.title, e.expertise "
"ORDER BY last_at DESC NULLS LAST",
(phone, phone),
"es.status, es.created_at, "
"COALESCE(cnt.c, 0) as consultation_count, "
"cnt.last_at, cnt.last_topic "
"FROM expert_services es "
"JOIN experts e ON es.expert_id = e.id "
"LEFT JOIN LATERAL ("
" SELECT COUNT(*) as c, MAX(replied_at) as last_at, "
" (SELECT topic FROM expert_consultations c2 "
" WHERE c2.expert_id = es.expert_id AND c2.user_phone = es.user_phone "
" ORDER BY c2.created_at DESC LIMIT 1) as last_topic "
" FROM expert_consultations c "
" WHERE c.expert_id = es.expert_id AND c.user_phone = es.user_phone"
") cnt ON true "
"WHERE es.user_phone = %s AND es.status IN ('pending', 'active') "
"ORDER BY es.created_at DESC",
(phone,),
)
rows = cur.fetchall()
results = [{
"expert_id": r[0], "name": r[1], "avatar_url": r[2], "category": r[3],
"title": r[4], "expertise": r[5], "online": False, # 在线状态待接入
"consultation_count": r[6],
"last_consulted_at": r[7].isoformat() if r[7] else None,
"last_topic": r[8], "tags": r[5],
"title": r[4], "expertise": r[5], "online": False,
"service_status": r[6],
"consultation_count": r[8],
"last_consulted_at": r[9].isoformat() if r[9] else None,
"last_topic": r[10], "tags": r[5],
} for r in rows]
return {"results": results}
finally: