From f15b6abb677f796c341d1086549922eb1735385a Mon Sep 17 00:00:00 2001 From: yangqicheng Date: Thu, 26 Dec 2024 16:38:35 +0800 Subject: [PATCH] =?UTF-8?q?REQ-3282=20=E8=B0=83=E6=95=B4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SpecifyAssigneeTaskAssigneeSelector.java | 76 +++++++++++-------- 1 file changed, 43 insertions(+), 33 deletions(-) diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/SpecifyAssigneeTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/SpecifyAssigneeTaskAssigneeSelector.java index f940f1ac7..29179d144 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/SpecifyAssigneeTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/SpecifyAssigneeTaskAssigneeSelector.java @@ -5,23 +5,25 @@ import cn.axzo.orggateway.api.nodeuser.OrgNodeUserApi; import cn.axzo.orggateway.api.nodeuser.dto.OrgNodeUserDTO; import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq; import cn.axzo.workflow.common.enums.ApproverEmptyHandleTypeEnum; +import cn.axzo.workflow.common.exception.WorkflowEngineException; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper; -import cn.axzo.workflow.core.deletage.approverscope.ApproverScopeDTO; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.ListUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.UserTask; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; +import static cn.axzo.workflow.common.code.FlowableEngineRespCode.ENGINE_USER_TASK_CALC_ERROR; + /** * 转交指定人查询人 */ @@ -43,7 +45,7 @@ public class SpecifyAssigneeTaskAssigneeSelector extends AbstractBpmnTaskAssigne } @Override - protected List invokeService(FlowElement flowElement, DelegateExecution execution, ApproverScopeDTO scopeDto) { + public List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) { if (!(flowElement instanceof UserTask)) { return Collections.emptyList(); } @@ -55,37 +57,45 @@ public class SpecifyAssigneeTaskAssigneeSelector extends AbstractBpmnTaskAssigne if (CollectionUtils.isEmpty(emptyAssignees)) { return Collections.emptyList(); } - List onlineUsers = new ArrayList<>(); - Set workspaceIds = emptyAssignees.stream() - .map(BpmnTaskDelegateAssigner::getTenantId) - .filter(StringUtils::hasText) - .map(Long::parseLong) - .collect(Collectors.toSet()); + try { + List onlineUsers = new ArrayList<>(); + Set workspaceIds = emptyAssignees.stream() + .map(BpmnTaskDelegateAssigner::getTenantId) + .filter(NumberUtils::isDigits) + .map(Long::parseLong) + .collect(Collectors.toSet()); - List personIds = emptyAssignees.stream() - .map(BpmnTaskDelegateAssigner::getPersonId) - .filter(StringUtils::hasText) - .map(Long::parseLong) - .collect(Collectors.toList()); - ListOrgNodeUserReq searchReq = new ListOrgNodeUserReq(); - searchReq.setWorkspaceIds(workspaceIds); - searchReq.setPersonIds(personIds); - searchReq.setPage(1); - searchReq.setPageSize(personIds.size()); - PageResp pageResp = parseFoundationApiResult(() -> orgNodeUserApi.list(searchReq), "查询指定人员是否在职", - "cn.axzo.orggateway.api.nodeuser.OrgNodeUserApi.list", searchReq); - if (pageResp != null) { - onlineUsers = pageResp.getData(); + List personIds = emptyAssignees.stream() + .map(BpmnTaskDelegateAssigner::getPersonId) + .filter(NumberUtils::isDigits) + .map(Long::parseLong) + .collect(Collectors.toList()); + ListOrgNodeUserReq searchReq = new ListOrgNodeUserReq(); + searchReq.setWorkspaceIds(workspaceIds); + searchReq.setPersonIds(personIds); + searchReq.setPage(1); + searchReq.setPageSize(personIds.size()); + PageResp pageResp = parseFoundationApiResult(() -> orgNodeUserApi.list(searchReq), "SpecifyAssigneeTaskAssigneeSelector#查询指定人员是否在职", + "cn.axzo.orggateway.api.nodeuser.OrgNodeUserApi.list", searchReq); + if (pageResp != null) { + onlineUsers = pageResp.getData(); + } + // 只要有在职的人,不会走审批人为空 + if (ListUtils.emptyIfNull(onlineUsers).stream() + .filter(i -> Objects.equals(i.getIsDelete(), 0L)) + .anyMatch(u -> emptyAssignees.stream() + .anyMatch(i -> Objects.equals(i.getPersonId(), String.valueOf(u.getPersonId())) + && Objects.equals(i.getOuId(), String.valueOf(u.getOrganizationalUnitId()))))) { + return emptyAssignees; + } + return Collections.emptyList(); + } catch (Exception e) { + if (Boolean.TRUE.equals(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 -> emptyAssignees.stream() - .anyMatch(i -> Objects.equals(i.getPersonId(), String.valueOf(u.getPersonId())) - && Objects.equals(i.getOuId(), String.valueOf(u.getOrganizationalUnitId()))))) { - return emptyAssignees; - } - return Collections.emptyList(); } - }