REQ-3282-人员查询迁移到新接口

This commit is contained in:
yangqicheng 2024-12-23 16:08:17 +08:00
parent 15857ee7f3
commit 44b3e2c399
6 changed files with 77 additions and 41 deletions

View File

@ -19,6 +19,7 @@
<revision>1.5.1-SNAPSHOT</revision> <revision>1.5.1-SNAPSHOT</revision>
<axzo-bom.version>2.0.0-SNAPSHOT</axzo-bom.version> <axzo-bom.version>2.0.0-SNAPSHOT</axzo-bom.version>
<axzo-dependencies.version>2.0.0-SNAPSHOT</axzo-dependencies.version> <axzo-dependencies.version>2.0.0-SNAPSHOT</axzo-dependencies.version>
<axzo-dependencies.org.version>1.0.0-SNAPSHOT</axzo-dependencies.org.version>
<feign-httpclient.version>11.8</feign-httpclient.version> <feign-httpclient.version>11.8</feign-httpclient.version>
<lombok.version>1.18.22</lombok.version> <lombok.version>1.18.22</lombok.version>
<mapstruct.version>1.4.2.Final</mapstruct.version> <mapstruct.version>1.4.2.Final</mapstruct.version>
@ -155,6 +156,11 @@
<artifactId>riven-api</artifactId> <artifactId>riven-api</artifactId>
<version>${axzo-dependencies.version}</version> <version>${axzo-dependencies.version}</version>
</dependency> </dependency>
<dependency>
<groupId>cn.axzo.org</groupId>
<artifactId>org-api</artifactId>
<version>${axzo-dependencies.org.version}</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>

View File

@ -142,6 +142,10 @@
<groupId>cn.axzo</groupId> <groupId>cn.axzo</groupId>
<artifactId>riven-api</artifactId> <artifactId>riven-api</artifactId>
</dependency> </dependency>
<dependency>
<groupId>cn.axzo.org</groupId>
<artifactId>org-api</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -119,6 +119,37 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign
return Collections.emptyList(); return Collections.emptyList();
} }
protected final <T> T parseFoundationApiResult(Supplier<cn.axzo.foundation.result.ApiResult<T>> supplier, String operatorDesc,
String extInfo, Object... param) {
StopWatch stopWatch = new StopWatch(operatorDesc);
log.info("{}-Param: {}", operatorDesc, JSONUtil.toJsonStr(param));
stopWatch.start();
cn.axzo.foundation.result.ApiResult<T> result = supplier.get();
stopWatch.stop();
log.info("{}-Cost:{}, Result: {}", operatorDesc,
"API StopWatch '" + stopWatch.getId() + "': running time = " + stopWatch.getTotalTimeSeconds() + " 's",
JSONUtil.toJsonStr(result));
try {
if (stopWatch.getTotalTimeSeconds() > refreshProperties.getApiTimeout() && Boolean.TRUE.equals(refreshProperties.getSendDingTalk())) {
DingTalkUtils.sendDingTalkForSlowUrl(applicationContext.getEnvironment()
.getProperty("spring.profiles.active"),
stopWatch.getTotalTimeSeconds(),
extInfo,
param,
result);
}
} catch (Exception e) {
// ignore
}
Assert.notNull(result, "服务调用异常");
// 200自定义处理
if (HttpStatus.HTTP_OK != result.getCode()) {
throw new WorkflowEngineException(CALC_TASK_ASSIGNEE_ERROR, "[API:" + extInfo + "]" + result.getMsg());
}
return result.getData();
}
protected final <T> T parseApiResult(Supplier<ApiResult<T>> supplier, String operatorDesc, protected final <T> T parseApiResult(Supplier<ApiResult<T>> supplier, String operatorDesc,
String extInfo, Object... param) { String extInfo, Object... param) {
return parseApiResult(supplier, operatorDesc, extInfo, refreshProperties, applicationContext, param); return parseApiResult(supplier, operatorDesc, extInfo, refreshProperties, applicationContext, param);

View File

@ -1,11 +1,11 @@
package cn.axzo.workflow.server.controller.delegate; package cn.axzo.workflow.server.controller.delegate;
import cn.axzo.maokai.api.client.OrganizationalNodeUserApi; import cn.axzo.orggateway.api.nodeuser.OrgNodeUserApi;
import cn.axzo.maokai.api.vo.request.OrganizationalNodeUserSearchReq; import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
import cn.axzo.maokai.api.vo.response.OrganizationalNodeUserVO; import cn.axzo.orggateway.api.nodeuser.resp.OrganizationalNodeUserDTO;
import cn.axzo.workflow.common.enums.ApproverSpecifyEnum; import cn.axzo.workflow.common.enums.ApproverSpecifyEnum;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.common.exception.WorkflowEngineException; 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.common.utils.BpmnMetaParserHelper;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
@ -16,11 +16,7 @@ import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static cn.axzo.workflow.common.code.FlowableEngineRespCode.ENGINE_USER_TASK_CALC_ERROR; import static cn.axzo.workflow.common.code.FlowableEngineRespCode.ENGINE_USER_TASK_CALC_ERROR;
@ -34,7 +30,7 @@ import static cn.axzo.workflow.common.code.FlowableEngineRespCode.ENGINE_USER_TA
@Component @Component
public class BasedFixedPersonTaskAssigneeSelector extends AbstractBpmnTaskAssigneeSelector { public class BasedFixedPersonTaskAssigneeSelector extends AbstractBpmnTaskAssigneeSelector {
@Resource @Resource
private OrganizationalNodeUserApi organizationalNodeUserApi; private OrgNodeUserApi orgNodeUserApi;
@Override @Override
public String getType() { public String getType() {
@ -54,30 +50,30 @@ public class BasedFixedPersonTaskAssigneeSelector extends AbstractBpmnTaskAssign
return super.select(flowElement, execution, throwException); return super.select(flowElement, execution, throwException);
} }
BpmnMetaParserHelper.getApproverSpecifyValue((UserTask) flowElement) 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() Set<Long> workspaceIds = assigners.stream()
.map(BpmnTaskDelegateAssigner::getTenantId) .map(BpmnTaskDelegateAssigner::getTenantId)
.filter(StringUtils::hasText) .filter(StringUtils::hasText)
.map(Long::parseLong) .map(Long::parseLong)
.collect(Collectors.toSet()); .collect(Collectors.toSet());
List<Long> personIds = assigners.stream() List<Long> personIds = assigners.stream()
.map(BpmnTaskDelegateAssigner::getPersonId) .map(BpmnTaskDelegateAssigner::getPersonId)
.filter(StringUtils::hasText) .filter(StringUtils::hasText)
.map(Long::parseLong) .map(Long::parseLong)
.collect(Collectors.toList()); .collect(Collectors.toList());
List<OrganizationalNodeUserVO> onlineUsers = new ArrayList<>(); List<OrganizationalNodeUserDTO> onlineUsers = new ArrayList<>();
try { try {
OrganizationalNodeUserSearchReq searchReq = new OrganizationalNodeUserSearchReq(); ListOrgNodeUserReq searchReq = new ListOrgNodeUserReq();
searchReq.setWorkspaceIds(workspaceIds); searchReq.setWorkspaceIds(workspaceIds);
searchReq.setPersonIdList(personIds); searchReq.setPersonIds(personIds);
onlineUsers = parseApiResult(() -> organizationalNodeUserApi.list(searchReq), "查询指定人员是否在职", onlineUsers = parseFoundationApiResult(() -> orgNodeUserApi.list(searchReq), "查询指定人员是否在职",
"cn.axzo.maokai.api.client.OrganizationalNodeUserApi#list", searchReq); "cn.axzo.orggateway.api.nodeuser.OrgNodeUserApi.list", searchReq).getData();
} catch (Exception e) { } catch (Exception e) {
if (throwException) { if (throwException) {
throw new WorkflowEngineException(ENGINE_USER_TASK_CALC_ERROR, flowElement.getId(), throw new WorkflowEngineException(ENGINE_USER_TASK_CALC_ERROR, flowElement.getId(),
this.getType(), e.getMessage()); this.getType(), e.getMessage());
} else { } else {
return Collections.emptyList(); return Collections.emptyList();
} }
@ -85,8 +81,8 @@ public class BasedFixedPersonTaskAssigneeSelector extends AbstractBpmnTaskAssign
// 只要有在职的人不会走审批人为空 // 只要有在职的人不会走审批人为空
if (ListUtils.emptyIfNull(onlineUsers).stream().filter(i -> Objects.equals(i.getIsDelete(), 0L)) 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())) .anyMatch(u -> assigners.stream().anyMatch(i -> Objects.equals(i.getPersonId(), String.valueOf(u.getPersonId()))
&& Objects.equals(i.getOuId(), String.valueOf(u.getOrganizationalUnitId()))))) { && Objects.equals(i.getOuId(), String.valueOf(u.getOrganizationalUnitId()))))) {
return assigners; return assigners;
} }

View File

@ -1,9 +1,8 @@
package cn.axzo.workflow.server.controller.delegate; package cn.axzo.workflow.server.controller.delegate;
import cn.axzo.maokai.api.client.OrganizationalNodeUserApi; import cn.axzo.orggateway.api.nodeuser.OrgNodeUserApi;
import cn.axzo.maokai.api.vo.request.FlowTaskAssignerReq; import cn.axzo.orggateway.api.nodeuser.req.FlowTaskAssignerReq;
import cn.axzo.maokai.api.vo.request.FlowTaskAssignerReq.IdentityPair; import cn.axzo.orggateway.api.nodeuser.resp.FlowTaskAssigner;
import cn.axzo.maokai.api.vo.response.FlowTaskAssigner;
import cn.axzo.workflow.common.enums.ApproverSpecifyEnum; import cn.axzo.workflow.common.enums.ApproverSpecifyEnum;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.core.deletage.approverscope.ApproverScopeDTO; import cn.axzo.workflow.core.deletage.approverscope.ApproverScopeDTO;
@ -33,7 +32,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_INITIATOR;
public class BasedInitiatorLeaderTaskAssigneeSelector extends AbstractBpmnTaskAssigneeSelector { public class BasedInitiatorLeaderTaskAssigneeSelector extends AbstractBpmnTaskAssigneeSelector {
@Resource @Resource
private OrganizationalNodeUserApi organizationalNodeUserApi; private OrgNodeUserApi orgNodeUserApi;
@Override @Override
public String getType() { public String getType() {
@ -64,15 +63,15 @@ public class BasedInitiatorLeaderTaskAssigneeSelector extends AbstractBpmnTaskAs
.orgScopes(ListUtils.emptyIfNull(scopeDto.getOrgScopes()).stream() .orgScopes(ListUtils.emptyIfNull(scopeDto.getOrgScopes()).stream()
.map(e -> BeanUtil.copyProperties(e, FlowTaskAssignerReq.OrgScope.class)) .map(e -> BeanUtil.copyProperties(e, FlowTaskAssignerReq.OrgScope.class))
.collect(Collectors.toList())) .collect(Collectors.toList()))
.sponsor(IdentityPair.builder() .sponsor(FlowTaskAssignerReq.IdentityPair.builder()
.identityId(Long.valueOf(initiator.getAssignee())) .identityId(Long.valueOf(initiator.getAssignee()))
.identityType(Integer.valueOf(initiator.getAssigneeType())).build()) .identityType(Integer.valueOf(initiator.getAssigneeType())).build())
.build(); .build();
req.setProcInstId(execution.getProcessInstanceId()); req.setProcInstId(execution.getProcessInstanceId());
List<FlowTaskAssigner> flowTaskAssigners = List<FlowTaskAssigner> flowTaskAssigners =
parseApiResult(() -> organizationalNodeUserApi.listFlowTaskAssigner(req), parseFoundationApiResult(() -> orgNodeUserApi.listFlowTaskAssigner(req),
"审批节点: " + flowElement.getId() + ", 通过发起人主管查询审批人", "审批节点: " + flowElement.getId() + ", 通过发起人主管查询审批人",
"cn.axzo.maokai.api.client.OrganizationalNodeUserApi#listFlowTaskAssigner", req); "cn.axzo.orggateway.api.nodeuser.OrgNodeUserApi.listFlowTaskAssigner", req);
if (CollUtil.isEmpty(flowTaskAssigners)) { if (CollUtil.isEmpty(flowTaskAssigners)) {
return super.invokeService(flowElement, execution, scopeDto); return super.invokeService(flowElement, execution, scopeDto);

View File

@ -1,8 +1,8 @@
package cn.axzo.workflow.server.controller.delegate; package cn.axzo.workflow.server.controller.delegate;
import cn.axzo.maokai.api.client.OrganizationalNodeUserApi; import cn.axzo.orggateway.api.nodeuser.OrgNodeUserApi;
import cn.axzo.maokai.api.vo.request.FlowTaskAssignerReq; import cn.axzo.orggateway.api.nodeuser.req.FlowTaskAssignerReq;
import cn.axzo.maokai.api.vo.response.FlowTaskAssigner; import cn.axzo.orggateway.api.nodeuser.resp.FlowTaskAssigner;
import cn.axzo.workflow.common.enums.ApproverSpecifyEnum; import cn.axzo.workflow.common.enums.ApproverSpecifyEnum;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import cn.axzo.workflow.core.deletage.approverscope.ApproverScopeDTO; import cn.axzo.workflow.core.deletage.approverscope.ApproverScopeDTO;
@ -29,7 +29,7 @@ import java.util.stream.Collectors;
public class BasedPositionTaskAssigneeSelector extends AbstractBpmnTaskAssigneeSelector { public class BasedPositionTaskAssigneeSelector extends AbstractBpmnTaskAssigneeSelector {
@Autowired @Autowired
private OrganizationalNodeUserApi organizationalNodeUserApi; private OrgNodeUserApi orgNodeUserApi;
@Override @Override
public String getType() { public String getType() {
@ -62,9 +62,9 @@ public class BasedPositionTaskAssigneeSelector extends AbstractBpmnTaskAssigneeS
req.getOrgScopes().addAll(workerTeamScopes); req.getOrgScopes().addAll(workerTeamScopes);
req.setProcInstId(execution.getProcessInstanceId()); req.setProcInstId(execution.getProcessInstanceId());
List<FlowTaskAssigner> flowTaskAssigners = List<FlowTaskAssigner> flowTaskAssigners =
parseApiResult(() -> organizationalNodeUserApi.listFlowTaskAssigner(req), parseFoundationApiResult(() -> orgNodeUserApi.listFlowTaskAssigner(req),
"审批节点: " + flowElement.getId() + ", 通过岗位查询审批人", "审批节点: " + flowElement.getId() + ", 通过岗位查询审批人",
"cn.axzo.maokai.api.client.OrganizationalNodeUserApi#listFlowTaskAssigner", req); "cn.axzo.orggateway.api.nodeuser.OrgNodeUserApi.listFlowTaskAssigner", req);
if (CollUtil.isEmpty(flowTaskAssigners)) { if (CollUtil.isEmpty(flowTaskAssigners)) {
return super.invokeService(flowElement, execution, scopeDto); return super.invokeService(flowElement, execution, scopeDto);