feat(估值计算): 添加价格波动区间最高价、最低价和中位数计算

实现从price_fluctuation字段提取数据并计算三个关键数值
当数据转换失败时记录警告日志但不中断程序
This commit is contained in:
邹方成 2025-10-26 22:52:36 +08:00
parent 2e20d36964
commit a31657f91b

View File

@ -1,4 +1,5 @@
from random import random
import statistics
from datetime import datetime
from fastapi import APIRouter, Depends, HTTPException, status, BackgroundTasks
@ -476,7 +477,25 @@ async def _extract_calculation_params_c(data: UserValuationCreate) -> Dict[str,
# expert_valuations: 专家估值列表(系统配置)
transaction_data: Dict = None
manual_bids: List[float] = None
# TODO 需要客户确认 三个数值
# 处理月交易额波动区间的三个关键数值:最高价、最低价、中位数
# 已实现从data.price_fluctuation中提取并计算三个数值
price_fluctuation_median = None # 中位数
price_fluctuation_max = None # 最高价
price_fluctuation_min = None # 最低价
if hasattr(data, 'price_fluctuation') and data.price_fluctuation:
try:
# 将price_fluctuation转换为浮点数列表
price_values = [float(i) for i in data.price_fluctuation if i is not None]
if price_values:
price_fluctuation_max = max(price_values)
price_fluctuation_min = min(price_values)
price_fluctuation_median = statistics.median(price_values)
except (ValueError, TypeError) as e:
# 如果转换失败,记录日志但不中断程序
logger.warning(f"价格波动区间数据转换失败: {e}")
expert_valuations = None
# 浏览热度分 - 优化数据获取逻辑
daily_browse_volume = 0 # 默认值
@ -534,6 +553,10 @@ async def _extract_calculation_params_c(data: UserValuationCreate) -> Dict[str,
"weighted_average_price": transaction_data,
"manual_bids": manual_bids, # 手动收集的竞价列表 (用户填写)
"expert_valuations": expert_valuations, # 专家估值列表 (系统配置)
# 月交易额波动区间的三个关键数值
"price_fluctuation_max": price_fluctuation_max, # 最高价
"price_fluctuation_min": price_fluctuation_min, # 最低价
"price_fluctuation_median": price_fluctuation_median, # 中位数
# 计算热度系数C2
"daily_browse_volume": daily_browse_volume, # 近7日日均浏览量 (API获取)
"collection_count": collection_count, # 收藏数