feat(REQ-2924) - 修复一些测试 BUG

This commit is contained in:
wangli 2024-09-26 13:07:32 +08:00
parent 727dad23c9
commit 3da94cced2
3 changed files with 48 additions and 32 deletions

View File

@ -90,8 +90,7 @@ public class CustomServiceTaskDelegateExpressionActivityBehavior extends Service
eventDispatcher.dispatchEvent(new ExtTaskInstUpdateEvent(execution.getProcessInstanceId(),
execution.getCurrentActivityId(), serviceTask.getId(), APPROVED),
processEngineConfiguration.getEngineCfgKey());
taskService.complete(serviceTask.getId());
TaskHelper.deleteTask(serviceTask, "", false, false, false);
} else {
log.warn("ServiceTask is null, executionId: {}, activityId: {}", execution.getId(),
execution.getCurrentActivityId());

View File

@ -183,6 +183,7 @@ public class EngineExecutionStartListener implements ExecutionListener {
}
log.info("当前节点id: [{}], name: [{}] 审批人为空, 将执行审批人为空的兜底配置!", userTask.getId(), userTask.getName());
getApproverEmptyHandleType(userTask).ifPresent(type -> {
log.info("节点兜底的配置模式:[{}]", type.getType());
switch (type) {
case autoPassed:
case autoRejection:
@ -192,28 +193,32 @@ public class EngineExecutionStartListener implements ExecutionListener {
case transferToAdmin:
assigners.addAll(approverSelect(ApproverEmptyHandleTypeEnum.transferToAdmin.getType(), userTask,
execution, true));
if (CollectionUtils.isEmpty(assigners)) {
CooperationOrgDTO orgScopes = execution.getVariable(BIZ_ORG_RELATION, CooperationOrgDTO.class);
DingTalkUtils.sendDingTalkForTransferToAdminError(profile, execution.getProcessInstanceId(), userTask.getId(), orgScopes);
BpmnProcessInstanceAbortDTO abortDTO = new BpmnProcessInstanceAbortDTO();
abortDTO.setProcessInstanceId(execution.getProcessInstanceId());
abortDTO.setReason("转交管理员失败,系统中止");
CommandContextUtil.getProcessEngineConfiguration().getCommandExecutor()
.execute(new CustomAbortProcessInstanceAsyncCmd(abortDTO));
}
finalEmptyAssigneeHandle(assigners, userTask, execution);
break;
case specifyAssignee:
List<BpmnTaskDelegateAssigner> emptyAssignees =
BpmnMetaParserHelper.getEmptyApproverSpecify(userTask)
.map(listStr -> JSON.parseArray(listStr, BpmnTaskDelegateAssigner.class))
.orElse(Collections.emptyList());
assigners.addAll(emptyAssignees);
assigners.addAll(approverSelect(ApproverEmptyHandleTypeEnum.specifyAssignee.getType(), userTask,
execution, true));
finalEmptyAssigneeHandle(assigners, userTask, execution);
default:
break;
}
});
}
private void finalEmptyAssigneeHandle(List<BpmnTaskDelegateAssigner> assigners, UserTask userTask, DelegateExecution execution) {
if (CollectionUtils.isEmpty(assigners)) {
CooperationOrgDTO orgScopes = execution.getVariable(BIZ_ORG_RELATION, CooperationOrgDTO.class);
DingTalkUtils.sendDingTalkForTransferToAdminError(profile, execution.getProcessInstanceId(), userTask.getId(), orgScopes);
BpmnProcessInstanceAbortDTO abortDTO = new BpmnProcessInstanceAbortDTO();
abortDTO.setProcessInstanceId(execution.getProcessInstanceId());
abortDTO.setReason("转交管理员失败,系统中止");
CommandContextUtil.getProcessEngineConfiguration().getCommandExecutor()
.execute(new CustomAbortProcessInstanceAsyncCmd(abortDTO));
}
}
/**
* 根据审批人指定类型查询审批人
*

View File

@ -5,6 +5,7 @@ import cn.axzo.maokai.api.vo.request.OrganizationalNodeUserSearchReq;
import cn.axzo.maokai.api.vo.response.OrganizationalNodeUserVO;
import cn.axzo.workflow.common.enums.ApproverSpecifyEnum;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper;
import com.alibaba.fastjson.JSON;
import org.apache.commons.collections4.ListUtils;
@ -22,6 +23,8 @@ import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import static cn.axzo.workflow.core.common.code.FlowableEngineRespCode.ENGINE_USER_TASK_CALC_ERROR;
/**
* 基于"固定人员"查询审批人
*
@ -51,30 +54,39 @@ public class BasedFixedPersonTaskAssigneeSelector extends AbstractBpmnTaskAssign
return super.select(flowElement, execution, throwException);
}
BpmnMetaParserHelper.getApproverSpecifyValue((UserTask) flowElement)
.ifPresent(s -> assigners.addAll(JSON.parseArray(s, BpmnTaskDelegateAssigner.class)));
.ifPresent(s -> assigners.addAll(JSON.parseArray(s, BpmnTaskDelegateAssigner.class)));
Set<Long> workspaceIds = assigners.stream()
.map(BpmnTaskDelegateAssigner::getTenantId)
.filter(StringUtils::hasText)
.map(Long::parseLong)
.collect(Collectors.toSet());
.map(BpmnTaskDelegateAssigner::getTenantId)
.filter(StringUtils::hasText)
.map(Long::parseLong)
.collect(Collectors.toSet());
List<Long> personIds = assigners.stream()
.map(BpmnTaskDelegateAssigner::getPersonId)
.filter(StringUtils::hasText)
.map(Long::parseLong)
.collect(Collectors.toList());
OrganizationalNodeUserSearchReq searchReq = new OrganizationalNodeUserSearchReq();
searchReq.setWorkspaceIds(workspaceIds);
searchReq.setPersonIdList(personIds);
List<OrganizationalNodeUserVO> onlineUsers = parseApiResult(() -> organizationalNodeUserApi.list(searchReq), "查询指定人员是否在职",
.map(BpmnTaskDelegateAssigner::getPersonId)
.filter(StringUtils::hasText)
.map(Long::parseLong)
.collect(Collectors.toList());
List<OrganizationalNodeUserVO> onlineUsers = new ArrayList<>();
try {
OrganizationalNodeUserSearchReq searchReq = new OrganizationalNodeUserSearchReq();
searchReq.setWorkspaceIds(workspaceIds);
searchReq.setPersonIdList(personIds);
onlineUsers = parseApiResult(() -> organizationalNodeUserApi.list(searchReq), "查询指定人员是否在职",
"cn.axzo.maokai.api.client.OrganizationalNodeUserApi#list", searchReq);
} catch (Exception e) {
if (throwException) {
throw new WorkflowEngineException(ENGINE_USER_TASK_CALC_ERROR, flowElement.getId(),
this.getType(), e.getMessage());
} else {
return Collections.emptyList();
}
}
// 只要有在职的人不会走审批人为空
if (ListUtils.emptyIfNull(onlineUsers).stream().filter(i -> Objects.equals(i.getIsDelete(), 0L))
.anyMatch(u-> assigners.stream().anyMatch(i-> Objects.equals(i.getPersonId(), String.valueOf(u.getPersonId()))
&& Objects.equals(i.getOuId(), String.valueOf(u.getOrganizationalUnitId()))))) {
.anyMatch(u -> assigners.stream().anyMatch(i -> Objects.equals(i.getPersonId(), String.valueOf(u.getPersonId()))
&& Objects.equals(i.getOuId(), String.valueOf(u.getOrganizationalUnitId()))))) {
return assigners;
}