Files
assist/src/web/blueprints/analytics.py

67 lines
2.0 KiB
Python
Raw Normal View History

# -*- 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