2025-12-08 00:53:23 +08:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
"""
|
|
|
|
|
分析相关API蓝图
|
|
|
|
|
处理数据分析、报告生成等功能
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
import os
|
2026-04-07 13:12:04 +08:00
|
|
|
import logging
|
|
|
|
|
from flask import Blueprint, request, jsonify, send_file
|
|
|
|
|
from src.core.query_optimizer import query_optimizer
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
2025-12-08 00:53:23 +08:00
|
|
|
|
|
|
|
|
analytics_bp = Blueprint('analytics', __name__, url_prefix='/api/analytics')
|
|
|
|
|
|
|
|
|
|
|
2026-04-07 13:12:04 +08:00
|
|
|
@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
|
|
|
|
|
|
|
|
|
|
|
2025-12-08 00:53:23 +08:00
|
|
|
@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'] = '总工单数'
|
2026-04-07 13:12:04 +08:00
|
|
|
ws['B4'] = analytics.get('workorders', {}).get('total', 0)
|
2025-12-08 00:53:23 +08:00
|
|
|
ws['A5'] = '待处理'
|
2026-04-07 13:12:04 +08:00
|
|
|
ws['B5'] = analytics.get('workorders', {}).get('open', 0)
|
2025-12-08 00:53:23 +08:00
|
|
|
ws['A6'] = '已解决'
|
2026-04-07 13:12:04 +08:00
|
|
|
ws['B6'] = analytics.get('workorders', {}).get('resolved', 0)
|
2025-12-08 00:53:23 +08:00
|
|
|
|
|
|
|
|
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:
|
2026-04-07 13:12:04 +08:00
|
|
|
logger.error(f"导出分析报告失败: {e}")
|
2025-12-08 00:53:23 +08:00
|
|
|
return jsonify({"error": str(e)}), 500
|