|
@@ -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);
|
|
|
+
|
|
|
+ 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
|