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 from random import random
import statistics
from datetime import datetime from datetime import datetime
from fastapi import APIRouter, Depends, HTTPException, status, BackgroundTasks from fastapi import APIRouter, Depends, HTTPException, status, BackgroundTasks
@ -476,7 +477,25 @@ async def _extract_calculation_params_c(data: UserValuationCreate) -> Dict[str,
# expert_valuations: 专家估值列表(系统配置) # expert_valuations: 专家估值列表(系统配置)
transaction_data: Dict = None transaction_data: Dict = None
manual_bids: List[float] = 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 expert_valuations = None
# 浏览热度分 - 优化数据获取逻辑 # 浏览热度分 - 优化数据获取逻辑
daily_browse_volume = 0 # 默认值 daily_browse_volume = 0 # 默认值
@ -534,6 +553,10 @@ async def _extract_calculation_params_c(data: UserValuationCreate) -> Dict[str,
"weighted_average_price": transaction_data, "weighted_average_price": transaction_data,
"manual_bids": manual_bids, # 手动收集的竞价列表 (用户填写) "manual_bids": manual_bids, # 手动收集的竞价列表 (用户填写)
"expert_valuations": expert_valuations, # 专家估值列表 (系统配置) "expert_valuations": expert_valuations, # 专家估值列表 (系统配置)
# 月交易额波动区间的三个关键数值
"price_fluctuation_max": price_fluctuation_max, # 最高价
"price_fluctuation_min": price_fluctuation_min, # 最低价
"price_fluctuation_median": price_fluctuation_median, # 中位数
# 计算热度系数C2 # 计算热度系数C2
"daily_browse_volume": daily_browse_volume, # 近7日日均浏览量 (API获取) "daily_browse_volume": daily_browse_volume, # 近7日日均浏览量 (API获取)
"collection_count": collection_count, # 收藏数 "collection_count": collection_count, # 收藏数