From e46d26b54eb5a78e8c6bb14ff59c7148d51abf7d Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Thu, 7 Nov 2024 12:20:20 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E5=AE=8C=E5=96=84=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=8A=9E=E7=90=86=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/domain/dto/DeptDTO.java | 37 ++++++ .../core/domain/dto/TaskAssigneeDTO.java | 2 +- .../common/core/service/UserService.java | 37 +++++- .../common/mybatis/core/page/PageQuery.java | 5 + .../service/impl/SysUserServiceImpl.java | 109 ++++++++++++++++-- .../impl/WfTaskAssigneeServiceImpl.java | 79 ++++--------- 6 files changed, 196 insertions(+), 73 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/DeptDTO.java diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/DeptDTO.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/DeptDTO.java new file mode 100644 index 000000000..65c012faf --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/DeptDTO.java @@ -0,0 +1,37 @@ +package org.dromara.common.core.domain.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 部门 + * + * @author AprilWind + */ + +@Data +@NoArgsConstructor +public class DeptDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 父部门ID + */ + private Long parentId; + + /** + * 部门名称 + */ + private String deptName; + +} 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 4465c0457..b51fb569b 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 @@ -63,7 +63,7 @@ public class TaskAssigneeDTO implements Serializable { handlerCode != null ? handlerCode.apply(item) : "无", handlerName != null ? handlerName.apply(item) : "无", groupName != null ? groupName.apply(item) : "默认分组", - createTimeMapper != null ? createTimeMapper.apply(item) : null + createTimeMapper != null ? createTimeMapper.apply(item) : new Date() )) .collect(Collectors.toList()); } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java index 92fb967e7..e8287ce1b 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java @@ -1,5 +1,6 @@ package org.dromara.common.core.service; +import org.dromara.common.core.domain.dto.DeptDTO; import org.dromara.common.core.domain.dto.TaskAssigneeDTO; import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.domain.model.TaskAssigneeBody; @@ -86,10 +87,42 @@ public interface UserService { List selectUsersByDeptIds(List deptIds); /** - * 查询角色信息 + * 查询角色并返回任务指派的列表,支持分页 * - * @return 角色信息列表 + * @param taskQuery 查询条件 + * @return 办理人 */ TaskAssigneeDTO selectUsersByRoleList(TaskAssigneeBody taskQuery); + /** + * 查询用户并返回任务指派的列表,支持分页 + * + * @param taskQuery 查询条件 + * @return 办理人 + */ + TaskAssigneeDTO selectUsersByUserList(TaskAssigneeBody taskQuery); + + /** + * 查询部门并返回任务指派的列表,支持分页 + * + * @param taskQuery 查询条件 + * @return 办理人 + */ + TaskAssigneeDTO selectUsersByDeptList(TaskAssigneeBody taskQuery); + + /** + * 查询部门 + * + * @return 部门列表 + */ + List selectUsersByDeptList(); + + /** + * 查询岗位并返回任务指派的列表,支持分页 + * + * @param taskQuery 查询条件 + * @return 办理人 + */ + TaskAssigneeDTO selectUsersByPostList(TaskAssigneeBody taskQuery); + } diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/PageQuery.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/PageQuery.java index 6ca9b2756..a3b0ac821 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/PageQuery.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/page/PageQuery.java @@ -117,4 +117,9 @@ public class PageQuery implements Serializable { return (pageNum - 1) * pageSize; } + public PageQuery(Integer pageSize, Integer pageNum) { + this.pageSize = pageSize; + this.pageNum = pageNum; + } + } 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 aefb0b532..67250f01b 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 @@ -15,6 +15,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.UserConstants; +import org.dromara.common.core.domain.dto.DeptDTO; import org.dromara.common.core.domain.dto.TaskAssigneeDTO; import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.domain.model.TaskAssigneeBody; @@ -30,10 +31,7 @@ import org.dromara.common.mybatis.helper.DataBaseHelper; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.domain.*; import org.dromara.system.domain.bo.SysUserBo; -import org.dromara.system.domain.vo.SysPostVo; -import org.dromara.system.domain.vo.SysRoleVo; -import org.dromara.system.domain.vo.SysUserExportVo; -import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.domain.vo.*; import org.dromara.system.mapper.*; import org.dromara.system.service.ISysUserService; import org.springframework.cache.annotation.CacheEvict; @@ -706,18 +704,14 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } /** - * 根据角色列表查询用户信息。 + * 查询并返回任务指派的列表,支持分页 * - * @param taskQuery 包含查询条件的请求体对象,包含分页参数、权限编码、权限名称、时间范围等信息。 - * @return 返回包含查询结果的 `TaskAssigneeDTO` 对象,其中包含符合条件的总记录数和处理人列表。 + * @param taskQuery 查询条件 + * @return 办理人 */ @Override public TaskAssigneeDTO selectUsersByRoleList(TaskAssigneeBody taskQuery) { - // 创建分页查询对象,并设置分页大小和页码 - PageQuery pageQuery = new PageQuery(); - pageQuery.setPageSize(taskQuery.getPageSize()); - pageQuery.setPageNum(taskQuery.getPageNum()); - + PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum()); // 使用 LambdaQueryWrapper 构建查询条件 LambdaQueryWrapper wrapper = new LambdaQueryWrapper() .like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysRole::getRoleKey, taskQuery.getHandlerCode()) @@ -735,4 +729,95 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return new TaskAssigneeDTO(page.getTotal(), handlers); } + /** + * 查询并返回任务指派的列表,支持分页 + * + * @param taskQuery 查询条件 + * @return 办理人 + */ + @Override + public TaskAssigneeDTO selectUsersByUserList(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()); + + // 执行分页查询,并将查询结果封装为 SysUserVo 对象的 Page + Page page = baseMapper.selectVoPage(pageQuery.build(), wrapper); + + // 使用封装的字段映射方法进行转换 + List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(), + SysUserVo::getUserId, SysUserVo::getUserName, SysUserVo::getNickName, SysUserVo::getDeptName, SysUserVo::getCreateTime); + + return new TaskAssigneeDTO(page.getTotal(), handlers); + } + + /** + * 查询并返回任务指派的列表,支持分页 + * + * @param taskQuery 查询条件 + * @return 办理人 + */ + @Override + public TaskAssigneeDTO selectUsersByDeptList(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()); + + // 执行分页查询,并将查询结果封装为 SysDeptVo 对象的 Page + Page page = deptMapper.selectVoPage(pageQuery.build(), wrapper); + + // 使用封装的字段映射方法进行转换 + List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(), + SysDeptVo::getDeptId, SysDeptVo::getDeptCategory, SysDeptVo::getDeptName, null, SysDeptVo::getCreateTime); + + return new TaskAssigneeDTO(page.getTotal(), handlers); + } + + /** + * 查询部门 + * + * @return 部门列表 + */ + @Override + public List selectUsersByDeptList() { + List list = deptMapper.selectVoList(); + return BeanUtil.copyToList(list, DeptDTO.class); + } + + /** + * 查询并返回任务指派的列表,支持分页 + * + * @param taskQuery 查询条件 + * @return 办理人 + */ + @Override + public TaskAssigneeDTO selectUsersByPostList(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 = postMapper.selectVoPage(pageQuery.build(), wrapper); + + // 使用封装的字段映射方法进行转换 + List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(), + SysPostVo::getPostId, SysPostVo::getPostCategory, SysPostVo::getPostName, SysPostVo::getDeptName, SysPostVo::getCreateTime); + + return new TaskAssigneeDTO(page.getTotal(), handlers); + } + } 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 9e607d902..5561a3620 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 @@ -3,10 +3,12 @@ package org.dromara.workflow.service.impl; import cn.hutool.core.bean.BeanUtil; import com.warm.flow.ui.dto.HandlerFunDto; import com.warm.flow.ui.dto.HandlerQuery; +import com.warm.flow.ui.dto.TreeFunDto; import com.warm.flow.ui.service.HandlerSelectService; import com.warm.flow.ui.vo.HandlerSelectVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.dto.DeptDTO; import org.dromara.common.core.domain.dto.TaskAssigneeDTO; import org.dromara.common.core.domain.model.TaskAssigneeBody; import org.dromara.common.core.service.UserService; @@ -14,10 +16,9 @@ import org.dromara.common.core.utils.DateUtils; import org.dromara.workflow.common.enums.TaskAssigneeEnum; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; -import static org.dromara.workflow.common.enums.TaskAssigneeEnum.ROLE; - /** * 流程设计器-获取办理人权限设置列表 * @@ -40,7 +41,7 @@ public class WfTaskAssigneeServiceImpl implements HandlerSelectService { } /** - * 获取用户列表, 同时构建左侧部门树状结构 + * 获取办理列表, 同时构建左侧部门树状结构 * * @param query 查询条件 * @return HandlerSelectVo @@ -49,77 +50,39 @@ public class WfTaskAssigneeServiceImpl implements HandlerSelectService { public HandlerSelectVo getHandlerSelect(HandlerQuery query) { TaskAssigneeEnum type = TaskAssigneeEnum.fromDesc(query.getHandlerType()); TaskAssigneeBody taskQuery = BeanUtil.toBean(query, TaskAssigneeBody.class); + List depts = new ArrayList<>(); TaskAssigneeDTO dto = new TaskAssigneeDTO(); if (TaskAssigneeEnum.USER == type) { // 处理用户相关的业务逻辑 - } else if (ROLE == type) { + dto = userService.selectUsersByUserList(taskQuery); + depts = userService.selectUsersByDeptList(); + } else if (TaskAssigneeEnum.ROLE == type) { // 处理角色相关的业务逻辑 dto = userService.selectUsersByRoleList(taskQuery); } else if (TaskAssigneeEnum.DEPT == type) { // 处理部门相关的业务逻辑 + dto = userService.selectUsersByDeptList(taskQuery); } else if (TaskAssigneeEnum.POST == type) { // 处理岗位相关的业务逻辑 + dto = userService.selectUsersByPostList(taskQuery); + depts = userService.selectUsersByDeptList(); } + + // 业务系统机构,转成组件内部左侧树列表能够显示的数据 + TreeFunDto treeFunDto = new TreeFunDto<>(depts) + .setId(dept -> String.valueOf(dept.getDeptId())) + .setName(DeptDTO::getDeptName) + .setParentId(dept -> String.valueOf(dept.getParentId())); + // 业务系统数据,转成组件内部能够显示的数据, total是业务数据总数,用于分页显示 HandlerFunDto handlerFunDto = new HandlerFunDto<>(dto.getList(), dto.getTotal()) - .setStorageId(assignee -> ROLE.getCode() + assignee.getStorageId()) + .setStorageId(assignee -> type.getCode() + assignee.getStorageId()) .setHandlerCode(TaskAssigneeDTO.TaskHandler::getHandlerCode) .setHandlerName(TaskAssigneeDTO.TaskHandler::getHandlerName) .setGroupName(TaskAssigneeDTO.TaskHandler::getGroupName) .setCreateTime(assignee -> DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, assignee.getCreateTime())); - return getHandlerSelectVo(handlerFunDto); + + return getHandlerSelectVo(handlerFunDto, treeFunDto); } -// /** -// * 获取用户列表 -// * -// * @param query 查询条件 -// * @return HandlerSelectVo -// */ -// private HandlerSelectVo getDept(HandlerQuery query) { -// // 查询部门列表 -// List deptList = userService.selectDeptList(sysDept); -// long total = new PageInfo<>(deptList).getTotal(); -// -// // 业务系统数据,转成组件内部能够显示的数据, total是业务数据总数,用于分页显示 -// HandlerFunDto handlerFunDto = new HandlerFunDto<>(deptList, total) -// .setStorageId(dept -> "dept:" + dept.getDeptId()) // 前面拼接dept: 是为了防止用户、部门的主键重复 -// .setHandlerName(SysDept::getDeptName) // 权限名称 -// .setCreateTime(dept -> DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, dept.getCreateTime())); -// -// return getHandlerSelectVo(handlerFunDto); -// -// } -// -// /** -// * 获取用户列表, 同时构建左侧部门树状结构 -// * -// * @param query 查询条件 -// * @return HandlerSelectVo -// */ -// private HandlerSelectVo getUser(HandlerQuery query) { -// ...... -// // 查询用户列表 -// List userList = userService.selectUserList(sysUser); -// long total = new PageInfo<>(userList).getTotal(); -// // 查询部门列表,构建树状结构 -// List deptList = deptMapper.selectDeptList(new SysDept()); -// -// // 业务系统数据,转成组件内部能够显示的数据, total是业务数据总数,用于分页显示 -// HandlerFunDto handlerFunDto = new HandlerFunDto<>(userList, total) -// .setStorageId(user -> user.getUserId().toString()) -// .setHandlerCode(SysUser::getUserName) // 权限编码 -// .setHandlerName(SysUser::getNickName) // 权限名称 -// .setCreateTime(user -> DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, user.getCreateTime())) -// .setGroupName(user -> user.getDept() != null ? user.getDept().getDeptName() : ""); -// -// // 业务系统机构,转成组件内部左侧树列表能够显示的数据 -// TreeFunDto treeFunDto = new TreeFunDto<>(deptList) -// .setId(dept -> dept.getDeptId().toString()) // 左侧树ID -// .setName(SysDept::getDeptName) // 左侧树名称 -// .setParentId(dept -> dept.getParentId().toString()); // 左侧树父级ID -// -// return getHandlerSelectVo(handlerFunDto, treeFunDto); -// } - }