REQ-2595-调整代码逻辑
This commit is contained in:
parent
f9cf430c75
commit
39918d0a77
@ -15,17 +15,21 @@ import org.flowable.engine.TaskService;
|
||||
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
|
||||
import org.flowable.engine.impl.util.CommandContextUtil;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.flowable.task.api.TaskInfo;
|
||||
import org.flowable.task.api.history.HistoricTaskInstance;
|
||||
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
|
||||
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.COUNTERSIGN_ASSIGNER_SHOW_NUMBER;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT;
|
||||
@ -105,26 +109,36 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand<Void> implemen
|
||||
|
||||
//查询重复任务
|
||||
List<Task> duplicatePendingTasks = getDuplicatePendingTasks(commandContext, task, targetTaskAssigneeList);
|
||||
|
||||
switch (countersignType) {
|
||||
case FORWARD_COUNTERSIGN:
|
||||
// TODO
|
||||
break;
|
||||
case BACK_COUNTERSIGN:
|
||||
// TODO
|
||||
break;
|
||||
default:
|
||||
// share_counterSign
|
||||
shareCountSign(commandContext, task);
|
||||
break;
|
||||
List<BpmnTaskDelegateAssigner> valuaTargetAssigneeList;
|
||||
if (CollectionUtils.isEmpty(duplicatePendingTasks)) {
|
||||
valuaTargetAssigneeList = targetTaskAssigneeList;
|
||||
} else {
|
||||
valuaTargetAssigneeList = new ArrayList<>();
|
||||
Set<String> duplicateAssigneeSet = duplicatePendingTasks.stream().map(TaskInfo::getAssignee).collect(Collectors.toSet());
|
||||
for (BpmnTaskDelegateAssigner assigner : targetTaskAssigneeList) {
|
||||
if (!duplicateAssigneeSet.contains(assigner.buildAssigneeId())) {
|
||||
valuaTargetAssigneeList.add(assigner);
|
||||
}
|
||||
}
|
||||
}
|
||||
//需要加签的
|
||||
if (CollectionUtils.isEmpty(valuaTargetAssigneeList)) {
|
||||
switch (countersignType) {
|
||||
case FORWARD_COUNTERSIGN:
|
||||
// TODO
|
||||
break;
|
||||
case BACK_COUNTERSIGN:
|
||||
// TODO
|
||||
break;
|
||||
default:
|
||||
// share_counterSign
|
||||
shareCountSign(commandContext, task, valuaTargetAssigneeList);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (duplicatePendingTasks == null) {
|
||||
duplicatePendingTasks = new ArrayList<>();
|
||||
}
|
||||
duplicatePendingTasks.add(task);
|
||||
// 结束被多余任务
|
||||
deleteMultiTasks(commandContext, duplicatePendingTasks);
|
||||
deleteMultiTasks(commandContext, Collections.singletonList(task));
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -134,7 +148,7 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand<Void> implemen
|
||||
* @param commandContext
|
||||
* @param taskEntity
|
||||
*/
|
||||
private void shareCountSign(CommandContext commandContext, TaskEntity taskEntity) {
|
||||
private void shareCountSign(CommandContext commandContext, TaskEntity taskEntity, List<BpmnTaskDelegateAssigner> valuTargetAssigneeList) {
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
|
||||
@ -143,21 +157,11 @@ public class CustomCountersignUserTaskCmd extends AbstractCommand<Void> implemen
|
||||
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + taskEntity.getTaskDefinitionKey();
|
||||
List<BpmnTaskDelegateAssigner> taskDelegateAssigners =
|
||||
processEngineConfiguration.getRuntimeService().getVariable(taskEntity.getProcessInstanceId(), activityListSnapshot, List.class);
|
||||
taskDelegateAssigners.addAll(targetTaskAssigneeList);
|
||||
List<BpmnTaskDelegateAssigner> resultAssignerList = new ArrayList<>();
|
||||
Set<String> existAssignerIds = new HashSet<>();
|
||||
//去除重复assigner
|
||||
for (BpmnTaskDelegateAssigner assigner : taskDelegateAssigners) {
|
||||
if (existAssignerIds.contains(assigner.buildAssigneeId())) {
|
||||
continue;
|
||||
}
|
||||
resultAssignerList.add(assigner);
|
||||
existAssignerIds.add(assigner.buildAssigneeId());
|
||||
}
|
||||
runtimeService.setVariable(taskEntity.getProcessInstanceId(), activityListSnapshot, resultAssignerList);
|
||||
log.info("正在进行加签任务:{},待加签人合并列表:{}", taskEntity.getId(), JSONUtil.toJsonStr(resultAssignerList));
|
||||
taskDelegateAssigners.addAll(valuTargetAssigneeList);
|
||||
runtimeService.setVariable(taskEntity.getProcessInstanceId(), activityListSnapshot, taskDelegateAssigners);
|
||||
log.info("正在进行加签任务:{},待加签人合并列表:{}", taskEntity.getId(), JSONUtil.toJsonStr(taskDelegateAssigners));
|
||||
|
||||
targetTaskAssigneeList.forEach(assigner -> CustomTaskHelper.addMultiTask(commandContext, taskEntity, assigner));
|
||||
taskDelegateAssigners.forEach(assigner -> CustomTaskHelper.addMultiTask(commandContext, taskEntity, assigner));
|
||||
}
|
||||
|
||||
private void resolveOriginTask(CommandContext commandContext, ExtAxHiTaskInstService extAxHiTaskInstService,
|
||||
|
||||
@ -15,14 +15,15 @@ import org.flowable.task.api.Task;
|
||||
import org.flowable.task.api.history.HistoricTaskInstance;
|
||||
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
|
||||
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_ADVICE;
|
||||
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC;
|
||||
@ -99,16 +100,13 @@ public class CustomTransferUserTaskCmd extends AbstractCommand<Void> implements
|
||||
originTaskAssignee);
|
||||
|
||||
List<Task> duplicatePendingTasks = getDuplicatePendingTasks(commandContext, task, Lists.newArrayList(targetTaskAssignee));
|
||||
// 生成转交任务
|
||||
addMultiTask(commandContext, task, targetTaskAssignee);
|
||||
task.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + task.getId(), TRANSFER.getStatus());
|
||||
|
||||
if (duplicatePendingTasks == null) {
|
||||
duplicatePendingTasks = new ArrayList<>();
|
||||
//转交目标人不存在任务,再生成转交任务
|
||||
if (CollectionUtils.isEmpty(duplicatePendingTasks)) {
|
||||
addMultiTask(commandContext, task, targetTaskAssignee);
|
||||
}
|
||||
duplicatePendingTasks.add(task);
|
||||
task.setTransientVariable(TASK_COMPLETE_OPERATION_TYPE + task.getId(), TRANSFER.getStatus());
|
||||
// 结束被转交任务
|
||||
deleteMultiTasks(commandContext, duplicatePendingTasks);
|
||||
deleteMultiTasks(commandContext, Collections.singletonList(task));
|
||||
|
||||
return null;
|
||||
}
|
||||
@ -130,17 +128,18 @@ public class CustomTransferUserTaskCmd extends AbstractCommand<Void> implements
|
||||
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
|
||||
List<BpmnTaskDelegateAssigner> originAssingeeList = runtimeService.getVariable(task.getProcessInstanceId(),
|
||||
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + task.getTaskDefinitionKey(), List.class);
|
||||
List<String> duplicateAssignerIds = originAssingeeList.stream()
|
||||
.map(BpmnTaskDelegateAssigner::buildAssigneeId)
|
||||
.filter(a -> Objects.equals(a, targetTaskAssignee.buildAssigneeId()))
|
||||
.collect(Collectors.toList());
|
||||
duplicateAssignerIds.add(originTaskAssignee.buildAssigneeId());
|
||||
List<BpmnTaskDelegateAssigner> resultList = new ArrayList<>();
|
||||
resultList.add(targetTaskAssignee);
|
||||
boolean containsTargetAssignee = false;
|
||||
for (BpmnTaskDelegateAssigner assigner : originAssingeeList) {
|
||||
if (!duplicateAssignerIds.contains(assigner.buildAssigneeId())) {
|
||||
if (!Objects.equals(assigner.buildAssigneeId(), originTaskAssignee.buildAssigneeId())) {
|
||||
resultList.add(assigner);
|
||||
}
|
||||
if (Objects.equals(assigner.buildAssigneeId(), targetTaskAssignee.buildAssigneeId())) {
|
||||
containsTargetAssignee = true;
|
||||
}
|
||||
}
|
||||
if (!containsTargetAssignee) {
|
||||
resultList.add(targetTaskAssignee);
|
||||
}
|
||||
runtimeService.setVariable(task.getProcessInstanceId(),
|
||||
INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + task.getTaskDefinitionKey(),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user