【代码评审】BPM:Simple 设计器 - userTask 监听器

This commit is contained in:
YunaiV 2025-01-08 09:40:38 +08:00
parent a008b313ec
commit 4acb01c3b0
2 changed files with 19 additions and 7 deletions

View File

@ -439,28 +439,32 @@ public class SimpleModelUtils {
}
// 设置监听器
addUserTaskListener(node, userTask);
// 设置Simple设计器节点配置
// 设置 Simple 设计器节点配置
// TODO @lesan只设置到 flowableListener 里面整个 node 太大了因为很多都保存过啦
addSimpleConfigInfo(userTask, node);
return userTask;
}
private void addUserTaskListener(BpmSimpleModelNodeVO node, UserTask userTask) {
List<FlowableListener> flowableListeners = new ArrayList<>(3);
if (node.getTaskCreateListener().getEnable()) {
if (node.getTaskCreateListener() != null
&& Boolean.TRUE.equals(node.getTaskCreateListener().getEnable())) {
FlowableListener flowableListener = new FlowableListener();
flowableListener.setEvent(TaskListener.EVENTNAME_CREATE);
flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
flowableListener.setImplementation(DELEGATE_EXPRESSION);
flowableListeners.add(flowableListener);
}
if (node.getTaskAssignListener().getEnable()) {
if (node.getTaskAssignListener() != null
&& Boolean.TRUE.equals(node.getTaskAssignListener().getEnable())) {
FlowableListener flowableListener = new FlowableListener();
flowableListener.setEvent(TaskListener.EVENTNAME_ASSIGNMENT);
flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
flowableListener.setImplementation(DELEGATE_EXPRESSION);
flowableListeners.add(flowableListener);
}
if (node.getTaskCompleteListener().getEnable()) {
if (node.getTaskCompleteListener() != null
&& Boolean.TRUE.equals(node.getTaskCompleteListener().getEnable())) {
FlowableListener flowableListener = new FlowableListener();
flowableListener.setEvent(TaskListener.EVENTNAME_COMPLETE);
flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.bpm.service.task.listener;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO;
import cn.iocoder.yudao.module.bpm.enums.definition.BpmListenerMapType;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils;
@ -24,6 +25,7 @@ import org.springframework.web.client.RestTemplate;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID;
import static cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils.parseSimpleConfigInfo;
/**
@ -62,18 +64,23 @@ public class BpmUserTaskListener implements TaskListener {
parseListenerMap(listenerHandler.getHeader(), processVariables, headers);
parseListenerMap(listenerHandler.getBody(), processVariables, body);
// 2.1 请求头默认参数
headers.add("tenant-id", delegateTask.getTenantId());
if (StrUtil.isNotEmpty(delegateTask.getTenantId())) {
headers.add(HEADER_TENANT_ID, delegateTask.getTenantId());
}
// 2.2 请求体默认参数
// TODO @芋艿哪些默认参数后续再调研下
body.add("processInstanceId", delegateTask.getProcessInstanceId());
body.add("assignee", delegateTask.getAssignee());
body.add("taskDefinitionKey", delegateTask.getTaskDefinitionKey());
body.add("taskId", delegateTask.getId());
// 3. 异步发起请求
// TODO @芋艿确认要同步还是异步
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(body, headers);
ResponseEntity<String> responseEntity = restTemplate.exchange(listenerHandler.getPath(), HttpMethod.POST,
requestEntity, String.class);
log.info("[BpmUserTaskListener][的响应结果({})]", responseEntity);
// TODO @lesan日志打印可以更全哈例如说请求参数对应的 task id哪个 listener
log.info("[notify][的响应结果({})]", responseEntity);
// 4. 是否需要后续操作TODO 芋艿待定
}
@ -92,12 +99,13 @@ public class BpmUserTaskListener implements TaskListener {
});
}
// TODO @lesan改成 jdk8 写法哈主要考虑好兼容
private BpmSimpleModelNodeVO.ListenerHandler getListenerHandlerByEvent(String eventName, BpmSimpleModelNodeVO node) {
return switch (eventName) {
case TaskListener.EVENTNAME_CREATE -> node.getTaskCreateListener();
case TaskListener.EVENTNAME_ASSIGNMENT -> node.getTaskAssignListener();
case TaskListener.EVENTNAME_COMPLETE -> node.getTaskCompleteListener();
default -> null;
default -> null; // TODO @lesan这个抛出异常可控一点
};
}