Commit 1ab15dd1f9e7a0f0f906c060993cd1c4442812c9

Authored by YunaiV
1 parent 14a7d637

bpm 我的流程,增加 task 的展示

Showing 16 changed files with 137 additions and 87 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/BpmProcessInstanceController.http
@@ -5,7 +5,7 @@ tenant-id: 1 @@ -5,7 +5,7 @@ tenant-id: 1
5 Authorization: Bearer {{token}} 5 Authorization: Bearer {{token}}
6 6
7 { 7 {
8 - "processDefinitionId": "leave:7:20ada39c-6c95-11ec-88b1-cacd34981f8e", 8 + "processDefinitionId": "gateway_test:2:00e52d8e-701b-11ec-aca9-a2380e71991a",
9 "variables": { 9 "variables": {
10 "a": 1, 10 "a": 1,
11 "b": "2" 11 "b": "2"
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/TaskController.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/TaskController.java
1 -package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow; 1 +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*; 3 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*;
4 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; 4 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService;
5 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 5 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
6 import cn.iocoder.yudao.framework.common.pojo.PageResult; 6 import cn.iocoder.yudao.framework.common.pojo.PageResult;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/instance/BpmProcessInstancePageItemRespVO.java
@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
5 import lombok.Data; 5 import lombok.Data;
6 6
7 import java.util.Date; 7 import java.util.Date;
  8 +import java.util.List;
8 9
9 @ApiModel("流程实例的分页 Item Response VO") 10 @ApiModel("流程实例的分页 Item Response VO")
10 @Data 11 @Data
@@ -34,6 +35,21 @@ public class BpmProcessInstancePageItemRespVO { @@ -34,6 +35,21 @@ public class BpmProcessInstancePageItemRespVO {
34 @ApiModelProperty(value = "结束时间", required = true) 35 @ApiModelProperty(value = "结束时间", required = true)
35 private Date endTime; 36 private Date endTime;
36 37
37 - // TODO 芋艿:tasks 38 + /**
  39 + * 当前任务
  40 + */
  41 + private List<Task> tasks;
  42 +
  43 + @ApiModel("流程任务")
  44 + @Data
  45 + public static class Task {
  46 +
  47 + @ApiModelProperty(value = "流程任务的编号", required = true, example = "1024")
  48 + private String id;
  49 +
  50 + @ApiModelProperty(value = "任务名称", required = true, example = "芋道")
  51 + private String name;
  52 +
  53 + }
38 54
39 } 55 }
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/FileResp.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/FileResp.java
1 -package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo; 1 +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task;
2 2
3 import lombok.Data; 3 import lombok.Data;
4 4
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TaskHandleVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/TaskHandleVO.java
1 -package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo; 1 +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task;
2 2
3 import lombok.Data; 3 import lombok.Data;
4 import lombok.ToString; 4 import lombok.ToString;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TaskQueryReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/TaskQueryReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo; 1 +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task;
2 2
3 import lombok.Data; 3 import lombok.Data;
4 import lombok.ToString; 4 import lombok.ToString;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TaskReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/TaskReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo; 1 +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task;
2 2
3 import lombok.Data; 3 import lombok.Data;
4 import lombok.ToString; 4 import lombok.ToString;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TaskStepVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/TaskStepVO.java
1 -package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo; 1 +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task;
2 2
3 import lombok.Data; 3 import lombok.Data;
4 import lombok.ToString; 4 import lombok.ToString;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TodoTaskPageReqVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/TodoTaskPageReqVO.java
1 -package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo; 1 +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageParam; 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 import io.swagger.annotations.ApiModel; 4 import io.swagger.annotations.ApiModel;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/workflow/vo/TodoTaskRespVO.java renamed to yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/task/vo/task/TodoTaskRespVO.java
1 -package cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo; 1 +package cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task;
2 2
3 import io.swagger.annotations.ApiModel; 3 import io.swagger.annotations.ApiModel;
4 import lombok.Data; 4 import lombok.Data;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/BpmProcessInstanceConvert.java
@@ -5,12 +5,15 @@ import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessIn @@ -5,12 +5,15 @@ import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.task.BpmProcessIn
5 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 import org.activiti.engine.repository.ProcessDefinition; 6 import org.activiti.engine.repository.ProcessDefinition;
7 import org.activiti.engine.runtime.ProcessInstance; 7 import org.activiti.engine.runtime.ProcessInstance;
  8 +import org.activiti.engine.task.Task;
8 import org.mapstruct.Mapper; 9 import org.mapstruct.Mapper;
9 import org.mapstruct.Mapping; 10 import org.mapstruct.Mapping;
10 import org.mapstruct.Mappings; 11 import org.mapstruct.Mappings;
11 import org.mapstruct.factory.Mappers; 12 import org.mapstruct.factory.Mappers;
12 13
13 import java.util.List; 14 import java.util.List;
  15 +import java.util.Map;
  16 +import java.util.function.Consumer;
14 17
15 /** 18 /**
16 * 流程实例 Convert 19 * 流程实例 Convert
@@ -32,10 +35,17 @@ public interface BpmProcessInstanceConvert { @@ -32,10 +35,17 @@ public interface BpmProcessInstanceConvert {
32 }) 35 })
33 BpmProcessInstanceExtDO convert(ProcessInstance instance, ProcessDefinition definition); 36 BpmProcessInstanceExtDO convert(ProcessInstance instance, ProcessDefinition definition);
34 37
35 - PageResult<BpmProcessInstancePageItemRespVO> convertPage(PageResult<BpmProcessInstanceExtDO> page); 38 + default PageResult<BpmProcessInstancePageItemRespVO> convertPage(PageResult<BpmProcessInstanceExtDO> page,
  39 + Map<String, List<Task>> taskMap) {
  40 + List<BpmProcessInstancePageItemRespVO> list = convertList(page.getList());
  41 + list.forEach(respVO -> respVO.setTasks(convertList2(taskMap.get(respVO.getId()))));
  42 + return new PageResult<>(list, page.getTotal());
  43 + }
36 44
37 List<BpmProcessInstancePageItemRespVO> convertList(List<BpmProcessInstanceExtDO> list); 45 List<BpmProcessInstancePageItemRespVO> convertList(List<BpmProcessInstanceExtDO> list);
38 46
  47 + List<BpmProcessInstancePageItemRespVO.Task> convertList2(List<Task> tasks);
  48 +
39 @Mapping(source = "processInstanceId", target = "id") 49 @Mapping(source = "processInstanceId", target = "id")
40 BpmProcessInstancePageItemRespVO convert(BpmProcessInstanceExtDO bean); 50 BpmProcessInstancePageItemRespVO convert(BpmProcessInstanceExtDO bean);
41 51
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/task/TaskConvert.java
1 package cn.iocoder.yudao.adminserver.modules.bpm.convert.task; 1 package cn.iocoder.yudao.adminserver.modules.bpm.convert.task;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TaskStepVO;  
4 -import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.TodoTaskRespVO; 3 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.TaskStepVO;
  4 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.TodoTaskRespVO;
5 import org.activiti.api.task.model.Task; 5 import org.activiti.api.task.model.Task;
6 import org.activiti.engine.history.HistoricActivityInstance; 6 import org.activiti.engine.history.HistoricActivityInstance;
7 import org.activiti.engine.repository.ProcessDefinition; 7 import org.activiti.engine.repository.ProcessDefinition;
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/BpmTaskService.java
1 package cn.iocoder.yudao.adminserver.modules.bpm.service.task; 1 package cn.iocoder.yudao.adminserver.modules.bpm.service.task;
2 2
3 -import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*; 3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  7 +import org.activiti.engine.task.Task;
5 8
6 import java.util.List; 9 import java.util.List;
  10 +import java.util.Map;
  11 +import java.util.Set;
7 12
8 /** 13 /**
9 - * 工作流用户任务服务接口 14 + * 工作任务 Service 接口
  15 + *
  16 + * @author jason
  17 + * @author 芋道源码
10 */ 18 */
11 public interface BpmTaskService { 19 public interface BpmTaskService {
12 20
  21 + /**
  22 + * 获得流程任务列表
  23 + *
  24 + * @param processInstanceIds 流程实例的编号数组
  25 + * @return 流程任务列表
  26 + */
  27 + List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds);
  28 +
  29 + /**
  30 + * 获得流程任务 Map
  31 + *
  32 + * @param processInstanceIds 流程实例的编号数组
  33 + * @return 流程任务 Map
  34 + */
  35 + default Map<String, List<Task>> getTaskMapByProcessInstanceIds(List<String> processInstanceIds) {
  36 + return CollectionUtils.convertMultiMap(getTasksByProcessInstanceIds(processInstanceIds),
  37 + Task::getProcessInstanceId);
  38 + }
13 39
14 /** 40 /**
15 * 获取当前用户的待办任务, 分页 41 * 获取当前用户的待办任务, 分页
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmProcessInstanceServiceImpl.java
@@ -12,9 +12,11 @@ import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceRes @@ -12,9 +12,11 @@ import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceRes
12 import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum; 12 import cn.iocoder.yudao.adminserver.modules.bpm.enums.task.BpmProcessInstanceStatusEnum;
13 import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService; 13 import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService;
14 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService; 14 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmProcessInstanceService;
  15 +import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService;
15 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; 16 import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
16 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; 17 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO;
17 import cn.iocoder.yudao.framework.common.pojo.PageResult; 18 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  19 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
18 import lombok.extern.slf4j.Slf4j; 20 import lombok.extern.slf4j.Slf4j;
19 import org.activiti.engine.HistoryService; 21 import org.activiti.engine.HistoryService;
20 import org.activiti.engine.RuntimeService; 22 import org.activiti.engine.RuntimeService;
@@ -34,6 +36,7 @@ import java.util.Map; @@ -34,6 +36,7 @@ import java.util.Map;
34 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_IS_SUSPENDED; 36 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_IS_SUSPENDED;
35 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_NOT_EXISTS; 37 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_DEFINITION_NOT_EXISTS;
36 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 38 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  39 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
37 40
38 /** 41 /**
39 * 流程实例 Service 实现类 42 * 流程实例 Service 实现类
@@ -55,7 +58,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -55,7 +58,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
55 @Resource 58 @Resource
56 private RuntimeService runtimeService; 59 private RuntimeService runtimeService;
57 @Resource 60 @Resource
58 - private TaskService taskService; 61 + private BpmTaskService taskService;
59 @Resource 62 @Resource
60 private HistoryService historyService; 63 private HistoryService historyService;
61 64
@@ -88,17 +91,17 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -88,17 +91,17 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
88 createProcessInstanceExt(instance, definition); 91 createProcessInstanceExt(instance, definition);
89 92
90 // 添加初始的评论 TODO 芋艿:在思考下 93 // 添加初始的评论 TODO 芋艿:在思考下
91 - Task task = taskService.createTaskQuery().processInstanceId(instance.getId()).singleResult();  
92 - if (task != null) {  
93 - SysUserDO user = userService.getUser(userId);  
94 - Assert.notNull(user, "用户({})不存在", userId);  
95 - String type = "normal";  
96 - taskService.addComment(task.getId(), instance.getProcessInstanceId(), type,  
97 - String.format("%s 发起流程申请", user.getNickname()));  
98 - // TODO 芋艿:应该不用下面两个步骤  
99 -// taskService.setAssignee(task.getId(), String.valueOf(userId));  
100 -// taskService.complete(task.getId(), variables);  
101 - } 94 +// Task task = taskService.createTaskQuery().processInstanceId(instance.getId()).singleResult();
  95 +// if (task != null) {
  96 +// SysUserDO user = userService.getUser(userId);
  97 +// Assert.notNull(user, "用户({})不存在", userId);
  98 +// String type = "normal";
  99 +// taskService.addComment(task.getId(), instance.getProcessInstanceId(), type,
  100 +// String.format("%s 发起流程申请", user.getNickname()));
  101 +// // TODO 芋艿:应该不用下面两个步骤
  102 +//// taskService.setAssignee(task.getId(), String.valueOf(userId));
  103 +//// taskService.complete(task.getId(), variables);
  104 +// }
102 return instance.getId(); 105 return instance.getId();
103 } 106 }
104 107
@@ -123,24 +126,12 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -123,24 +126,12 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
123 if (CollUtil.isEmpty(pageResult.getList())) { 126 if (CollUtil.isEmpty(pageResult.getList())) {
124 return new PageResult<>(pageResult.getTotal()); 127 return new PageResult<>(pageResult.getTotal());
125 } 128 }
126 - // TODO 芋艿:tasks  
127 - // 转换返回  
128 - return BpmProcessInstanceConvert.INSTANCE.convertPage(pageResult);  
129 - }  
130 -  
131 - public void getMyProcessInstancePage(Long userId) {  
132 - // id title 所属流程 当前审批环节 状态 结果 创建时间 提交申请时间 【标题、状态】「ActBusiness」  
133 - // id title 流程类别 流程版本 提交时间 流程状态 耗时 当前节点 办理 【标题、提交时间】「HistoricProcessInstanceQuery」  
134 -  
135 - // id name 所属流程 流程类别 创建时间 状态 当前审批环节 【标题、流程、时间、状态、结果】  
136 -  
137 - runtimeService.createProcessInstanceQuery().list();  
138 - HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery()  
139 - .startedBy(String.valueOf(userId)) // 发起人是自己  
140 - .orderByProcessInstanceStartTime().desc(); // 按照发起时间倒序  
141 - List<HistoricProcessInstance> list = historicProcessInstanceQuery.list();  
142 - System.out.println("test");  
143 129
  130 + // 获得流程 Task Map
  131 + List<String> processInstanceIds = convertList(pageResult.getList(), BpmProcessInstanceExtDO::getProcessInstanceId);
  132 + Map<String, List<Task>> taskMap = taskService.getTaskMapByProcessInstanceIds(processInstanceIds);
  133 + // 转换返回
  134 + return BpmProcessInstanceConvert.INSTANCE.convertPage(pageResult, taskMap);
144 } 135 }
145 136
146 /** 137 /**
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/task/impl/BpmTaskServiceImpl.java
@@ -2,16 +2,13 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl; @@ -2,16 +2,13 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.task.impl;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.io.IoUtil; 4 import cn.hutool.core.io.IoUtil;
5 -import cn.iocoder.yudao.adminserver.modules.bpm.controller.workflow.vo.*; 5 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.task.vo.task.*;
6 import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.TaskConvert; 6 import cn.iocoder.yudao.adminserver.modules.bpm.convert.task.TaskConvert;
7 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService; 7 import cn.iocoder.yudao.adminserver.modules.bpm.service.task.BpmTaskService;
8 import cn.iocoder.yudao.framework.common.pojo.PageResult; 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 9 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
10 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; 10 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
11 import lombok.extern.slf4j.Slf4j; 11 import lombok.extern.slf4j.Slf4j;
12 -import org.activiti.api.runtime.shared.query.Page;  
13 -import org.activiti.api.runtime.shared.query.Pageable;  
14 -import org.activiti.api.task.model.Task;  
15 import org.activiti.api.task.model.builders.ClaimTaskPayloadBuilder; 12 import org.activiti.api.task.model.builders.ClaimTaskPayloadBuilder;
16 import org.activiti.api.task.model.builders.TaskPayloadBuilder; 13 import org.activiti.api.task.model.builders.TaskPayloadBuilder;
17 import org.activiti.api.task.runtime.TaskRuntime; 14 import org.activiti.api.task.runtime.TaskRuntime;
@@ -22,11 +19,13 @@ import org.activiti.bpmn.model.SequenceFlow; @@ -22,11 +19,13 @@ import org.activiti.bpmn.model.SequenceFlow;
22 import org.activiti.engine.HistoryService; 19 import org.activiti.engine.HistoryService;
23 import org.activiti.engine.RepositoryService; 20 import org.activiti.engine.RepositoryService;
24 import org.activiti.engine.RuntimeService; 21 import org.activiti.engine.RuntimeService;
  22 +import org.activiti.engine.TaskService;
25 import org.activiti.engine.history.HistoricActivityInstance; 23 import org.activiti.engine.history.HistoricActivityInstance;
26 import org.activiti.engine.history.HistoricProcessInstance; 24 import org.activiti.engine.history.HistoricProcessInstance;
27 import org.activiti.engine.repository.ProcessDefinition; 25 import org.activiti.engine.repository.ProcessDefinition;
28 import org.activiti.engine.runtime.ProcessInstance; 26 import org.activiti.engine.runtime.ProcessInstance;
29 import org.activiti.engine.task.Comment; 27 import org.activiti.engine.task.Comment;
  28 +import org.activiti.engine.task.Task;
30 import org.activiti.image.ProcessDiagramGenerator; 29 import org.activiti.image.ProcessDiagramGenerator;
31 import org.springframework.stereotype.Service; 30 import org.springframework.stereotype.Service;
32 import org.springframework.transaction.annotation.Transactional; 31 import org.springframework.transaction.annotation.Transactional;
@@ -35,11 +34,7 @@ import org.springframework.util.ObjectUtils; @@ -35,11 +34,7 @@ import org.springframework.util.ObjectUtils;
35 import javax.annotation.Resource; 34 import javax.annotation.Resource;
36 import java.io.IOException; 35 import java.io.IOException;
37 import java.io.InputStream; 36 import java.io.InputStream;
38 -import java.util.ArrayList;  
39 -import java.util.List;  
40 -import java.util.Map;  
41 -import java.util.Optional;  
42 -import java.util.stream.Collectors; 37 +import java.util.*;
43 38
44 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.HIGHLIGHT_IMG_ERROR; 39 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.HIGHLIGHT_IMG_ERROR;
45 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS; 40 import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS;
@@ -51,34 +46,39 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -51,34 +46,39 @@ public class BpmTaskServiceImpl implements BpmTaskService {
51 46
52 @Resource 47 @Resource
53 private TaskRuntime taskRuntime; 48 private TaskRuntime taskRuntime;
54 -  
55 @Resource 49 @Resource
56 - private org.activiti.engine.TaskService activitiTaskService;  
57 - 50 + private TaskService taskService;
  51 + @Resource
  52 + private RuntimeService runtimeService;
58 @Resource 53 @Resource
59 private HistoryService historyService; 54 private HistoryService historyService;
60 -  
61 @Resource 55 @Resource
62 private RepositoryService repositoryService; 56 private RepositoryService repositoryService;
63 57
64 @Resource 58 @Resource
65 - private RuntimeService runtimeService;  
66 -  
67 - @Resource  
68 private ProcessDiagramGenerator processDiagramGenerator; 59 private ProcessDiagramGenerator processDiagramGenerator;
69 60
70 @Override 61 @Override
  62 + public List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds) {
  63 + if (CollUtil.isEmpty(processInstanceIds)) {
  64 + return Collections.emptyList();
  65 + }
  66 + return taskService.createTaskQuery().processInstanceIdIn(processInstanceIds).list();
  67 + }
  68 +
  69 + @Override
71 public PageResult<TodoTaskRespVO> getTodoTaskPage(TodoTaskPageReqVO pageReqVO) { 70 public PageResult<TodoTaskRespVO> getTodoTaskPage(TodoTaskPageReqVO pageReqVO) {
72 // TODO @jason:封装一个方法,用于转换成 activiti 的分页对象 71 // TODO @jason:封装一个方法,用于转换成 activiti 的分页对象
73 - final Pageable pageable = Pageable.of((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize(), pageReqVO.getPageSize());  
74 - Page<Task> pageTasks = taskRuntime.tasks(pageable);  
75 - int totalItems = pageTasks.getTotalItems();  
76 - List<Task> tasks = pageTasks.getContent();  
77 - final List<TodoTaskRespVO> respVOList = tasks.stream().map(task -> {  
78 - ProcessDefinition definition = repositoryService.getProcessDefinition(task.getProcessDefinitionId());  
79 - return TaskConvert.INSTANCE.convert(task, definition);  
80 - }).collect(Collectors.toList());  
81 - return new PageResult<>(respVOList, (long)totalItems); 72 +// final Pageable pageable = Pageable.of((pageReqVO.getPageNo() - 1) * pageReqVO.getPageSize(), pageReqVO.getPageSize());
  73 +// Page<Task> pageTasks = taskRuntime.tasks(pageable);
  74 +// int totalItems = pageTasks.getTotalItems();
  75 +// List<Task> tasks = pageTasks.getContent();
  76 +// final List<TodoTaskRespVO> respVOList = tasks.stream().map(task -> {
  77 +// ProcessDefinition definition = repositoryService.getProcessDefinition(task.getProcessDefinitionId());
  78 +// return TaskConvert.INSTANCE.convert(task, definition);
  79 +// }).collect(Collectors.toList());
  80 +// return new PageResult<>(respVOList, (long)totalItems);
  81 + return null;
82 } 82 }
83 83
84 84
@@ -95,27 +95,27 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -95,27 +95,27 @@ public class BpmTaskServiceImpl implements BpmTaskService {
95 @Override 95 @Override
96 @Transactional 96 @Transactional
97 public void completeTask(TaskReqVO taskReq) { 97 public void completeTask(TaskReqVO taskReq) {
98 - final Task task = taskRuntime.task(taskReq.getTaskId());  
99 -  
100 - activitiTaskService.addComment(taskReq.getTaskId(), task.getProcessInstanceId(), taskReq.getComment());  
101 -  
102 - taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskReq.getTaskId())  
103 - .withVariables(taskReq.getVariables())  
104 - .build()); 98 +// final Task task = taskRuntime.task(taskReq.getTaskId());
  99 +//
  100 +// taskService.addComment(taskReq.getTaskId(), task.getProcessInstanceId(), taskReq.getComment());
  101 +//
  102 +// taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(taskReq.getTaskId())
  103 +// .withVariables(taskReq.getVariables())
  104 +// .build());
105 } 105 }
106 106
107 107
108 108
109 @Override 109 @Override
110 public TaskHandleVO getTaskSteps(TaskQueryReqVO taskQuery) { 110 public TaskHandleVO getTaskSteps(TaskQueryReqVO taskQuery) {
111 - TaskHandleVO handleVO = new TaskHandleVO();  
112 - final Task task = taskRuntime.task(taskQuery.getTaskId());  
113 - List<TaskStepVO> steps = getTaskSteps(task.getProcessInstanceId());  
114 - handleVO.setHistoryTask(steps);  
115 - return handleVO; 111 +// TaskHandleVO handleVO = new TaskHandleVO();
  112 +// final Task task = taskRuntime.task(taskQuery.getTaskId());
  113 +// List<TaskStepVO> steps = getTaskSteps(task.getProcessInstanceId());
  114 +// handleVO.setHistoryTask(steps);
  115 +// return handleVO;
  116 + return null;
116 } 117 }
117 118
118 -  
119 private List<TaskStepVO> getTaskSteps(String processInstanceId) { 119 private List<TaskStepVO> getTaskSteps(String processInstanceId) {
120 // 获得已完成的活动 120 // 获得已完成的活动
121 List<HistoricActivityInstance> finished = historyService.createHistoricActivityInstanceQuery() 121 List<HistoricActivityInstance> finished = historyService.createHistoricActivityInstanceQuery()
@@ -129,7 +129,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -129,7 +129,7 @@ public class BpmTaskServiceImpl implements BpmTaskService {
129 TaskStepVO stepVO = TaskConvert.INSTANCE.convert(instance); 129 TaskStepVO stepVO = TaskConvert.INSTANCE.convert(instance);
130 stepVO.setStatus(1); // TODO @jason:1 这个 magic number 要枚举起来。 130 stepVO.setStatus(1); // TODO @jason:1 这个 magic number 要枚举起来。
131 // TODO @jason:可以考虑把 comments 读取后,在统一调用 convert 拼接。另外 Comment 是废弃的类,有没其它可以使用的哈? 131 // TODO @jason:可以考虑把 comments 读取后,在统一调用 convert 拼接。另外 Comment 是废弃的类,有没其它可以使用的哈?
132 - List<Comment> comments = activitiTaskService.getTaskComments(instance.getTaskId()); 132 + List<Comment> comments = taskService.getTaskComments(instance.getTaskId());
133 if (!CollUtil.isEmpty(comments)) { 133 if (!CollUtil.isEmpty(comments)) {
134 stepVO.setComment(Optional.ofNullable(comments.get(0)).map(Comment::getFullMessage).orElse("")); 134 stepVO.setComment(Optional.ofNullable(comments.get(0)).map(Comment::getFullMessage).orElse(""));
135 } 135 }
@@ -160,8 +160,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -160,8 +160,9 @@ public class BpmTaskServiceImpl implements BpmTaskService {
160 160
161 @Override 161 @Override
162 public TodoTaskRespVO getTaskFormKey(TaskQueryReqVO taskQuery) { 162 public TodoTaskRespVO getTaskFormKey(TaskQueryReqVO taskQuery) {
163 - final Task task = taskRuntime.task(taskQuery.getTaskId());  
164 - return TaskConvert.INSTANCE.convert(task); 163 +// final Task task = taskRuntime.task(taskQuery.getTaskId());
  164 +// return TaskConvert.INSTANCE.convert(task);
  165 + return null;
165 } 166 }
166 167
167 @Override 168 @Override
yudao-admin-ui/src/views/bpm/process/index.vue
@@ -54,7 +54,13 @@ @@ -54,7 +54,13 @@
54 <span>{{ getDictDataLabel(DICT_TYPE.BPM_MODEL_CATEGORY, scope.row.category) }}</span> 54 <span>{{ getDictDataLabel(DICT_TYPE.BPM_MODEL_CATEGORY, scope.row.category) }}</span>
55 </template> 55 </template>
56 </el-table-column> 56 </el-table-column>
57 - <el-table-column label="当前审批任务" align="center" prop="tasks" /> <!-- TODO 芋艿:待完善 --> 57 + <el-table-column label="当前审批任务" align="center" prop="tasks">
  58 + <template slot-scope="scope">
  59 + <el-button v-for="task in scope.row.tasks" type="text" @click="handleFormDetail(task.id)">
  60 + <span>{{ task.name }}</span>
  61 + </el-button>
  62 + </template>
  63 + </el-table-column>
58 <el-table-column label="状态" align="center" prop="status"> 64 <el-table-column label="状态" align="center" prop="status">
59 <template slot-scope="scope"> 65 <template slot-scope="scope">
60 <span> 66 <span>