diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java index 06727f255..9f50cdce4 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java @@ -17,13 +17,13 @@ import org.dromara.workflow.domain.vo.TaskVo; 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 class ActTaskController extends BaseController { public R> getProcessInstVariable(@PathVariable String taskId) { return R.ok(actTaskService.getInstanceVariable(taskId)); } + + /** + * 获取可驳回得任务节点 + * + * @param processInstanceId 流程实例id + */ + @GetMapping("/getTaskNodeList/{processInstanceId}") + public R> getNodeList(@PathVariable String processInstanceId) { + return R.ok(actTaskService.getTaskNodeList(processInstanceId)); + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java index b8a230f4d..0210b575b 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java @@ -81,6 +81,11 @@ public class TaskVo implements Serializable { */ private Date createTime; + /** + * 已办任务-创建时间 + */ + private Date startTime; + /** * 结束时间 */ diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java index e7094f543..5682862a9 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java @@ -27,6 +27,15 @@ public interface ActTaskMapper extends BaseMapperPlus { */ Page getTaskWaitByPage(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + /** + * 获取已办 + * + * @param page 分页 + * @param queryWrapper 条件 + * @return 结果 + */ + Page getTaskFinishByPage(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + /** * 查询当前用户的抄送 * diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java index 45c3de230..72a5ea11e 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActTaskService.java @@ -8,6 +8,7 @@ import org.dromara.workflow.domain.vo.VariableVo; import java.util.List; import java.util.Map; +import java.util.Set; /** * 任务 服务层 @@ -142,4 +143,12 @@ public interface IActTaskService { * @return 结果 */ List getInstanceVariable(String taskId); + + /** + * 获取可驳回得任务节点 + * + * @param processInstanceId 流程实例id + * @return 结果 + */ + Set getTaskNodeList(String processInstanceId); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index cfd9ea2f6..a44502aa8 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -336,39 +336,18 @@ public class ActTaskServiceImpl implements IActTaskService { @Override public TableDataInfo 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 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 page = actTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper); + + List 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 taskInstanceList = query.listPage(pageQuery.getFirstNum(), pageQuery.getPageSize()); - List historicProcessInstanceList = null; - if (CollUtil.isNotEmpty(taskInstanceList)) { - Set processInstanceIds = StreamUtils.toSet(taskInstanceList, HistoricTaskInstance::getProcessInstanceId); - historicProcessInstanceList = QueryUtils.hisInstanceQuery(processInstanceIds).list(); - } - List 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 @@ public class ActTaskServiceImpl implements IActTaskService { } return variableVoList; } + + /** + * 获取可驳回得任务节点 + * + * @param processInstanceId 流程实例id + */ + @Override + public Set getTaskNodeList(String processInstanceId) { + Set list = new HashSet<>(); + List 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; + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml index a36f880fe..342ce09b3 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml +++ b/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"> - + @@ -15,6 +15,7 @@ + @@ -28,7 +29,7 @@ - select * from (SELECT RES.*, AHP.BUSINESS_STATUS_, @@ -41,7 +42,20 @@ ORDER BY RES.CREATE_TIME_ DESC) t ${ew.getCustomSqlSegment} - + 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} + + +