# -*- coding: utf-8 -*- """ 分析相关API蓝图 处理数据分析、报告生成等功能 """ import os import logging from flask import Blueprint, request, jsonify, send_file from src.core.query_optimizer import query_optimizer logger = logging.getLogger(__name__) analytics_bp = Blueprint('analytics', __name__, url_prefix='/api/analytics') @analytics_bp.route('') def get_analytics(): """获取分析数据(支持租户筛选和时间范围)""" try: time_range = request.args.get('timeRange', '30') tenant_id = request.args.get('tenant_id') try: days = int(time_range) except (ValueError, TypeError): days = 30 analytics = query_optimizer.get_analytics_optimized(days, tenant_id=tenant_id) return jsonify(analytics) except Exception as e: logger.error(f"获取分析数据失败: {e}") return jsonify({"error": str(e)}), 500 @analytics_bp.route('/export') def export_analytics(): """导出分析报告""" try: from openpyxl import Workbook from openpyxl.styles import Font analytics = query_optimizer.get_analytics_optimized(30) wb = Workbook() ws = wb.active ws.title = "分析报告" ws['A1'] = 'TSP智能助手分析报告' ws['A1'].font = Font(size=16, bold=True) ws['A3'] = '工单统计' ws['A3'].font = Font(bold=True) ws['A4'] = '总工单数' ws['B4'] = analytics.get('workorders', {}).get('total', 0) ws['A5'] = '待处理' ws['B5'] = analytics.get('workorders', {}).get('open', 0) ws['A6'] = '已解决' ws['B6'] = analytics.get('workorders', {}).get('resolved', 0) report_path = 'uploads/analytics_report.xlsx' os.makedirs('uploads', exist_ok=True) wb.save(report_path) return send_file(report_path, as_attachment=True, download_name='analytics_report.xlsx') except Exception as e: logger.error(f"导出分析报告失败: {e}") return jsonify({"error": str(e)}), 500