REQ-2516-调整人员数据截取代码

This commit is contained in:
yangqicheng 2024-07-10 18:05:02 +08:00
parent c4dab46b74
commit da29cbd5e0
4 changed files with 25 additions and 20 deletions

View File

@ -379,6 +379,22 @@ public class CustomTaskHelper {
.values());
}
/**
* 获取指定数量元素
*
* @param assigners 原始列表列表
* @return 截取后的列表
*/
public static <T> List<T> getLimitedElementList(List<T> assigners, Integer limitNumber) {
if (limitNumber == null || limitNumber <= 0) {
throw new IllegalArgumentException("limit number must be greater than 0");
}
if (CollectionUtils.isEmpty(assigners) || assigners.size() <= limitNumber) {
return assigners;
}
return assigners.subList(0, limitNumber);
}
public static List<BpmnTaskDelegateAssigner> getHistoryOperationUsers(CommandContext commandContext, String processInstanceId,
BpmnHistoricTaskInstanceConverter historicTaskInstanceConverter,
String serviceVersion) {

View File

@ -37,6 +37,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import static cn.axzo.workflow.common.constant.BpmnConstants.ASSIGNER_LIMIT_NUMBER;
import static cn.axzo.workflow.common.constant.BpmnConstants.BPM_ALLOW_SKIP_USER_TASK;
import static cn.axzo.workflow.common.constant.BpmnConstants.DUMMY_ASSIGNEE;
import static cn.axzo.workflow.common.constant.BpmnConstants.DUMMY_ASSIGNEE_TYPE;
@ -53,6 +54,7 @@ import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApprove
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getApproverSpecify;
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getNodeType;
import static cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper.getProcessServerVersion;
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.getLimitedElementList;
import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.removeDuplicateByPersonId;
@ -148,13 +150,13 @@ public class EngineExecutionStartListener implements ExecutionListener {
// 审批候选人为空时的兜底
emptyAssigneeHandle(assigners, userTask, execution);
for (BpmnTaskDelegateAssigner user : assigners) {
List<BpmnTaskDelegateAssigner> resultAssigners = getLimitedElementList(assigners, ASSIGNER_LIMIT_NUMBER);
for (BpmnTaskDelegateAssigner user : resultAssigners) {
assigneeIdList.add(user.buildAssigneeId());
}
execution.setVariable(INTERNAL_ACTIVITY_RELATION_ASSIGNEE_LIST_INFO_SNAPSHOT + currentActivityId,
assigners);
resultAssigners);
break;
}
// UserTask 多实例, 该变量用于引擎
@ -249,8 +251,8 @@ public class EngineExecutionStartListener implements ExecutionListener {
});
}
// personId 去重
return removeDuplicateByPersonId(assigners);
// personId 去重,再截取指定个数
return getLimitedElementList(removeDuplicateByPersonId(assigners), ASSIGNER_LIMIT_NUMBER);
}
/**

View File

@ -73,7 +73,7 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign
ApproverScopeEnum processor = ((NoticeFlowElement) flowElement).getProcessor();
assigners.addAll(privateSelector(processor, flowElement, execution, throwException));
}
return getLimitedAssignerList(assigners.stream().filter(i -> StringUtils.hasText(i.getPersonId())).collect(Collectors.toList()));
return assigners.stream().filter(i -> StringUtils.hasText(i.getPersonId())).collect(Collectors.toList());
}
private List<BpmnTaskDelegateAssigner> privateSelector(ApproverScopeEnum processorType, FlowElement flowElement,
@ -175,19 +175,6 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign
}
}
/**
* 获取指定数量审批人
*
* @param assigners 原始的审批人列表
* @return 截取后的审批人列表
*/
protected List<BpmnTaskDelegateAssigner> getLimitedAssignerList(List<BpmnTaskDelegateAssigner> assigners) {
if (CollectionUtils.isEmpty(assigners) || assigners.size() <= ASSIGNER_LIMIT_NUMBER) {
return assigners;
}
return assigners.subList(0, ASSIGNER_LIMIT_NUMBER);
}
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
this.applicationContext = context;

View File

@ -39,7 +39,7 @@ public class BasedFixedPersonTaskAssigneeSelector extends AbstractBpmnTaskAssign
}
BpmnMetaParserHelper.getApproverSpecifyValue((UserTask) flowElement)
.ifPresent(s -> assigners.addAll(JSON.parseArray(s, BpmnTaskDelegateAssigner.class)));
return getLimitedAssignerList(assigners);
return assigners;
}
}