update 调整流程执行非空校验,调整任务节点执行

This commit is contained in:
songgaoshuai 2023-12-28 14:01:53 +08:00
parent 5bb3f65bae
commit afb2c67022
5 changed files with 27 additions and 36 deletions

View File

@ -2,8 +2,6 @@ package org.dromara.workflow.flowable.config;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.flowable.strategy.FlowEventStrategy;
import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler;
import org.flowable.bpmn.model.BoundaryEvent; import org.flowable.bpmn.model.BoundaryEvent;
import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.FlowElement;
@ -12,11 +10,9 @@ import org.flowable.common.engine.impl.cfg.TransactionState;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService; import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService; import org.flowable.engine.TaskService;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.Execution; import org.flowable.engine.runtime.Execution;
import org.flowable.engine.task.Comment; import org.flowable.engine.task.Comment;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -44,16 +40,12 @@ public class GlobalFlowableListener implements FlowableEventListener {
@Lazy @Lazy
private RepositoryService repositoryService; private RepositoryService repositoryService;
@Autowired
private FlowEventStrategy flowEventStrategy;
@Override @Override
public void onEvent(FlowableEvent flowableEvent) { public void onEvent(FlowableEvent flowableEvent) {
if (flowableEvent instanceof FlowableEngineEvent flowableEngineEvent) { if (flowableEvent instanceof FlowableEngineEvent flowableEngineEvent) {
FlowableEngineEventType engineEventType = (FlowableEngineEventType) flowableEvent.getType(); FlowableEngineEventType engineEventType = (FlowableEngineEventType) flowableEvent.getType();
switch (engineEventType) { switch (engineEventType) {
case JOB_EXECUTION_SUCCESS -> jobExecutionSuccess((FlowableEngineEntityEvent) flowableEngineEvent); case JOB_EXECUTION_SUCCESS -> jobExecutionSuccess((FlowableEngineEntityEvent) flowableEngineEvent);
case TASK_COMPLETED -> taskCompleted((FlowableEngineEntityEvent) flowableEngineEvent);
} }
} }
} }
@ -96,21 +88,4 @@ public class GlobalFlowableListener implements FlowableEventListener {
} }
} }
} }
/**
* 处理任务办理监听
*
* @param event 事件
*/
protected void taskCompleted(FlowableEngineEntityEvent event) {
TaskEntity entity = (TaskEntity) event.getEntity();
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(entity.getProcessDefinitionId()).singleResult();
String processDefinitionKey = processDefinition.getKey();
String taskDefinitionKey = entity.getTaskDefinitionKey();
String key = processDefinitionKey + "_" + taskDefinitionKey;
FlowTaskEventHandler handler = flowEventStrategy.getTaskHandler(key);
if (handler != null) {
handler.handleTask(entity);
}
}
} }

View File

@ -1,6 +1,6 @@
package org.dromara.workflow.flowable.strategy; package org.dromara.workflow.flowable.strategy;
import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.flowable.task.api.Task;
/** /**
* 流程任务监听 * 流程任务监听
@ -13,7 +13,7 @@ public interface FlowTaskEventHandler {
/** /**
* 执行办理任务监听 * 执行办理任务监听
* *
* @param taskEntity 任务 * @param task 任务
*/ */
void handleTask(TaskEntity taskEntity); void handleTask(Task task);
} }

View File

@ -3,7 +3,7 @@ package org.dromara.workflow.listener;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.workflow.annotation.FlowListenerAnnotation; import org.dromara.workflow.annotation.FlowListenerAnnotation;
import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler; import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler;
import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.flowable.task.api.Task;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
@ -18,7 +18,7 @@ import org.springframework.stereotype.Component;
public class TestCustomTaskHandler implements FlowTaskEventHandler { public class TestCustomTaskHandler implements FlowTaskEventHandler {
@Override @Override
public void handleTask(TaskEntity taskEntity) { public void handleTask(Task task) {
log.info("任务名称:" + taskEntity.getName()); log.info("任务名称:" + task.getName());
} }
} }

View File

@ -370,7 +370,9 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
runtimeService.updateBusinessStatus(processInvalidBo.getProcessInstanceId(), BusinessStatusEnum.INVALID.getStatus()); runtimeService.updateBusinessStatus(processInvalidBo.getProcessInstanceId(), BusinessStatusEnum.INVALID.getStatus());
runtimeService.deleteProcessInstance(processInvalidBo.getProcessInstanceId(), deleteReason); runtimeService.deleteProcessInstance(processInvalidBo.getProcessInstanceId(), deleteReason);
FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey()); FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey());
if (processHandler != null) {
processHandler.handleProcess(historicProcessInstance.getId(), BusinessStatusEnum.INVALID.getStatus()); processHandler.handleProcess(historicProcessInstance.getId(), BusinessStatusEnum.INVALID.getStatus());
}
return true; return true;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -501,7 +503,9 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
} }
runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.CANCEL.getStatus()); runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.CANCEL.getStatus());
FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey()); FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey());
if (processHandler != null) {
processHandler.handleProcess(processInstanceId, BusinessStatusEnum.CANCEL.getStatus()); processHandler.handleProcess(processInstanceId, BusinessStatusEnum.CANCEL.getStatus());
}
return true; return true;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -23,6 +23,7 @@ import org.dromara.workflow.domain.vo.TaskVo;
import org.dromara.workflow.flowable.strategy.FlowEventStrategy; import org.dromara.workflow.flowable.strategy.FlowEventStrategy;
import org.dromara.workflow.flowable.cmd.*; import org.dromara.workflow.flowable.cmd.*;
import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler; import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler;
import org.dromara.workflow.flowable.strategy.FlowTaskEventHandler;
import org.dromara.workflow.service.IActTaskService; import org.dromara.workflow.service.IActTaskService;
import org.dromara.workflow.utils.WorkflowUtils; import org.dromara.workflow.utils.WorkflowUtils;
import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.common.engine.impl.identity.Authentication;
@ -152,6 +153,11 @@ public class ActTaskServiceImpl implements IActTaskService {
return true; return true;
} }
runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.WAITING.getStatus()); runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.WAITING.getStatus());
String key = processInstance.getProcessDefinitionKey() + "_" + task.getTaskDefinitionKey();
FlowTaskEventHandler taskHandler = flowEventStrategy.getTaskHandler(key);
if (taskHandler != null) {
taskHandler.handleTask(task);
}
//办理意见 //办理意见
taskService.addComment(completeTaskBo.getTaskId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), StringUtils.isBlank(completeTaskBo.getMessage()) ? "同意" : completeTaskBo.getMessage()); taskService.addComment(completeTaskBo.getTaskId(), task.getProcessInstanceId(), TaskStatusEnum.PASS.getStatus(), StringUtils.isBlank(completeTaskBo.getMessage()) ? "同意" : completeTaskBo.getMessage());
//办理任务 //办理任务
@ -165,7 +171,9 @@ public class ActTaskServiceImpl implements IActTaskService {
UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus()); UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus());
managementService.executeCommand(updateBusinessStatusCmd); managementService.executeCommand(updateBusinessStatusCmd);
FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey()); FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey());
if (processHandler != null) {
processHandler.handleProcess(processInstance.getId(), BusinessStatusEnum.FINISH.getStatus()); processHandler.handleProcess(processInstance.getId(), BusinessStatusEnum.FINISH.getStatus());
}
} else { } else {
sendMessage(list, processInstance.getName(), completeTaskBo.getMessageType(), null); sendMessage(list, processInstance.getName(), completeTaskBo.getMessageType(), null);
} }
@ -437,7 +445,9 @@ public class ActTaskServiceImpl implements IActTaskService {
} }
runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.TERMINATION.getStatus()); runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.TERMINATION.getStatus());
FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey()); FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey());
if (processHandler != null) {
processHandler.handleProcess(historicProcessInstance.getId(), BusinessStatusEnum.TERMINATION.getStatus()); processHandler.handleProcess(historicProcessInstance.getId(), BusinessStatusEnum.TERMINATION.getStatus());
}
return true; return true;
} catch (Exception e) { } catch (Exception e) {
throw new ServiceException(e.getMessage()); throw new ServiceException(e.getMessage());
@ -617,7 +627,9 @@ public class ActTaskServiceImpl implements IActTaskService {
} }
runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.BACK.getStatus()); runtimeService.updateBusinessStatus(processInstanceId, BusinessStatusEnum.BACK.getStatus());
FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey()); FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(processInstance.getProcessDefinitionKey());
if (processHandler != null) {
processHandler.handleProcess(processInstanceId, BusinessStatusEnum.BACK.getStatus()); processHandler.handleProcess(processInstanceId, BusinessStatusEnum.BACK.getStatus());
}
} catch (Exception e) { } catch (Exception e) {
throw new ServiceException(e.getMessage()); throw new ServiceException(e.getMessage());
} }