diff --git a/app/api/v1/app_valuations/app_valuations.py b/app/api/v1/app_valuations/app_valuations.py index 2bd7c4f..75faaea 100644 --- a/app/api/v1/app_valuations/app_valuations.py +++ b/app/api/v1/app_valuations/app_valuations.py @@ -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 '限量' diff --git a/app/api/v1/calculation/calcuation.py b/app/api/v1/calculation/calcuation.py index 02026b6..9bf144a 100644 --- a/app/api/v1/calculation/calcuation.py +++ b/app/api/v1/calculation/calcuation.py @@ -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 '限量' diff --git a/app/utils/calculation_engine/market_value_c/market_value_c.py b/app/utils/calculation_engine/market_value_c/market_value_c.py index d012b1d..efea7c9 100644 --- a/app/utils/calculation_engine/market_value_c/market_value_c.py +++ b/app/utils/calculation_engine/market_value_c/market_value_c.py @@ -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)]) )