ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java
@@ -17,13 +17,13 @@ import org.dromara.workflow.domain.vo.VariableVo; import org.dromara.workflow.service.IActTaskService; import org.dromara.workflow.utils.QueryUtils; import org.dromara.workflow.utils.WorkflowUtils; import org.flowable.engine.TaskService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; import java.util.Set; /** * 任务管理 控制层 @@ -257,4 +257,14 @@ public R<List<VariableVo>> getProcessInstVariable(@PathVariable String taskId) { return R.ok(actTaskService.getInstanceVariable(taskId)); } /** * 获取可驳回得任务节点 * * @param processInstanceId 流程实例id */ @GetMapping("/getTaskNodeList/{processInstanceId}") public R<Set<TaskVo>> getNodeList(@PathVariable String processInstanceId) { return R.ok(actTaskService.getTaskNodeList(processInstanceId)); } } ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java
@@ -82,6 +82,11 @@ private Date createTime; /** * 已办任务-创建时间 */ private Date startTime; /** * 结束时间 */ private Date endTime; ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java
@@ -28,6 +28,15 @@ Page<TaskVo> getTaskWaitByPage(@Param("page") Page<TaskVo> page, @Param(Constants.WRAPPER) Wrapper<TaskVo> queryWrapper); /** * 获取已办 * * @param page 分页 * @param queryWrapper 条件 * @return 结果 */ Page<TaskVo> getTaskFinishByPage(@Param("page") Page<TaskVo> page, @Param(Constants.WRAPPER) Wrapper<TaskVo> queryWrapper); /** * 查询当前用户的抄送 * * @param page 分页 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java
@@ -8,6 +8,7 @@ import java.util.List; import java.util.Map; import java.util.Set; /** * 任务 服务层 @@ -142,4 +143,12 @@ * @return 结果 */ List<VariableVo> getInstanceVariable(String taskId); /** * 获取可驳回得任务节点 * * @param processInstanceId 流程实例id * @return 结果 */ Set<TaskVo> getTaskNodeList(String processInstanceId); } ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
@@ -336,39 +336,18 @@ @Override public TableDataInfo<TaskVo> getPageByTaskFinish(TaskBo taskBo, PageQuery pageQuery) { String userId = String.valueOf(LoginHelper.getUserId()); HistoricTaskInstanceQuery query = QueryUtils.hisTaskInstanceQuery(); query.taskAssignee(userId).finished().orderByHistoricTaskInstanceStartTime().desc(); if (StringUtils.isNotBlank(taskBo.getName())) { query.taskNameLike("%" + taskBo.getName() + "%"); QueryWrapper<TaskVo> queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(taskBo.getName()), "t.name_", taskBo.getName()); queryWrapper.like(StringUtils.isNotBlank(taskBo.getProcessDefinitionName()), "t.processDefinitionName", taskBo.getProcessDefinitionName()); queryWrapper.eq(StringUtils.isNotBlank(taskBo.getProcessDefinitionKey()), "t.processDefinitionKey", taskBo.getProcessDefinitionKey()); queryWrapper.eq("t.assignee_", userId); Page<TaskVo> page = actTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper); List<TaskVo> taskList = page.getRecords(); for (TaskVo task : taskList) { task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); } if (StringUtils.isNotBlank(taskBo.getProcessDefinitionName())) { query.processDefinitionNameLike("%" + taskBo.getProcessDefinitionName() + "%"); } if (StringUtils.isNotBlank(taskBo.getProcessDefinitionKey())) { query.processDefinitionKey(taskBo.getProcessDefinitionKey()); } List<HistoricTaskInstance> taskInstanceList = query.listPage(pageQuery.getFirstNum(), pageQuery.getPageSize()); List<HistoricProcessInstance> historicProcessInstanceList = null; if (CollUtil.isNotEmpty(taskInstanceList)) { Set<String> processInstanceIds = StreamUtils.toSet(taskInstanceList, HistoricTaskInstance::getProcessInstanceId); historicProcessInstanceList = QueryUtils.hisInstanceQuery(processInstanceIds).list(); } List<TaskVo> list = new ArrayList<>(); for (HistoricTaskInstance task : taskInstanceList) { TaskVo taskVo = BeanUtil.toBean(task, TaskVo.class); if (CollUtil.isNotEmpty(historicProcessInstanceList)) { historicProcessInstanceList.stream().filter(e -> e.getId().equals(task.getProcessInstanceId())).findFirst().ifPresent(e -> { taskVo.setBusinessStatus(e.getBusinessStatus()); taskVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(taskVo.getBusinessStatus())); taskVo.setProcessDefinitionKey(e.getProcessDefinitionKey()); taskVo.setProcessDefinitionName(e.getProcessDefinitionName()); }); } taskVo.setAssignee(StringUtils.isNotBlank(task.getAssignee()) ? Long.valueOf(task.getAssignee()) : null); list.add(taskVo); } long count = query.count(); return new TableDataInfo<>(list, count); return new TableDataInfo<>(taskList, page.getTotal()); } /** @@ -742,4 +721,24 @@ } return variableVoList; } /** * 获取可驳回得任务节点 * * @param processInstanceId 流程实例id */ @Override public Set<TaskVo> getTaskNodeList(String processInstanceId) { Set<TaskVo> list = new HashSet<>(); List<HistoricTaskInstance> historicTaskInstances = QueryUtils.hisTaskInstanceQuery(processInstanceId).orderByHistoricTaskInstanceEndTime().desc().list(); for (HistoricTaskInstance historicTaskInstance : historicTaskInstances) { if (historicTaskInstance.getEndTime() != null) { TaskVo taskVo = new TaskVo(); taskVo.setName(historicTaskInstance.getName()); taskVo.setTaskDefinitionKey(historicTaskInstance.getTaskDefinitionKey()); list.add(taskVo); } } return list; } } ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml
@@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.dromara.workflow.mapper.ActTaskMapper"> <resultMap type="org.dromara.workflow.domain.vo.TaskVo" id="TaskWaitingVoResult"> <resultMap type="org.dromara.workflow.domain.vo.TaskVo" id="TaskVoResult"> <result property="id" column="ID_"/> <result property="name" column="NAME_"/> <result property="description" column="DESCRIPTION_"/> @@ -15,6 +15,7 @@ <result property="taskDefinitionId" column="TASK_DEF_ID_"/> <result property="processDefinitionId" column="PROC_DEF_ID_"/> <result property="createTime" column="CREATE_TIME_"/> <result property="startTime" column="START_TIME_"/> <result property="endTime" column="END_TIME_"/> <result property="taskDefinitionKey" column="TASK_DEF_KEY_"/> <result property="dueDate" column="DUE_DATE_"/> @@ -28,7 +29,7 @@ <result property="processDefinitionKey" column="processDefinitionName"/> </resultMap> <select id="getTaskWaitByPage" resultMap="TaskWaitingVoResult"> <select id="getTaskWaitByPage" resultMap="TaskVoResult"> select * from (SELECT RES.*, AHP.BUSINESS_STATUS_, @@ -41,7 +42,20 @@ ORDER BY RES.CREATE_TIME_ DESC) t ${ew.getCustomSqlSegment} </select> <select id="getTaskCopyByPage" resultMap="TaskWaitingVoResult"> <select id="getTaskFinishByPage" resultMap="TaskVoResult"> select * from (SELECT HTI.*, AHP.BUSINESS_STATUS_, ARP.NAME_ AS processDefinitionName, ARP.KEY_ AS processDefinitionKey FROM ACT_HI_TASKINST HTI INNER JOIN ACT_HI_PROCINST AHP ON HTI.PROC_INST_ID_ = AHP.PROC_INST_ID_ INNER JOIN ACT_RE_PROCDEF ARP ON ARP.ID_ = HTI.PROC_DEF_ID_ WHERE HTI.PARENT_TASK_ID_ IS NULL ORDER BY HTI.START_TIME_ DESC) t ${ew.getCustomSqlSegment} </select> <select id="getTaskCopyByPage" resultMap="TaskVoResult"> select * from (SELECT AHT.*, AHP.BUSINESS_STATUS_,