update 新增流程完成监听器

This commit is contained in:
AprilWind 2024-11-13 15:27:27 +08:00
parent 2e83439e5e
commit e1a9fe0e44
2 changed files with 196 additions and 0 deletions

View File

@ -0,0 +1,131 @@
package org.dromara.workflow.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.dromara.warm.flow.core.utils.ObjectUtil;
/**
* 工作流状态
*
* @author AprilWind
*/
@Getter
@AllArgsConstructor
public enum WorkflowStatus {
/**
* 待提交状态
* 流程还未提交处于待提交状态
*/
TOBESUBMIT("0", "待提交", "submitted"),
/**
* 审批中状态
* 流程正在审批过程中处于审批中状态
*/
APPROVAL("1", "审批中", "approving"),
/**
* 审批通过状态
* 流程已通过审批处于审批通过状态
*/
PASS("2", "审批通过", "passed"),
/**
* 自动完成状态
* 流程已自动完成通常不需要人工干预
*/
AUTO_PASS("3", "自动完成", "auto"),
/**
* 终止状态
* 流程已终止不能继续执行
*/
TERMINATE("4", "终止", "terminated"),
/**
* 作废状态
* 流程被作废已不再有效
*/
NULLIFY("5", "作废", "nullified"),
/**
* 撤销状态
* 流程已被撤销撤销后流程无法继续
*/
CANCEL("6", "撤销", "cancelled"),
/**
* 取回状态
* 流程被取回通常是审批被暂停重新操作后可继续
*/
RETRIEVE("7", "取回", "retrieved"),
/**
* 已完成状态
* 流程已全部完成且所有操作已结束
*/
FINISHED("8", "已完成", "done"),
/**
* 已退回状态
* 流程被退回通常是审批不通过或者需要重新处理
*/
REJECT("9", "已退回", "rejected"),
/**
* 失效状态
* 流程已失效不再有效不能继续执行
*/
INVALID("10", "失效", "invalid");
/**
* 唯一标识符
*/
private final String key;
/**
* 中文描述
*/
private final String value;
/**
* 状态
*/
private final String status;
public static WorkflowStatus getByKey(String key) {
for (WorkflowStatus workflowStatus : WorkflowStatus.values()) {
if (workflowStatus.getKey().equals(key)) {
return workflowStatus;
}
}
return null;
}
public static WorkflowStatus getByValue(String value) {
for (WorkflowStatus workflowStatus : WorkflowStatus.values()) {
if (workflowStatus.getValue().equals(value)) {
return workflowStatus;
}
}
return null;
}
public static WorkflowStatus getByStatus(String status) {
for (WorkflowStatus workflowStatus : WorkflowStatus.values()) {
if (workflowStatus.getStatus().equals(status)) {
return workflowStatus;
}
}
return null;
}
public static Boolean isFinished(String key) {
return ObjectUtil.isNotNull(key) && (WorkflowStatus.FINISHED.getKey().equals(key));
}
public static Boolean isFinished(WorkflowStatus workflowStatus) {
return ObjectUtil.isNotNull(workflowStatus) && (WorkflowStatus.FINISHED == workflowStatus);
}
}

View File

@ -0,0 +1,65 @@
package org.dromara.workflow.listener;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.event.ProcessEvent;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.warm.flow.core.entity.Definition;
import org.dromara.warm.flow.core.entity.Instance;
import org.dromara.warm.flow.core.listener.Listener;
import org.dromara.warm.flow.core.listener.ListenerVariable;
import org.dromara.workflow.common.enums.WorkflowStatus;
import org.dromara.workflow.service.IFlwInstanceService;
import org.springframework.stereotype.Component;
/**
* 流程完成监听器用于处理流程结束时的业务逻辑
* <p>
* 该监听器通常用于处理流程完成后的相关操作如更新业务表记录日志通知等
* 可以将业务逻辑放在此监听器中也可以在业务代码中处理或者使用局部监听器进行监听
* </p>
* <p>
* 例如当一个流程结束时可能需要根据流程的状态更新业务表执行后续的处理操作
* 或者发送通知等此监听器可以提供统一的处理入口
* </p>
*
* @author AprilWind
*/
@RequiredArgsConstructor
@Component
@Slf4j
public class WorkflowFinishListener implements Listener {
private final IFlwInstanceService iFlwInstanceService;
/**
* 流程结束监听器用于在流程结束后执行相关的业务逻辑
* <p>
* 该方法会在流程完成后被触发通常用于执行业务表的新增或更新操作
* 或者其他与业务相关的操作如通知发送记录日志等
* </p>
*
* @param listenerVariable 监听器变量包含与当前流程相关的信息
*/
@Override
public void notify(ListenerVariable listenerVariable) {
log.info("流程结束监听器");
Instance instance = listenerVariable.getInstance();
WorkflowStatus status = WorkflowStatus.getByKey(instance.getFlowStatus());
Definition definition = listenerVariable.getDefinition();
ProcessEvent processEvent = new ProcessEvent();
//检查流程是否已结束
if (WorkflowStatus.isFinished(status)) {
// 若流程已结束更新状态为已完成
iFlwInstanceService.updateStatus(instance.getId(), status.getStatus());
// 流程结束监听处理结束后的业务逻辑
processEvent.setStatus(status.getStatus());
processEvent.setSubmit(false);
processEvent.setFlowCode(definition.getFlowCode());
processEvent.setBusinessKey(instance.getBusinessId());
SpringUtils.context().publishEvent(processEvent);
}
log.info("流程结束监听器结束;{}", "流程完成处理");
}
}