1.办结任务代码优化

main
yitonglei 3 years ago
parent e1c5163dc9
commit 7fdcfa966b
  1. 23
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/controller/HomePageController.java
  2. 11
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/service/IHomePageService.java
  3. 138
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/homepage/service/impl/HomePageServiceImpl.java
  4. 24
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/controller/WorkBenchController.java
  5. 11
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/IWorkBenchService.java
  6. 34
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workbench/service/impl/WorkBenchServiceImpl.java
  7. 4
      lab-plugin/lab-workflow/src/main/java/org/springblade/plugin/workflow/process/service/impl/WfProcessService.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<Integer> expireNum = homePageService.expireNum();
Future<Integer> needDoNum = homePageService.needDoNum();
Future<Integer> todayAddNum = homePageService.todayAddNum();
Future<Integer> 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();
}
/**

@ -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<Integer> expireNum();
Future<Integer> needDoNum();
Future<Integer> todayAddNum();
Future<Integer> todayFinishNum();
}

@ -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<Integer> expireNum(){
String taskUser = WfTaskUtil.getTaskUser();
String taskGroup = WfTaskUtil.getCandidateGroup();
//当前获取登录人deptid
String deptId = AuthUtil.getDeptId();
List<Long> nowUserDepts = Func.toLongList(deptId);
//我的待办
TaskQuery taskQuery = taskService.createTaskQuery()
.orderByTaskCreateTime()
.desc()
.taskTenantId(WfTaskUtil.getTenantId())
.active();
taskQuery.taskCandidateOrAssigned(taskUser)
.taskCandidateGroupIn(Func.toStrList(taskGroup));
List<Task> listNeedDo = taskQuery.list();
//我的到期提醒
int expireNum = 0;
for(Task task : listNeedDo){
String executionId = task.getExecutionId();
System.out.println("executionid--" + executionId);
Map<String, Object> 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<Integer> needDoNum(){
String taskUser = WfTaskUtil.getTaskUser();
String taskGroup = WfTaskUtil.getCandidateGroup();
//当前获取登录人deptid
String deptId = AuthUtil.getDeptId();
List<Long> nowUserDepts = Func.toLongList(deptId);
//1.我的待办
TaskQuery taskQuery = taskService.createTaskQuery()
.orderByTaskCreateTime()
.desc()
.taskTenantId(WfTaskUtil.getTenantId())
.active();
taskQuery.taskCandidateOrAssigned(taskUser)
.taskCandidateGroupIn(Func.toStrList(taskGroup));
List<Task> listNeedDo = taskQuery.list();
return new AsyncResult<>(listNeedDo.size());
}
@Async
@Override
public Future<Integer> todayAddNum(){
String taskUser = WfTaskUtil.getTaskUser();
String taskGroup = WfTaskUtil.getCandidateGroup();
//当前获取登录人deptid
String deptId = AuthUtil.getDeptId();
List<Long> 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<HistoricProcessInstance> thisDayStartProcessInstanceList = thisDayStartProcessInstanceQuery.list();
for(HistoricProcessInstance his : thisDayStartProcessInstanceList){
//获取流程发起人
String startUserId = his.getStartUserId();
User user = UserCache.getUser(Long.parseLong(startUserId));
if(!Func.isEmpty(user)){
List<Long> startUserDepts = Func.toLongList(user.getDeptId());
for(Long startUserDept : startUserDepts){
if(nowUserDepts.contains(startUserDept)){
todayAddNum ++;
break;
}
}
}
}
return new AsyncResult<>(todayAddNum);
}
@Async
@Override
public Future<Integer> todayFinishNum(){
String taskUser = WfTaskUtil.getTaskUser();
String taskGroup = WfTaskUtil.getCandidateGroup();
//当前获取登录人deptid
String deptId = AuthUtil.getDeptId();
List<Long> 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<HistoricProcessInstance> thisDayEndProcessInstanceList = thisDayEndProcessInstanceQuery.list();
for(HistoricProcessInstance his : thisDayEndProcessInstanceList){
//获取流程发起人
String startUserId = his.getStartUserId();
User user = UserCache.getUser(Long.parseLong(startUserId));
if(!Func.isEmpty(user)){
List<Long> startUserDepts = Func.toLongList(user.getDeptId());
for(Long startUserDept : startUserDepts){
if(nowUserDepts.contains(startUserDept)){
todayFinishNum ++;
break;
}
}
}
}
return new AsyncResult<>(todayFinishNum);
}
/**
* 近一年与当前用户所在部门相关的新增工单和完成工单数量按照月份进行统计
* @return

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

@ -0,0 +1,11 @@
package org.springblade.plugin.workbench.service;
/**
* @Description
* @Author ytl
* @Date 2023/2/18 0018 13:22
*/
public interface IWorkBenchService {
}

@ -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<Task> list = taskService.createTaskQuery().taskTenantId(WfTaskUtil.getTenantId()).list();
Map<String,List<Task>> taskRemindMap = new HashMap<>();
list.forEach(hi -> {
});
}
}

@ -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()) { // 审核通过

Loading…
Cancel
Save