diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/TaskAssigneeDTO.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/TaskAssigneeDTO.java index b51fb569b..d70a0d84d 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/TaskAssigneeDTO.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/TaskAssigneeDTO.java @@ -3,6 +3,7 @@ package org.dromara.common.core.domain.dto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.dromara.common.core.utils.StringUtils; import java.io.Serial; import java.io.Serializable; @@ -60,10 +61,10 @@ public class TaskAssigneeDTO implements Serializable { return sourceList.stream() .map(item -> new TaskHandler( String.valueOf(storageId.apply(item)), - handlerCode != null ? handlerCode.apply(item) : "无", - handlerName != null ? handlerName.apply(item) : "无", - groupName != null ? groupName.apply(item) : "默认分组", - createTimeMapper != null ? createTimeMapper.apply(item) : new Date() + StringUtils.blankToDefault(handlerCode.apply(item), "无"), + StringUtils.blankToDefault(handlerName.apply(item), "无"), + StringUtils.blankToDefault(groupName != null ? groupName.apply(item) : null, "默认分组"), + createTimeMapper.apply(item) )) .collect(Collectors.toList()); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java index 08dda662c..9e7f93e58 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java @@ -2,12 +2,13 @@ package org.dromara.system.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.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.system.domain.SysDept; import org.dromara.system.domain.vo.SysDeptVo; -import org.apache.ibatis.annotations.Param; import java.util.List; @@ -29,6 +30,17 @@ public interface SysDeptMapper extends BaseMapperPlus { }) List selectDeptList(@Param(Constants.WRAPPER) Wrapper queryWrapper); + /** + * 分页查询部门管理数据 + * + * @param queryWrapper 查询条件 + * @return 部门信息集合 + */ + @DataPermission({ + @DataColumn(key = "deptName", value = "dept_id"), + }) + Page selectPageDeptList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + @DataPermission({ @DataColumn(key = "deptName", value = "dept_id") }) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index b3505310c..b2c2c3a5d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -41,6 +41,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; /** * 部门管理 服务实现 @@ -179,7 +180,9 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { */ @Override public List selectDeptsByList() { - List list = baseMapper.selectVoList(); + List list = baseMapper.selectDeptList(new LambdaQueryWrapper() + .select(SysDept::getDeptId, SysDept::getDeptName, SysDept::getParentId) + .eq(SysDept::getStatus, UserConstants.DEPT_NORMAL)); return BeanUtil.copyToList(list, DeptDTO.class); } @@ -193,18 +196,36 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { public TaskAssigneeDTO selectDeptsByTaskAssigneeList(TaskAssigneeBody taskQuery) { PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum()); // 使用 LambdaQueryWrapper 构建查询条件 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysDept::getDeptCategory, taskQuery.getHandlerCode()) - .like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysDept::getDeptName, taskQuery.getHandlerName()) - .between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()), - SysDept::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime()); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(SysDept::getDelFlag, UserConstants.DEL_FLAG_NORMAL); + wrapper.like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysDept::getDeptCategory, taskQuery.getHandlerCode()); + wrapper.like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysDept::getDeptName, taskQuery.getHandlerName()); + if (StringUtils.isNotBlank(taskQuery.getGroupId())) { + //部门树搜索 + wrapper.and(x -> { + List deptIds = baseMapper.selectList(new LambdaQueryWrapper() + .select(SysDept::getDeptId) + .apply(DataBaseHelper.findInSet(taskQuery.getGroupId(), "ancestors"))) + .stream() + .map(SysDept::getDeptId) + .collect(Collectors.toList()); + deptIds.add(Long.valueOf(taskQuery.getGroupId())); + x.in(SysDept::getDeptId, deptIds); + }); + } + wrapper.between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()), + SysDept::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime()); + wrapper.orderByAsc(SysDept::getAncestors); + wrapper.orderByAsc(SysDept::getParentId); + wrapper.orderByAsc(SysDept::getOrderNum); + wrapper.orderByAsc(SysDept::getDeptId); - // 执行分页查询,并将查询结果封装为 SysDeptVo 对象的 Page - Page page = baseMapper.selectVoPage(pageQuery.build(), wrapper); + Page page = baseMapper.selectPageDeptList(pageQuery.build(), wrapper); + // TODO 需要回显父部门名称 // 使用封装的字段映射方法进行转换 List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(), - SysDeptVo::getDeptId, SysDeptVo::getDeptCategory, SysDeptVo::getDeptName, null, SysDeptVo::getCreateTime); + SysDeptVo::getDeptId, SysDeptVo::getDeptCategory, SysDeptVo::getDeptName, SysDeptVo::getParentName, SysDeptVo::getCreateTime); return new TaskAssigneeDTO(page.getTotal(), handlers); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java index a02617f34..590b8bc8d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java @@ -30,6 +30,7 @@ import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -252,16 +253,24 @@ public class SysPostServiceImpl implements ISysPostService, PostService { @Override public TaskAssigneeDTO selectPostsByTaskAssigneeList(TaskAssigneeBody taskQuery) { PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum()); - // 使用 LambdaQueryWrapper 构建查询条件 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysPost::getPostCategory, taskQuery.getHandlerCode()) - .like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysPost::getPostName, taskQuery.getHandlerName()) - .like(StringUtils.isNotBlank(taskQuery.getGroupId()), SysPost::getDeptId, taskQuery.getGroupId()) - .between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()), - SysPost::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime()); - // 执行分页查询,并将查询结果封装为 SysPostVo 对象的 Page - Page page = baseMapper.selectVoPage(pageQuery.build(), wrapper); + SysPostBo post = new SysPostBo(); + post.setPostCategory(taskQuery.getHandlerCode()); + post.setPostName(taskQuery.getHandlerName()); + Optional.ofNullable(taskQuery.getGroupId()) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .ifPresent(post::setBelongDeptId); + + LambdaQueryWrapper wrapper = buildQueryWrapper(post); + // 如果 beginTime 和 endTime 都有值,才添加到 params 中 + if (StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime())) { + wrapper.between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()), + SysPost::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime()); + } + + Page page = baseMapper.selectPagePostList(pageQuery.build(), wrapper); + // TODO 需要回显部门名称 // 使用封装的字段映射方法进行转换 List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(), diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java index 9ae250b05..eb7b30f54 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java @@ -524,15 +524,19 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService { @Override public TaskAssigneeDTO selectRolesByTaskAssigneeList(TaskAssigneeBody taskQuery) { PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum()); - // 使用 LambdaQueryWrapper 构建查询条件 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysRole::getRoleKey, taskQuery.getHandlerCode()) - .like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysRole::getRoleName, taskQuery.getHandlerName()) - .between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()), - SysRole::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime()); - // 执行分页查询,并将查询结果封装为 SysRoleVo 对象的 Page - Page page = baseMapper.selectVoPage(pageQuery.build(), wrapper); + SysRoleBo role = new SysRoleBo(); + role.setRoleKey(taskQuery.getHandlerCode()); + role.setRoleName(taskQuery.getHandlerName()); + + // 如果 beginTime 和 endTime 都有值,才添加到 params 中 + if (StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime())) { + Map params = role.getParams(); + params.put("beginTime", taskQuery.getBeginTime()); + params.put("endTime", taskQuery.getEndTime()); + } + Page page = baseMapper.selectPageRoleList(pageQuery.build(), this.buildQueryWrapper(role)); + // TODO 回显数据范围 // 使用封装的字段映射方法进行转换 List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(), diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index 886393f93..8bb93b5e6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -41,10 +41,7 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * 用户 业务层处理 @@ -714,16 +711,22 @@ public class SysUserServiceImpl implements ISysUserService, UserService { @Override public TaskAssigneeDTO selectUsersByTaskAssigneeList(TaskAssigneeBody taskQuery) { PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum()); - // 使用 LambdaQueryWrapper 构建查询条件 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysUser::getUserName, taskQuery.getHandlerCode()) - .like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysUser::getNickName, taskQuery.getHandlerName()) - .eq(StringUtils.isNotBlank(taskQuery.getGroupId()), SysUser::getDeptId, taskQuery.getGroupId()) - .between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()), - SysUser::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime()); + SysUserBo user = new SysUserBo(); + user.setUserName(taskQuery.getHandlerCode()); + user.setNickName(taskQuery.getHandlerName()); + Optional.ofNullable(taskQuery.getGroupId()) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .ifPresent(user::setDeptId); - // 执行分页查询,并将查询结果封装为 SysUserVo 对象的 Page - Page page = baseMapper.selectVoPage(pageQuery.build(), wrapper); + // 如果 beginTime 和 endTime 都有值,才添加到 params 中 + if (StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime())) { + Map params = user.getParams(); + params.put("beginTime", taskQuery.getBeginTime()); + params.put("endTime", taskQuery.getEndTime()); + } + Page page = baseMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user)); + // TODO 需要回显部门名称 // 使用封装的字段映射方法进行转换 List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(), diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml index 6ad866f29..9057a0e22 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -18,6 +18,17 @@ from sys_dept ${ew.getCustomSqlSegment} + + diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index c92ad1e3a..965ee4d07 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -98,7 +98,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { FlowInstance flowInstance = iFlwInstanceService.instanceByBusinessId(businessKey); if (flowInstance != null) { List taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId())); - return buildMap(taskList.get(0).getInstanceId(), taskList.get(0).getId()); + return Map.of("processInstanceId", taskList.get(0).getInstanceId(), "taskId", taskList.get(0).getId()); } FlowParams flowParams = new FlowParams(); flowParams.flowCode(wfDefinitionConfigVo.getProcessKey()); @@ -116,18 +116,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { if (taskList.size() > 1) { throw new ServiceException("请检查流程第一个环节是否为申请人!"); } - return buildMap(instance.getId(), taskList.get(0).getId()); - } - - /** - * 构建一个包含给定 `processInstanceId` 和 `taskId` 的 Map - * - * @param instanceId 流程实例的 ID - * @param taskId 任务的 ID - * @return 返回一个包含 `processInstanceId` 和 `taskId` 的不可变 Map - */ - private Map buildMap(Object instanceId, Object taskId) { - return Map.of("processInstanceId", instanceId, "taskId", taskId); + return Map.of("processInstanceId", instance.getId(), "taskId", taskList.get(0).getId()); } /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskAssigneeServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskAssigneeServiceImpl.java index 73280edb1..73789731c 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskAssigneeServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfTaskAssigneeServiceImpl.java @@ -84,7 +84,7 @@ public class WfTaskAssigneeServiceImpl implements HandlerSelectService { * 根据任务办理类型获取部门数据 */ private List fetchDeptData(TaskAssigneeEnum type) { - if (type == TaskAssigneeEnum.USER || type == TaskAssigneeEnum.POST) { + if (type == TaskAssigneeEnum.USER || type == TaskAssigneeEnum.DEPT || type == TaskAssigneeEnum.POST) { return deptService.selectDeptsByList(); } return new ArrayList<>();