update - 修复业务节点通过 triggerId 触发会报错的问题

This commit is contained in:
wangli 2024-03-05 10:22:54 +08:00
parent ee5da87fdc
commit b94f38434e
6 changed files with 100 additions and 35 deletions

View File

@ -1,8 +1,8 @@
package cn.axzo.workflow.core.engine.behavior;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import cn.axzo.workflow.core.engine.event.ReceiveTaskExtInstCreateEventImpl;
import cn.axzo.workflow.core.repository.entity.ExtAxHiTaskInst;
import cn.axzo.workflow.core.engine.event.ReceiveTaskExtInstCompleteEvent;
import cn.axzo.workflow.core.engine.event.ReceiveTaskExtInstCreateEvent;
import cn.axzo.workflow.core.service.ExtAxHiTaskInstService;
import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.ReceiveTask;
@ -52,12 +52,10 @@ public class CustomReceiveTaskActivityBehavior extends ReceiveTaskActivityBehavi
TaskHelper.insertTask(task, (ExecutionEntity) execution, false, false);
// 添加 taskInst 扩展表数据
ExtAxHiTaskInst entity = new ExtAxHiTaskInst();
entity.setProcInstId(execution.getProcessInstanceId());
entity.setTaskDefinitionKey(execution.getCurrentActivityId());
entity.setTaskId(task.getId());
entity.setStatus(BpmnProcessInstanceResultEnum.PROCESSING.getStatus());
hiTaskInstService.save(entity);
FlowableEventDispatcher eventDispatcher = processEngineConfiguration.getEventDispatcher();
eventDispatcher.dispatchEvent(new ReceiveTaskExtInstCreateEvent(execution.getProcessInstanceId(),
execution.getCurrentActivityId(), task.getId(), BpmnProcessInstanceResultEnum.PROCESSING),
processEngineConfiguration.getEngineCfgKey());
}
@Override
@ -71,7 +69,7 @@ public class CustomReceiveTaskActivityBehavior extends ReceiveTaskActivityBehavi
Task task = taskService.createTaskQuery().executionId(execution.getId())
.taskDefinitionKey(execution.getCurrentActivityId()).singleResult();
if (Objects.nonNull(task)) {
eventDispatcher.dispatchEvent(new ReceiveTaskExtInstCreateEventImpl(execution.getProcessInstanceId(),
eventDispatcher.dispatchEvent(new ReceiveTaskExtInstCompleteEvent(execution.getProcessInstanceId(),
receiveTask.getId(), task.getId(), BpmnProcessInstanceResultEnum.APPROVED),
processEngineConfiguration.getEngineCfgKey());
} else {

View File

@ -13,18 +13,18 @@ import java.util.List;
* @author wangli
* @since 2024/2/5 18:46
*/
public enum ReceiveTaskCreateEventType implements FlowableEventType {
public enum ReceiveTaskEventType implements FlowableEventType {
CREATE,
COMPLETE;
public static final ReceiveTaskCreateEventType[] EMPTY_ARRAY = new ReceiveTaskCreateEventType[]{};
public static final ReceiveTaskEventType[] EMPTY_ARRAY = new ReceiveTaskEventType[]{};
public static ReceiveTaskCreateEventType[] getTypesFromString(String string) {
List<ReceiveTaskCreateEventType> result = new ArrayList<>();
public static ReceiveTaskEventType[] getTypesFromString(String string) {
List<ReceiveTaskEventType> result = new ArrayList<>();
if (string != null && !string.isEmpty()) {
String[] split = StringUtils.split(string, ",");
for (String typeName : split) {
boolean found = false;
for (ReceiveTaskCreateEventType type : values()) {
for (ReceiveTaskEventType type : values()) {
if (typeName.toUpperCase().equals(type.name())) {
result.add(type);
found = true;

View File

@ -3,7 +3,7 @@ package cn.axzo.workflow.core.engine.event;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import org.flowable.common.engine.api.delegate.event.FlowableEventType;
import static cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType.COMPLETE;
import static cn.axzo.workflow.core.engine.event.ReceiveTaskEventType.COMPLETE;
/**
* 接收任务的扩展任务记录表创建的事件实现
@ -11,15 +11,15 @@ import static cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType.COMP
* @author wangli
* @since 2024/2/5 18:27
*/
public class ReceiveTaskExtInstCreateEventImpl implements ReceiveTaskExtInstCreateEvent {
public class ReceiveTaskExtInstCompleteEvent implements ReceiveTaskExtInstEvent {
private final String processInstanceId;
private final String activityId;
private final String taskId;
private final BpmnProcessInstanceResultEnum resultEnum;
public ReceiveTaskExtInstCreateEventImpl(String processInstanceId, String activityId, String taskId,
BpmnProcessInstanceResultEnum resultEnum) {
public ReceiveTaskExtInstCompleteEvent(String processInstanceId, String activityId, String taskId,
BpmnProcessInstanceResultEnum resultEnum) {
this.processInstanceId = processInstanceId;
this.activityId = activityId;
this.taskId = taskId;

View File

@ -1,22 +1,50 @@
package cn.axzo.workflow.core.engine.event;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import org.flowable.common.engine.api.delegate.event.FlowableEvent;
import org.flowable.common.engine.api.delegate.event.FlowableEventType;
import static cn.axzo.workflow.core.engine.event.ReceiveTaskEventType.COMPLETE;
/**
* 接收任务的扩展任务记录表创建的事件
* 接收任务的扩展任务记录表创建的事件实现
*
* @author wangli
* @since 2024/2/5 18:26
* @since 2024/2/5 18:27
*/
public interface ReceiveTaskExtInstCreateEvent extends FlowableEvent {
public class ReceiveTaskExtInstCreateEvent implements ReceiveTaskExtInstEvent {
String getProcessInstanceId();
private final String processInstanceId;
private final String activityId;
private final String taskId;
private final BpmnProcessInstanceResultEnum resultEnum;
String getActivityId();
public ReceiveTaskExtInstCreateEvent(String processInstanceId, String activityId, String taskId,
BpmnProcessInstanceResultEnum resultEnum) {
this.processInstanceId = processInstanceId;
this.activityId = activityId;
this.taskId = taskId;
this.resultEnum = resultEnum;
}
String getTaskId();
public String getProcessInstanceId() {
return processInstanceId;
}
BpmnProcessInstanceResultEnum getResultEnum();
public String getActivityId() {
return activityId;
}
public String getTaskId() {
return taskId;
}
public BpmnProcessInstanceResultEnum getResultEnum() {
return resultEnum;
}
@Override
public FlowableEventType getType() {
return COMPLETE;
}
}

View File

@ -0,0 +1,22 @@
package cn.axzo.workflow.core.engine.event;
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
import org.flowable.common.engine.api.delegate.event.FlowableEvent;
/**
* 接收任务的扩展任务记录表创建的事件
*
* @author wangli
* @since 2024/2/5 18:26
*/
public interface ReceiveTaskExtInstEvent extends FlowableEvent {
String getProcessInstanceId();
String getActivityId();
String getTaskId();
BpmnProcessInstanceResultEnum getResultEnum();
}

View File

@ -1,6 +1,6 @@
package cn.axzo.workflow.core.listener.impl;
import cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType;
import cn.axzo.workflow.core.engine.event.ReceiveTaskEventType;
import cn.axzo.workflow.core.engine.event.ReceiveTaskExtInstCreateEvent;
import cn.axzo.workflow.core.repository.entity.ExtAxHiTaskInst;
import cn.axzo.workflow.core.service.ExtAxHiTaskInstService;
@ -11,9 +11,11 @@ import org.flowable.common.engine.api.delegate.event.AbstractFlowableEventListen
import org.flowable.common.engine.api.delegate.event.FlowableEvent;
import org.springframework.stereotype.Component;
import java.util.Objects;
import java.util.Set;
import static cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType.COMPLETE;
import static cn.axzo.workflow.core.engine.event.ReceiveTaskEventType.COMPLETE;
import static cn.axzo.workflow.core.engine.event.ReceiveTaskEventType.CREATE;
/**
* TODO
@ -24,10 +26,11 @@ import static cn.axzo.workflow.core.engine.event.ReceiveTaskCreateEventType.COMP
@AllArgsConstructor
@Component
@Slf4j
public class ReceiveTaskExtInstCreateEventListener extends AbstractFlowableEventListener {
public class ReceiveTaskExtInstventListener extends AbstractFlowableEventListener {
private final ExtAxHiTaskInstService extAxHiTaskInstService;
public static final Set<ReceiveTaskCreateEventType> SUPPORT_EVENTS =
ImmutableSet.<ReceiveTaskCreateEventType>builder()
public static final Set<ReceiveTaskEventType> SUPPORT_EVENTS =
ImmutableSet.<ReceiveTaskEventType>builder()
.add(CREATE)
.add(COMPLETE)
.build();
@ -35,9 +38,15 @@ public class ReceiveTaskExtInstCreateEventListener extends AbstractFlowableEvent
public void onEvent(FlowableEvent flowableEvent) {
if (flowableEvent instanceof ReceiveTaskExtInstCreateEvent) {
ReceiveTaskExtInstCreateEvent event = (ReceiveTaskExtInstCreateEvent) flowableEvent;
ReceiveTaskCreateEventType type = (ReceiveTaskCreateEventType) event.getType();
if (SUPPORT_EVENTS.contains(type)) {
saveExtTaskInst(event);
ReceiveTaskEventType type = (ReceiveTaskEventType) event.getType();
switch (type) {
case CREATE:
saveExtTaskInst(event);
break;
case COMPLETE:
updateExtTaskInst(event);
break;
default:
}
}
}
@ -47,6 +56,14 @@ public class ReceiveTaskExtInstCreateEventListener extends AbstractFlowableEvent
return true;
}
private void updateExtTaskInst(ReceiveTaskExtInstCreateEvent event) {
ExtAxHiTaskInst entity = extAxHiTaskInstService.getByTaskId(event.getTaskId(), event.getProcessInstanceId());
if (Objects.nonNull(entity)) {
entity.setStatus(event.getResultEnum().getStatus());
extAxHiTaskInstService.update(entity);
}
}
private void saveExtTaskInst(ReceiveTaskExtInstCreateEvent event) {
ExtAxHiTaskInst entity = new ExtAxHiTaskInst();
entity.setProcInstId(event.getProcessInstanceId());