guzhi/app/controllers/user_valuation.py
邹方成 cf95553adc feat(valuation): 新增非遗资产估值评估功能模块
实现估值评估的完整功能,包括:
1. 创建估值评估模型及相关字段
2. 实现用户端估值评估的创建、查询和统计功能
3. 实现管理端估值评估的审核、查询和管理功能
4. 添加相关路由和控制器逻辑
2025-10-02 12:11:00 +08:00

138 lines
5.4 KiB
Python

from typing import Optional
from tortoise.expressions import Q
from tortoise.queryset import QuerySet
from app.models.valuation import ValuationAssessment
from app.schemas.valuation import (
UserValuationCreate,
UserValuationQuery,
UserValuationList,
UserValuationOut,
UserValuationDetail
)
class UserValuationController:
"""用户端估值评估控制器"""
def __init__(self):
self.model = ValuationAssessment
async def create_valuation(self, user_id: int, data: UserValuationCreate) -> UserValuationDetail:
"""用户创建估值评估"""
valuation_data = data.model_dump()
valuation_data['user_id'] = user_id
valuation_data['status'] = 'pending' # 默认状态为待审核
valuation = await self.model.create(**valuation_data)
return await self._to_user_detail(valuation)
async def get_user_valuations(self, user_id: int, query: UserValuationQuery) -> UserValuationList:
"""获取用户的估值评估列表"""
queryset = self.model.filter(user_id=user_id, is_active=True)
# 构建查询条件
if query.status:
queryset = queryset.filter(status=query.status)
if query.asset_name:
queryset = queryset.filter(asset_name__icontains=query.asset_name)
# 计算总数
total = await queryset.count()
# 分页查询
offset = (query.page - 1) * query.size
items = await queryset.offset(offset).limit(query.size).order_by('-created_at')
# 转换为输出模型
user_valuations = [await self._to_user_out(item) for item in items]
pages = (total + query.size - 1) // query.size
return UserValuationList(
items=user_valuations,
total=total,
page=query.page,
size=query.size,
pages=pages
)
async def get_user_valuation_detail(self, user_id: int, valuation_id: int) -> Optional[UserValuationDetail]:
"""获取用户的估值评估详情"""
valuation = await self.model.filter(
id=valuation_id,
user_id=user_id,
is_active=True
).first()
if not valuation:
return None
return await self._to_user_detail(valuation)
async def get_user_valuation_statistics(self, user_id: int) -> dict:
"""获取用户的估值评估统计信息"""
total = await self.model.filter(user_id=user_id, is_active=True).count()
pending = await self.model.filter(user_id=user_id, status='pending', is_active=True).count()
approved = await self.model.filter(user_id=user_id, status='approved', is_active=True).count()
rejected = await self.model.filter(user_id=user_id, status='rejected', is_active=True).count()
return {
'total': total,
'pending': pending,
'approved': approved,
'rejected': rejected
}
async def _to_user_out(self, valuation: ValuationAssessment) -> UserValuationOut:
"""转换为用户端输出模型"""
return UserValuationOut(
id=valuation.id,
asset_name=valuation.asset_name,
institution=valuation.institution,
industry=valuation.industry,
status=valuation.status,
admin_notes=valuation.admin_notes,
created_at=valuation.created_at,
updated_at=valuation.updated_at
)
async def _to_user_detail(self, valuation: ValuationAssessment) -> UserValuationDetail:
"""转换为用户端详细模型"""
return UserValuationDetail(
id=valuation.id,
asset_name=valuation.asset_name,
institution=valuation.institution,
industry=valuation.industry,
annual_revenue=valuation.annual_revenue,
rd_investment=valuation.rd_investment,
three_year_income=valuation.three_year_income,
funding_status=valuation.funding_status,
inheritor_level=valuation.inheritor_level,
inheritor_age_count=valuation.inheritor_age_count,
inheritor_certificates=valuation.inheritor_certificates,
heritage_level=valuation.heritage_level,
patent_application_no=valuation.patent_application_no,
historical_evidence=valuation.historical_evidence,
patent_certificates=valuation.patent_certificates,
pattern_images=valuation.pattern_images,
application_maturity=valuation.application_maturity,
application_coverage=valuation.application_coverage,
cooperation_depth=valuation.cooperation_depth,
offline_activities=valuation.offline_activities,
online_accounts=valuation.online_accounts,
sales_volume=valuation.sales_volume,
link_views=valuation.link_views,
circulation=valuation.circulation,
last_market_activity=valuation.last_market_activity,
monthly_transaction=valuation.monthly_transaction,
price_fluctuation=valuation.price_fluctuation,
status=valuation.status,
admin_notes=valuation.admin_notes,
created_at=valuation.created_at,
updated_at=valuation.updated_at
)
# 创建控制器实例
user_valuation_controller = UserValuationController()