71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
#!/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)
|
||
|