diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/FirstApprovalAutoCompleteListener.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/FirstApprovalAutoCompleteListener.java new file mode 100644 index 0000000..1817060 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/listener/FirstApprovalAutoCompleteListener.java @@ -0,0 +1,53 @@ +package com.zteits.urbanops.module.workorder.service.garden.listener; + +/** + * 类描述:第一次跳过审批,第二次手动审批 + * 创建人:yanhuiqing + * 创建时间:2025/12/18 20:28 + * 修改人:yanhuiqing + * 修改时间:2025/12/18 20:28 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +import org.flowable.engine.TaskService; +import org.flowable.engine.delegate.TaskListener; +import org.flowable.task.service.delegate.DelegateTask; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 初审节点自动通过监听器 + */ +@Component("firstApprovalAutoCompleteListener") // 组件名,供流程设计器调用 +public class FirstApprovalAutoCompleteListener implements TaskListener { + + // 注入Flowable的TaskService,用于完成任务 + @Autowired + private TaskService taskService; + + @Override + public void notify(DelegateTask delegateTask) { + // 1. 获取流程变量 + String starterId = (String) delegateTask.getVariable("starterId"); // 发起人ID + Boolean isFirstEnter = (Boolean) delegateTask.getVariable("isFirstEnterFirstApproval"); // 是否首次进入 + Boolean isReturned = (Boolean) delegateTask.getVariable("isReturnedToFirstApproval"); // 是否退回 + + // 2. 获取当前审批节点的审批人ID + String assigneeId = delegateTask.getAssignee(); + + // 3. 核心逻辑:首次进入 + 发起人=审批人 → 自动完成任务 + if (isFirstEnter != null && isFirstEnter + && !Boolean.TRUE.equals(isReturned) + && starterId != null && starterId.equals(assigneeId)) { + + // 标记:首次进入已处理,后续不再触发自动通过 + delegateTask.setVariable("isFirstEnterFirstApproval", false); + + // 自动完成任务(流程继续向下) + taskService.complete(delegateTask.getId()); + } + // 若为退回进入(isReturned=true),则不执行自动完成,等待手动处理 + } +} \ No newline at end of file