update 优化全局任务办理监听

This commit is contained in:
AprilWind 2024-12-12 11:29:22 +08:00
parent cd51885368
commit a7d55420ac

View File

@ -28,27 +28,80 @@ import java.util.List;
@RequiredArgsConstructor @RequiredArgsConstructor
public class WorkflowGlobalListener implements GlobalListener { public class WorkflowGlobalListener implements GlobalListener {
private final IFlwTaskService iFlwTaskService; private final IFlwTaskService taskService;
private final IFlwInstanceService flwInstanceService; private final IFlwInstanceService instanceService;
/**
* 创建监听器任务创建时执行
*
* @param listenerVariable 监听器变量
*/
@Override
public void create(ListenerVariable listenerVariable) {
}
/**
* 开始监听器任务开始办理时执行
*
* @param listenerVariable 监听器变量
*/
@Override
public void start(ListenerVariable listenerVariable) {
}
/**
* 分派监听器动态修改代办任务信息
*
* @param listenerVariable 监听器变量
*/
@Override
public void assignment(ListenerVariable listenerVariable) {
}
/**
* 完成监听器当前任务完成后执行
*
* @param listenerVariable 监听器变量
*/
@Override @Override
public void finish(ListenerVariable listenerVariable) { public void finish(ListenerVariable listenerVariable) {
Instance instance = listenerVariable.getInstance(); Instance instance = listenerVariable.getInstance();
Definition definition = listenerVariable.getDefinition(); Definition definition = listenerVariable.getDefinition();
//撤销退回作废终止发送事件 String businessId = instance.getBusinessId();
if (StringUtils.isNotBlank(instance.getFlowStatus()) && BusinessStatusEnum.initialState(instance.getFlowStatus())) { String instanceFlowStatus = instance.getFlowStatus();
publishProcessEvent(instance.getFlowStatus(), definition.getFlowCode(), instance.getBusinessId());
log.info("流程监听器流程状态:{}", instance.getFlowStatus()); // 判断流程状态
} else { String status = determineFlowStatus(instance, instanceFlowStatus);
List<FlowTask> flowTasks = iFlwTaskService.selectByInstId(instance.getId()); if (StringUtils.isNotBlank(status)) {
if (CollUtil.isEmpty(flowTasks)) { // 如果流程状态有效发布事件
// 若流程已结束更新状态为已完成并发送完成事件 publishProcessEvent(status, definition.getFlowCode(), businessId);
flwInstanceService.updateStatus(instance.getId(), BusinessStatusEnum.FINISH.getStatus());
publishProcessEvent(BusinessStatusEnum.FINISH.getStatus(), definition.getFlowCode(), instance.getBusinessId());
log.info("流程结束,流程状态:{}", BusinessStatusEnum.FINISH.getStatus());
} }
} }
/**
* 根据流程实例和当前流程状态确定最终状态
*
* @param instance 流程实例
* @param instanceFlowStatus 流程实例当前状态
* @return 流程最终状态
*/
private String determineFlowStatus(Instance instance, String instanceFlowStatus) {
if (StringUtils.isNotBlank(instanceFlowStatus) && BusinessStatusEnum.initialState(instanceFlowStatus)) {
log.info("流程实例当前状态: {}", instanceFlowStatus);
return instanceFlowStatus;
} else {
Long instanceId = instance.getId();
List<FlowTask> flowTasks = taskService.selectByInstId(instanceId);
if (CollUtil.isEmpty(flowTasks)) {
String status = BusinessStatusEnum.FINISH.getStatus();
// 更新流程状态为已完成
instanceService.updateStatus(instanceId, status);
log.info("流程已结束,状态更新为: {}", status);
return status;
}
log.warn("流程未结束实例ID: {}", instanceId);
return null;
}
} }
/** /**
@ -59,6 +112,7 @@ public class WorkflowGlobalListener implements GlobalListener {
* @param businessId 业务id * @param businessId 业务id
*/ */
private void publishProcessEvent(String status, String flowCode, String businessId) { private void publishProcessEvent(String status, String flowCode, String businessId) {
log.info("发布流程事件,流程状态: {}, 流程编码: {}, 业务ID: {}", status, flowCode, businessId);
ProcessEvent processEvent = new ProcessEvent(); ProcessEvent processEvent = new ProcessEvent();
processEvent.setStatus(status); processEvent.setStatus(status);
processEvent.setSubmit(false); processEvent.setSubmit(false);
@ -66,4 +120,5 @@ public class WorkflowGlobalListener implements GlobalListener {
processEvent.setBusinessKey(businessId); processEvent.setBusinessKey(businessId);
SpringUtils.context().publishEvent(processEvent); SpringUtils.context().publishEvent(processEvent);
} }
} }