【代码评审】BPM:Simple 设计器 - userTask 监听器
This commit is contained in:
parent
fdc6f6ed65
commit
b5f6545d5a
|
@ -6,6 +6,7 @@ import lombok.Getter;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
// TODO @芋艿:枚举值的类名,在考虑下
|
||||||
/**
|
/**
|
||||||
* BPM 任务监听器键值对类型
|
* BPM 任务监听器键值对类型
|
||||||
*
|
*
|
||||||
|
|
|
@ -96,15 +96,19 @@ public class BpmSimpleModelNodeVO {
|
||||||
*/
|
*/
|
||||||
private AssignEmptyHandler assignEmptyHandler;
|
private AssignEmptyHandler assignEmptyHandler;
|
||||||
|
|
||||||
|
// TODO @lesan:建议改成 taskCreateListener;
|
||||||
/**
|
/**
|
||||||
* 创建任务监听器
|
* 创建任务监听器
|
||||||
*/
|
*/
|
||||||
private ListenerHandler createTaskListener;
|
private ListenerHandler createTaskListener;
|
||||||
|
|
||||||
@Schema(description = "任务监听器")
|
@Schema(description = "任务监听器")
|
||||||
|
@Valid
|
||||||
@Data
|
@Data
|
||||||
public static class ListenerHandler {
|
public static class ListenerHandler {
|
||||||
|
|
||||||
|
// TODO @lesan:参数校验,需要加下
|
||||||
|
|
||||||
@Schema(description = "是否开启任务监听器", example = "false")
|
@Schema(description = "是否开启任务监听器", example = "false")
|
||||||
private Boolean enable;
|
private Boolean enable;
|
||||||
|
|
||||||
|
@ -117,6 +121,8 @@ public class BpmSimpleModelNodeVO {
|
||||||
@Schema(description = "请求体", example = "[]")
|
@Schema(description = "请求体", example = "[]")
|
||||||
private List<ListenerMap> body;
|
private List<ListenerMap> body;
|
||||||
|
|
||||||
|
// TODO @芋艿:这里后续要不要复用;
|
||||||
|
|
||||||
@Schema(description = "任务监听器键值对")
|
@Schema(description = "任务监听器键值对")
|
||||||
@Data
|
@Data
|
||||||
public static class ListenerMap {
|
public static class ListenerMap {
|
||||||
|
@ -125,11 +131,14 @@ public class BpmSimpleModelNodeVO {
|
||||||
private String key;
|
private String key;
|
||||||
|
|
||||||
@Schema(description = "值类型", example = "1")
|
@Schema(description = "值类型", example = "1")
|
||||||
|
@InEnum(BpmListenerMapType.class)
|
||||||
private Integer type;
|
private Integer type;
|
||||||
|
|
||||||
@Schema(description = "值", example = "xxx")
|
@Schema(description = "值", example = "xxx")
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Schema(description = "审批节点拒绝处理策略")
|
@Schema(description = "审批节点拒绝处理策略")
|
||||||
|
|
|
@ -431,11 +431,14 @@ public class SimpleModelUtils {
|
||||||
flowableListener.setEvent(TaskListener.EVENTNAME_CREATE);
|
flowableListener.setEvent(TaskListener.EVENTNAME_CREATE);
|
||||||
flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
|
||||||
flowableListener.setImplementation(DELEGATE_EXPRESSION);
|
flowableListener.setImplementation(DELEGATE_EXPRESSION);
|
||||||
|
// TODO @lesan:可以加个 addExtensionElementJson() 方法;
|
||||||
|
// TODO @lesan:是不是不用带 "create" + EXTENSION_SUFFIX 这种,直接给个 "config" 就完事了!
|
||||||
addExtensionElement(userTask, "create" + EXTENSION_SUFFIX,
|
addExtensionElement(userTask, "create" + EXTENSION_SUFFIX,
|
||||||
|
// TODO @lesan:默认使用项目里的 JsonUtils 方法
|
||||||
JSONUtil.toJsonStr(node.getCreateTaskListener()));
|
JSONUtil.toJsonStr(node.getCreateTaskListener()));
|
||||||
flowableListeners.add(flowableListener);
|
flowableListeners.add(flowableListener);
|
||||||
}
|
}
|
||||||
if (!flowableListeners.isEmpty()) {
|
if (CollUtil.isNotEmpty(flowableListeners)) {
|
||||||
userTask.setTaskListeners(flowableListeners);
|
userTask.setTaskListeners(flowableListeners);
|
||||||
}
|
}
|
||||||
return userTask;
|
return userTask;
|
||||||
|
|
|
@ -46,20 +46,24 @@ public class BpmUserTaskListener implements TaskListener {
|
||||||
HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId());
|
HistoricProcessInstance processInstance = processInstanceService.getHistoricProcessInstance(delegateTask.getProcessInstanceId());
|
||||||
BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(delegateTask.getProcessDefinitionId());
|
BpmnModel bpmnModel = modelService.getBpmnModelByDefinitionId(delegateTask.getProcessDefinitionId());
|
||||||
FlowElement userTaskElement = BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey());
|
FlowElement userTaskElement = BpmnModelUtils.getFlowElementById(bpmnModel, delegateTask.getTaskDefinitionKey());
|
||||||
|
// TODO @lesan:可以写到 FlowableUtils 里,简化解析逻辑!
|
||||||
BpmSimpleModelNodeVO.ListenerHandler listenerHandler = JSONUtil.toBean(
|
BpmSimpleModelNodeVO.ListenerHandler listenerHandler = JSONUtil.toBean(
|
||||||
parseExtensionElement(userTaskElement, delegateTask.getEventName() + EXTENSION_SUFFIX),
|
parseExtensionElement(userTaskElement, delegateTask.getEventName() + EXTENSION_SUFFIX),
|
||||||
BpmSimpleModelNodeVO.ListenerHandler.class);
|
BpmSimpleModelNodeVO.ListenerHandler.class);
|
||||||
Map<String, Object> processVariables = processInstance.getProcessVariables();
|
|
||||||
// 2. 获取请求头和请求体
|
// 2. 获取请求头和请求体
|
||||||
HashMap<String, String> headers = new HashMap<>();
|
Map<String, Object> processVariables = processInstance.getProcessVariables();
|
||||||
HashMap<String, Object> body = new HashMap<>();
|
Map<String, String> headers = new HashMap<>();
|
||||||
|
Map<String, Object> body = new HashMap<>();
|
||||||
listenerHandler.getHeader().forEach(item -> {
|
listenerHandler.getHeader().forEach(item -> {
|
||||||
|
// TODO @lesan:可以写个统一的方法,解析参数。然后非空,put 到 headers 或者 body 里!
|
||||||
if (item.getType().equals(BpmListenerMapType.FIXED_VALUE.getType())) {
|
if (item.getType().equals(BpmListenerMapType.FIXED_VALUE.getType())) {
|
||||||
headers.put(item.getKey(), item.getValue());
|
headers.put(item.getKey(), item.getValue());
|
||||||
} else if (item.getType().equals(BpmListenerMapType.FROM_FORM.getType())) {
|
} else if (item.getType().equals(BpmListenerMapType.FROM_FORM.getType())) {
|
||||||
headers.put(item.getKey(), processVariables.getOrDefault(item.getValue(), "").toString());
|
headers.put(item.getKey(), processVariables.getOrDefault(item.getValue(), "").toString());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
// TODO @lesan:header 里面,需要添加下 tenant-id!
|
||||||
listenerHandler.getBody().forEach(item -> {
|
listenerHandler.getBody().forEach(item -> {
|
||||||
if (item.getType().equals(BpmListenerMapType.FIXED_VALUE.getType())) {
|
if (item.getType().equals(BpmListenerMapType.FIXED_VALUE.getType())) {
|
||||||
body.put(item.getKey(), item.getValue());
|
body.put(item.getKey(), item.getValue());
|
||||||
|
@ -67,10 +71,13 @@ public class BpmUserTaskListener implements TaskListener {
|
||||||
body.put(item.getKey(), processVariables.getOrDefault(item.getValue(), ""));
|
body.put(item.getKey(), processVariables.getOrDefault(item.getValue(), ""));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 3. 异步发起请求
|
// 3. 异步发起请求
|
||||||
|
// TODO @lesan:最好打印下日志!
|
||||||
HttpRequest.post(listenerHandler.getPath())
|
HttpRequest.post(listenerHandler.getPath())
|
||||||
.addHeaders(headers).form(body).executeAsync();
|
.addHeaders(headers).form(body).executeAsync();
|
||||||
// 4. 是否需要后续操作?
|
|
||||||
|
// 4. 是否需要后续操作?TODO 芋艿:待定!
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue