From 7fdcfa966ba6fce5ed046af853fdc2ed05da459e Mon Sep 17 00:00:00 2001 From: yitonglei Date: Sat, 18 Feb 2023 13:56:46 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=8A=9E=E7=BB=93=E4=BB=BB=E5=8A=A1=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/HomePageController.java | 23 ++- .../homepage/service/IHomePageService.java | 11 ++ .../service/impl/HomePageServiceImpl.java | 138 ++++++++++++++++++ .../controller/WorkBenchController.java | 24 +++ .../workbench/service/IWorkBenchService.java | 11 ++ .../service/impl/WorkBenchServiceImpl.java | 34 +++++ .../service/impl/WfProcessService.java | 4 +- 7 files changed, 240 insertions(+), 5 deletions(-) create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/controller/WorkBenchController.java create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IWorkBenchService.java create mode 100644 lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/WorkBenchServiceImpl.java diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/controller/HomePageController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/controller/HomePageController.java index b8ae892..e52ac44 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/controller/HomePageController.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/controller/HomePageController.java @@ -1,5 +1,6 @@ package org.springblade.plugin.homepage.controller; +import com.alibaba.fastjson.JSONObject; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -12,6 +13,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.concurrent.Future; + /** * 首页 * @Description @@ -32,13 +35,27 @@ public class HomePageController extends BladeController { * 我的相关,首页的“到期提醒”、“我的待办”、“今日新增”、“今日完成”的统计 * 到期提醒,我的待办:正在运行的节点与当前用户相关的任务数量 * 今日新增,今日完成:是当前用户所在部门的任务都算 - * 考虑用Future异步执行 + * 已经采用异步方式执行后台方法了 */ @GetMapping("/aboutMy") @ApiOperationSupport(order = 1) @ApiOperation(value = "我的相关", notes = "首页的“到期提醒”、“我的待办”、“今日新增”、“今日完成”的统计") - public R aboutMy() { - return homePageService.aboutMy(); + public R aboutMy() throws Exception{ + + JSONObject result = new JSONObject(); + Future expireNum = homePageService.expireNum(); + Future needDoNum = homePageService.needDoNum(); + Future todayAddNum = homePageService.todayAddNum(); + Future todayFinishNum = homePageService.todayFinishNum(); + + result.put("needDoNum", needDoNum.get()); + result.put("expireNum", expireNum.get()); + result.put("todayAddNum" , todayAddNum.get()); + result.put("todayFinishNum", todayFinishNum.get()); + + return R.data(result); + // return homePageService.aboutMy(); + } /** diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/service/IHomePageService.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/service/IHomePageService.java index 6541326..71c3884 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/service/IHomePageService.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/service/IHomePageService.java @@ -2,6 +2,8 @@ package org.springblade.plugin.homepage.service; import org.springblade.core.tool.api.R; +import java.util.concurrent.Future; + /** * @Description * @Author ytl @@ -18,4 +20,13 @@ public interface IHomePageService { R flowStatus(); R flowTakeTime(); + + + Future expireNum(); + + Future needDoNum(); + + Future todayAddNum(); + + Future todayFinishNum(); } diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/service/impl/HomePageServiceImpl.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/service/impl/HomePageServiceImpl.java index 2b4b5de..87ab9ff 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/service/impl/HomePageServiceImpl.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/service/impl/HomePageServiceImpl.java @@ -24,12 +24,15 @@ import org.springblade.plugin.workflow.core.utils.WfTaskUtil; import org.springblade.system.cache.DictBizCache; import org.springblade.system.user.cache.UserCache; import org.springblade.system.user.entity.User; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Service; import java.time.Duration; import java.time.LocalDate; import java.util.*; +import java.util.concurrent.Future; import java.util.stream.Collectors; /** @@ -51,6 +54,7 @@ public class HomePageServiceImpl implements IHomePageService { * 我的相关,首页的“到期提醒”、“我的待办”、“今日新增”、“今日完成”的统计 * 到期提醒(expireNum),我的待办(needDoNum):正在运行的节点与当前用户相关的任务数量 * 今日新增(todayAddNum),今日完成:是当前用户所在部门的任务都算 + * 拆分为4个方法异步调用,提高效率 */ @Override public R aboutMy() { @@ -146,6 +150,140 @@ public class HomePageServiceImpl implements IHomePageService { return R.data(result); } + @Async + @Override + public Future expireNum(){ + String taskUser = WfTaskUtil.getTaskUser(); + String taskGroup = WfTaskUtil.getCandidateGroup(); + //当前获取登录人deptid + String deptId = AuthUtil.getDeptId(); + List nowUserDepts = Func.toLongList(deptId); + + + //我的待办 + TaskQuery taskQuery = taskService.createTaskQuery() + .orderByTaskCreateTime() + .desc() + .taskTenantId(WfTaskUtil.getTenantId()) + .active(); + taskQuery.taskCandidateOrAssigned(taskUser) + .taskCandidateGroupIn(Func.toStrList(taskGroup)); + + List listNeedDo = taskQuery.list(); + + //我的到期提醒 + int expireNum = 0; + + for(Task task : listNeedDo){ + String executionId = task.getExecutionId(); + System.out.println("executionid--" + executionId); + Map variables = runtimeService.getVariables(task.getExecutionId()); + + Date qiwangwanchengshijian = DateUtil.parse(variables.get("qiwangwanchengshijian").toString(), "yyyy-MM-dd HH:mm:ss"); + Duration between = DateUtil.between(qiwangwanchengshijian, DateUtil.now()); + if(!between.isNegative()){ //between.isNegative() true ,现在时间小于任务结束时间,false消灾时间大于任务结束时间 + expireNum ++; + } + } + + return new AsyncResult<>(expireNum); + + } + + @Async + @Override + public Future needDoNum(){ + String taskUser = WfTaskUtil.getTaskUser(); + String taskGroup = WfTaskUtil.getCandidateGroup(); + //当前获取登录人deptid + String deptId = AuthUtil.getDeptId(); + List nowUserDepts = Func.toLongList(deptId); + + //1.我的待办 + TaskQuery taskQuery = taskService.createTaskQuery() + .orderByTaskCreateTime() + .desc() + .taskTenantId(WfTaskUtil.getTenantId()) + .active(); + taskQuery.taskCandidateOrAssigned(taskUser) + .taskCandidateGroupIn(Func.toStrList(taskGroup)); + + List listNeedDo = taskQuery.list(); + return new AsyncResult<>(listNeedDo.size()); + } + + @Async + @Override + public Future todayAddNum(){ + String taskUser = WfTaskUtil.getTaskUser(); + String taskGroup = WfTaskUtil.getCandidateGroup(); + //当前获取登录人deptid + String deptId = AuthUtil.getDeptId(); + List nowUserDepts = Func.toLongList(deptId); + + //3.与我相关的新增 + //3.1.获取今日新增的流程 + HistoricProcessInstanceQuery thisDayStartProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() + .processInstanceTenantId(WfTaskUtil.getTenantId()) + .startedAfter(DateUtil.toDate(LocalDate.now())); + + + //3.2.遍历流程,得到流程发起人,只要流程发起人的dept在当前用户所属的dept列表中,就计算一次 + int todayAddNum = 0; + List thisDayStartProcessInstanceList = thisDayStartProcessInstanceQuery.list(); + for(HistoricProcessInstance his : thisDayStartProcessInstanceList){ + //获取流程发起人 + String startUserId = his.getStartUserId(); + User user = UserCache.getUser(Long.parseLong(startUserId)); + if(!Func.isEmpty(user)){ + List startUserDepts = Func.toLongList(user.getDeptId()); + for(Long startUserDept : startUserDepts){ + if(nowUserDepts.contains(startUserDept)){ + todayAddNum ++; + break; + } + } + } + + } + return new AsyncResult<>(todayAddNum); + } + + @Async + @Override + public Future todayFinishNum(){ + String taskUser = WfTaskUtil.getTaskUser(); + String taskGroup = WfTaskUtil.getCandidateGroup(); + //当前获取登录人deptid + String deptId = AuthUtil.getDeptId(); + List nowUserDepts = Func.toLongList(deptId); + + //4.与我相关的今日完成 + //4.1 获取今日完成的流程 + HistoricProcessInstanceQuery thisDayEndProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery() + .processInstanceTenantId(WfTaskUtil.getTenantId()) + .finishedAfter(DateUtil.toDate(LocalDate.now())); + //4.2 遍历流程,得到流程发起人,只要流程发起人的dept在当前用户所属的dept列表中,就计算一次 + int todayFinishNum = 0; + List thisDayEndProcessInstanceList = thisDayEndProcessInstanceQuery.list(); + for(HistoricProcessInstance his : thisDayEndProcessInstanceList){ + //获取流程发起人 + String startUserId = his.getStartUserId(); + User user = UserCache.getUser(Long.parseLong(startUserId)); + if(!Func.isEmpty(user)){ + List startUserDepts = Func.toLongList(user.getDeptId()); + for(Long startUserDept : startUserDepts){ + if(nowUserDepts.contains(startUserDept)){ + todayFinishNum ++; + break; + } + } + } + } + + return new AsyncResult<>(todayFinishNum); + } + /** * 近一年与当前用户所在部门相关的新增工单和完成工单数量,按照月份进行统计 * @return diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/controller/WorkBenchController.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/controller/WorkBenchController.java new file mode 100644 index 0000000..f1d405c --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/controller/WorkBenchController.java @@ -0,0 +1,24 @@ +package org.springblade.plugin.workbench.controller; + +import io.swagger.annotations.Api; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.tenant.annotation.NonDS; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description 工作台 + * @Author ytl + * @Date 2023/2/18 0018 13:14 + */ + +@NonDS +@RestController +@AllArgsConstructor +@RequestMapping("/workBench") +@Api(value = "工作台", tags = "工作台") +public class WorkBenchController extends BladeController { + + +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IWorkBenchService.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IWorkBenchService.java new file mode 100644 index 0000000..e38dd1d --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IWorkBenchService.java @@ -0,0 +1,11 @@ +package org.springblade.plugin.workbench.service; + +/** + * @Description + * @Author ytl + * @Date 2023/2/18 0018 13:22 + */ +public interface IWorkBenchService { + + +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/WorkBenchServiceImpl.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/WorkBenchServiceImpl.java new file mode 100644 index 0000000..5590471 --- /dev/null +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/WorkBenchServiceImpl.java @@ -0,0 +1,34 @@ +package org.springblade.plugin.workbench.service.impl; + +import lombok.AllArgsConstructor; +import org.flowable.engine.TaskService; +import org.flowable.task.api.Task; +import org.springblade.plugin.workbench.service.IWorkBenchService; +import org.springblade.plugin.workflow.core.utils.WfTaskUtil; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description + * @Author ytl + * @Date 2023/2/18 0018 13:23 + */ +@Service +@AllArgsConstructor +public class WorkBenchServiceImpl implements IWorkBenchService { + + private final TaskService taskService; + + public void getTask(){ + List list = taskService.createTaskQuery().taskTenantId(WfTaskUtil.getTenantId()).list(); + + Map> taskRemindMap = new HashMap<>(); + + list.forEach(hi -> { + + }); + } +} diff --git a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/service/impl/WfProcessService.java b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/service/impl/WfProcessService.java index 2899f99..23cdd41 100644 --- a/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/service/impl/WfProcessService.java +++ b/lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/service/impl/WfProcessService.java @@ -579,8 +579,8 @@ public class WfProcessService implements IWfProcessService { runtimeService.setVariable(task.getProcessInstanceId(), "wf_latest_task_assignee", WfTaskUtil.getTaskUser()); //重新给上传附件赋值,把新增的上传加上 - if(!Func.isEmpty(process.getUploadrecord())){ - runtimeService.setVariable(task.getExecutionId(), "uploadrecord", process.getUploadrecord()); + if(!Func.isEmpty(process.getUploadrecord()) && process.getUploadrecord().toString() != ""){ + runtimeService.setVariable(task.getProcessInstanceId(), "uploadrecord", process.getUploadrecord()); } if (process.isPass()) { // 审核通过