mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-29 22:56:40 +08:00
update 优化任务待办,排除非待办任务
This commit is contained in:
parent
661b07c19f
commit
7d6d1ade4f
@ -0,0 +1,30 @@
|
||||
package org.dromara.workflow.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
import org.dromara.workflow.domain.vo.TaskVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 运行时任务Mapper接口
|
||||
*
|
||||
* @author may
|
||||
* @date 2023-10-19
|
||||
*/
|
||||
public interface ActTaskMapper extends BaseMapperPlus<TaskVo, TaskVo> {
|
||||
|
||||
/**
|
||||
* 获取待办信息
|
||||
*
|
||||
* @param page 分页
|
||||
* @param queryWrapper 条件
|
||||
* @param userId 用户id
|
||||
* @param groupIds 用户角色id
|
||||
* @return 结果
|
||||
*/
|
||||
Page<TaskVo> getTaskWaitByPage(@Param("page") Page<TaskVo> page, @Param(Constants.WRAPPER) Wrapper<TaskVo> queryWrapper, @Param("userId") String userId, @Param("groupIds") List<String> groupIds);
|
||||
}
|
@ -5,11 +5,14 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.dto.RoleDTO;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.common.tenant.helper.TenantHelper;
|
||||
@ -20,6 +23,7 @@ import org.dromara.workflow.domain.bo.*;
|
||||
import org.dromara.workflow.domain.vo.MultiInstanceVo;
|
||||
import org.dromara.workflow.domain.vo.TaskVo;
|
||||
import org.dromara.workflow.flowable.cmd.*;
|
||||
import org.dromara.workflow.mapper.ActTaskMapper;
|
||||
import org.dromara.workflow.service.IActTaskService;
|
||||
import org.dromara.workflow.utils.WorkflowUtils;
|
||||
import org.flowable.common.engine.impl.identity.Authentication;
|
||||
@ -57,6 +61,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
private final HistoryService historyService;
|
||||
private final IdentityService identityService;
|
||||
private final ManagementService managementService;
|
||||
private final ActTaskMapper actTaskMapper;
|
||||
|
||||
/**
|
||||
* 启动任务
|
||||
@ -168,47 +173,33 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<TaskVo> getTaskWaitByPage(TaskBo taskBo) {
|
||||
PageQuery pageQuery = new PageQuery();
|
||||
pageQuery.setPageNum(taskBo.getPageNum());
|
||||
pageQuery.setPageSize(taskBo.getPageSize());
|
||||
QueryWrapper<TaskVo> queryWrapper = new QueryWrapper<>();
|
||||
List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles();
|
||||
String userId = String.valueOf(LoginHelper.getUserId());
|
||||
TaskQuery query = taskService.createTaskQuery();
|
||||
query.taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(userId);
|
||||
if (CollUtil.isNotEmpty(roles)) {
|
||||
List<String> groupIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId()));
|
||||
query.taskCandidateGroupIn(groupIds);
|
||||
}
|
||||
queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus());
|
||||
queryWrapper.eq("t.tenant_id_", TenantHelper.getTenantId());
|
||||
if (StringUtils.isNotBlank(taskBo.getName())) {
|
||||
query.taskNameLike("%" + taskBo.getName() + "%");
|
||||
queryWrapper.like("t.name_", taskBo.getName());
|
||||
}
|
||||
if (StringUtils.isNotBlank(taskBo.getProcessDefinitionName())) {
|
||||
query.processDefinitionNameLike("%" + taskBo.getProcessDefinitionName() + "%");
|
||||
queryWrapper.like("t.processDefinitionName", taskBo.getProcessDefinitionName());
|
||||
}
|
||||
if (StringUtils.isNotBlank(taskBo.getProcessDefinitionKey())) {
|
||||
query.processDefinitionKey(taskBo.getProcessDefinitionKey());
|
||||
queryWrapper.eq("t.processDefinitionKey", taskBo.getProcessDefinitionKey());
|
||||
}
|
||||
List<Task> taskList = query.listPage(taskBo.getPageNum(), taskBo.getPageSize());
|
||||
List<ProcessInstance> processInstanceList = null;
|
||||
if (CollUtil.isNotEmpty(taskList)) {
|
||||
Set<String> processInstanceIds = StreamUtils.toSet(taskList, Task::getProcessInstanceId);
|
||||
processInstanceList = runtimeService.createProcessInstanceQuery().processInstanceIds(processInstanceIds).list();
|
||||
Page<TaskVo> page = TenantHelper.ignore(() ->
|
||||
actTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper, userId, StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId())))
|
||||
);
|
||||
List<TaskVo> taskList = page.getRecords();
|
||||
for (TaskVo task : taskList) {
|
||||
task.setBusinessStatusName(BusinessStatusEnum.getEumByStatus(task.getBusinessStatus()));
|
||||
task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId()));
|
||||
task.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null);
|
||||
}
|
||||
List<TaskVo> list = new ArrayList<>();
|
||||
for (Task task : taskList) {
|
||||
TaskVo taskVo = BeanUtil.toBean(task, TaskVo.class);
|
||||
if (CollUtil.isNotEmpty(processInstanceList)) {
|
||||
processInstanceList.stream().filter(e -> e.getId().equals(task.getProcessInstanceId())).findFirst().ifPresent(e -> {
|
||||
taskVo.setBusinessStatus(e.getBusinessStatus());
|
||||
taskVo.setBusinessStatusName(BusinessStatusEnum.getEumByStatus(taskVo.getBusinessStatus()));
|
||||
taskVo.setProcessDefinitionKey(e.getProcessDefinitionKey());
|
||||
taskVo.setProcessDefinitionName(e.getProcessDefinitionName());
|
||||
});
|
||||
}
|
||||
taskVo.setAssignee(StringUtils.isNotBlank(task.getAssignee()) ? Long.valueOf(task.getAssignee()) : null);
|
||||
taskVo.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId()));
|
||||
taskVo.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null);
|
||||
list.add(taskVo);
|
||||
}
|
||||
long count = query.count();
|
||||
return new TableDataInfo<>(list, count);
|
||||
return new TableDataInfo<>(taskList, page.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
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">
|
||||
<result property="id" column="ID_"/>
|
||||
<result property="name" column="NAME_"/>
|
||||
<result property="description" column="DESCRIPTION_"/>
|
||||
<result property="priority" column="PRIORITY_"/>
|
||||
<result property="owner" column="OWNER_"/>
|
||||
<result property="assignee" column="ASSIGNEE_"/>
|
||||
<result property="processInstanceId" column="PROC_INST_ID_"/>
|
||||
<result property="executionId" column="EXECUTION_ID_"/>
|
||||
<result property="taskDefinitionId" column="TASK_DEF_ID_"/>
|
||||
<result property="processDefinitionId" column="PROC_DEF_ID_"/>
|
||||
<result property="createTime" column="CREATE_TIME_"/>
|
||||
<result property="endTime" column="END_TIME_"/>
|
||||
<result property="taskDefinitionKey" column="TASK_DEF_KEY_"/>
|
||||
<result property="dueDate" column="DUE_DATE_"/>
|
||||
<result property="processDefinitionKey" column="key_"/>
|
||||
<result property="category" column="CATEGORY_"/>
|
||||
<result property="parentTaskId" column="PARENT_TASK_ID_"/>
|
||||
<result property="tenantId" column="TENANT_ID_"/>
|
||||
<result property="claimTime" column="CLAIM_TIME"/>
|
||||
<result property="businessStatus" column="BUSINESS_STATUS_"/>
|
||||
<result property="processDefinitionName" column="processDefinitionName"/>
|
||||
<result property="processDefinitionKey" column="processDefinitionName"/>
|
||||
|
||||
</resultMap>
|
||||
<select id="getTaskWaitByPage" resultMap="TaskWaitingVoResult">
|
||||
select * from (SELECT
|
||||
RES.*,AHP.business_status_ ,ARP.name_ as processDefinitionName,ARP.key_ as processDefinitionKey
|
||||
FROM
|
||||
ACT_RU_TASK RES
|
||||
inner join ACT_HI_PROCINST AHP ON RES.PROC_INST_ID_ = AHP.PROC_INST_ID_
|
||||
inner join ACT_RE_PROCDEF ARP ON ARP.ID_ = RES.PROC_DEF_ID_
|
||||
WHERE (
|
||||
RES.ASSIGNEE_ = #{userId}
|
||||
OR (
|
||||
RES.ASSIGNEE_ IS NULL
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
LINK.ID_
|
||||
FROM
|
||||
ACT_RU_IDENTITYLINK LINK
|
||||
WHERE
|
||||
LINK.TASK_ID_ = RES.ID_
|
||||
AND LINK.TYPE_ = 'candidate'
|
||||
AND (
|
||||
LINK.USER_ID_ = #{userId}
|
||||
<if test="groupIds != null and groupIds.size() > 0">
|
||||
OR (
|
||||
LINK.GROUP_ID_ IN
|
||||
<foreach collection="groupIds" item="groupId" index="index" open="(" close=")" separator=",">
|
||||
#{groupId}
|
||||
</foreach>
|
||||
)
|
||||
</if>
|
||||
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
ORDER BY
|
||||
RES.CREATE_TIME_ DESC) t
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
</mapper>
|
Loading…
Reference in New Issue
Block a user