#!/usr/bin/env python3 """ 查看分析历史工具 """ import os import sys import json from datetime import datetime from analysis_storage import AnalysisStorage def print_banner(): """打印横幅""" banner = """ ╔══════════════════════════════════════════════════════════════╗ ║ 分析历史查看工具 ║ ║ Analysis History Viewer ║ ╚══════════════════════════════════════════════════════════════╝ """ print(banner) def list_all_analyses(): """列出所有分析记录""" storage = AnalysisStorage() analyses = storage.list_all_analyses() if not analyses: print("📭 暂无分析记录") return print(f"📊 共找到 {len(analyses)} 条分析记录:") print("=" * 80) for i, analysis in enumerate(analyses, 1): print(f"{i:2d}. {analysis['symbol']} - {analysis['company_name']}") print(f" 时间: {analysis['analysis_date']}") print(f" 建议: {analysis['recommendation']}") print(f" 评分: {analysis['overall_score']:.1f}/100") print(f" 文件: {analysis['files']['summary']}") print("-" * 80) def view_analysis_details(symbol: str): """查看特定股票的分析详情""" storage = AnalysisStorage() analysis_data = storage.get_latest_analysis(symbol) if not analysis_data: print(f"❌ 未找到 {symbol} 的分析记录") return print(f"\n📈 {symbol} 最新分析结果:") print("=" * 60) # 基本信息 metadata = analysis_data.get('analysis_metadata', {}) company_info = analysis_data.get('company_info', {}) investment_rec = analysis_data.get('investment_recommendation', {}) print(f"公司名称: {company_info.get('name', 'N/A')}") print(f"分析时间: {metadata.get('analysis_date', 'N/A')}") print(f"投资建议: {investment_rec.get('recommendation', 'N/A')}") print(f"综合评分: {investment_rec.get('overall_score', 0):.1f}/100") # 各维度评分 valuation = analysis_data.get('valuation_analysis', {}) financial_health = analysis_data.get('financial_health', {}) growth = analysis_data.get('growth_analysis', {}) risk = analysis_data.get('risk_analysis', {}) print(f"\n📊 各维度评分:") print(f" 估值吸引力: {valuation.get('valuation_score', 0):.1f}/100") print(f" 财务健康度: {financial_health.get('health_score', 0):.1f}/100") print(f" 成长性: {growth.get('growth_score', 0):.1f}/100") print(f" 风险控制: {risk.get('risk_score', 0):.1f}/100") # 关键优势 strengths = investment_rec.get('key_strengths', []) if strengths: print(f"\n✅ 关键优势:") for strength in strengths: print(f" • {strength}") # 关键担忧 concerns = investment_rec.get('key_concerns', []) if concerns: print(f"\n⚠️ 关键担忧:") for concern in concerns: print(f" • {concern}") # 风险提示 warnings = investment_rec.get('risk_warnings', []) if warnings: print(f"\n🚨 风险提示:") for warning in warnings: print(f" • {warning}") def view_analysis_history(symbol: str): """查看特定股票的分析历史""" storage = AnalysisStorage() history = storage.get_analysis_history(symbol) if not history: print(f"❌ 未找到 {symbol} 的分析历史") return print(f"\n📚 {symbol} 分析历史 (共 {len(history)} 条记录):") print("=" * 80) for i, record in enumerate(history, 1): print(f"{i:2d}. 时间: {record['analysis_date']}") print(f" 建议: {record['recommendation']}") print(f" 评分: {record['overall_score']:.1f}/100") print(f" 文件: {record['files']['summary']}") print("-" * 80) def export_analysis_summary(): """导出分析摘要""" storage = AnalysisStorage() analyses = storage.list_all_analyses() if not analyses: print("📭 暂无分析记录可导出") return # 生成摘要报告 summary_file = f"analysis_summary_{datetime.now().strftime('%Y%m%d_%H%M%S')}.md" with open(summary_file, 'w', encoding='utf-8') as f: f.write("# 股票分析摘要报告\n\n") f.write(f"生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") f.write(f"分析记录数: {len(analyses)}\n\n") f.write("## 分析记录列表\n\n") for i, analysis in enumerate(analyses, 1): f.write(f"### {i}. {analysis['symbol']} - {analysis['company_name']}\n") f.write(f"- **分析时间**: {analysis['analysis_date']}\n") f.write(f"- **投资建议**: {analysis['recommendation']}\n") f.write(f"- **综合评分**: {analysis['overall_score']:.1f}/100\n") f.write(f"- **详细报告**: {analysis['files']['summary']}\n\n") print(f"✅ 分析摘要已导出到: {summary_file}") def main(): """主函数""" if len(sys.argv) < 2: print("使用方法:") print("python3 view_analysis.py list # 列出所有分析记录") print("python3 view_analysis.py view <股票代码> # 查看最新分析结果") print("python3 view_analysis.py history <股票代码> # 查看分析历史") print("python3 view_analysis.py export # 导出分析摘要") return command = sys.argv[1].lower() if command == 'list': print_banner() list_all_analyses() elif command == 'view': if len(sys.argv) < 3: print("❌ 请提供股票代码") return symbol = sys.argv[2].upper() print_banner() view_analysis_details(symbol) elif command == 'history': if len(sys.argv) < 3: print("❌ 请提供股票代码") return symbol = sys.argv[2].upper() print_banner() view_analysis_history(symbol) elif command == 'export': print_banner() export_analysis_summary() else: print("❌ 无效命令") if __name__ == "__main__": main()