feat(REQ-4418) - 新增抄送节点“前序节点”找人实现

This commit is contained in:
wangli 2025-08-18 17:59:54 +08:00
parent 1daacaf4b9
commit 0526c6d18e
2 changed files with 14 additions and 7 deletions

View File

@ -33,10 +33,13 @@ import java.util.List;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import static cn.axzo.workflow.common.constant.BpmnConstants.CARBON_ASSIGNER_LIMIT_NUMBER;
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT;
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getActivitySignature;
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverSpecify;
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getNoticeConfig;
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.getLimitedElementList;
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.removeDuplicateByPersonId;
import static cn.axzo.workflow.core.listener.AbstractBpmnEventListener.parseProcessDefinitionKey;
/**
@ -75,13 +78,15 @@ public class EngineCarbonCopyV2EventListener implements JavaDelegate {
carbonUsers.addAll(engineExecutionStartListener.approverSelect(specify.getType(), serviceTask, execution, false));
});
List<BpmnTaskDelegateAssigner> limitedAssigners = getLimitedElementList(removeDuplicateByPersonId(carbonUsers), CARBON_ASSIGNER_LIMIT_NUMBER);
RuntimeService runtimeService =
springProcessEngineConfiguration.getProcessEngineConfiguration().getRuntimeService();
runtimeService.setVariable(processInstanceId,
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + currentActivityId, carbonUsers);
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + currentActivityId, limitedAssigners);
// 发送抄送事件
invokeCarbonCopy(carbonUsers, getNoticeConfig(mainProcess), getActivitySignature(serviceTask), execution);
invokeCarbonCopy(limitedAssigners, getNoticeConfig(mainProcess), getActivitySignature(serviceTask), execution);
}
private void invokeCarbonCopy(List<BpmnTaskDelegateAssigner> carbonUsers,

View File

@ -1,6 +1,7 @@
package cn.axzo.workflow.server.controller.delegate;
import cn.axzo.workflow.common.enums.ApproverSpecifyEnum;
import cn.axzo.workflow.common.enums.BpmnFlowNodeType;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.core.repository.entity.ExtAxProcessLog;
import cn.axzo.workflow.core.service.ExtAxProcessLogService;
@ -13,9 +14,12 @@ import org.springframework.util.CollectionUtils;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static cn.axzo.workflow.common.enums.BpmnFlowNodeType.NODE_CARBON_COPY;
/**
* 基于前序节点的任务审批人选择器除非抄送节点
*
@ -30,22 +34,20 @@ public class BasedPreAllNodeTaskAssigneeSelector extends AbstractBpmnTaskAssigne
@Override
public String getType() {
return ApproverSpecifyEnum.pre_all_node_approver_v2.getType();
return ApproverSpecifyEnum.preAllNodApprover_v2.getType();
}
@Override
public List<BpmnTaskDelegateAssigner> select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) {
// NODE_CARBON_COPY
ExtAxProcessLog query = new ExtAxProcessLog();
query.setProcessInstanceId(execution.getProcessInstanceId());
List<ExtAxProcessLog> logs = processLogService.genericQuery(query);
if (CollectionUtils.isEmpty(logs)) {
return Collections.emptyList();
}
List<BpmnTaskDelegateAssigner> allAssignees = logs.stream()
return logs.stream()
.filter(i -> !Objects.equals(BpmnFlowNodeType.valueOfType(i.getNodeType()), NODE_CARBON_COPY))
.flatMap(log -> !CollectionUtils.isEmpty(log.getAssigneeFull()) ? log.getAssigneeFull().stream() : Stream.empty())
.collect(Collectors.toList());
}
}