新增 消息定时推送功能
This commit is contained in:
@@ -69,6 +69,7 @@ def message_push_management():
|
|||||||
"""消息推送管理页面"""
|
"""消息推送管理页面"""
|
||||||
return render_template('message_push_management.html')
|
return render_template('message_push_management.html')
|
||||||
|
|
||||||
|
|
||||||
# API路由
|
# API路由
|
||||||
@message_push_bp.route('/api/tasks', methods=['GET'])
|
@message_push_bp.route('/api/tasks', methods=['GET'])
|
||||||
@login_required
|
@login_required
|
||||||
@@ -81,11 +82,11 @@ def api_tasks_list():
|
|||||||
end_time = request.args.get('end_time')
|
end_time = request.args.get('end_time')
|
||||||
page = int(request.args.get('page', 1))
|
page = int(request.args.get('page', 1))
|
||||||
limit = int(request.args.get('limit', 20))
|
limit = int(request.args.get('limit', 20))
|
||||||
|
|
||||||
# 获取任务列表
|
# 获取任务列表
|
||||||
db = current_app.dashboard_server.task_db
|
db = current_app.dashboard_server.task_db
|
||||||
tasks, total = db.get_tasks_list(status, start_time, end_time, page, limit)
|
tasks, total = db.get_tasks_list(status, start_time, end_time, page, limit)
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"success": True,
|
"success": True,
|
||||||
"data": {
|
"data": {
|
||||||
@@ -99,6 +100,7 @@ def api_tasks_list():
|
|||||||
logger.error(f"获取任务列表失败: {e}")
|
logger.error(f"获取任务列表失败: {e}")
|
||||||
return jsonify({"success": False, "error": str(e)}), 500
|
return jsonify({"success": False, "error": str(e)}), 500
|
||||||
|
|
||||||
|
|
||||||
@message_push_bp.route('/api/tasks', methods=['POST'])
|
@message_push_bp.route('/api/tasks', methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def api_create_task():
|
def api_create_task():
|
||||||
@@ -107,22 +109,22 @@ def api_create_task():
|
|||||||
data = request.json
|
data = request.json
|
||||||
if not data:
|
if not data:
|
||||||
return jsonify({"success": False, "error": "无效的请求数据"}), 400
|
return jsonify({"success": False, "error": "无效的请求数据"}), 400
|
||||||
|
|
||||||
# 获取用户名
|
# 获取用户名
|
||||||
username = session.get('username')
|
username = session.get('username')
|
||||||
if not username:
|
if not username:
|
||||||
return jsonify({"success": False, "error": "未登录或会话已过期"}), 401
|
return jsonify({"success": False, "error": "未登录或会话已过期"}), 401
|
||||||
|
|
||||||
# 生成任务ID
|
# 生成任务ID
|
||||||
data['task_id'] = str(uuid.uuid4())
|
data['task_id'] = str(uuid.uuid4())
|
||||||
data['creator_id'] = username
|
data['creator_id'] = username
|
||||||
|
|
||||||
# 创建任务
|
# 创建任务
|
||||||
db = current_app.dashboard_server.task_db
|
db = current_app.dashboard_server.task_db
|
||||||
task = db.create_task(data)
|
task = db.create_task(data)
|
||||||
if not task:
|
if not task:
|
||||||
return jsonify({"success": False, "error": "创建任务失败"}), 500
|
return jsonify({"success": False, "error": "创建任务失败"}), 500
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"success": True,
|
"success": True,
|
||||||
"data": {
|
"data": {
|
||||||
@@ -133,6 +135,7 @@ def api_create_task():
|
|||||||
logger.error(f"创建任务失败: {e}")
|
logger.error(f"创建任务失败: {e}")
|
||||||
return jsonify({"success": False, "error": str(e)}), 500
|
return jsonify({"success": False, "error": str(e)}), 500
|
||||||
|
|
||||||
|
|
||||||
@message_push_bp.route('/api/tasks/<task_id>', methods=['PUT'])
|
@message_push_bp.route('/api/tasks/<task_id>', methods=['PUT'])
|
||||||
@login_required
|
@login_required
|
||||||
def api_update_task(task_id):
|
def api_update_task(task_id):
|
||||||
@@ -141,17 +144,17 @@ def api_update_task(task_id):
|
|||||||
data = request.json
|
data = request.json
|
||||||
if not data:
|
if not data:
|
||||||
return jsonify({"success": False, "error": "无效的请求数据"}), 400
|
return jsonify({"success": False, "error": "无效的请求数据"}), 400
|
||||||
|
|
||||||
# 获取任务
|
# 获取任务
|
||||||
db = current_app.dashboard_server.task_db
|
db = current_app.dashboard_server.task_db
|
||||||
task = db.get_task(task_id)
|
task = db.get_task(task_id)
|
||||||
if not task:
|
if not task:
|
||||||
return jsonify({"success": False, "error": "任务不存在"}), 404
|
return jsonify({"success": False, "error": "任务不存在"}), 404
|
||||||
|
|
||||||
# 更新任务
|
# 更新任务
|
||||||
if not db.update_task(task_id, data):
|
if not db.update_task(task_id, data):
|
||||||
return jsonify({"success": False, "error": "更新任务失败"}), 500
|
return jsonify({"success": False, "error": "更新任务失败"}), 500
|
||||||
|
|
||||||
# 获取更新后的任务
|
# 获取更新后的任务
|
||||||
updated_task = db.get_task(task_id)
|
updated_task = db.get_task(task_id)
|
||||||
return jsonify({
|
return jsonify({
|
||||||
@@ -164,6 +167,7 @@ def api_update_task(task_id):
|
|||||||
logger.error(f"更新任务失败: {e}")
|
logger.error(f"更新任务失败: {e}")
|
||||||
return jsonify({"success": False, "error": str(e)}), 500
|
return jsonify({"success": False, "error": str(e)}), 500
|
||||||
|
|
||||||
|
|
||||||
@message_push_bp.route('/api/tasks/<task_id>', methods=['DELETE'])
|
@message_push_bp.route('/api/tasks/<task_id>', methods=['DELETE'])
|
||||||
@login_required
|
@login_required
|
||||||
def api_delete_task(task_id):
|
def api_delete_task(task_id):
|
||||||
@@ -174,11 +178,11 @@ def api_delete_task(task_id):
|
|||||||
task = db.get_task(task_id)
|
task = db.get_task(task_id)
|
||||||
if not task:
|
if not task:
|
||||||
return jsonify({"success": False, "error": "任务不存在"}), 404
|
return jsonify({"success": False, "error": "任务不存在"}), 404
|
||||||
|
|
||||||
# 删除任务
|
# 删除任务
|
||||||
if not db.delete_task(task_id):
|
if not db.delete_task(task_id):
|
||||||
return jsonify({"success": False, "error": "删除任务失败"}), 500
|
return jsonify({"success": False, "error": "删除任务失败"}), 500
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"success": True,
|
"success": True,
|
||||||
"message": "任务已删除"
|
"message": "任务已删除"
|
||||||
@@ -187,6 +191,7 @@ def api_delete_task(task_id):
|
|||||||
logger.error(f"删除任务失败: {e}")
|
logger.error(f"删除任务失败: {e}")
|
||||||
return jsonify({"success": False, "error": str(e)}), 500
|
return jsonify({"success": False, "error": str(e)}), 500
|
||||||
|
|
||||||
|
|
||||||
@message_push_bp.route('/api/tasks/<task_id>/pause', methods=['POST'])
|
@message_push_bp.route('/api/tasks/<task_id>/pause', methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def api_pause_task(task_id):
|
def api_pause_task(task_id):
|
||||||
@@ -197,11 +202,11 @@ def api_pause_task(task_id):
|
|||||||
task = db.get_task(task_id)
|
task = db.get_task(task_id)
|
||||||
if not task:
|
if not task:
|
||||||
return jsonify({"success": False, "error": "任务不存在"}), 404
|
return jsonify({"success": False, "error": "任务不存在"}), 404
|
||||||
|
|
||||||
# 暂停任务
|
# 暂停任务
|
||||||
if not db.update_task(task_id, {'status': 'paused'}):
|
if not db.update_task(task_id, {'status': 'paused'}):
|
||||||
return jsonify({"success": False, "error": "暂停任务失败"}), 500
|
return jsonify({"success": False, "error": "暂停任务失败"}), 500
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"success": True,
|
"success": True,
|
||||||
"message": "任务已暂停"
|
"message": "任务已暂停"
|
||||||
@@ -210,6 +215,7 @@ def api_pause_task(task_id):
|
|||||||
logger.error(f"暂停任务失败: {e}")
|
logger.error(f"暂停任务失败: {e}")
|
||||||
return jsonify({"success": False, "error": str(e)}), 500
|
return jsonify({"success": False, "error": str(e)}), 500
|
||||||
|
|
||||||
|
|
||||||
@message_push_bp.route('/api/tasks/<task_id>/resume', methods=['POST'])
|
@message_push_bp.route('/api/tasks/<task_id>/resume', methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def api_resume_task(task_id):
|
def api_resume_task(task_id):
|
||||||
@@ -220,11 +226,11 @@ def api_resume_task(task_id):
|
|||||||
task = db.get_task(task_id)
|
task = db.get_task(task_id)
|
||||||
if not task:
|
if not task:
|
||||||
return jsonify({"success": False, "error": "任务不存在"}), 404
|
return jsonify({"success": False, "error": "任务不存在"}), 404
|
||||||
|
|
||||||
# 恢复任务
|
# 恢复任务
|
||||||
if not db.update_task(task_id, {'status': 'scheduled'}):
|
if not db.update_task(task_id, {'status': 'scheduled'}):
|
||||||
return jsonify({"success": False, "error": "恢复任务失败"}), 500
|
return jsonify({"success": False, "error": "恢复任务失败"}), 500
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"success": True,
|
"success": True,
|
||||||
"message": "任务已恢复"
|
"message": "任务已恢复"
|
||||||
@@ -233,6 +239,7 @@ def api_resume_task(task_id):
|
|||||||
logger.error(f"恢复任务失败: {e}")
|
logger.error(f"恢复任务失败: {e}")
|
||||||
return jsonify({"success": False, "error": str(e)}), 500
|
return jsonify({"success": False, "error": str(e)}), 500
|
||||||
|
|
||||||
|
|
||||||
@message_push_bp.route('/api/tasks/<task_id>/preview', methods=['POST'])
|
@message_push_bp.route('/api/tasks/<task_id>/preview', methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def api_preview_task(task_id):
|
def api_preview_task(task_id):
|
||||||
@@ -243,28 +250,28 @@ def api_preview_task(task_id):
|
|||||||
task = db.get_task(task_id)
|
task = db.get_task(task_id)
|
||||||
if not task:
|
if not task:
|
||||||
return jsonify({"success": False, "error": "任务不存在"}), 404
|
return jsonify({"success": False, "error": "任务不存在"}), 404
|
||||||
|
|
||||||
# 获取机器人实例
|
# 获取机器人实例
|
||||||
server = current_app.dashboard_server
|
server = current_app.dashboard_server
|
||||||
if not server or not server.client:
|
if not server or not server.client:
|
||||||
return jsonify({"success": False, "error": "机器人未初始化"}), 500
|
return jsonify({"success": False, "error": "机器人未初始化"}), 500
|
||||||
|
# 获取用户名
|
||||||
preview_user = session.get('user_id')
|
preview_user = session.get('username')
|
||||||
if not preview_user:
|
if not preview_user:
|
||||||
return jsonify({"success": False, "error": "未登录或会话已过期"}), 401
|
return jsonify({"success": False, "error": "未登录或会话已过期"}), 401
|
||||||
|
|
||||||
# 发送文本消息
|
# 发送文本消息
|
||||||
if task.get('content_text'):
|
if task.get('content_text'):
|
||||||
send_message_in_thread(server.client.send_text_message, preview_user, task['content_text'])
|
send_message_in_thread(server.client.send_text_message, preview_user, task['content_text'])
|
||||||
|
|
||||||
# 发送图片消息
|
# 发送图片消息
|
||||||
if task.get('content_image'):
|
if task.get('content_image'):
|
||||||
send_message_in_thread(server.client.send_image_message, preview_user, task['content_image'])
|
send_message_in_thread(server.client.send_image_message, preview_user, task['content_image'])
|
||||||
|
|
||||||
# 发送链接消息
|
# 发送链接消息
|
||||||
if task.get('content_link'):
|
if task.get('content_link'):
|
||||||
send_message_in_thread(server.client.send_link_message, preview_user, task['content_link'])
|
send_message_in_thread(server.client.send_link_message, preview_user, task['content_link'])
|
||||||
|
|
||||||
# 发送小程序消息
|
# 发送小程序消息
|
||||||
if task.get('content_miniprogram'):
|
if task.get('content_miniprogram'):
|
||||||
miniprogram = task['content_miniprogram']
|
miniprogram = task['content_miniprogram']
|
||||||
@@ -276,7 +283,7 @@ def api_preview_task(task_id):
|
|||||||
miniprogram.get('pagepath'),
|
miniprogram.get('pagepath'),
|
||||||
miniprogram.get('thumb_url')
|
miniprogram.get('thumb_url')
|
||||||
)
|
)
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"success": True,
|
"success": True,
|
||||||
"message": "预览已发送"
|
"message": "预览已发送"
|
||||||
@@ -285,6 +292,7 @@ def api_preview_task(task_id):
|
|||||||
logger.error(f"发送预览失败: {e}")
|
logger.error(f"发送预览失败: {e}")
|
||||||
return jsonify({"success": False, "error": str(e)}), 500
|
return jsonify({"success": False, "error": str(e)}), 500
|
||||||
|
|
||||||
|
|
||||||
@message_push_bp.route('/api/tasks/<task_id>/logs', methods=['GET'])
|
@message_push_bp.route('/api/tasks/<task_id>/logs', methods=['GET'])
|
||||||
@login_required
|
@login_required
|
||||||
def api_task_logs(task_id):
|
def api_task_logs(task_id):
|
||||||
@@ -293,15 +301,15 @@ def api_task_logs(task_id):
|
|||||||
# 获取查询参数
|
# 获取查询参数
|
||||||
page = int(request.args.get('page', 1))
|
page = int(request.args.get('page', 1))
|
||||||
limit = int(request.args.get('limit', 20))
|
limit = int(request.args.get('limit', 20))
|
||||||
|
|
||||||
# 查询日志
|
# 查询日志
|
||||||
db = current_app.dashboard_server.task_db
|
db = current_app.dashboard_server.task_db
|
||||||
logs_data = db.get_task_logs_with_pagination(task_id, page, limit)
|
logs_data = db.get_task_logs_with_pagination(task_id, page, limit)
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"success": True,
|
"success": True,
|
||||||
"data": logs_data
|
"data": logs_data
|
||||||
})
|
})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"获取任务日志失败: {e}")
|
logger.error(f"获取任务日志失败: {e}")
|
||||||
return jsonify({"success": False, "error": str(e)}), 500
|
return jsonify({"success": False, "error": str(e)}), 500
|
||||||
|
|||||||
Reference in New Issue
Block a user