feat: 自动提交 - 周五 2025/09/19 19:42:44.04
This commit is contained in:
@@ -1,17 +1,23 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
对话管理蓝图
|
||||
处理对话相关的API路由
|
||||
处理对话相关的API路由,整合飞书工单和AI建议
|
||||
"""
|
||||
|
||||
from flask import Blueprint, request, jsonify
|
||||
from src.core.database import db_manager
|
||||
from src.core.models import Conversation
|
||||
from src.core.models import Conversation, WorkOrder, WorkOrderSuggestion
|
||||
from src.core.query_optimizer import query_optimizer
|
||||
from src.dialogue.conversation_history import ConversationHistoryManager
|
||||
from datetime import timedelta
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
conversations_bp = Blueprint('conversations', __name__, url_prefix='/api/conversations')
|
||||
|
||||
# 初始化对话历史管理器
|
||||
history_manager = ConversationHistoryManager()
|
||||
|
||||
@conversations_bp.route('')
|
||||
def get_conversations():
|
||||
"""获取对话历史列表(分页)- 优化版"""
|
||||
@@ -197,3 +203,136 @@ def migrate_merge_conversations():
|
||||
})
|
||||
except Exception as e:
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@conversations_bp.route('/workorder/<int:work_order_id>/timeline')
|
||||
def get_workorder_timeline(work_order_id):
|
||||
"""获取工单的完整对话时间线(包含AI建议和飞书同步)"""
|
||||
try:
|
||||
include_ai_suggestions = request.args.get('include_ai_suggestions', 'true').lower() == 'true'
|
||||
include_feishu_sync = request.args.get('include_feishu_sync', 'true').lower() == 'true'
|
||||
limit = request.args.get('limit', 20, type=int)
|
||||
|
||||
timeline = history_manager.get_workorder_complete_timeline(
|
||||
work_order_id=work_order_id,
|
||||
include_ai_suggestions=include_ai_suggestions,
|
||||
include_feishu_sync=include_feishu_sync,
|
||||
limit=limit
|
||||
)
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'work_order_id': work_order_id,
|
||||
'timeline': timeline,
|
||||
'total_count': len(timeline)
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"获取工单时间线失败: {e}")
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@conversations_bp.route('/workorder/<int:work_order_id>/context')
|
||||
def get_workorder_context(work_order_id):
|
||||
"""获取工单的AI建议对话上下文"""
|
||||
try:
|
||||
suggestion_id = request.args.get('suggestion_id', type=int)
|
||||
|
||||
context = history_manager.get_ai_suggestion_context(
|
||||
work_order_id=work_order_id,
|
||||
suggestion_id=suggestion_id
|
||||
)
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'work_order_id': work_order_id,
|
||||
'context': context
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"获取工单上下文失败: {e}")
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@conversations_bp.route('/workorder/<int:work_order_id>/summary')
|
||||
def get_workorder_summary(work_order_id):
|
||||
"""获取工单对话摘要"""
|
||||
try:
|
||||
# 获取时间线数据
|
||||
timeline = history_manager.get_workorder_complete_timeline(
|
||||
work_order_id=work_order_id,
|
||||
include_ai_suggestions=True,
|
||||
include_feishu_sync=True,
|
||||
limit=50
|
||||
)
|
||||
|
||||
if not timeline:
|
||||
return jsonify({"error": "没有找到对话记录"}), 404
|
||||
|
||||
# 生成简单摘要
|
||||
summary = {
|
||||
"work_order_id": work_order_id,
|
||||
"total_interactions": len(timeline),
|
||||
"conversations": len([t for t in timeline if t["type"] == "conversation"]),
|
||||
"ai_suggestions": len([t for t in timeline if t["type"] == "ai_suggestion"]),
|
||||
"feishu_syncs": len([t for t in timeline if t["type"] == "feishu_sync"]),
|
||||
"generated_at": timeline[0]["timestamp"].isoformat() if timeline else None
|
||||
}
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'work_order_id': work_order_id,
|
||||
'summary': summary
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"获取工单摘要失败: {e}")
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@conversations_bp.route('/search')
|
||||
def search_conversations():
|
||||
"""搜索对话记录(包含AI建议)"""
|
||||
try:
|
||||
search_query = request.args.get('q', '')
|
||||
work_order_id = request.args.get('work_order_id', type=int)
|
||||
conversation_type = request.args.get('type') # conversation, ai_suggestion, all
|
||||
limit = request.args.get('limit', 20, type=int)
|
||||
|
||||
if not search_query:
|
||||
return jsonify({"error": "搜索查询不能为空"}), 400
|
||||
|
||||
results = history_manager.search_conversations_by_content(
|
||||
search_query=search_query,
|
||||
work_order_id=work_order_id,
|
||||
conversation_type=conversation_type,
|
||||
limit=limit
|
||||
)
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'query': search_query,
|
||||
'results': results,
|
||||
'total_count': len(results)
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"搜索对话记录失败: {e}")
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@conversations_bp.route('/analytics')
|
||||
def get_conversation_analytics():
|
||||
"""获取对话分析数据"""
|
||||
try:
|
||||
work_order_id = request.args.get('work_order_id', type=int)
|
||||
days = request.args.get('days', 7, type=int)
|
||||
|
||||
analytics = history_manager.get_conversation_analytics(
|
||||
work_order_id=work_order_id,
|
||||
days=days
|
||||
)
|
||||
|
||||
return jsonify({
|
||||
'success': True,
|
||||
'analytics': analytics
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"获取对话分析数据失败: {e}")
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
Reference in New Issue
Block a user