update 优化全局任务办理监听
This commit is contained in:
parent
cd51885368
commit
a7d55420ac
@ -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 {
|
|
||||||
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 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
|
* @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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user