package org.dromara.system.service.impl; import cn.hutool.core.convert.Convert; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.domain.dto.TaskAssigneeDTO; import org.dromara.common.core.domain.model.TaskAssigneeBody; import org.dromara.common.core.service.TaskAssigneeService; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.system.domain.bo.SysDeptBo; import org.dromara.system.domain.bo.SysPostBo; import org.dromara.system.domain.bo.SysRoleBo; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.domain.vo.SysPostVo; import org.dromara.system.domain.vo.SysRoleVo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysDeptService; import org.dromara.system.service.ISysPostService; import org.dromara.system.service.ISysRoleService; import org.dromara.system.service.ISysUserService; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; /** * 工作流设计器获取任务执行人 * * @author Lion Li */ @RequiredArgsConstructor @Service public class SysTaskAssigneeServiceImpl implements TaskAssigneeService { // 上级Service注入下级Service 其他Service永远不可能注入当前类 避免循环注入 private final ISysPostService postService; private final ISysDeptService deptService; private final ISysUserService userService; private final ISysRoleService roleService; /** * 查询角色并返回任务指派的列表,支持分页 * * @param taskQuery 查询条件 * @return 办理人 */ @Override public TaskAssigneeDTO selectRolesByTaskAssigneeList(TaskAssigneeBody taskQuery) { PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum()); SysRoleBo bo = new SysRoleBo(); bo.setRoleKey(taskQuery.getHandlerCode()); bo.setRoleName(taskQuery.getHandlerName()); bo.setStatus(SystemConstants.NORMAL); Map params = bo.getParams(); params.put("beginTime", taskQuery.getBeginTime()); params.put("endTime", taskQuery.getEndTime()); TableDataInfo page = roleService.selectPageRoleList(bo, pageQuery); // 使用封装的字段映射方法进行转换 List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRows(), item -> Convert.toStr(item.getRoleId()), SysRoleVo::getRoleKey, SysRoleVo::getRoleName, item -> "", SysRoleVo::getCreateTime); return new TaskAssigneeDTO(page.getTotal(), handlers); } /** * 查询岗位并返回任务指派的列表,支持分页 * * @param taskQuery 查询条件 * @return 办理人 */ @Override public TaskAssigneeDTO selectPostsByTaskAssigneeList(TaskAssigneeBody taskQuery) { PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum()); SysPostBo bo = new SysPostBo(); bo.setPostCategory(taskQuery.getHandlerCode()); bo.setPostName(taskQuery.getHandlerName()); bo.setStatus(SystemConstants.NORMAL); Map params = bo.getParams(); params.put("beginTime", taskQuery.getBeginTime()); params.put("endTime", taskQuery.getEndTime()); bo.setBelongDeptId(Convert.toLong(taskQuery.getGroupId())); TableDataInfo page = postService.selectPagePostList(bo, pageQuery); // 使用封装的字段映射方法进行转换 List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRows(), item -> Convert.toStr(item.getPostId()), SysPostVo::getPostCategory, SysPostVo::getPostName, item -> Convert.toStr(item.getDeptId()), SysPostVo::getCreateTime); return new TaskAssigneeDTO(page.getTotal(), handlers); } /** * 查询部门并返回任务指派的列表,支持分页 * * @param taskQuery 查询条件 * @return 办理人 */ @Override public TaskAssigneeDTO selectDeptsByTaskAssigneeList(TaskAssigneeBody taskQuery) { PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum()); SysDeptBo bo = new SysDeptBo(); bo.setDeptCategory(taskQuery.getHandlerCode()); bo.setDeptName(taskQuery.getHandlerName()); bo.setStatus(SystemConstants.NORMAL); Map params = bo.getParams(); params.put("beginTime", taskQuery.getBeginTime()); params.put("endTime", taskQuery.getEndTime()); bo.setBelongDeptId(Convert.toLong(taskQuery.getGroupId())); TableDataInfo page = deptService.selectPageDeptList(bo, pageQuery); // 使用封装的字段映射方法进行转换 List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRows(), item -> Convert.toStr(item.getDeptId()), SysDeptVo::getDeptCategory, SysDeptVo::getDeptName, item -> Convert.toStr(item.getParentId()), SysDeptVo::getCreateTime); return new TaskAssigneeDTO(page.getTotal(), handlers); } /** * 查询用户并返回任务指派的列表,支持分页 * * @param taskQuery 查询条件 * @return 办理人 */ @Override public TaskAssigneeDTO selectUsersByTaskAssigneeList(TaskAssigneeBody taskQuery) { PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum()); SysUserBo bo = new SysUserBo(); bo.setUserName(taskQuery.getHandlerCode()); bo.setNickName(taskQuery.getHandlerName()); bo.setStatus(SystemConstants.NORMAL); Map params = bo.getParams(); params.put("beginTime", taskQuery.getBeginTime()); params.put("endTime", taskQuery.getEndTime()); bo.setDeptId(Convert.toLong(taskQuery.getGroupId())); TableDataInfo page = userService.selectPageUserList(bo, pageQuery); // 使用封装的字段映射方法进行转换 List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRows(), item -> Convert.toStr(item.getUserId()), SysUserVo::getUserName, SysUserVo::getNickName, item -> Convert.toStr(item.getDeptId()), SysUserVo::getCreateTime); return new TaskAssigneeDTO(page.getTotal(), handlers); } }