#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 软著申请材料质量监控和检测工具 功能:全方位监控生成过程的质量,提供实时反馈和智能建议 监控维度: 1. 生成进度跟踪 2. 代码质量检测 3. 文档完整性验证 4. 申请成功率预测 5. 性能指标分析 """ import sys import json import re from pathlib import Path from datetime import datetime from typing import Dict, List, Optional # 颜色输出类 class Colors: RED = '\033[0;31m' GREEN = '\033[0;32m' YELLOW = '\033[1;33m' BLUE = '\033[0;34m' PURPLE = '\033[0;35m' CYAN = '\033[0;36m' NC = '\033[0m' # No Color def print_success(message: str): print(f"{Colors.GREEN}✓ {message}{Colors.NC}") def print_info(message: str): print(f"{Colors.BLUE}ℹ {message}{Colors.NC}") def print_warning(message: str): print(f"{Colors.YELLOW}⚠ {message}{Colors.NC}") def print_error(message: str): print(f"{Colors.RED}✗ {message}{Colors.NC}") def print_header(message: str): print(f"{Colors.PURPLE}{'=' * 80}{Colors.NC}") print(f"{Colors.PURPLE}{message.center(80)}{Colors.NC}") print(f"{Colors.PURPLE}{'=' * 80}{Colors.NC}") class QualityMonitor: """质量监控器""" def __init__(self): self.project_root = Path.cwd() self.config_path = self.project_root / "ai-copyright-config.json" self.monitoring_results = {} def load_config(self) -> Optional[dict]: """加载项目配置""" if not self.config_path.exists(): return None try: with open(self.config_path, 'r', encoding='utf-8') as f: return json.load(f) except: return None def check_generation_progress(self) -> Dict[str, any]: """检查生成进度""" progress = { 'requirements_doc': False, 'framework_design': False, 'page_list': False, 'frontend_code': False, 'backend_code': False, 'database_code': False, 'user_manual': False, 'registration_form': False, 'merged_frontend': False, 'merged_backend': False, 'merged_database': False } file_mappings = { 'requirements_doc': 'requires_docs/需求文档.md', 'framework_design': 'process_docs/*框架设计文档.md', 'page_list': 'process_docs/页面清单.md', 'frontend_code': 'output_sourcecode/front/*.html', 'backend_code': 'output_sourcecode/backend/*', 'database_code': 'output_sourcecode/db/*.sql', 'user_manual': 'output_docs/*用户手册.md', 'registration_form': 'output_docs/*软件著作权登记信息表.md', 'merged_frontend': 'output_docs/前端源代码.txt', 'merged_backend': 'output_docs/后端源代码.txt', 'merged_database': 'output_docs/数据库源代码.txt' } for key, pattern in file_mappings.items(): if '*' in pattern: # 使用glob匹配 matches = list(self.project_root.glob(pattern)) progress[key] = len(matches) > 0 else: # 直接检查文件 file_path = self.project_root / pattern progress[key] = file_path.exists() # 计算完成度 completed_stages = sum(progress.values()) total_stages = len(progress) completion_rate = (completed_stages / total_stages) * 100 return { 'progress': progress, 'completed_stages': completed_stages, 'total_stages': total_stages, 'completion_rate': completion_rate } def analyze_code_quality(self) -> Dict[str, any]: """分析代码质量""" quality_metrics = { 'frontend': self.analyze_frontend_quality(), 'backend': self.analyze_backend_quality(), 'database': self.analyze_database_quality() } # 计算总体质量分数 quality_scores = [metrics['quality_score'] for metrics in quality_metrics.values() if metrics['quality_score'] > 0] overall_score = sum(quality_scores) / len(quality_scores) if quality_scores else 0 return { 'components': quality_metrics, 'overall_score': overall_score, 'quality_level': self.get_quality_level(overall_score) } def analyze_frontend_quality(self) -> Dict[str, any]: """分析前端代码质量""" frontend_dir = self.project_root / "output_sourcecode" / "front" if not frontend_dir.exists(): return {'exists': False, 'quality_score': 0} html_files = list(frontend_dir.glob("*.html")) if not html_files: return {'exists': False, 'quality_score': 0} metrics = { 'file_count': len(html_files), 'total_size': 0, 'avg_size': 0, 'has_css': 0, 'has_js': 0, 'has_responsive': 0, 'has_navigation': 0, 'html5_compliant': 0, 'quality_score': 0 } for html_file in html_files: try: with open(html_file, 'r', encoding='utf-8') as f: content = f.read() file_size = len(content) metrics['total_size'] += file_size # 检查各种质量指标 if '