39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
"""个人绩效统计(PRD §4.7)。
|
|||
|
|
|
||
|
|
口径说明(E1 最小口径):个人 AUM=名下客户持有中市值之和;报告发送数=advisor_report
|
||
|
|
sent 计数;回访次数=advisor_visit_record 计数。服务完成率/回访达标率等 P2 后置。
|
||
|
|
"""
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
|
|
||
|
|
from common_const import CUSTOMER_REL_STATUS_SIGNED, REPORT_SEND_STATUS_SENT
|
||
|
|
from model.sys_user import SysUser
|
||
|
|
from repositories.advisor_report import AdvisorReportRepo
|
||
|
|
from repositories.advisor_visit_record import AdvisorVisitRecordRepo
|
||
|
|
from repositories.customer_relation import CustomerRelationRepo
|
||
|
|
|
||
|
|
|
||
|
|
async def personal_report(db: AsyncSession, user: SysUser) -> dict:
|
||
|
|
relation_repo = CustomerRelationRepo(db)
|
||
|
|
report_repo = AdvisorReportRepo(db)
|
||
|
|
visit_repo = AdvisorVisitRecordRepo(db)
|
||
|
|
|
||
|
|
total = await relation_repo.count_customer_rows(advisor_id=user.id)
|
||
|
|
signed = await relation_repo.count_customer_rows(
|
||
|
|
advisor_id=user.id, status=CUSTOMER_REL_STATUS_SIGNED
|
||
|
|
)
|
||
|
|
aum = await relation_repo.sum_holdings_value(user.id)
|
||
|
|
sent = await report_repo.count_by_advisor(
|
||
|
|
advisor_id=user.id, send_status=REPORT_SEND_STATUS_SENT
|
||
|
|
)
|
||
|
|
visits = await visit_repo.count_by_advisor(advisor_id=user.id)
|
||
|
|
|
||
|
|
return {
|
||
|
|
"total_aum": f"{aum:.2f}",
|
||
|
|
"total_customers": total,
|
||
|
|
"signed_customers": signed,
|
||
|
|
"reports_sent": sent,
|
||
|
|
"visits_count": visits,
|
||
|
|
}
|