update 优化全局任务办理监听
This commit is contained in:
parent
cd51885368
commit
a7d55420ac
@ -28,27 +28,80 @@ import java.util.List;
|
||||
@RequiredArgsConstructor
|
||||
public class WorkflowGlobalListener implements GlobalListener {
|
||||
|
||||
private final IFlwTaskService iFlwTaskService;
|
||||
private final IFlwInstanceService flwInstanceService;
|
||||
private final IFlwTaskService taskService;
|
||||
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
|
||||
public void finish(ListenerVariable listenerVariable) {
|
||||
Instance instance = listenerVariable.getInstance();
|
||||
Definition definition = listenerVariable.getDefinition();
|
||||
//撤销,退回,作废,终止发送事件
|
||||
if (StringUtils.isNotBlank(instance.getFlowStatus()) && BusinessStatusEnum.initialState(instance.getFlowStatus())) {
|
||||
publishProcessEvent(instance.getFlowStatus(), definition.getFlowCode(), instance.getBusinessId());
|
||||
log.info("流程监听器流程状态:{}", instance.getFlowStatus());
|
||||
} else {
|
||||
List<FlowTask> flowTasks = iFlwTaskService.selectByInstId(instance.getId());
|
||||
if (CollUtil.isEmpty(flowTasks)) {
|
||||
// 若流程已结束,更新状态为已完成并发送完成事件
|
||||
flwInstanceService.updateStatus(instance.getId(), BusinessStatusEnum.FINISH.getStatus());
|
||||
publishProcessEvent(BusinessStatusEnum.FINISH.getStatus(), definition.getFlowCode(), instance.getBusinessId());
|
||||
log.info("流程结束,流程状态:{}", BusinessStatusEnum.FINISH.getStatus());
|
||||
}
|
||||
}
|
||||
String businessId = instance.getBusinessId();
|
||||
String instanceFlowStatus = instance.getFlowStatus();
|
||||
|
||||
// 判断流程状态
|
||||
String status = determineFlowStatus(instance, instanceFlowStatus);
|
||||
if (StringUtils.isNotBlank(status)) {
|
||||
// 如果流程状态有效,发布事件
|
||||
publishProcessEvent(status, definition.getFlowCode(), businessId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据流程实例和当前流程状态确定最终状态
|
||||
*
|
||||
* @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
|
||||
*/
|
||||
private void publishProcessEvent(String status, String flowCode, String businessId) {
|
||||
log.info("发布流程事件,流程状态: {}, 流程编码: {}, 业务ID: {}", status, flowCode, businessId);
|
||||
ProcessEvent processEvent = new ProcessEvent();
|
||||
processEvent.setStatus(status);
|
||||
processEvent.setSubmit(false);
|
||||
@ -66,4 +120,5 @@ public class WorkflowGlobalListener implements GlobalListener {
|
||||
processEvent.setBusinessKey(businessId);
|
||||
SpringUtils.context().publishEvent(processEvent);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user