Skip to content

Commit 0edfa31

Browse files
authored
Merge pull request #304 from JiazhenBao/main
平台流程能力扩展2.2.0
2 parents df6f5ac + 98ffcd9 commit 0edfa31

File tree

3 files changed

+0
-220
lines changed

3 files changed

+0
-220
lines changed

processext/README.md

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -182,63 +182,6 @@ public Map<String, String> getNextNodeInfoByConditionalFlowId(String procDefKey,
182182

183183
```
184184

185-
#### 获取流程定义列表信息getProcInstGraphByTaskId/getProcInstGraphByProcInstId
186-
187-
注意:
188-
189-
1. 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。
190-
2. 流程复杂时,列表节点顺序不一定完全正确。
191-
192-
```java
193-
/**
194-
* 获取流程信息
195-
* 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。
196-
*
197-
* @param procInstId 流程实例ID
198-
* @return 流程信息
199-
*/
200-
@NaslLogic
201-
public List<Element> getProcInstGraphByProcInstId(String procInstId)
202-
```
203-
204-
##### 数据结构说明
205-
206-
1. Element节点信息
207-
208-
| 字段名 | 类型 | 字段说明 | 备注 |
209-
|---------------------|--------|-------|---|
210-
| current | Boolean | 是否当前活跃节点 ||
211-
| completed | Boolean | 任务是否完成 ||
212-
| name | String | 节点名称 ||
213-
| title | String| 节点标题 ||
214-
| type |String | 节点类型 ||
215-
| completeInfos | List<CompleteInfo>| 处理信息 ||
216-
217-
2. CompleteInfo节点处理信息
218-
219-
| 字段名 | 类型 | 字段说明 | 备注 |
220-
|---------------------|--------|-------|---|
221-
| assignee | ProcessUser | 处理人 |未完成节点不存在处理人信息|
222-
| completeTime | String | 处理完成时间 ||
223-
| completed | Boolean | 是否已完成 ||
224-
| candidates | List<ProcessUser> | 候选人 |待选人|
225-
| addSignTag | Boolean| 加签标志 ||
226-
227-
3. ProcessUser节点处理人信息
228-
229-
| 字段名 | 类型 | 字段说明 | 备注 |
230-
|---------------------|--------|-------|---|
231-
| userName | String | 名称 ||
232-
| displayName | String | 展示名称 ||
233-
234-
##### 展示流程列表,并且运行时获取并修改候选人示例
235-
236-
1. 给可修改候选人的节点配置处理人为流程自定义变量。一个节点对应一个变量。
237-
2. 流程自定义变量默认值暂不可用,若业务场景需要有默认用户,建议使用流程启动事件做初始赋值。
238-
3. 调用本接口获取流程信息。其中配置流程自定义变量为处理人的节点,对应的candidates值将会是流程自定义变量的值。
239-
4. 调用【根据任务id/实例id修改流程自定义变量updateProcessVariableByTaskId/updateProcessVariableByProcInstId】可修改流程自定义变量
240-
![img_9.png](img_9.png)
241-
242185
### 任务实例查询
243186

244187
#### 查询我的待办任务列表getMyPendingTasksByCustomUser

processext/src/main/java/com/netease/lowcode/lib/logic/ExtProcessDefinitionSearchLogicApi.java

Lines changed: 0 additions & 41 deletions
This file was deleted.

processext/src/main/java/com/netease/lowcode/lib/logic/impl/ExtProcessDefinitionExtensionLogicService.java

Lines changed: 0 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -158,126 +158,4 @@ public Map<String, String> getNextNodeNamesByPreviousNodeName(BpmnModel bpmnMode
158158
return nextNodes;
159159
}
160160

161-
/**
162-
* 获取流程定义列表信息
163-
* 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。
164-
*
165-
* @param taskId 任务ID
166-
* @return 流程信息
167-
*/
168-
@ReconfirmAuthorization
169-
public List<Element> getProcInstGraphByTaskId(String taskId) {
170-
Optional<CWHistoricTaskInstance> optional = this.taskInstanceService.getHistoricTaskInstanceById(taskId);
171-
if (!optional.isPresent()) {
172-
log.warn("Task does not exist!");
173-
throw new ProcessExtCommonException("Task does not exist!");
174-
} else {
175-
return this.getProcInstGraphByProcInstId(optional.get().getProcessInstanceId());
176-
}
177-
}
178-
179-
/**
180-
* 获取流程定义列表信息
181-
* 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。
182-
*
183-
* @param procInstId
184-
* @return 流程信息
185-
*/
186-
@ReconfirmAuthorization
187-
public List<Element> getProcInstGraphByProcInstId(String procInstId) {
188-
try {
189-
CWProcInstGraphModel cwProcInstGraphModel = processGraphService.getProcInstGraphModelByProcessInstanceId(procInstId);
190-
//未完成节点获取编辑态设置的审批人信息
191-
cwProcInstGraphModel.getElements().stream()
192-
.filter(element -> !element.getType().equals(com.netease.lowcode.lib.util.ProcessConstant.ELEMENT_EVENT_END))
193-
.filter(element -> !element.getType().equals(com.netease.lowcode.lib.util.ProcessConstant.ELEMENT_EVENT_Start))
194-
.filter(element -> !element.getType().equals(com.netease.lowcode.lib.util.ProcessConstant.ELEMENT_EVENT_InclusiveGateway))
195-
.filter(element -> !element.getType().equals(com.netease.lowcode.lib.util.ProcessConstant.ELEMENT_EVENT_ExclusiveGateway))
196-
.filter(element -> !element.isCompleted())
197-
.filter(element -> element.getCompleteInfos() == null || element.getCompleteInfos().isEmpty())
198-
.forEach(element -> {
199-
List<CWCompleteInfoModel> getCompleteInfos = new ArrayList<>();
200-
CWCompleteInfoModel cwCompleteInfoModel = new CWCompleteInfoModel();
201-
cwCompleteInfoModel.setCompleted(false);
202-
cwCompleteInfoModel.setCandidates(getAssigneeList(procInstId, element.getName()));
203-
getCompleteInfos.add(cwCompleteInfoModel);
204-
element.setCompleteInfos(getCompleteInfos);
205-
});
206-
//固定end节点最后
207-
CWElementModel end = cwProcInstGraphModel.getElements().stream().filter(element -> element.getType().equals(com.netease.lowcode.lib.util.ProcessConstant.ELEMENT_EVENT_END)).findFirst().get();
208-
cwProcInstGraphModel.getElements().remove(end);
209-
List<CWElementModel> cwElementModelList = ElementSort.sortElements(cwProcInstGraphModel.getElements(), cwProcInstGraphModel.getFlows());
210-
cwElementModelList.add(end);
211-
cwElementModelList = cwElementModelList.stream().filter(Objects::nonNull).collect(Collectors.toList());
212-
return toElement(cwElementModelList);
213-
} catch (Exception e) {
214-
log.error("Process graph sort error!", e);
215-
throw e;
216-
}
217-
}
218-
219-
private List<Element> toElement(List<CWElementModel> cwElementModelList) {
220-
List<Element> elements = new ArrayList<>();
221-
for (CWElementModel cwElementModel : cwElementModelList) {
222-
Element element = new Element();
223-
element.setName(cwElementModel.getName());
224-
element.setTitle(cwElementModel.getTitle());
225-
element.setType(cwElementModel.getType());
226-
element.setCurrent(cwElementModel.isCurrent());
227-
element.setCompleted(cwElementModel.isCompleted());
228-
if (cwElementModel.getCompleteInfos() != null && !cwElementModel.getCompleteInfos().isEmpty()) {
229-
List<CompleteInfo> completeInfos = cwElementModel.getCompleteInfos().stream().map(cwCompleteInfoModel -> {
230-
CompleteInfo completeInfo = new CompleteInfo();
231-
completeInfo.setCompleteTime(cwCompleteInfoModel.getCompleteTime());
232-
completeInfo.setCompleted(cwCompleteInfoModel.isCompleted());
233-
if (StringUtils.isNoneBlank(cwCompleteInfoModel.getAssignee())) {
234-
com.netease.codewave.process.open.domain.structure.ProcessUser processUserAssignee = processUserIdentityService.getUsersByUserName(cwCompleteInfoModel.getAssignee());
235-
completeInfo.setAssignee(ProcessUserUtil.toProcessUserFront(processUserAssignee));
236-
}
237-
if (com.netease.lowcode.core.util.CollectionUtils.isNotEmpty(cwCompleteInfoModel.getCandidates())) {
238-
completeInfo.setCandidates(cwCompleteInfoModel.getCandidates().stream()
239-
.map(processUserIdentityService::getUsersByUserName)
240-
.map(ProcessUserUtil::toProcessUserFront).collect(Collectors.toList()));
241-
}
242-
completeInfo.setAddSignTag(cwCompleteInfoModel.getAddSignTag());
243-
return completeInfo;
244-
}).collect(Collectors.toList());
245-
element.setCompleteInfos(completeInfos);
246-
}
247-
elements.add(element);
248-
}
249-
return elements;
250-
}
251-
252-
private List<String> getAssigneeList(String procInstId, String currentUserTaskNodeKey) {
253-
BpmnModel bpmnModel = repositoryService.getBpmnModel(getProcessDefinitionId(procInstId));
254-
if (bpmnModel != null) {
255-
String version = bpmnModel.getMainProcess().getAttributeValue(ProcessConstant.EXTENSION_NAMESPACE, ProcessConstant.KEY_NASL_VERSION);
256-
try {
257-
String taskAssigneeServiceName = String.format(TASK_ASSIGNEE_SERVICE_NAME, bpmnModel.getMainProcess().getId(), version, currentUserTaskNodeKey);
258-
Object service = applicationContext.getBean(taskAssigneeServiceName);
259-
if (service == null) {
260-
return null;
261-
}
262-
Method method = service.getClass().getMethod("getAssigneeList", Map.class);
263-
Map<String, Object> variables = runtimeService.getVariables(procInstId);
264-
return (List<String>) method.invoke(service, variables);
265-
} catch (Exception e) {
266-
log.error("getAssigneeList error", e);
267-
}
268-
}
269-
return null;
270-
}
271-
272-
public String getProcessDefinitionId(String processInstanceId) {
273-
// 根据流程实例ID查询流程实例
274-
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
275-
.processInstanceId(processInstanceId)
276-
.singleResult();
277-
278-
if (historicProcessInstance != null) {
279-
return historicProcessInstance.getProcessDefinitionId();
280-
}
281-
return null;
282-
}
283161
}

0 commit comments

Comments
 (0)