add - 转交和加签时,限制添加已在审批列表中的人
This commit is contained in:
parent
aff7c15852
commit
a8e40a6928
@ -59,6 +59,7 @@ public enum BpmnErrorCode implements IProjectRespCode {
|
||||
TASK_REMIND_ERROR_NOT_EXISTS("06004", "当前审批节点没有待审批任务, 不能催办"),
|
||||
ACTIVITY_TRIGGER_NOT_EXISTS("06005", "触发 ID:【{}】不存在"),
|
||||
CALC_TASK_ASSIGNEE_ERROR("06006", "执行计算审批候选人出现异常: {}"),
|
||||
ASSIGNEE_HAS_BEEN_EXISTS("06007", "你选择的人员已是审批人,请检查后提交"),
|
||||
|
||||
// ========== form Model 07-001 ==========
|
||||
FORM_MODEL_NOT_EXISTS("07001", "表单模型不存在"),
|
||||
|
||||
@ -82,6 +82,7 @@ import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -110,6 +111,7 @@ import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCES
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.REJECTED;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.TRANSFER;
|
||||
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.valueOfStatus;
|
||||
import static cn.axzo.workflow.core.common.enums.BpmnErrorCode.ASSIGNEE_HAS_BEEN_EXISTS;
|
||||
import static cn.axzo.workflow.core.common.enums.BpmnErrorCode.PROCESS_INSTANCE_ID_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.core.common.enums.BpmnErrorCode.PROCESS_INSTANCE_NOT_EXISTS;
|
||||
import static cn.axzo.workflow.core.common.enums.BpmnErrorCode.TASK_APOSTILLE_NOT_SUPPORT;
|
||||
@ -428,13 +430,10 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
|
||||
}
|
||||
}
|
||||
|
||||
private void createSignSubTasksV2(BpmnTaskCountersignDTO countersignDTO, TaskEntity taskEntity) {
|
||||
private void createSignSubTasksV2(BpmnTaskCountersignDTO countersignDTO, TaskEntity taskEntity, List<BpmnTaskDelegateAssigner> taskAssignerListSnapshot) {
|
||||
// 这个节点下所有审批人快照
|
||||
String activityListSnapshot =
|
||||
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + taskEntity.getTaskDefinitionKey();
|
||||
List<BpmnTaskDelegateAssigner> taskAssignerListSnapshot =
|
||||
runtimeService.getVariable(taskEntity.getProcessInstanceId(),
|
||||
activityListSnapshot, List.class);
|
||||
taskAssignerListSnapshot.addAll(countersignDTO.getTargetAssignerList());
|
||||
runtimeService.setVariable(taskEntity.getProcessInstanceId(), activityListSnapshot, taskAssignerListSnapshot);
|
||||
log.info("正在进行加签任务:{},待加签人合并列表:{}", taskEntity.getId(), JSONUtil.toJsonStr(taskAssignerListSnapshot));
|
||||
@ -767,6 +766,13 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
|
||||
public void transferTask(BpmnTaskAssigneeDTO dto) {
|
||||
Task task = checkTask(dto.getOriginAssigner().buildAssigneeId(), dto.getTaskId());
|
||||
|
||||
List<BpmnTaskDelegateAssigner> originAssingeeList = runtimeService.getVariable(task.getProcessInstanceId(),
|
||||
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + task.getTaskDefinitionKey(), List.class);
|
||||
Optional<BpmnTaskDelegateAssigner> exists = originAssingeeList.stream().filter(i -> Objects.equals(i.buildAssigneeId(), dto.getTargetAssigner().buildAssigneeId())).findAny();
|
||||
if (exists.isPresent()) {
|
||||
throw new WorkflowEngineException(ASSIGNEE_HAS_BEEN_EXISTS);
|
||||
}
|
||||
|
||||
task.setAssignee(TASK_ASSIGNEE_SKIP_FLAT);
|
||||
((TaskEntity) task).setScopeType("TRANSFER");
|
||||
taskService.saveTask(task);
|
||||
@ -779,8 +785,6 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
|
||||
}
|
||||
Authentication.setAuthenticatedUserId(null);
|
||||
|
||||
List<BpmnTaskDelegateAssigner> originAssingeeList = runtimeService.getVariable(task.getProcessInstanceId(),
|
||||
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + task.getTaskDefinitionKey(), List.class);
|
||||
for (BpmnTaskDelegateAssigner assigner : originAssingeeList) {
|
||||
if (Objects.equals(assigner.buildAssigneeId(), dto.getOriginAssigner().buildAssigneeId())) {
|
||||
originAssingeeList.remove(assigner);
|
||||
@ -823,6 +827,25 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void countersignTask(BpmnTaskCountersignDTO dto) {
|
||||
Task task = checkTask(dto.getOriginAssigner().buildAssigneeId(), dto.getTaskId());
|
||||
|
||||
// 这个节点下所有审批人快照
|
||||
String activityListSnapshot =
|
||||
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + task.getTaskDefinitionKey();
|
||||
List<BpmnTaskDelegateAssigner> taskAssignerListSnapshot =
|
||||
runtimeService.getVariable(task.getProcessInstanceId(),
|
||||
activityListSnapshot, List.class);
|
||||
AtomicInteger existsCount = new AtomicInteger();
|
||||
taskAssignerListSnapshot.forEach(i -> {
|
||||
dto.getTargetAssignerList().forEach(j -> {
|
||||
if (Objects.equals(i.buildAssigneeId(), j.buildAssigneeId())) {
|
||||
existsCount.getAndIncrement();
|
||||
}
|
||||
});
|
||||
});
|
||||
if (existsCount.intValue() > 0) {
|
||||
throw new WorkflowEngineException(ASSIGNEE_HAS_BEEN_EXISTS);
|
||||
}
|
||||
|
||||
if (BpmnCountersignType.isValidAppType(dto.getCountersignType()) != null) {
|
||||
//加签不能改变BPMN2.0原流程定义,因为下一个流程实例,不需要加签
|
||||
String parentTaskId = task.getParentTaskId();
|
||||
@ -856,7 +879,7 @@ public class BpmnProcessTaskServiceImpl implements BpmnProcessTaskService {
|
||||
//该父任务加签时,会创建子任务用于分配给其他人加签
|
||||
//目前多个子任务时,会按照加签人的顺序依次进行加签操作,
|
||||
//例如 加签按顺序依次分配给A、B、C三人,需A任务进行完成后,进行B任务、再进行C任务
|
||||
this.createSignSubTasksV2(dto, (TaskEntity) task);
|
||||
this.createSignSubTasksV2(dto, (TaskEntity) task, taskAssignerListSnapshot);
|
||||
} else {
|
||||
throw new WorkflowEngineException(TASK_APOSTILLE_NOT_SUPPORT);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user