59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
抄送节点处理器
|
|
处理抄送任务的创建
|
|
"""
|
|
import logging
|
|
from typing import Dict, TYPE_CHECKING
|
|
|
|
from online_dev.workflow.engine.handlers.base_handler import BaseNodeHandler
|
|
|
|
if TYPE_CHECKING:
|
|
from online_dev.workflow.engine.base import ExecutionContext
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class CopyHandler(BaseNodeHandler):
|
|
"""
|
|
抄送节点处理器
|
|
|
|
抄送节点创建抄送任务后自动推进到下一节点
|
|
"""
|
|
|
|
async def execute(self, context: 'ExecutionContext', node: Dict) -> None:
|
|
"""
|
|
执行抄送节点:创建抄送任务并继续推进
|
|
"""
|
|
from online_dev.workflow.engine.assignee_resolver import assignee_resolver
|
|
|
|
node_config = self.get_node_config(node)
|
|
|
|
# 解析抄送人
|
|
assignee_ids = await assignee_resolver.resolve(
|
|
context.db,
|
|
node_config,
|
|
context.instance,
|
|
context.form_data,
|
|
)
|
|
|
|
logger.info(f"创建抄送任务 - 节点: {self.get_node_id(node)}, 抄送人数: {len(assignee_ids)}")
|
|
|
|
# 创建抄送任务
|
|
for assignee_id in assignee_ids:
|
|
await self.create_task(context, node, assignee_id, 'copy')
|
|
|
|
# 记录抄送日志(系统自动执行,不关联用户)
|
|
await self.create_log(
|
|
context, node, 'copy',
|
|
comment=f'抄送给 {len(assignee_ids)} 人',
|
|
extra_data={
|
|
'assignee_ids': assignee_ids,
|
|
},
|
|
operator_id='',
|
|
)
|
|
|
|
# 抄送后继续推进(不等待)
|
|
await self.advance_to_next(context, node)
|