新增 消息定时推送功能
This commit is contained in:
220
admin/dashboard/blueprints/message_push.py
Normal file
220
admin/dashboard/blueprints/message_push.py
Normal file
@@ -0,0 +1,220 @@
|
||||
from flask import Blueprint, render_template, jsonify, request, current_app
|
||||
from .auth import login_required
|
||||
from loguru import logger
|
||||
import json
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
|
||||
# 创建消息推送管理蓝图
|
||||
message_push_bp = Blueprint('message_push', __name__, url_prefix='/message_push')
|
||||
|
||||
# 消息推送管理页面
|
||||
@message_push_bp.route('/')
|
||||
@login_required
|
||||
def message_push_management():
|
||||
"""消息推送管理页面"""
|
||||
return render_template('message_push_management.html')
|
||||
|
||||
# API路由
|
||||
@message_push_bp.route('/api/tasks', methods=['GET'])
|
||||
@login_required
|
||||
def api_tasks_list():
|
||||
"""获取任务列表API"""
|
||||
try:
|
||||
# 获取查询参数
|
||||
status = request.args.get('status')
|
||||
start_time = request.args.get('start_time')
|
||||
end_time = request.args.get('end_time')
|
||||
page = int(request.args.get('page', 1))
|
||||
limit = int(request.args.get('limit', 20))
|
||||
|
||||
# 获取任务列表
|
||||
db = current_app.dashboard_server.task_db
|
||||
tasks, total = db.get_tasks_list(status, start_time, end_time, page, limit)
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"data": {
|
||||
"tasks": tasks,
|
||||
"total": total,
|
||||
"page": page,
|
||||
"limit": limit
|
||||
}
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"获取任务列表失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@message_push_bp.route('/api/tasks', methods=['POST'])
|
||||
@login_required
|
||||
def api_create_task():
|
||||
"""创建任务API"""
|
||||
try:
|
||||
data = request.json
|
||||
if not data:
|
||||
return jsonify({"success": False, "error": "无效的请求数据"}), 400
|
||||
|
||||
# 生成任务ID
|
||||
data['task_id'] = str(uuid.uuid4())
|
||||
data['creator_id'] = request.user.get('id')
|
||||
|
||||
# 创建任务
|
||||
db = current_app.dashboard_server.task_db
|
||||
task = db.create_task(data)
|
||||
if not task:
|
||||
return jsonify({"success": False, "error": "创建任务失败"}), 500
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"data": {
|
||||
"task": task
|
||||
}
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"创建任务失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@message_push_bp.route('/api/tasks/<task_id>', methods=['PUT'])
|
||||
@login_required
|
||||
def api_update_task(task_id):
|
||||
"""更新任务API"""
|
||||
try:
|
||||
data = request.json
|
||||
if not data:
|
||||
return jsonify({"success": False, "error": "无效的请求数据"}), 400
|
||||
|
||||
# 获取任务
|
||||
db = current_app.dashboard_server.task_db
|
||||
task = db.get_task(task_id)
|
||||
if not task:
|
||||
return jsonify({"success": False, "error": "任务不存在"}), 404
|
||||
|
||||
# 更新任务
|
||||
if not db.update_task(task_id, data):
|
||||
return jsonify({"success": False, "error": "更新任务失败"}), 500
|
||||
|
||||
# 获取更新后的任务
|
||||
updated_task = db.get_task(task_id)
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"data": {
|
||||
"task": updated_task
|
||||
}
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"更新任务失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@message_push_bp.route('/api/tasks/<task_id>', methods=['DELETE'])
|
||||
@login_required
|
||||
def api_delete_task(task_id):
|
||||
"""删除任务API"""
|
||||
try:
|
||||
# 获取任务
|
||||
db = current_app.dashboard_server.task_db
|
||||
task = db.get_task(task_id)
|
||||
if not task:
|
||||
return jsonify({"success": False, "error": "任务不存在"}), 404
|
||||
|
||||
# 删除任务
|
||||
if not db.delete_task(task_id):
|
||||
return jsonify({"success": False, "error": "删除任务失败"}), 500
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": "任务已删除"
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"删除任务失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@message_push_bp.route('/api/tasks/<task_id>/pause', methods=['POST'])
|
||||
@login_required
|
||||
def api_pause_task(task_id):
|
||||
"""暂停任务API"""
|
||||
try:
|
||||
# 获取任务
|
||||
db = current_app.dashboard_server.task_db
|
||||
task = db.get_task(task_id)
|
||||
if not task:
|
||||
return jsonify({"success": False, "error": "任务不存在"}), 404
|
||||
|
||||
# 暂停任务
|
||||
if not db.update_task(task_id, {'status': 'paused'}):
|
||||
return jsonify({"success": False, "error": "暂停任务失败"}), 500
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": "任务已暂停"
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"暂停任务失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@message_push_bp.route('/api/tasks/<task_id>/resume', methods=['POST'])
|
||||
@login_required
|
||||
def api_resume_task(task_id):
|
||||
"""恢复任务API"""
|
||||
try:
|
||||
# 获取任务
|
||||
db = current_app.dashboard_server.task_db
|
||||
task = db.get_task(task_id)
|
||||
if not task:
|
||||
return jsonify({"success": False, "error": "任务不存在"}), 404
|
||||
|
||||
# 恢复任务
|
||||
if not db.update_task(task_id, {'status': 'scheduled'}):
|
||||
return jsonify({"success": False, "error": "恢复任务失败"}), 500
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": "任务已恢复"
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"恢复任务失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@message_push_bp.route('/api/tasks/<task_id>/preview', methods=['POST'])
|
||||
@login_required
|
||||
def api_preview_task(task_id):
|
||||
"""预览任务API"""
|
||||
try:
|
||||
# 获取任务
|
||||
db = current_app.dashboard_server.task_db
|
||||
task = db.get_task(task_id)
|
||||
if not task:
|
||||
return jsonify({"success": False, "error": "任务不存在"}), 404
|
||||
|
||||
# 发送预览
|
||||
message_push = current_app.dashboard_server.message_push_task.message_push
|
||||
if not message_push.send_preview(task, [request.user.get('id')]):
|
||||
return jsonify({"success": False, "error": "发送预览失败"}), 500
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"message": "预览已发送"
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"发送预览失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
|
||||
@message_push_bp.route('/api/tasks/<task_id>/logs', methods=['GET'])
|
||||
@login_required
|
||||
def api_task_logs(task_id):
|
||||
"""获取任务日志API"""
|
||||
try:
|
||||
# 获取查询参数
|
||||
page = int(request.args.get('page', 1))
|
||||
limit = int(request.args.get('limit', 20))
|
||||
|
||||
# 查询日志
|
||||
db = current_app.dashboard_server.task_db
|
||||
logs_data = db.get_task_logs_with_pagination(task_id, page, limit)
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"data": logs_data
|
||||
})
|
||||
except Exception as e:
|
||||
logger.error(f"获取任务日志失败: {e}")
|
||||
return jsonify({"success": False, "error": str(e)}), 500
|
||||
Reference in New Issue
Block a user