update - 调整引擎事件的处理逻辑, 让各事件处理逻辑更通用标准

This commit is contained in:
wangli 2024-03-27 17:44:06 +08:00
parent 20820d1bce
commit ea6d073812
7 changed files with 65 additions and 61 deletions

View File

@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j;
import org.flowable.common.engine.api.delegate.event.AbstractFlowableEventListener;
import org.flowable.common.engine.api.delegate.event.FlowableEvent;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.Objects;
import java.util.Set;
@ -28,7 +29,7 @@ import static cn.axzo.workflow.core.engine.event.ReceiveTaskEventType.UPDATE;
@AllArgsConstructor
@Component
@Slf4j
public class ReceiveTaskExtInstEventListener extends AbstractFlowableEventListener {
public class ExtTaskInstEventListener extends AbstractFlowableEventListener {
private final ExtAxHiTaskInstService extAxHiTaskInstService;
public static final Set<ReceiveTaskEventType> SUPPORT_EVENTS =
ImmutableSet.<ReceiveTaskEventType>builder()
@ -60,23 +61,33 @@ public class ReceiveTaskExtInstEventListener extends AbstractFlowableEventListen
return true;
}
private void updateExtTaskInst(ExtTaskInstUpdateEvent event) {
ExtAxHiTaskInst entity = extAxHiTaskInstService.getByTaskId(event.getTaskId(), event.getProcessInstanceId());
if (Objects.nonNull(entity)) {
entity.setAssignee(event.getAssignee());
entity.setStatus(event.getResultEnum().getStatus());
extAxHiTaskInstService.update(entity);
}
}
private void saveExtTaskInst(ExtTaskInstCreateEvent event) {
ExtAxHiTaskInst entity = new ExtAxHiTaskInst();
entity.setProcInstId(event.getProcessInstanceId());
entity.setTaskDefinitionKey(event.getActivityId());
entity.setTaskId(event.getTaskId());
entity.setAssignee(event.getAssignee());
if (StringUtils.hasText(event.getAssignee())) {
entity.setAssignee(event.getAssignee());
}
entity.setStatus(event.getResultEnum().getStatus());
extAxHiTaskInstService.save(entity);
}
private void updateExtTaskInst(ExtTaskInstUpdateEvent event) {
ExtAxHiTaskInst entity = extAxHiTaskInstService.getByTaskId(event.getTaskId(), event.getProcessInstanceId());
if (Objects.nonNull(entity)) {
if (StringUtils.hasText(event.getAssignee())) {
entity.setAssignee(event.getAssignee());
}
entity.setStatus(event.getResultEnum().getStatus());
extAxHiTaskInstService.update(entity);
} else {
// 如果一个任务,如果没有设置人,那么就不会先执行 saveExtTaskInst 方法,
// 所以,这里做一个兜底,如果没有查询到,有协助新建该对象
ExtTaskInstCreateEvent create = new ExtTaskInstCreateEvent(event.getProcessInstanceId(),
event.getActivityId(), event.getTaskId(), event.getAssignee(), event.getResultEnum());
saveExtTaskInst(create);
}
}
}

View File

@ -43,17 +43,20 @@ public class InternalExtAxTaskInstEvent_min_Listener implements BpmnTaskEventLis
}
@Override
public void onCreated(DelegateTask delegateTask) {
ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration();
FlowableEventDispatcher eventDispatcher = processEngineConfiguration.getEventDispatcher();
eventDispatcher.dispatchEvent(new ExtTaskInstCreateEvent(delegateTask.getProcessInstanceId(),
delegateTask.getTaskDefinitionKey(), delegateTask.getId(), PROCESSING),
processEngineConfiguration.getEngineCfgKey());
public void onAssigned(DelegateTask delegateTask) {
}
@Override
public void onAssigned(DelegateTask delegateTask) {
public void onCreated(DelegateTask delegateTask) {
// ProcessEngineConfigurationImpl processEngineConfiguration =
// CommandContextUtil.getProcessEngineConfiguration();
// FlowableEventDispatcher eventDispatcher = processEngineConfiguration.getEventDispatcher();
// eventDispatcher.dispatchEvent(new ExtTaskInstUpdateEvent(delegateTask.getProcessInstanceId(),
// delegateTask.getTaskDefinitionKey(), delegateTask.getId(), PROCESSING),
// processEngineConfiguration.getEngineCfgKey());
String assignee;
// 记录发起人
if (Objects.equals(delegateTask.getTaskDefinitionKey(), NODE_STARTER.getType())) {
@ -74,10 +77,9 @@ public class InternalExtAxTaskInstEvent_min_Listener implements BpmnTaskEventLis
ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration();
FlowableEventDispatcher eventDispatcher = processEngineConfiguration.getEventDispatcher();
eventDispatcher.dispatchEvent(new ExtTaskInstUpdateEvent(delegateTask.getProcessInstanceId(),
eventDispatcher.dispatchEvent(new ExtTaskInstCreateEvent(delegateTask.getProcessInstanceId(),
delegateTask.getTaskDefinitionKey(), delegateTask.getId(), assignee, PROCESSING),
processEngineConfiguration.getEngineCfgKey());
}
@Override

View File

@ -1,6 +1,7 @@
package cn.axzo.workflow.core.repository.entity;
import cn.axzo.framework.data.mybatisplus.model.BaseEntity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@ -50,7 +51,7 @@ public class ExtAxHiTaskInst extends BaseEntity<ExtAxHiTaskInst> {
/**
* 同意的人
*/
@TableField("assignee")
@TableField(value = "assignee", updateStrategy = FieldStrategy.NOT_EMPTY, insertStrategy = FieldStrategy.NOT_EMPTY)
private String assignee;
}

View File

@ -94,8 +94,6 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_PROCESS_AG
import static cn.axzo.workflow.common.constant.BpmnConstants.OLD_INTERNAL_INITIATOR;
import static cn.axzo.workflow.common.constant.BpmnConstants.PENDING_TEMPLATE_VARIABLE;
import static cn.axzo.workflow.common.constant.BpmnConstants.WORKFLOW_ENGINE_VERSION;
import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.autoPassed;
import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.autoRejection;
import static cn.axzo.workflow.common.enums.ApprovalMethodEnum.human;
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.AND;
import static cn.axzo.workflow.common.enums.BpmnFlowNodeMode.EXCEPTIONAL;
@ -771,19 +769,8 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
userTask, engineExecutionStartListener));
node.setForecastAssigners(forecastAssigners);
if (CollectionUtils.isEmpty(forecastAssigners)) {
getApproverEmptyHandleType(userTask).ifPresent(emptyHandleType -> {
switch (emptyHandleType) {
case autoPassed:
node.setApprovalMethod(autoPassed);
break;
case autoRejection:
node.setApprovalMethod(autoRejection);
break;
default:
node.setNodeMode(EXCEPTIONAL);
break;
}
});
getApproverEmptyHandleType(userTask).ifPresent(emptyHandleType ->
node.setNodeMode(EXCEPTIONAL));
}
}
} else if (i instanceof ServiceTask) {

View File

@ -60,10 +60,10 @@ import static cn.axzo.workflow.core.common.enums.BpmnProcessTaskResultEnum.REJEC
@Slf4j
@Component
@AllArgsConstructor
public class AutoOperatorEvent_102_Listener implements BpmnTaskEventListener, Ordered {
public class AutoOperatorEvent_103_Listener implements BpmnTaskEventListener, Ordered {
@Override
public int getOrder() {
return Integer.MIN_VALUE + 102;
return Integer.MIN_VALUE + 103;
}
private final TaskService taskService;
@ -74,15 +74,11 @@ public class AutoOperatorEvent_102_Listener implements BpmnTaskEventListener, Or
@Override
public void onAssigned(DelegateTask delegateTask) {
Process mainProcess = repositoryService.getBpmnModel(delegateTask.getProcessDefinitionId()).getMainProcess();
UserTask userTask = (UserTask) mainProcess.getFlowElement(delegateTask.getTaskDefinitionKey());
// Process mainProcess = repositoryService.getBpmnModel(delegateTask.getProcessDefinitionId())
// .getMainProcess();
// UserTask userTask = (UserTask) mainProcess.getFlowElement(delegateTask.getTaskDefinitionKey());
boolean exists = checkApproverExists(delegateTask, userTask, mainProcess);
if (exists) {
taskService.addComment(delegateTask.getId(), delegateTask.getProcessInstanceId(), COMMENT_TYPE_ADVICE,
"同一审批人,自动过审");
autoPass(delegateTask);
}
}
@Override
@ -107,6 +103,13 @@ public class AutoOperatorEvent_102_Listener implements BpmnTaskEventListener, Or
Process mainProcess = repositoryService.getBpmnModel(delegateTask.getProcessDefinitionId()).getMainProcess();
UserTask userTask = (UserTask) mainProcess.getFlowElement(delegateTask.getTaskDefinitionKey());
boolean exists = checkApproverExists(delegateTask, userTask, mainProcess);
if (exists) {
taskService.addComment(delegateTask.getId(), delegateTask.getProcessInstanceId(), COMMENT_TYPE_ADVICE,
"同一审批人,自动过审");
autoPass(delegateTask);
}
// 检测节点自身配置是否有自动操作
checkApprovalMethod(delegateTask, userTask);

View File

@ -47,10 +47,10 @@ import static cn.axzo.workflow.core.engine.event.BizSpecifyAssigneeEventType.ADD
@Slf4j
@Component
@AllArgsConstructor
public class MessagePushTaskEvent_103_Listener implements BpmnTaskEventListener, Ordered {
public class MessagePushTaskEvent_102_Listener implements BpmnTaskEventListener, Ordered {
@Override
public int getOrder() {
return Integer.MIN_VALUE + 103;
return Integer.MIN_VALUE + 102;
}
private final RuntimeService runtimeService;

View File

@ -55,18 +55,6 @@ public class RocketMqBpmnTaskEvent_101_Listener implements BpmnTaskEventListener
@Value("${sendMq:true}")
private Boolean sendMQ;
@Override
public void onCreated(DelegateTask delegateTask) {
if (log.isDebugEnabled()) {
log.debug("RocketMqBpmnTaskEventListener#onCreated...{}", delegateTask.getTaskDefinitionKey());
}
ProcessTaskDTO dto = build(delegateTask, PROCESS_TASK_CREATED);
sendMessageQueue(dto, PROCESS_TASK_CREATED);
if (log.isDebugEnabled()) {
log.debug("RocketMqBpmnTaskEventListener#onCreated...end: {}", delegateTask.getTaskDefinitionKey());
}
}
@Override
public void onAssigned(DelegateTask delegateTask) {
if (log.isDebugEnabled()) {
@ -82,6 +70,18 @@ public class RocketMqBpmnTaskEvent_101_Listener implements BpmnTaskEventListener
}
}
@Override
public void onCreated(DelegateTask delegateTask) {
if (log.isDebugEnabled()) {
log.debug("RocketMqBpmnTaskEventListener#onCreated...{}", delegateTask.getTaskDefinitionKey());
}
ProcessTaskDTO dto = build(delegateTask, PROCESS_TASK_CREATED);
sendMessageQueue(dto, PROCESS_TASK_CREATED);
if (log.isDebugEnabled()) {
log.debug("RocketMqBpmnTaskEventListener#onCreated...end: {}", delegateTask.getTaskDefinitionKey());
}
}
@Override
public void onCompleted(DelegateTask delegateTask) {
if (log.isDebugEnabled()) {