Files
Mutual_Fund/service/advisor/report.py
T

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,
}