""" 处理监控 API 路由 """ from flask import Blueprint, jsonify, request from services.process_monitor import process_monitor, PROCESS_STEPS from models.database import db import logging logger = logging.getLogger('process_monitor_api') bp = Blueprint('process_monitor', __name__, url_prefix='/api/process') @bp.route('/steps', methods=['GET']) def get_step_definitions(): """获取处理步骤定义""" return jsonify({ 'success': True, 'steps': PROCESS_STEPS }) @bp.route('/start', methods=['POST']) def start_process(): """ 启动产品处理流程 请求体: { "product_name": "产品名称", "category": "分类", "subcategory": "子分类" } """ try: data = request.get_json() product_name = data.get('product_name') if not product_name: return jsonify({'success': False, 'error': '缺少产品名称'}), 400 category = data.get('category') subcategory = data.get('subcategory') # 启动处理流程 session_id = process_monitor.start_process(product_name, category, subcategory) return jsonify({ 'success': True, 'session_id': session_id, 'message': f'处理流程已启动: {product_name}' }) except Exception as e: logger.error(f"启动处理流程失败: {e}") return jsonify({'success': False, 'error': str(e)}), 500 @bp.route('//status', methods=['GET']) def get_process_status(session_id): """获取处理状态""" status = process_monitor.get_session_status(session_id) if not status: return jsonify({'success': False, 'error': '会话不存在'}), 404 return jsonify({ 'success': True, 'data': status }) @bp.route('//pause', methods=['POST']) def pause_process(session_id): """暂停处理""" if process_monitor.pause_session(session_id): return jsonify({ 'success': True, 'message': '处理已暂停' }) else: return jsonify({'success': False, 'error': '无法暂停'}), 400 @bp.route('//resume', methods=['POST']) def resume_process(session_id): """继续处理""" if process_monitor.resume_session(session_id): return jsonify({ 'success': True, 'message': '处理已继续' }) else: return jsonify({'success': False, 'error': '无法继续'}), 400 @bp.route('//stop', methods=['POST']) def stop_process(session_id): """停止处理""" if process_monitor.stop_session(session_id): return jsonify({ 'success': True, 'message': '处理已停止' }) else: return jsonify({'success': False, 'error': '无法停止'}), 400 @bp.route('/active', methods=['GET']) def get_active_processes(): """获取活动的处理会话""" sessions = db.get_active_sessions() # 获取每个会话的步骤信息 result = [] for session in sessions: steps = db.get_process_steps(session['session_id']) result.append({ 'session': session, 'steps': steps }) return jsonify({ 'success': True, 'sessions': result, 'count': len(result) }) @bp.route('/recent', methods=['GET']) def get_recent_processes(): """获取最近的处理会话""" limit = request.args.get('limit', 20, type=int) sessions = db.get_recent_sessions(limit) return jsonify({ 'success': True, 'sessions': sessions, 'count': len(sessions) }) @bp.route('//steps', methods=['GET']) def get_process_steps(session_id): """获取处理步骤详情""" steps = db.get_process_steps(session_id) # 解析JSON字段 for step in steps: if step.get('step_data'): import json try: step['step_data'] = json.loads(step['step_data']) except: pass if step.get('intervention_data'): import json try: step['intervention_data'] = json.loads(step['intervention_data']) except: pass return jsonify({ 'success': True, 'steps': steps }) @bp.route('//step/', methods=['GET']) def get_step_detail(session_id, step_num): """获取单个步骤详情""" step = db.get_step_detail(session_id, step_num) if not step: return jsonify({'success': False, 'error': '步骤不存在'}), 404 return jsonify({ 'success': True, 'step': step })