REQ-2595-调整代码逻辑

This commit is contained in:
yangqicheng 2024-11-20 20:29:03 +08:00
parent f9cf430c75
commit 39918d0a77
2 changed files with 51 additions and 48 deletions

View File

@ -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,

View File

@ -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(),