同步更新:重构路由、服务模块,更新前端构建
This commit is contained in:
70
services/task_batches.py
Normal file
70
services/task_batches.py
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import annotations
|
||||
|
||||
import database
|
||||
import email_service
|
||||
from services.runtime import get_logger
|
||||
from services.state import safe_batch_append_result
|
||||
|
||||
|
||||
def _get_batch_id_from_source(source: str):
|
||||
"""从source中提取批次ID(source格式: user_scheduled:batch_xxx)"""
|
||||
if not source:
|
||||
return None
|
||||
if source.startswith("user_scheduled:batch_"):
|
||||
return source.split(":", 1)[1]
|
||||
return None
|
||||
|
||||
|
||||
def _send_batch_task_email_if_configured(batch_info: dict):
|
||||
"""批次任务:当所有账号完成后发送打包邮件(在锁外调用)。"""
|
||||
logger = get_logger()
|
||||
try:
|
||||
batch_user_id = batch_info.get("user_id")
|
||||
if not batch_user_id:
|
||||
return
|
||||
user_info = database.get_user_by_id(batch_user_id)
|
||||
if not user_info or not user_info.get("email"):
|
||||
return
|
||||
if not database.get_user_email_notify(batch_user_id):
|
||||
return
|
||||
if not batch_info.get("screenshots"):
|
||||
return
|
||||
email_service.send_batch_task_complete_email_async(
|
||||
user_id=batch_user_id,
|
||||
email=user_info["email"],
|
||||
username=user_info["username"],
|
||||
schedule_name=batch_info.get("schedule_name", "未命名任务"),
|
||||
browse_type=batch_info.get("browse_type", "应读"),
|
||||
screenshots=batch_info["screenshots"],
|
||||
)
|
||||
logger.info(f"[批次邮件] 已发送打包邮件,包含 {len(batch_info['screenshots'])} 条记录")
|
||||
except Exception as e:
|
||||
logger.warning(f"[批次邮件] 发送失败: {e}")
|
||||
|
||||
|
||||
def _batch_task_record_result(
|
||||
batch_id: str,
|
||||
account_name: str,
|
||||
screenshot_path: str,
|
||||
total_items: int,
|
||||
total_attachments: int,
|
||||
):
|
||||
"""批次任务:记录单账号结果,达到完成条件时触发邮件并回收内存。"""
|
||||
logger = get_logger()
|
||||
batch_info = safe_batch_append_result(
|
||||
batch_id,
|
||||
{
|
||||
"account_name": account_name,
|
||||
"path": screenshot_path,
|
||||
"items": total_items,
|
||||
"attachments": total_attachments,
|
||||
},
|
||||
)
|
||||
if batch_info:
|
||||
logger.info(
|
||||
f"[批次邮件] 批次 {batch_id} 已完成: {batch_info.get('completed')}/{batch_info.get('total_accounts')},准备发送邮件"
|
||||
)
|
||||
_send_batch_task_email_if_configured(batch_info)
|
||||
|
||||
Reference in New Issue
Block a user