Prechádzať zdrojové kódy

增加代办任务记录到redis当中

dangzj 3 mesiacov pred
rodič
commit
fa9f79d2da

+ 71 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/job/ToDoNumberJob.java

@@ -0,0 +1,71 @@
+package com.ruoyi.web.job;
+
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.system.service.ISysUserService;
+import org.flowable.engine.ProcessEngine;
+import org.flowable.engine.ProcessEngines;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.flowable.task.api.TaskQuery;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+@EnableScheduling
+@Component
+public class ToDoNumberJob {
+    protected Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    @Autowired
+    private RedisCache redisCache;
+
+    /**
+     * 每五分钟更新一次待办事项数量
+     *
+     */
+    @Scheduled(fixedDelay = 120000,initialDelay = 10000)
+    public void updateToDoNumber(){
+        logger.info("开始更新待办事项数量");
+        //查询所有进行中的任务
+        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
+        RuntimeService runtimeService = engine.getRuntimeService();
+        List<ProcessInstance> instances = runtimeService
+                .createProcessInstanceQuery()
+                .active()
+                .list();
+        //声明map记录用户和对应的代办数量
+        Map<String,Integer> map = new HashMap<>();
+        for (ProcessInstance instance : instances) {
+            TaskQuery query = engine.getTaskService().createTaskQuery()
+                    .processInstanceId(instance.getId());
+            //获取对应的待处理用户记录代办数量+1
+            String assignee = query.singleResult().getAssignee();
+            if(assignee!=null && !"".equals(assignee)){
+                //根据用户id获取用户对象
+                SysUser userInfo= sysUserService.selectUserById(Long.parseLong(assignee));
+                if (map.containsKey(userInfo.getUserName())){
+                    map.put(userInfo.getUserName(),map.get(userInfo.getUserName())+1);
+                }else {
+                    map.put(userInfo.getUserName(),1);
+                }
+            }
+        }
+        //将对应代办数量更新到redis当中
+        if(map.size()>0){
+            redisCache.setCacheObject("toDoNumber", map);
+        }
+    }
+}