Bladeren bron

获取整个审批实例流程

xian 6 jaren geleden
bovenliggende
commit
c42e689b1a

+ 8 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/approval/ApprovalTaskService.java

@@ -1,5 +1,6 @@
 package com.iamberry.rst.faces.approval;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -33,4 +34,11 @@ public interface ApprovalTaskService {
      * @param reason    说明(eg:业务员撤销审核)不允许为空
      */
     void revokeTask(String pid, String reason);
+
+    /**
+     * 获取某个审批的整个审批流程
+     * @param type 1:生成订单审批;2:提货申请
+     * @return
+     */
+    List<Object> findApplyRu(int type);
 }

+ 35 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/approval/ApprovalTaskServiceImpl.java

@@ -1,5 +1,6 @@
 package com.iamberry.rst.service.approval;
 
+import com.iamberry.cache.LocalCache;
 import com.iamberry.rst.faces.approval.ApprovalTaskService;
 import org.activiti.engine.RuntimeService;
 import org.activiti.engine.TaskService;
@@ -10,7 +11,9 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -25,6 +28,8 @@ public class ApprovalTaskServiceImpl implements ApprovalTaskService {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ApprovalTaskServiceImpl.class);
 
+    private static LocalCache<String, List<Object>> CACHE = new LocalCache<>(2);
+
     @Autowired
     private RuntimeService runtimeService;
 
@@ -93,6 +98,36 @@ public class ApprovalTaskServiceImpl implements ApprovalTaskService {
         runtimeService.deleteProcessInstance(pid, reason);
     }
 
+    @Override
+    public List<Object> findApplyRu(int type) {
+        // 获取缓存中是否缓存了整个流程的审批实例
+        String key = type == 1 ? GENERATION_APPROVAL_KEY : APPLICATION_FOR_DELIVERY_KEY;
+        List<Object> value = CACHE.get(key);
+        if (value != null) return value;
+
+        // 启动一个审批实例,获取最新的审批流程
+        ProcessInstance pi = runtimeService.startProcessInstanceByKey(key);
+        // 寻找第一个审批任务,如果不存在表示审批结束
+        Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
+        if (task == null) {
+            return null;
+        }
+        // 执行第一个审批流程,标记为完成
+        taskService.complete(task.getId());
+        List<Object> users = new ArrayList<>(10);
+        // 寻找下一个审批人(0 - n 个)
+        Map<String, Object> next = findTaskNextAssignee(pi.getId());
+        while (next != null) {
+            String taskId = (String) next.get("taskId");
+            taskService.complete(taskId);
+            users.add(next.get("assignee"));
+            next = findTaskNextAssignee(pi.getId());
+        }
+        // 缓存审批实例
+        CACHE.put(key, users);
+        return users;
+    }
+
     /**
      * 寻找任务的下一个审批人
      * @param pid 任务实例id