|
@@ -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
|