fix(calculation): 优化市场价值计算参数获取逻辑

修复市场价值计算中参数获取的默认值问题,改进浏览量和收藏数的获取方式:
1. 为expert_valuations设置默认值0
2. 优先从用户填写的link_views获取浏览量
3. 支持从平台账户数据中获取浏览量和收藏数
4. 添加默认平台数据结构
This commit is contained in:
邹方成 2025-10-26 20:25:23 +08:00
parent 089d6dd504
commit 2e20d36964
3 changed files with 66 additions and 6 deletions

View File

@ -478,9 +478,47 @@ async def _extract_calculation_params_c(data: UserValuationCreate) -> Dict[str,
manual_bids: List[float] = None
# TODO 需要客户确认 三个数值
expert_valuations = None
# 浏览热度分 TODO 需要先确定平台信息
daily_browse_volume = 500.0 # 近7日日均浏览量(默认占位) 是否 使用该商品近12个月的链接浏览量
collection_count = 50 # 收藏数(默认占位) 无
# 浏览热度分 - 优化数据获取逻辑
daily_browse_volume = 0 # 默认值
# 第一优先级使用用户填写的该商品近12个月的链接浏览量
if hasattr(data, 'link_views') and data.link_views:
try:
# 尝试将字符串转换为浮点数
daily_browse_volume = float(data.link_views)
except (ValueError, TypeError):
# 如果转换失败,继续使用其他数据源
pass
# 第二优先级如果没有link_views尝试从平台账户数据中获取
if daily_browse_volume == 0 and hasattr(data, 'platform_accounts') and data.platform_accounts:
try:
platform_accounts_data = data.platform_accounts
# 获取第一个平台的数据
first_platform_key = next(iter(platform_accounts_data))
first_platform_data = platform_accounts_data[first_platform_key]
# 尝试获取浏览量
platform_views = first_platform_data.get("views", "0")
daily_browse_volume = float(platform_views)
except (ValueError, TypeError, StopIteration, AttributeError):
# 如果获取失败,保持默认值
daily_browse_volume = 0
# 收藏数 - 尝试从平台账户数据中获取
collection_count = 0 # 默认值
if hasattr(data, 'platform_accounts') and data.platform_accounts:
try:
platform_accounts_data = data.platform_accounts
# 获取第一个平台的数据
first_platform_key = next(iter(platform_accounts_data))
first_platform_data = platform_accounts_data[first_platform_key]
# 尝试获取收藏数
platform_likes = first_platform_data.get("likes", "0")
collection_count = int(platform_likes)
except (ValueError, TypeError, StopIteration, AttributeError):
# 如果获取失败,保持默认值
collection_count = 0
# 稀缺性乘数C3 发行量
circulation = data.scarcity_level or '限量'

View File

@ -388,9 +388,31 @@ async def _extract_calculation_params_c(data: UserValuationCreate) -> Dict[str,
# expert_valuations: 专家估值列表(系统配置)
transaction_data: Dict = None
manual_bids: List[float] = None
expert_valuations = [random.uniform(0, 1) for _ in range(3)]
# expert_valuations = [random.uniform(0, 1) for _ in range(3)]
expert_valuations = 0 # 默认 0
# 浏览热度分 TODO 需要先确定平台信息
daily_browse_volume = 500.0 # 近7日日均浏览量(默认占位)
# 优化后的多平台数据结构支持从platform_accounts中提取或使用默认值
default_platform_data = {
"bilibili": {
"account": "default_account",
"likes": "100",
"comments": "50",
"shares": "20",
"views": "500"
}
}
# 如果有平台账户数据,尝试提取浏览量,否则使用默认值
if hasattr(data, 'platform_accounts') and data.platform_accounts:
platform_accounts_data = data.platform_accounts
# 获取第一个平台的数据
first_platform_key = next(iter(platform_accounts_data))
first_platform_data = platform_accounts_data[first_platform_key]
# 尝试获取浏览量,如果没有则使用默认值
daily_browse_volume = float(first_platform_data.get("views", "500"))
else:
daily_browse_volume = 500.0 # 默认值
collection_count = 50 # 收藏数(默认占位)
# 稀缺性乘数C3 发行量
circulation = data.circulation or '限量'

View File

@ -76,7 +76,7 @@ class MarketValueCCalculator:
"""
# 计算市场竞价C1
market_bidding_c1 = self.market_bidding_calculator.calculate_market_bidding_c1(
transaction_data={'weighted_average_price': input_data.get('average_transaction_price', 50000.0)},
transaction_data={'weighted_average_price': input_data.get('average_transaction_price', 50000.0)}, # 默认了一个 50000
manual_bids=input_data.get('manual_bids', [input_data.get('average_transaction_price', 50000.0)]),
expert_valuations=input_data.get('expert_valuations', [input_data.get('average_transaction_price', 50000.0)])
)