diff --git a/processext/README.md b/processext/README.md index 67342da82..9b81862c4 100644 --- a/processext/README.md +++ b/processext/README.md @@ -182,63 +182,6 @@ public Map getNextNodeInfoByConditionalFlowId(String procDefKey, ``` -#### 获取流程定义列表信息getProcInstGraphByTaskId/getProcInstGraphByProcInstId - -注意: - -1. 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。 -2. 流程复杂时,列表节点顺序不一定完全正确。 - -```java - /** - * 获取流程信息 - * 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。 - * - * @param procInstId 流程实例ID - * @return 流程信息 - */ -@NaslLogic -public List getProcInstGraphByProcInstId(String procInstId) -``` - -##### 数据结构说明 - -1. Element节点信息 - - | 字段名 | 类型 | 字段说明 | 备注 | - |---------------------|--------|-------|---| - | current | Boolean | 是否当前活跃节点 || - | completed | Boolean | 任务是否完成 || - | name | String | 节点名称 || - | title | String| 节点标题 || - | type |String | 节点类型 || - | completeInfos | List| 处理信息 || - -2. CompleteInfo节点处理信息 - - | 字段名 | 类型 | 字段说明 | 备注 | - |---------------------|--------|-------|---| - | assignee | ProcessUser | 处理人 |未完成节点不存在处理人信息| - | completeTime | String | 处理完成时间 || - | completed | Boolean | 是否已完成 || - | candidates | List | 候选人 |待选人| - | addSignTag | Boolean| 加签标志 || - -3. ProcessUser节点处理人信息 - - | 字段名 | 类型 | 字段说明 | 备注 | - |---------------------|--------|-------|---| - | userName | String | 名称 || - | displayName | String | 展示名称 || - -##### 展示流程列表,并且运行时获取并修改候选人示例 - -1. 给可修改候选人的节点配置处理人为流程自定义变量。一个节点对应一个变量。 -2. 流程自定义变量默认值暂不可用,若业务场景需要有默认用户,建议使用流程启动事件做初始赋值。 -3. 调用本接口获取流程信息。其中配置流程自定义变量为处理人的节点,对应的candidates值将会是流程自定义变量的值。 -4. 调用【根据任务id/实例id修改流程自定义变量updateProcessVariableByTaskId/updateProcessVariableByProcInstId】可修改流程自定义变量 - ![img_9.png](img_9.png) - ### 任务实例查询 #### 查询我的待办任务列表getMyPendingTasksByCustomUser diff --git a/processext/src/main/java/com/netease/lowcode/lib/logic/ExtProcessDefinitionSearchLogicApi.java b/processext/src/main/java/com/netease/lowcode/lib/logic/ExtProcessDefinitionSearchLogicApi.java deleted file mode 100644 index 76ac1c962..000000000 --- a/processext/src/main/java/com/netease/lowcode/lib/logic/ExtProcessDefinitionSearchLogicApi.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.netease.lowcode.lib.logic; - -import com.netease.lowcode.core.annotation.NaslLogic; -import com.netease.lowcode.lib.exception.ProcessExtCommonException; -import com.netease.lowcode.lib.logic.impl.ExtProcessDefinitionExtensionLogicService; -import com.netease.lowcode.lib.logic.structure.graph.Element; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.List; - -@Service -public class ExtProcessDefinitionSearchLogicApi { - - @Resource - private ExtProcessDefinitionExtensionLogicService extProcessDefinitionExtensionLogicService; - - /** - * 获取流程定义列表信息 - * 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。 - * - * @param procInstId 流程实例ID - * @return 流程信息 - */ - @NaslLogic - public List getProcInstGraphByProcInstId(String procInstId) { - return extProcessDefinitionExtensionLogicService.getProcInstGraphByProcInstId(procInstId); - } - - /** - * 获取流程定义列表信息 - * 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。 - * - * @param taskId 任务ID - * @return 流程信息 - */ - @NaslLogic - public List getProcInstGraphByTaskId(String taskId) { - return extProcessDefinitionExtensionLogicService.getProcInstGraphByTaskId(taskId); - } -} diff --git a/processext/src/main/java/com/netease/lowcode/lib/logic/impl/ExtProcessDefinitionExtensionLogicService.java b/processext/src/main/java/com/netease/lowcode/lib/logic/impl/ExtProcessDefinitionExtensionLogicService.java index 20c69f572..785f98357 100644 --- a/processext/src/main/java/com/netease/lowcode/lib/logic/impl/ExtProcessDefinitionExtensionLogicService.java +++ b/processext/src/main/java/com/netease/lowcode/lib/logic/impl/ExtProcessDefinitionExtensionLogicService.java @@ -158,126 +158,4 @@ public Map getNextNodeNamesByPreviousNodeName(BpmnModel bpmnMode return nextNodes; } - /** - * 获取流程定义列表信息 - * 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。 - * - * @param taskId 任务ID - * @return 流程信息 - */ - @ReconfirmAuthorization - public List getProcInstGraphByTaskId(String taskId) { - Optional optional = this.taskInstanceService.getHistoricTaskInstanceById(taskId); - if (!optional.isPresent()) { - log.warn("Task does not exist!"); - throw new ProcessExtCommonException("Task does not exist!"); - } else { - return this.getProcInstGraphByProcInstId(optional.get().getProcessInstanceId()); - } - } - - /** - * 获取流程定义列表信息 - * 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。 - * - * @param procInstId - * @return 流程信息 - */ - @ReconfirmAuthorization - public List getProcInstGraphByProcInstId(String procInstId) { - try { - CWProcInstGraphModel cwProcInstGraphModel = processGraphService.getProcInstGraphModelByProcessInstanceId(procInstId); - //未完成节点获取编辑态设置的审批人信息 - cwProcInstGraphModel.getElements().stream() - .filter(element -> !element.getType().equals(com.netease.lowcode.lib.util.ProcessConstant.ELEMENT_EVENT_END)) - .filter(element -> !element.getType().equals(com.netease.lowcode.lib.util.ProcessConstant.ELEMENT_EVENT_Start)) - .filter(element -> !element.getType().equals(com.netease.lowcode.lib.util.ProcessConstant.ELEMENT_EVENT_InclusiveGateway)) - .filter(element -> !element.getType().equals(com.netease.lowcode.lib.util.ProcessConstant.ELEMENT_EVENT_ExclusiveGateway)) - .filter(element -> !element.isCompleted()) - .filter(element -> element.getCompleteInfos() == null || element.getCompleteInfos().isEmpty()) - .forEach(element -> { - List getCompleteInfos = new ArrayList<>(); - CWCompleteInfoModel cwCompleteInfoModel = new CWCompleteInfoModel(); - cwCompleteInfoModel.setCompleted(false); - cwCompleteInfoModel.setCandidates(getAssigneeList(procInstId, element.getName())); - getCompleteInfos.add(cwCompleteInfoModel); - element.setCompleteInfos(getCompleteInfos); - }); - //固定end节点最后 - CWElementModel end = cwProcInstGraphModel.getElements().stream().filter(element -> element.getType().equals(com.netease.lowcode.lib.util.ProcessConstant.ELEMENT_EVENT_END)).findFirst().get(); - cwProcInstGraphModel.getElements().remove(end); - List cwElementModelList = ElementSort.sortElements(cwProcInstGraphModel.getElements(), cwProcInstGraphModel.getFlows()); - cwElementModelList.add(end); - cwElementModelList = cwElementModelList.stream().filter(Objects::nonNull).collect(Collectors.toList()); - return toElement(cwElementModelList); - } catch (Exception e) { - log.error("Process graph sort error!", e); - throw e; - } - } - - private List toElement(List cwElementModelList) { - List elements = new ArrayList<>(); - for (CWElementModel cwElementModel : cwElementModelList) { - Element element = new Element(); - element.setName(cwElementModel.getName()); - element.setTitle(cwElementModel.getTitle()); - element.setType(cwElementModel.getType()); - element.setCurrent(cwElementModel.isCurrent()); - element.setCompleted(cwElementModel.isCompleted()); - if (cwElementModel.getCompleteInfos() != null && !cwElementModel.getCompleteInfos().isEmpty()) { - List completeInfos = cwElementModel.getCompleteInfos().stream().map(cwCompleteInfoModel -> { - CompleteInfo completeInfo = new CompleteInfo(); - completeInfo.setCompleteTime(cwCompleteInfoModel.getCompleteTime()); - completeInfo.setCompleted(cwCompleteInfoModel.isCompleted()); - if (StringUtils.isNoneBlank(cwCompleteInfoModel.getAssignee())) { - com.netease.codewave.process.open.domain.structure.ProcessUser processUserAssignee = processUserIdentityService.getUsersByUserName(cwCompleteInfoModel.getAssignee()); - completeInfo.setAssignee(ProcessUserUtil.toProcessUserFront(processUserAssignee)); - } - if (com.netease.lowcode.core.util.CollectionUtils.isNotEmpty(cwCompleteInfoModel.getCandidates())) { - completeInfo.setCandidates(cwCompleteInfoModel.getCandidates().stream() - .map(processUserIdentityService::getUsersByUserName) - .map(ProcessUserUtil::toProcessUserFront).collect(Collectors.toList())); - } - completeInfo.setAddSignTag(cwCompleteInfoModel.getAddSignTag()); - return completeInfo; - }).collect(Collectors.toList()); - element.setCompleteInfos(completeInfos); - } - elements.add(element); - } - return elements; - } - - private List getAssigneeList(String procInstId, String currentUserTaskNodeKey) { - BpmnModel bpmnModel = repositoryService.getBpmnModel(getProcessDefinitionId(procInstId)); - if (bpmnModel != null) { - String version = bpmnModel.getMainProcess().getAttributeValue(ProcessConstant.EXTENSION_NAMESPACE, ProcessConstant.KEY_NASL_VERSION); - try { - String taskAssigneeServiceName = String.format(TASK_ASSIGNEE_SERVICE_NAME, bpmnModel.getMainProcess().getId(), version, currentUserTaskNodeKey); - Object service = applicationContext.getBean(taskAssigneeServiceName); - if (service == null) { - return null; - } - Method method = service.getClass().getMethod("getAssigneeList", Map.class); - Map variables = runtimeService.getVariables(procInstId); - return (List) method.invoke(service, variables); - } catch (Exception e) { - log.error("getAssigneeList error", e); - } - } - return null; - } - - public String getProcessDefinitionId(String processInstanceId) { - // 根据流程实例ID查询流程实例 - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(processInstanceId) - .singleResult(); - - if (historicProcessInstance != null) { - return historicProcessInstance.getProcessDefinitionId(); - } - return null; - } }