update 新增流程完成监听器
This commit is contained in:
parent
2e83439e5e
commit
e1a9fe0e44
@ -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);
|
||||
}
|
||||
}
|
@ -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("流程结束监听器结束;{}", "流程完成处理");
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user