Commit e4fd022ce1db21dd784e7c25ced8a14dc4789642
1 parent
7f171d14
完成部门模块的迁移
Showing
25 changed files
with
316 additions
and
1245 deletions
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java deleted
| 1 | -package com.ruoyi.web.controller.system; | |
| 2 | - | |
| 3 | -import java.util.Iterator; | |
| 4 | -import java.util.List; | |
| 5 | -import org.apache.commons.lang3.ArrayUtils; | |
| 6 | -import org.springframework.beans.factory.annotation.Autowired; | |
| 7 | -import org.springframework.security.access.prepost.PreAuthorize; | |
| 8 | -import org.springframework.validation.annotation.Validated; | |
| 9 | -import org.springframework.web.bind.annotation.DeleteMapping; | |
| 10 | -import org.springframework.web.bind.annotation.GetMapping; | |
| 11 | -import org.springframework.web.bind.annotation.PathVariable; | |
| 12 | -import org.springframework.web.bind.annotation.PostMapping; | |
| 13 | -import org.springframework.web.bind.annotation.PutMapping; | |
| 14 | -import org.springframework.web.bind.annotation.RequestBody; | |
| 15 | -import org.springframework.web.bind.annotation.RequestMapping; | |
| 16 | -import org.springframework.web.bind.annotation.RestController; | |
| 17 | -import com.ruoyi.common.annotation.Log; | |
| 18 | -import com.ruoyi.common.constant.UserConstants; | |
| 19 | -import com.ruoyi.common.core.controller.BaseController; | |
| 20 | -import com.ruoyi.common.core.domain.AjaxResult; | |
| 21 | -import com.ruoyi.common.core.domain.entity.SysDept; | |
| 22 | -import com.ruoyi.common.enums.BusinessType; | |
| 23 | -import com.ruoyi.common.utils.SecurityUtils; | |
| 24 | -import com.ruoyi.common.utils.StringUtils; | |
| 25 | -import com.ruoyi.system.service.ISysDeptService; | |
| 26 | - | |
| 27 | -/** | |
| 28 | - * 部门信息 | |
| 29 | - * | |
| 30 | - * @author ruoyi | |
| 31 | - */ | |
| 32 | -@RestController | |
| 33 | -@RequestMapping("/system/dept") | |
| 34 | -public class SysDeptController extends BaseController | |
| 35 | -{ | |
| 36 | - @Autowired | |
| 37 | - private ISysDeptService deptService; | |
| 38 | - | |
| 39 | - /** | |
| 40 | - * 获取部门列表 | |
| 41 | - */ | |
| 42 | - @PreAuthorize("@ss.hasPermi('system:dept:list')") | |
| 43 | - @GetMapping("/list") | |
| 44 | - public AjaxResult list(SysDept dept) | |
| 45 | - { | |
| 46 | - List<SysDept> depts = deptService.selectDeptList(dept); | |
| 47 | - return AjaxResult.success(depts); | |
| 48 | - } | |
| 49 | - | |
| 50 | - /** | |
| 51 | - * 查询部门列表(排除节点) | |
| 52 | - */ | |
| 53 | - @PreAuthorize("@ss.hasPermi('system:dept:list')") | |
| 54 | - @GetMapping("/list/exclude/{deptId}") | |
| 55 | - public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) | |
| 56 | - { | |
| 57 | - List<SysDept> depts = deptService.selectDeptList(new SysDept()); | |
| 58 | - Iterator<SysDept> it = depts.iterator(); | |
| 59 | - while (it.hasNext()) | |
| 60 | - { | |
| 61 | - SysDept d = (SysDept) it.next(); | |
| 62 | - if (d.getDeptId().intValue() == deptId | |
| 63 | - || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")) | |
| 64 | - { | |
| 65 | - it.remove(); | |
| 66 | - } | |
| 67 | - } | |
| 68 | - return AjaxResult.success(depts); | |
| 69 | - } | |
| 70 | - | |
| 71 | - /** | |
| 72 | - * 根据部门编号获取详细信息 | |
| 73 | - */ | |
| 74 | - @PreAuthorize("@ss.hasPermi('system:dept:query')") | |
| 75 | - @GetMapping(value = "/{deptId}") | |
| 76 | - public AjaxResult getInfo(@PathVariable Long deptId) | |
| 77 | - { | |
| 78 | - return AjaxResult.success(deptService.selectDeptById(deptId)); | |
| 79 | - } | |
| 80 | - | |
| 81 | - /** | |
| 82 | - * 获取部门下拉树列表 | |
| 83 | - */ | |
| 84 | - @GetMapping("/treeselect") | |
| 85 | - public AjaxResult treeselect(SysDept dept) | |
| 86 | - { | |
| 87 | - List<SysDept> depts = deptService.selectDeptList(dept); | |
| 88 | - return AjaxResult.success(deptService.buildDeptTreeSelect(depts)); | |
| 89 | - } | |
| 90 | - | |
| 91 | - /** | |
| 92 | - * 加载对应角色部门列表树 | |
| 93 | - */ | |
| 94 | - @GetMapping(value = "/roleDeptTreeselect/{roleId}") | |
| 95 | - public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId) | |
| 96 | - { | |
| 97 | - List<SysDept> depts = deptService.selectDeptList(new SysDept()); | |
| 98 | - AjaxResult ajax = AjaxResult.success(); | |
| 99 | - ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); | |
| 100 | - ajax.put("depts", deptService.buildDeptTreeSelect(depts)); | |
| 101 | - return ajax; | |
| 102 | - } | |
| 103 | - | |
| 104 | - /** | |
| 105 | - * 新增部门 | |
| 106 | - */ | |
| 107 | - @PreAuthorize("@ss.hasPermi('system:dept:add')") | |
| 108 | - @Log(title = "部门管理", businessType = BusinessType.INSERT) | |
| 109 | - @PostMapping | |
| 110 | - public AjaxResult add(@Validated @RequestBody SysDept dept) | |
| 111 | - { | |
| 112 | - if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) | |
| 113 | - { | |
| 114 | - return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在"); | |
| 115 | - } | |
| 116 | - dept.setCreateBy(SecurityUtils.getUsername()); | |
| 117 | - return toAjax(deptService.insertDept(dept)); | |
| 118 | - } | |
| 119 | - | |
| 120 | - /** | |
| 121 | - * 修改部门 | |
| 122 | - */ | |
| 123 | - @PreAuthorize("@ss.hasPermi('system:dept:edit')") | |
| 124 | - @Log(title = "部门管理", businessType = BusinessType.UPDATE) | |
| 125 | - @PutMapping | |
| 126 | - public AjaxResult edit(@Validated @RequestBody SysDept dept) | |
| 127 | - { | |
| 128 | - if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) | |
| 129 | - { | |
| 130 | - return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); | |
| 131 | - } | |
| 132 | - else if (dept.getParentId().equals(dept.getDeptId())) | |
| 133 | - { | |
| 134 | - return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); | |
| 135 | - } | |
| 136 | - else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) | |
| 137 | - && deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0) | |
| 138 | - { | |
| 139 | - return AjaxResult.error("该部门包含未停用的子部门!"); | |
| 140 | - } | |
| 141 | - dept.setUpdateBy(SecurityUtils.getUsername()); | |
| 142 | - return toAjax(deptService.updateDept(dept)); | |
| 143 | - } | |
| 144 | - | |
| 145 | - /** | |
| 146 | - * 删除部门 | |
| 147 | - */ | |
| 148 | - @PreAuthorize("@ss.hasPermi('system:dept:remove')") | |
| 149 | - @Log(title = "部门管理", businessType = BusinessType.DELETE) | |
| 150 | - @DeleteMapping("/{deptId}") | |
| 151 | - public AjaxResult remove(@PathVariable Long deptId) | |
| 152 | - { | |
| 153 | - if (deptService.hasChildByDeptId(deptId)) | |
| 154 | - { | |
| 155 | - return AjaxResult.error("存在下级部门,不允许删除"); | |
| 156 | - } | |
| 157 | - if (deptService.checkDeptExistUser(deptId)) | |
| 158 | - { | |
| 159 | - return AjaxResult.error("部门存在用户,不允许删除"); | |
| 160 | - } | |
| 161 | - return toAjax(deptService.deleteDeptById(deptId)); | |
| 162 | - } | |
| 163 | -} |
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java deleted
| 1 | -package com.ruoyi.common.core.domain; | |
| 2 | - | |
| 3 | -import java.util.ArrayList; | |
| 4 | -import java.util.List; | |
| 5 | - | |
| 6 | -/** | |
| 7 | - * Tree基类 | |
| 8 | - * | |
| 9 | - * @author ruoyi | |
| 10 | - */ | |
| 11 | -public class TreeEntity extends BaseEntity | |
| 12 | -{ | |
| 13 | - private static final long serialVersionUID = 1L; | |
| 14 | - | |
| 15 | - /** 父菜单名称 */ | |
| 16 | - private String parentName; | |
| 17 | - | |
| 18 | - /** 父菜单ID */ | |
| 19 | - private Long parentId; | |
| 20 | - | |
| 21 | - /** 显示顺序 */ | |
| 22 | - private Integer orderNum; | |
| 23 | - | |
| 24 | - /** 祖级列表 */ | |
| 25 | - private String ancestors; | |
| 26 | - | |
| 27 | - /** 子部门 */ | |
| 28 | - private List<?> children = new ArrayList<>(); | |
| 29 | - | |
| 30 | -} |
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java deleted
| 1 | -package com.ruoyi.common.core.domain; | |
| 2 | - | |
| 3 | -import java.io.Serializable; | |
| 4 | -import java.util.List; | |
| 5 | -import java.util.stream.Collectors; | |
| 6 | -import com.fasterxml.jackson.annotation.JsonInclude; | |
| 7 | -import com.ruoyi.common.core.domain.entity.SysDept; | |
| 8 | -import com.ruoyi.common.core.domain.entity.SysMenu; | |
| 9 | - | |
| 10 | -/** | |
| 11 | - * Treeselect树结构实体类 | |
| 12 | - * | |
| 13 | - * @author ruoyi | |
| 14 | - */ | |
| 15 | -public class TreeSelect implements Serializable { | |
| 16 | - /** 节点ID */ | |
| 17 | - private Long id; | |
| 18 | - | |
| 19 | - /** 节点名称 */ | |
| 20 | - private String label; | |
| 21 | - | |
| 22 | - /** 子节点 */ | |
| 23 | - @JsonInclude(JsonInclude.Include.NON_EMPTY) | |
| 24 | - private List<TreeSelect> children; | |
| 25 | - | |
| 26 | -} |
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java deleted
| 1 | -package com.ruoyi.common.core.domain.entity; | |
| 2 | - | |
| 3 | -import java.util.ArrayList; | |
| 4 | -import java.util.List; | |
| 5 | -import javax.validation.constraints.Email; | |
| 6 | -import javax.validation.constraints.NotBlank; | |
| 7 | -import javax.validation.constraints.Size; | |
| 8 | -import org.apache.commons.lang3.builder.ToStringBuilder; | |
| 9 | -import org.apache.commons.lang3.builder.ToStringStyle; | |
| 10 | -import com.ruoyi.common.core.domain.BaseEntity; | |
| 11 | - | |
| 12 | -/** | |
| 13 | - * 部门表 sys_dept | |
| 14 | - * | |
| 15 | - * @author ruoyi | |
| 16 | - */ | |
| 17 | -public class SysDept extends BaseEntity | |
| 18 | -{ | |
| 19 | - private static final long serialVersionUID = 1L; | |
| 20 | - | |
| 21 | - /** 部门ID */ | |
| 22 | - private Long deptId; | |
| 23 | - | |
| 24 | - /** 父部门ID */ | |
| 25 | - private Long parentId; | |
| 26 | - | |
| 27 | - /** 祖级列表 */ | |
| 28 | - private String ancestors; | |
| 29 | - | |
| 30 | - /** 部门名称 */ | |
| 31 | - private String deptName; | |
| 32 | - | |
| 33 | - /** 显示顺序 */ | |
| 34 | - private String orderNum; | |
| 35 | - | |
| 36 | - /** 负责人 */ | |
| 37 | - private String leader; | |
| 38 | - | |
| 39 | - /** 联系电话 */ | |
| 40 | - private String phone; | |
| 41 | - | |
| 42 | - /** 邮箱 */ | |
| 43 | - private String email; | |
| 44 | - | |
| 45 | - /** 部门状态:0正常,1停用 */ | |
| 46 | - private String status; | |
| 47 | - | |
| 48 | - /** 删除标志(0代表存在 2代表删除) */ | |
| 49 | - private String delFlag; | |
| 50 | - | |
| 51 | - /** 父部门名称 */ | |
| 52 | - private String parentName; | |
| 53 | - | |
| 54 | - /** 子部门 */ | |
| 55 | - private List<SysDept> children = new ArrayList<SysDept>(); | |
| 56 | - | |
| 57 | - | |
| 58 | - @NotBlank(message = "部门名称不能为空") | |
| 59 | - @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") | |
| 60 | - public String getDeptName() | |
| 61 | - { | |
| 62 | - return deptName; | |
| 63 | - } | |
| 64 | - | |
| 65 | - @NotBlank(message = "显示顺序不能为空") | |
| 66 | - public String getOrderNum() | |
| 67 | - { | |
| 68 | - return orderNum; | |
| 69 | - } | |
| 70 | - | |
| 71 | - @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符") | |
| 72 | - public String getPhone() | |
| 73 | - { | |
| 74 | - return phone; | |
| 75 | - } | |
| 76 | - | |
| 77 | - @Email(message = "邮箱格式不正确") | |
| 78 | - @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") | |
| 79 | - public String getEmail() | |
| 80 | - { | |
| 81 | - return email; | |
| 82 | - } | |
| 83 | - | |
| 84 | -} |
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java deleted
| 1 | -package com.ruoyi.system.service; | |
| 2 | - | |
| 3 | -import java.util.List; | |
| 4 | -import com.ruoyi.common.core.domain.TreeSelect; | |
| 5 | -import com.ruoyi.common.core.domain.entity.SysDept; | |
| 6 | - | |
| 7 | -/** | |
| 8 | - * 部门管理 服务层 | |
| 9 | - * | |
| 10 | - * @author ruoyi | |
| 11 | - */ | |
| 12 | -public interface ISysDeptService | |
| 13 | -{ | |
| 14 | - /** | |
| 15 | - * 查询部门管理数据 | |
| 16 | - * | |
| 17 | - * @param dept 部门信息 | |
| 18 | - * @return 部门信息集合 | |
| 19 | - */ | |
| 20 | - public List<SysDept> selectDeptList(SysDept dept); | |
| 21 | - | |
| 22 | - /** | |
| 23 | - * 构建前端所需要树结构 | |
| 24 | - * | |
| 25 | - * @param depts 部门列表 | |
| 26 | - * @return 树结构列表 | |
| 27 | - */ | |
| 28 | - public List<SysDept> buildDeptTree(List<SysDept> depts); | |
| 29 | - | |
| 30 | - /** | |
| 31 | - * 构建前端所需要下拉树结构 | |
| 32 | - * | |
| 33 | - * @param depts 部门列表 | |
| 34 | - * @return 下拉树结构列表 | |
| 35 | - */ | |
| 36 | - public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts); | |
| 37 | - | |
| 38 | - /** | |
| 39 | - * 根据角色ID查询部门树信息 | |
| 40 | - * | |
| 41 | - * @param roleId 角色ID | |
| 42 | - * @return 选中部门列表 | |
| 43 | - */ | |
| 44 | - public List<Integer> selectDeptListByRoleId(Long roleId); | |
| 45 | - | |
| 46 | - /** | |
| 47 | - * 根据部门ID查询信息 | |
| 48 | - * | |
| 49 | - * @param deptId 部门ID | |
| 50 | - * @return 部门信息 | |
| 51 | - */ | |
| 52 | - public SysDept selectDeptById(Long deptId); | |
| 53 | - | |
| 54 | - /** | |
| 55 | - * 根据ID查询所有子部门(正常状态) | |
| 56 | - * | |
| 57 | - * @param deptId 部门ID | |
| 58 | - * @return 子部门数 | |
| 59 | - */ | |
| 60 | - public int selectNormalChildrenDeptById(Long deptId); | |
| 61 | - | |
| 62 | - /** | |
| 63 | - * 是否存在部门子节点 | |
| 64 | - * | |
| 65 | - * @param deptId 部门ID | |
| 66 | - * @return 结果 | |
| 67 | - */ | |
| 68 | - public boolean hasChildByDeptId(Long deptId); | |
| 69 | - | |
| 70 | - /** | |
| 71 | - * 查询部门是否存在用户 | |
| 72 | - * | |
| 73 | - * @param deptId 部门ID | |
| 74 | - * @return 结果 true 存在 false 不存在 | |
| 75 | - */ | |
| 76 | - public boolean checkDeptExistUser(Long deptId); | |
| 77 | - | |
| 78 | - /** | |
| 79 | - * 校验部门名称是否唯一 | |
| 80 | - * | |
| 81 | - * @param dept 部门信息 | |
| 82 | - * @return 结果 | |
| 83 | - */ | |
| 84 | - public String checkDeptNameUnique(SysDept dept); | |
| 85 | - | |
| 86 | - /** | |
| 87 | - * 新增保存部门信息 | |
| 88 | - * | |
| 89 | - * @param dept 部门信息 | |
| 90 | - * @return 结果 | |
| 91 | - */ | |
| 92 | - public int insertDept(SysDept dept); | |
| 93 | - | |
| 94 | - /** | |
| 95 | - * 修改保存部门信息 | |
| 96 | - * | |
| 97 | - * @param dept 部门信息 | |
| 98 | - * @return 结果 | |
| 99 | - */ | |
| 100 | - public int updateDept(SysDept dept); | |
| 101 | - | |
| 102 | - /** | |
| 103 | - * 删除部门管理信息 | |
| 104 | - * | |
| 105 | - * @param deptId 部门ID | |
| 106 | - * @return 结果 | |
| 107 | - */ | |
| 108 | - public int deleteDeptById(Long deptId); | |
| 109 | -} |
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java deleted
| 1 | -package com.ruoyi.system.service.impl; | |
| 2 | - | |
| 3 | -import java.util.ArrayList; | |
| 4 | -import java.util.Iterator; | |
| 5 | -import java.util.List; | |
| 6 | -import java.util.stream.Collectors; | |
| 7 | -import org.springframework.beans.factory.annotation.Autowired; | |
| 8 | -import org.springframework.stereotype.Service; | |
| 9 | -import com.ruoyi.common.annotation.DataScope; | |
| 10 | -import com.ruoyi.common.constant.UserConstants; | |
| 11 | -import com.ruoyi.common.core.domain.TreeSelect; | |
| 12 | -import com.ruoyi.common.core.domain.entity.SysDept; | |
| 13 | -import com.ruoyi.common.core.domain.entity.SysRole; | |
| 14 | -import com.ruoyi.common.exception.CustomException; | |
| 15 | -import com.ruoyi.common.utils.StringUtils; | |
| 16 | -import com.ruoyi.system.mapper.SysDeptMapper; | |
| 17 | -import com.ruoyi.system.mapper.SysRoleMapper; | |
| 18 | -import com.ruoyi.system.service.ISysDeptService; | |
| 19 | - | |
| 20 | -/** | |
| 21 | - * 部门管理 服务实现 | |
| 22 | - * | |
| 23 | - * @author ruoyi | |
| 24 | - */ | |
| 25 | -@Service | |
| 26 | -public class SysDeptServiceImpl implements ISysDeptService | |
| 27 | -{ | |
| 28 | - @Autowired | |
| 29 | - private SysDeptMapper deptMapper; | |
| 30 | - | |
| 31 | - @Autowired | |
| 32 | - private SysRoleMapper roleMapper; | |
| 33 | - | |
| 34 | - /** | |
| 35 | - * 查询部门管理数据 | |
| 36 | - * | |
| 37 | - * @param dept 部门信息 | |
| 38 | - * @return 部门信息集合 | |
| 39 | - */ | |
| 40 | - @Override | |
| 41 | - @DataScope(deptAlias = "d") | |
| 42 | - public List<SysDept> selectDeptList(SysDept dept) | |
| 43 | - { | |
| 44 | - return deptMapper.selectDeptList(dept); | |
| 45 | - } | |
| 46 | - | |
| 47 | - /** | |
| 48 | - * 构建前端所需要树结构 | |
| 49 | - * | |
| 50 | - * @param depts 部门列表 | |
| 51 | - * @return 树结构列表 | |
| 52 | - */ | |
| 53 | - @Override | |
| 54 | - public List<SysDept> buildDeptTree(List<SysDept> depts) | |
| 55 | - { | |
| 56 | - List<SysDept> returnList = new ArrayList<SysDept>(); | |
| 57 | - List<Long> tempList = new ArrayList<Long>(); | |
| 58 | - for (SysDept dept : depts) | |
| 59 | - { | |
| 60 | - tempList.add(dept.getDeptId()); | |
| 61 | - } | |
| 62 | - for (Iterator<SysDept> iterator = depts.iterator(); iterator.hasNext();) | |
| 63 | - { | |
| 64 | - SysDept dept = (SysDept) iterator.next(); | |
| 65 | - // 如果是顶级节点, 遍历该父节点的所有子节点 | |
| 66 | - if (!tempList.contains(dept.getParentId())) | |
| 67 | - { | |
| 68 | - recursionFn(depts, dept); | |
| 69 | - returnList.add(dept); | |
| 70 | - } | |
| 71 | - } | |
| 72 | - if (returnList.isEmpty()) | |
| 73 | - { | |
| 74 | - returnList = depts; | |
| 75 | - } | |
| 76 | - return returnList; | |
| 77 | - } | |
| 78 | - | |
| 79 | - /** | |
| 80 | - * 构建前端所需要下拉树结构 | |
| 81 | - * | |
| 82 | - * @param depts 部门列表 | |
| 83 | - * @return 下拉树结构列表 | |
| 84 | - */ | |
| 85 | - @Override | |
| 86 | - public List<TreeSelect> buildDeptTreeSelect(List<SysDept> depts) | |
| 87 | - { | |
| 88 | - List<SysDept> deptTrees = buildDeptTree(depts); | |
| 89 | - return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); | |
| 90 | - } | |
| 91 | - | |
| 92 | - /** | |
| 93 | - * 根据角色ID查询部门树信息 | |
| 94 | - * | |
| 95 | - * @param roleId 角色ID | |
| 96 | - * @return 选中部门列表 | |
| 97 | - */ | |
| 98 | - @Override | |
| 99 | - public List<Integer> selectDeptListByRoleId(Long roleId) | |
| 100 | - { | |
| 101 | - SysRole role = roleMapper.selectRoleById(roleId); | |
| 102 | - return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly()); | |
| 103 | - } | |
| 104 | - | |
| 105 | - /** | |
| 106 | - * 根据部门ID查询信息 | |
| 107 | - * | |
| 108 | - * @param deptId 部门ID | |
| 109 | - * @return 部门信息 | |
| 110 | - */ | |
| 111 | - @Override | |
| 112 | - public SysDept selectDeptById(Long deptId) | |
| 113 | - { | |
| 114 | - return deptMapper.selectDeptById(deptId); | |
| 115 | - } | |
| 116 | - | |
| 117 | - /** | |
| 118 | - * 根据ID查询所有子部门(正常状态) | |
| 119 | - * | |
| 120 | - * @param deptId 部门ID | |
| 121 | - * @return 子部门数 | |
| 122 | - */ | |
| 123 | - @Override | |
| 124 | - public int selectNormalChildrenDeptById(Long deptId) | |
| 125 | - { | |
| 126 | - return deptMapper.selectNormalChildrenDeptById(deptId); | |
| 127 | - } | |
| 128 | - | |
| 129 | - /** | |
| 130 | - * 是否存在子节点 | |
| 131 | - * | |
| 132 | - * @param deptId 部门ID | |
| 133 | - * @return 结果 | |
| 134 | - */ | |
| 135 | - @Override | |
| 136 | - public boolean hasChildByDeptId(Long deptId) | |
| 137 | - { | |
| 138 | - int result = deptMapper.hasChildByDeptId(deptId); | |
| 139 | - return result > 0 ? true : false; | |
| 140 | - } | |
| 141 | - | |
| 142 | - /** | |
| 143 | - * 查询部门是否存在用户 | |
| 144 | - * | |
| 145 | - * @param deptId 部门ID | |
| 146 | - * @return 结果 true 存在 false 不存在 | |
| 147 | - */ | |
| 148 | - @Override | |
| 149 | - public boolean checkDeptExistUser(Long deptId) | |
| 150 | - { | |
| 151 | - int result = deptMapper.checkDeptExistUser(deptId); | |
| 152 | - return result > 0 ? true : false; | |
| 153 | - } | |
| 154 | - | |
| 155 | - /** | |
| 156 | - * 校验部门名称是否唯一 | |
| 157 | - * | |
| 158 | - * @param dept 部门信息 | |
| 159 | - * @return 结果 | |
| 160 | - */ | |
| 161 | - @Override | |
| 162 | - public String checkDeptNameUnique(SysDept dept) | |
| 163 | - { | |
| 164 | - Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); | |
| 165 | - SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId()); | |
| 166 | - if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) | |
| 167 | - { | |
| 168 | - return UserConstants.NOT_UNIQUE; | |
| 169 | - } | |
| 170 | - return UserConstants.UNIQUE; | |
| 171 | - } | |
| 172 | - | |
| 173 | - /** | |
| 174 | - * 新增保存部门信息 | |
| 175 | - * | |
| 176 | - * @param dept 部门信息 | |
| 177 | - * @return 结果 | |
| 178 | - */ | |
| 179 | - @Override | |
| 180 | - public int insertDept(SysDept dept) | |
| 181 | - { | |
| 182 | - SysDept info = deptMapper.selectDeptById(dept.getParentId()); | |
| 183 | - // 如果父节点不为正常状态,则不允许新增子节点 | |
| 184 | - if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) | |
| 185 | - { | |
| 186 | - throw new CustomException("部门停用,不允许新增"); | |
| 187 | - } | |
| 188 | - dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); | |
| 189 | - return deptMapper.insertDept(dept); | |
| 190 | - } | |
| 191 | - | |
| 192 | - /** | |
| 193 | - * 修改保存部门信息 | |
| 194 | - * | |
| 195 | - * @param dept 部门信息 | |
| 196 | - * @return 结果 | |
| 197 | - */ | |
| 198 | - @Override | |
| 199 | - public int updateDept(SysDept dept) | |
| 200 | - { | |
| 201 | - SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId()); | |
| 202 | - SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId()); | |
| 203 | - if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) | |
| 204 | - { | |
| 205 | - String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); | |
| 206 | - String oldAncestors = oldDept.getAncestors(); | |
| 207 | - dept.setAncestors(newAncestors); | |
| 208 | - updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); | |
| 209 | - } | |
| 210 | - int result = deptMapper.updateDept(dept); | |
| 211 | - if (UserConstants.DEPT_NORMAL.equals(dept.getStatus())) | |
| 212 | - { | |
| 213 | - // 如果该部门是启用状态,则启用该部门的所有上级部门 | |
| 214 | - updateParentDeptStatus(dept); | |
| 215 | - } | |
| 216 | - return result; | |
| 217 | - } | |
| 218 | - | |
| 219 | - /** | |
| 220 | - * 修改该部门的父级部门状态 | |
| 221 | - * | |
| 222 | - * @param dept 当前部门 | |
| 223 | - */ | |
| 224 | - private void updateParentDeptStatus(SysDept dept) | |
| 225 | - { | |
| 226 | - String updateBy = dept.getUpdateBy(); | |
| 227 | - dept = deptMapper.selectDeptById(dept.getDeptId()); | |
| 228 | - dept.setUpdateBy(updateBy); | |
| 229 | - deptMapper.updateDeptStatus(dept); | |
| 230 | - } | |
| 231 | - | |
| 232 | - /** | |
| 233 | - * 修改子元素关系 | |
| 234 | - * | |
| 235 | - * @param deptId 被修改的部门ID | |
| 236 | - * @param newAncestors 新的父ID集合 | |
| 237 | - * @param oldAncestors 旧的父ID集合 | |
| 238 | - */ | |
| 239 | - public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) | |
| 240 | - { | |
| 241 | - List<SysDept> children = deptMapper.selectChildrenDeptById(deptId); | |
| 242 | - for (SysDept child : children) | |
| 243 | - { | |
| 244 | - child.setAncestors(child.getAncestors().replace(oldAncestors, newAncestors)); | |
| 245 | - } | |
| 246 | - if (children.size() > 0) | |
| 247 | - { | |
| 248 | - deptMapper.updateDeptChildren(children); | |
| 249 | - } | |
| 250 | - } | |
| 251 | - | |
| 252 | - /** | |
| 253 | - * 删除部门管理信息 | |
| 254 | - * | |
| 255 | - * @param deptId 部门ID | |
| 256 | - * @return 结果 | |
| 257 | - */ | |
| 258 | - @Override | |
| 259 | - public int deleteDeptById(Long deptId) | |
| 260 | - { | |
| 261 | - return deptMapper.deleteDeptById(deptId); | |
| 262 | - } | |
| 263 | - | |
| 264 | - /** | |
| 265 | - * 递归列表 | |
| 266 | - */ | |
| 267 | - private void recursionFn(List<SysDept> list, SysDept t) | |
| 268 | - { | |
| 269 | - // 得到子节点列表 | |
| 270 | - List<SysDept> childList = getChildList(list, t); | |
| 271 | - t.setChildren(childList); | |
| 272 | - for (SysDept tChild : childList) | |
| 273 | - { | |
| 274 | - if (hasChild(list, tChild)) | |
| 275 | - { | |
| 276 | - recursionFn(list, tChild); | |
| 277 | - } | |
| 278 | - } | |
| 279 | - } | |
| 280 | - | |
| 281 | - /** | |
| 282 | - * 得到子节点列表 | |
| 283 | - */ | |
| 284 | - private List<SysDept> getChildList(List<SysDept> list, SysDept t) | |
| 285 | - { | |
| 286 | - List<SysDept> tlist = new ArrayList<SysDept>(); | |
| 287 | - Iterator<SysDept> it = list.iterator(); | |
| 288 | - while (it.hasNext()) | |
| 289 | - { | |
| 290 | - SysDept n = (SysDept) it.next(); | |
| 291 | - if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) | |
| 292 | - { | |
| 293 | - tlist.add(n); | |
| 294 | - } | |
| 295 | - } | |
| 296 | - return tlist; | |
| 297 | - } | |
| 298 | - | |
| 299 | - /** | |
| 300 | - * 判断是否有子节点 | |
| 301 | - */ | |
| 302 | - private boolean hasChild(List<SysDept> list, SysDept t) | |
| 303 | - { | |
| 304 | - return getChildList(list, t).size() > 0 ? true : false; | |
| 305 | - } | |
| 306 | -} |
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java deleted
| 1 | -package com.ruoyi.system.service.impl; | |
| 2 | - | |
| 3 | -import java.util.ArrayList; | |
| 4 | -import java.util.Arrays; | |
| 5 | -import java.util.HashSet; | |
| 6 | -import java.util.List; | |
| 7 | -import java.util.Set; | |
| 8 | - | |
| 9 | -import org.springframework.beans.factory.annotation.Autowired; | |
| 10 | -import org.springframework.stereotype.Service; | |
| 11 | -import org.springframework.transaction.annotation.Transactional; | |
| 12 | -import com.ruoyi.common.annotation.DataScope; | |
| 13 | -import com.ruoyi.common.constant.UserConstants; | |
| 14 | -import com.ruoyi.common.core.domain.entity.SysRole; | |
| 15 | -import com.ruoyi.common.exception.CustomException; | |
| 16 | -import com.ruoyi.common.utils.StringUtils; | |
| 17 | -import com.ruoyi.common.utils.spring.SpringUtils; | |
| 18 | -import com.ruoyi.system.domain.SysRoleDept; | |
| 19 | -import com.ruoyi.system.domain.SysRoleMenu; | |
| 20 | -import com.ruoyi.system.mapper.SysRoleDeptMapper; | |
| 21 | -import com.ruoyi.system.mapper.SysRoleMapper; | |
| 22 | -import com.ruoyi.system.mapper.SysRoleMenuMapper; | |
| 23 | -import com.ruoyi.system.mapper.SysUserRoleMapper; | |
| 24 | -import com.ruoyi.system.service.ISysRoleService; | |
| 25 | - | |
| 26 | -/** | |
| 27 | - * 角色 业务层处理 | |
| 28 | - * | |
| 29 | - * @author ruoyi | |
| 30 | - */ | |
| 31 | -@Service | |
| 32 | -public class SysRoleServiceImpl implements ISysRoleService { | |
| 33 | - | |
| 34 | - /** | |
| 35 | - * 根据条件分页查询角色数据 | |
| 36 | - * | |
| 37 | - * @param role 角色信息 | |
| 38 | - * @return 角色数据集合信息 | |
| 39 | - */ | |
| 40 | - @Override | |
| 41 | - @DataScope(deptAlias = "d") | |
| 42 | - public List<SysRole> selectRoleList(SysRole role) { | |
| 43 | - return roleMapper.selectRoleList(role); | |
| 44 | - } | |
| 45 | - | |
| 46 | - /** | |
| 47 | - * 修改数据权限信息 | |
| 48 | - * | |
| 49 | - * @param role 角色信息 | |
| 50 | - * @return 结果 | |
| 51 | - */ | |
| 52 | - @Override | |
| 53 | - @Transactional | |
| 54 | - public int authDataScope(SysRole role) { | |
| 55 | - // 修改角色信息 | |
| 56 | - roleMapper.updateRole(role); | |
| 57 | - // 删除角色与部门关联 | |
| 58 | - roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); | |
| 59 | - // 新增角色和部门信息(数据权限) | |
| 60 | - return insertRoleDept(role); | |
| 61 | - } | |
| 62 | - | |
| 63 | - /** | |
| 64 | - * 批量删除角色信息 | |
| 65 | - * | |
| 66 | - * @param roleIds 需要删除的角色ID | |
| 67 | - * @return 结果 | |
| 68 | - */ | |
| 69 | - @Override | |
| 70 | - @Transactional | |
| 71 | - public int deleteRoleByIds(Long[] roleIds) { | |
| 72 | - for (Long roleId : roleIds) { | |
| 73 | - checkRoleAllowed(new SysRole(roleId)); | |
| 74 | - SysRole role = selectRoleById(roleId); | |
| 75 | - if (countUserRoleByRoleId(roleId) > 0) { | |
| 76 | - throw new CustomException(String.format("%1$s已分配,不能删除", role.getRoleName())); | |
| 77 | - } | |
| 78 | - } | |
| 79 | - // 删除角色与菜单关联 | |
| 80 | - roleMenuMapper.deleteRoleMenu(roleIds); | |
| 81 | - // 删除角色与部门关联 | |
| 82 | - roleDeptMapper.deleteRoleDept(roleIds); | |
| 83 | - return roleMapper.deleteRoleByIds(roleIds); | |
| 84 | - } | |
| 85 | -} |
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java deleted
| 1 | -package com.ruoyi.system.service.impl; | |
| 2 | - | |
| 3 | -import java.util.ArrayList; | |
| 4 | -import java.util.List; | |
| 5 | - | |
| 6 | -import org.slf4j.Logger; | |
| 7 | -import org.slf4j.LoggerFactory; | |
| 8 | -import org.springframework.beans.factory.annotation.Autowired; | |
| 9 | -import org.springframework.stereotype.Service; | |
| 10 | -import org.springframework.transaction.annotation.Transactional; | |
| 11 | -import com.ruoyi.common.annotation.DataScope; | |
| 12 | -import com.ruoyi.common.constant.UserConstants; | |
| 13 | -import com.ruoyi.common.core.domain.entity.SysRole; | |
| 14 | -import com.ruoyi.common.core.domain.entity.SysUser; | |
| 15 | -import com.ruoyi.common.exception.CustomException; | |
| 16 | -import com.ruoyi.common.utils.SecurityUtils; | |
| 17 | -import com.ruoyi.common.utils.StringUtils; | |
| 18 | -import com.ruoyi.system.domain.SysPost; | |
| 19 | -import com.ruoyi.system.domain.SysUserPost; | |
| 20 | -import com.ruoyi.system.domain.SysUserRole; | |
| 21 | -import com.ruoyi.system.mapper.SysPostMapper; | |
| 22 | -import com.ruoyi.system.mapper.SysRoleMapper; | |
| 23 | -import com.ruoyi.system.mapper.SysUserMapper; | |
| 24 | -import com.ruoyi.system.mapper.SysUserPostMapper; | |
| 25 | -import com.ruoyi.system.mapper.SysUserRoleMapper; | |
| 26 | -import com.ruoyi.system.service.ISysConfigService; | |
| 27 | -import com.ruoyi.system.service.ISysUserService; | |
| 28 | - | |
| 29 | -/** | |
| 30 | - * 用户 业务层处理 | |
| 31 | - * | |
| 32 | - * @author ruoyi | |
| 33 | - */ | |
| 34 | -@Service | |
| 35 | -public class SysUserServiceImpl implements ISysUserService { | |
| 36 | - | |
| 37 | - /** | |
| 38 | - * 根据条件分页查询用户列表 | |
| 39 | - * | |
| 40 | - * @param user 用户信息 | |
| 41 | - * @return 用户信息集合信息 | |
| 42 | - */ | |
| 43 | - @Override | |
| 44 | - @DataScope(deptAlias = "d", userAlias = "u") | |
| 45 | - public List<SysUser> selectUserList(SysUser user) { | |
| 46 | - return userMapper.selectUserList(user); | |
| 47 | - } | |
| 48 | - | |
| 49 | - /** | |
| 50 | - * 查询用户所属角色组 | |
| 51 | - * | |
| 52 | - * @param userName 用户名 | |
| 53 | - * @return 结果 | |
| 54 | - */ | |
| 55 | - @Override | |
| 56 | - public String selectUserRoleGroup(String userName) { | |
| 57 | - List<SysRole> list = roleMapper.selectRolesByUserName(userName); | |
| 58 | - StringBuffer idsStr = new StringBuffer(); | |
| 59 | - for (SysRole role : list) { | |
| 60 | - idsStr.append(role.getRoleName()).append(","); | |
| 61 | - } | |
| 62 | - if (StringUtils.isNotEmpty(idsStr.toString())) { | |
| 63 | - return idsStr.substring(0, idsStr.length() - 1); | |
| 64 | - } | |
| 65 | - return idsStr.toString(); | |
| 66 | - } | |
| 67 | - | |
| 68 | - /** | |
| 69 | - * 查询用户所属岗位组 | |
| 70 | - * | |
| 71 | - * @param userName 用户名 | |
| 72 | - * @return 结果 | |
| 73 | - */ | |
| 74 | - @Override | |
| 75 | - public String selectUserPostGroup(String userName) { | |
| 76 | - List<SysPost> list = postMapper.selectPostsByUserName(userName); | |
| 77 | - StringBuffer idsStr = new StringBuffer(); | |
| 78 | - for (SysPost post : list) { | |
| 79 | - idsStr.append(post.getPostName()).append(","); | |
| 80 | - } | |
| 81 | - if (StringUtils.isNotEmpty(idsStr.toString())) { | |
| 82 | - return idsStr.substring(0, idsStr.length() - 1); | |
| 83 | - } | |
| 84 | - return idsStr.toString(); | |
| 85 | - } | |
| 86 | - | |
| 87 | - /** | |
| 88 | - * 校验email是否唯一 | |
| 89 | - * | |
| 90 | - * @param user 用户信息 | |
| 91 | - * @return | |
| 92 | - */ | |
| 93 | - @Override | |
| 94 | - public String checkEmailUnique(SysUser user) { | |
| 95 | - Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); | |
| 96 | - SysUser info = userMapper.checkEmailUnique(user.getEmail()); | |
| 97 | - if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { | |
| 98 | - return UserConstants.NOT_UNIQUE; | |
| 99 | - } | |
| 100 | - return UserConstants.UNIQUE; | |
| 101 | - } | |
| 102 | - | |
| 103 | - /** | |
| 104 | - * 校验用户是否允许操作 | |
| 105 | - * | |
| 106 | - * @param user 用户信息 | |
| 107 | - */ | |
| 108 | - @Override | |
| 109 | - public void checkUserAllowed(SysUser user) { | |
| 110 | - if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) { | |
| 111 | - throw new CustomException("不允许操作超级管理员用户"); | |
| 112 | - } | |
| 113 | - } | |
| 114 | - | |
| 115 | - /** | |
| 116 | - * 新增保存用户信息 | |
| 117 | - * | |
| 118 | - * @param user 用户信息 | |
| 119 | - * @return 结果 | |
| 120 | - */ | |
| 121 | - @Override | |
| 122 | - @Transactional | |
| 123 | - public int insertUser(SysUser user) { | |
| 124 | - // 新增用户信息 | |
| 125 | - int rows = userMapper.insertUser(user); | |
| 126 | - // 新增用户岗位关联 | |
| 127 | - insertUserPost(user); | |
| 128 | - // 新增用户与角色管理 | |
| 129 | - insertUserRole(user); | |
| 130 | - return rows; | |
| 131 | - } | |
| 132 | - | |
| 133 | - /** | |
| 134 | - * 修改保存用户信息 | |
| 135 | - * | |
| 136 | - * @param user 用户信息 | |
| 137 | - * @return 结果 | |
| 138 | - */ | |
| 139 | - @Override | |
| 140 | - @Transactional | |
| 141 | - public int updateUser(SysUser user) { | |
| 142 | - Long userId = user.getUserId(); | |
| 143 | - // 删除用户与角色关联 | |
| 144 | - userRoleMapper.deleteUserRoleByUserId(userId); | |
| 145 | - // 新增用户与角色管理 | |
| 146 | - insertUserRole(user); | |
| 147 | - // 删除用户与岗位关联 | |
| 148 | - userPostMapper.deleteUserPostByUserId(userId); | |
| 149 | - // 新增用户与岗位管理 | |
| 150 | - insertUserPost(user); | |
| 151 | - return userMapper.updateUser(user); | |
| 152 | - } | |
| 153 | - | |
| 154 | - /** | |
| 155 | - * 修改用户基本信息 | |
| 156 | - * | |
| 157 | - * @param user 用户信息 | |
| 158 | - * @return 结果 | |
| 159 | - */ | |
| 160 | - @Override | |
| 161 | - public int updateUserProfile(SysUser user) { | |
| 162 | - return userMapper.updateUser(user); | |
| 163 | - } | |
| 164 | - | |
| 165 | - /** | |
| 166 | - * 修改用户头像 | |
| 167 | - * | |
| 168 | - * @param userName 用户名 | |
| 169 | - * @param avatar 头像地址 | |
| 170 | - * @return 结果 | |
| 171 | - */ | |
| 172 | - @Override | |
| 173 | - public boolean updateUserAvatar(String userName, String avatar) { | |
| 174 | - return userMapper.updateUserAvatar(userName, avatar) > 0; | |
| 175 | - } | |
| 176 | - | |
| 177 | - /** | |
| 178 | - * 重置用户密码 | |
| 179 | - * | |
| 180 | - * @param user 用户信息 | |
| 181 | - * @return 结果 | |
| 182 | - */ | |
| 183 | - @Override | |
| 184 | - public int resetPwd(SysUser user) { | |
| 185 | - return userMapper.updateUser(user); | |
| 186 | - } | |
| 187 | - | |
| 188 | - /** | |
| 189 | - * 重置用户密码 | |
| 190 | - * | |
| 191 | - * @param userName 用户名 | |
| 192 | - * @param password 密码 | |
| 193 | - * @return 结果 | |
| 194 | - */ | |
| 195 | - @Override | |
| 196 | - public int resetUserPwd(String userName, String password) { | |
| 197 | - return userMapper.resetUserPwd(userName, password); | |
| 198 | - } | |
| 199 | - | |
| 200 | - /** | |
| 201 | - * 新增用户角色信息 | |
| 202 | - * | |
| 203 | - * @param user 用户对象 | |
| 204 | - */ | |
| 205 | - public void insertUserRole(SysUser user) { | |
| 206 | - Long[] roles = user.getRoleIds(); | |
| 207 | - if (StringUtils.isNotNull(roles)) { | |
| 208 | - // 新增用户与角色管理 | |
| 209 | - List<SysUserRole> list = new ArrayList<SysUserRole>(); | |
| 210 | - for (Long roleId : roles) { | |
| 211 | - SysUserRole ur = new SysUserRole(); | |
| 212 | - ur.setUserId(user.getUserId()); | |
| 213 | - ur.setRoleId(roleId); | |
| 214 | - list.add(ur); | |
| 215 | - } | |
| 216 | - if (list.size() > 0) { | |
| 217 | - userRoleMapper.batchUserRole(list); | |
| 218 | - } | |
| 219 | - } | |
| 220 | - } | |
| 221 | - | |
| 222 | - /** | |
| 223 | - * 新增用户岗位信息 | |
| 224 | - * | |
| 225 | - * @param user 用户对象 | |
| 226 | - */ | |
| 227 | - public void insertUserPost(SysUser user) { | |
| 228 | - Long[] posts = user.getPostIds(); | |
| 229 | - if (StringUtils.isNotNull(posts)) { | |
| 230 | - // 新增用户与岗位管理 | |
| 231 | - List<SysUserPost> list = new ArrayList<SysUserPost>(); | |
| 232 | - for (Long postId : posts) { | |
| 233 | - SysUserPost up = new SysUserPost(); | |
| 234 | - up.setUserId(user.getUserId()); | |
| 235 | - up.setPostId(postId); | |
| 236 | - list.add(up); | |
| 237 | - } | |
| 238 | - if (list.size() > 0) { | |
| 239 | - userPostMapper.batchUserPost(list); | |
| 240 | - } | |
| 241 | - } | |
| 242 | - } | |
| 243 | - | |
| 244 | - /** | |
| 245 | - * 通过用户ID删除用户 | |
| 246 | - * | |
| 247 | - * @param userId 用户ID | |
| 248 | - * @return 结果 | |
| 249 | - */ | |
| 250 | - @Override | |
| 251 | - @Transactional | |
| 252 | - public int deleteUserById(Long userId) { | |
| 253 | - // 删除用户与角色关联 | |
| 254 | - userRoleMapper.deleteUserRoleByUserId(userId); | |
| 255 | - // 删除用户与岗位表 | |
| 256 | - userPostMapper.deleteUserPostByUserId(userId); | |
| 257 | - return userMapper.deleteUserById(userId); | |
| 258 | - } | |
| 259 | - | |
| 260 | - /** | |
| 261 | - * 批量删除用户信息 | |
| 262 | - * | |
| 263 | - * @param userIds 需要删除的用户ID | |
| 264 | - * @return 结果 | |
| 265 | - */ | |
| 266 | - @Override | |
| 267 | - @Transactional | |
| 268 | - public int deleteUserByIds(Long[] userIds) { | |
| 269 | - for (Long userId : userIds) { | |
| 270 | - checkUserAllowed(new SysUser(userId)); | |
| 271 | - } | |
| 272 | - // 删除用户与角色关联 | |
| 273 | - userRoleMapper.deleteUserRole(userIds); | |
| 274 | - // 删除用户与岗位关联 | |
| 275 | - userPostMapper.deleteUserPost(userIds); | |
| 276 | - return userMapper.deleteUserByIds(userIds); | |
| 277 | - } | |
| 278 | - | |
| 279 | - /** | |
| 280 | - * 导入用户数据 | |
| 281 | - * | |
| 282 | - * @param userList 用户数据列表 | |
| 283 | - * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 | |
| 284 | - * @param operName 操作用户 | |
| 285 | - * @return 结果 | |
| 286 | - */ | |
| 287 | - @Override | |
| 288 | - public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) { | |
| 289 | - if (StringUtils.isNull(userList) || userList.size() == 0) { | |
| 290 | - throw new CustomException("导入用户数据不能为空!"); | |
| 291 | - } | |
| 292 | - int successNum = 0; | |
| 293 | - int failureNum = 0; | |
| 294 | - StringBuilder successMsg = new StringBuilder(); | |
| 295 | - StringBuilder failureMsg = new StringBuilder(); | |
| 296 | - String password = configService.selectConfigByKey("sys.user.initPassword"); | |
| 297 | - for (SysUser user : userList) { | |
| 298 | - try { | |
| 299 | - // 验证是否存在这个用户 | |
| 300 | - SysUser u = userMapper.selectUserByUserName(user.getUserName()); | |
| 301 | - if (StringUtils.isNull(u)) { | |
| 302 | - user.setPassword(SecurityUtils.encryptPassword(password)); | |
| 303 | - user.setCreateBy(operName); | |
| 304 | - this.insertUser(user); | |
| 305 | - successNum++; | |
| 306 | - successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功"); | |
| 307 | - } else if (isUpdateSupport) { | |
| 308 | - user.setUpdateBy(operName); | |
| 309 | - this.updateUser(user); | |
| 310 | - successNum++; | |
| 311 | - successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功"); | |
| 312 | - } else { | |
| 313 | - failureNum++; | |
| 314 | - failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在"); | |
| 315 | - } | |
| 316 | - } catch (Exception e) { | |
| 317 | - failureNum++; | |
| 318 | - String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; | |
| 319 | - failureMsg.append(msg + e.getMessage()); | |
| 320 | - log.error(msg, e); | |
| 321 | - } | |
| 322 | - } | |
| 323 | - if (failureNum > 0) { | |
| 324 | - failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); | |
| 325 | - throw new CustomException(failureMsg.toString()); | |
| 326 | - } else { | |
| 327 | - successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); | |
| 328 | - } | |
| 329 | - return successMsg.toString(); | |
| 330 | - } | |
| 331 | -} |
ruoyi-ui/src/api/system/dept.js
| ... | ... | @@ -20,7 +20,7 @@ export function listDeptExcludeChild(deptId) { |
| 20 | 20 | // 查询部门详细 |
| 21 | 21 | export function getDept(deptId) { |
| 22 | 22 | return request({ |
| 23 | - url: '/system/dept/' + deptId, | |
| 23 | + url: '/system/dept/get?id=' + deptId, | |
| 24 | 24 | method: 'get' |
| 25 | 25 | }) |
| 26 | 26 | } |
| ... | ... | @@ -36,7 +36,7 @@ export function listSimpleDepts() { |
| 36 | 36 | // 新增部门 |
| 37 | 37 | export function addDept(data) { |
| 38 | 38 | return request({ |
| 39 | - url: '/system/dept', | |
| 39 | + url: '/system/dept/create', | |
| 40 | 40 | method: 'post', |
| 41 | 41 | data: data |
| 42 | 42 | }) |
| ... | ... | @@ -45,19 +45,16 @@ export function addDept(data) { |
| 45 | 45 | // 修改部门 |
| 46 | 46 | export function updateDept(data) { |
| 47 | 47 | return request({ |
| 48 | - url: '/system/dept', | |
| 49 | - method: 'put', | |
| 48 | + url: '/system/dept/update', | |
| 49 | + method: 'post', | |
| 50 | 50 | data: data |
| 51 | 51 | }) |
| 52 | 52 | } |
| 53 | 53 | |
| 54 | 54 | // 删除部门 |
| 55 | -export function delDept(deptId) { | |
| 55 | +export function delDept(id) { | |
| 56 | 56 | return request({ |
| 57 | - url: '/system/dept/' + deptId, | |
| 58 | - method: 'delete' | |
| 57 | + url: '/system/dept/delete?id=' + id, | |
| 58 | + method: 'post' | |
| 59 | 59 | }) |
| 60 | 60 | } |
| 61 | - | |
| 62 | -export class treeselect { | |
| 63 | -} | ... | ... |
ruoyi-ui/src/views/system/dept/index.vue
| 1 | 1 | <template> |
| 2 | 2 | <div class="app-container"> |
| 3 | 3 | <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch"> |
| 4 | - <el-form-item label="部门名称" prop="deptName"> | |
| 4 | + <el-form-item label="部门名称" prop="name"> | |
| 5 | 5 | <el-input |
| 6 | - v-model="queryParams.deptName" | |
| 6 | + v-model="queryParams.name" | |
| 7 | 7 | placeholder="请输入部门名称" |
| 8 | 8 | clearable |
| 9 | 9 | size="small" |
| ... | ... | @@ -11,12 +11,12 @@ |
| 11 | 11 | /> |
| 12 | 12 | </el-form-item> |
| 13 | 13 | <el-form-item label="状态" prop="status"> |
| 14 | - <el-select v-model="queryParams.status" placeholder="部门状态" clearable size="small"> | |
| 14 | + <el-select v-model="queryParams.status" placeholder="菜单状态" clearable size="small"> | |
| 15 | 15 | <el-option |
| 16 | - v-for="dict in statusOptions" | |
| 17 | - :key="dict.dictValue" | |
| 18 | - :label="dict.dictLabel" | |
| 19 | - :value="dict.dictValue" | |
| 16 | + v-for="dict in statusDictDatas" | |
| 17 | + :key="parseInt(dict.value)" | |
| 18 | + :label="dict.label" | |
| 19 | + :value="parseInt(dict.value)" | |
| 20 | 20 | /> |
| 21 | 21 | </el-select> |
| 22 | 22 | </el-form-item> |
| ... | ... | @@ -42,12 +42,12 @@ |
| 42 | 42 | <el-table |
| 43 | 43 | v-loading="loading" |
| 44 | 44 | :data="deptList" |
| 45 | - row-key="deptId" | |
| 45 | + row-key="id" | |
| 46 | 46 | default-expand-all |
| 47 | 47 | :tree-props="{children: 'children', hasChildren: 'hasChildren'}" |
| 48 | 48 | > |
| 49 | - <el-table-column prop="deptName" label="部门名称" width="260"></el-table-column> | |
| 50 | - <el-table-column prop="orderNum" label="排序" width="200"></el-table-column> | |
| 49 | + <el-table-column prop="name" label="部门名称" width="260"></el-table-column> | |
| 50 | + <el-table-column prop="sort" label="排序" width="200"></el-table-column> | |
| 51 | 51 | <el-table-column prop="status" label="状态" :formatter="statusFormat" width="100"></el-table-column> |
| 52 | 52 | <el-table-column label="创建时间" align="center" prop="createTime" width="200"> |
| 53 | 53 | <template slot-scope="scope"> |
| ... | ... | @@ -56,22 +56,22 @@ |
| 56 | 56 | </el-table-column> |
| 57 | 57 | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| 58 | 58 | <template slot-scope="scope"> |
| 59 | - <el-button | |
| 60 | - size="mini" | |
| 61 | - type="text" | |
| 62 | - icon="el-icon-edit" | |
| 59 | + <el-button | |
| 60 | + size="mini" | |
| 61 | + type="text" | |
| 62 | + icon="el-icon-edit" | |
| 63 | 63 | @click="handleUpdate(scope.row)" |
| 64 | 64 | v-hasPermi="['system:dept:edit']" |
| 65 | 65 | >修改</el-button> |
| 66 | - <el-button | |
| 67 | - size="mini" | |
| 68 | - type="text" | |
| 69 | - icon="el-icon-plus" | |
| 66 | + <el-button | |
| 67 | + size="mini" | |
| 68 | + type="text" | |
| 69 | + icon="el-icon-plus" | |
| 70 | 70 | @click="handleAdd(scope.row)" |
| 71 | 71 | v-hasPermi="['system:dept:add']" |
| 72 | 72 | >新增</el-button> |
| 73 | 73 | <el-button |
| 74 | - v-if="scope.row.parentId != 0" | |
| 74 | + v-if="scope.row.parentId !== 0" | |
| 75 | 75 | size="mini" |
| 76 | 76 | type="text" |
| 77 | 77 | icon="el-icon-delete" |
| ... | ... | @@ -92,13 +92,13 @@ |
| 92 | 92 | </el-form-item> |
| 93 | 93 | </el-col> |
| 94 | 94 | <el-col :span="12"> |
| 95 | - <el-form-item label="部门名称" prop="deptName"> | |
| 96 | - <el-input v-model="form.deptName" placeholder="请输入部门名称" /> | |
| 95 | + <el-form-item label="部门名称" prop="name"> | |
| 96 | + <el-input v-model="form.name" placeholder="请输入部门名称" /> | |
| 97 | 97 | </el-form-item> |
| 98 | 98 | </el-col> |
| 99 | 99 | <el-col :span="12"> |
| 100 | - <el-form-item label="显示排序" prop="orderNum"> | |
| 101 | - <el-input-number v-model="form.orderNum" controls-position="right" :min="0" /> | |
| 100 | + <el-form-item label="显示排序" prop="sort"> | |
| 101 | + <el-input-number v-model="form.sort" controls-position="right" :min="0" /> | |
| 102 | 102 | </el-form-item> |
| 103 | 103 | </el-col> |
| 104 | 104 | <el-col :span="12"> |
| ... | ... | @@ -117,13 +117,13 @@ |
| 117 | 117 | </el-form-item> |
| 118 | 118 | </el-col> |
| 119 | 119 | <el-col :span="12"> |
| 120 | - <el-form-item label="部门状态"> | |
| 120 | + <el-form-item label="部门状态" prop="status"> | |
| 121 | 121 | <el-radio-group v-model="form.status"> |
| 122 | 122 | <el-radio |
| 123 | - v-for="dict in statusOptions" | |
| 124 | - :key="dict.dictValue" | |
| 125 | - :label="dict.dictValue" | |
| 126 | - >{{dict.dictLabel}}</el-radio> | |
| 123 | + v-for="dict in statusDictDatas" | |
| 124 | + :key="parseInt(dict.value)" | |
| 125 | + :label="parseInt(dict.value)" | |
| 126 | + >{{dict.label}}</el-radio> | |
| 127 | 127 | </el-radio-group> |
| 128 | 128 | </el-form-item> |
| 129 | 129 | </el-col> |
| ... | ... | @@ -138,10 +138,13 @@ |
| 138 | 138 | </template> |
| 139 | 139 | |
| 140 | 140 | <script> |
| 141 | -import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept"; | |
| 141 | +import { listDept, getDept, delDept, addDept, updateDept } from "@/api/system/dept"; | |
| 142 | 142 | import Treeselect from "@riophae/vue-treeselect"; |
| 143 | 143 | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| 144 | 144 | |
| 145 | +import {SysCommonStatusEnum, SysMenuTypeEnum} from '@/utils/constants' | |
| 146 | +import { getDictDataLabel, getDictDatas, DICT_TYPE } from '@/utils/dict' | |
| 147 | + | |
| 145 | 148 | export default { |
| 146 | 149 | name: "Dept", |
| 147 | 150 | components: { Treeselect }, |
| ... | ... | @@ -163,7 +166,7 @@ export default { |
| 163 | 166 | statusOptions: [], |
| 164 | 167 | // 查询参数 |
| 165 | 168 | queryParams: { |
| 166 | - deptName: undefined, | |
| 169 | + name: undefined, | |
| 167 | 170 | status: undefined |
| 168 | 171 | }, |
| 169 | 172 | // 表单参数 |
| ... | ... | @@ -173,10 +176,10 @@ export default { |
| 173 | 176 | parentId: [ |
| 174 | 177 | { required: true, message: "上级部门不能为空", trigger: "blur" } |
| 175 | 178 | ], |
| 176 | - deptName: [ | |
| 179 | + name: [ | |
| 177 | 180 | { required: true, message: "部门名称不能为空", trigger: "blur" } |
| 178 | 181 | ], |
| 179 | - orderNum: [ | |
| 182 | + sort: [ | |
| 180 | 183 | { required: true, message: "显示排序不能为空", trigger: "blur" } |
| 181 | 184 | ], |
| 182 | 185 | email: [ |
| ... | ... | @@ -192,22 +195,27 @@ export default { |
| 192 | 195 | message: "请输入正确的手机号码", |
| 193 | 196 | trigger: "blur" |
| 194 | 197 | } |
| 198 | + ], | |
| 199 | + status: [ | |
| 200 | + { required: true, message: "状态不能为空", trigger: "blur" } | |
| 195 | 201 | ] |
| 196 | - } | |
| 202 | + }, | |
| 203 | + | |
| 204 | + // 枚举 | |
| 205 | + CommonStatusEnum: SysCommonStatusEnum, | |
| 206 | + // 数据字典 | |
| 207 | + statusDictDatas: getDictDatas(DICT_TYPE.SYS_COMMON_STATUS) | |
| 197 | 208 | }; |
| 198 | 209 | }, |
| 199 | 210 | created() { |
| 200 | 211 | this.getList(); |
| 201 | - this.getDicts("sys_normal_disable").then(response => { | |
| 202 | - this.statusOptions = response.data; | |
| 203 | - }); | |
| 204 | 212 | }, |
| 205 | 213 | methods: { |
| 206 | 214 | /** 查询部门列表 */ |
| 207 | 215 | getList() { |
| 208 | 216 | this.loading = true; |
| 209 | 217 | listDept(this.queryParams).then(response => { |
| 210 | - this.deptList = this.handleTree(response.data, "deptId"); | |
| 218 | + this.deptList = this.handleTree(response.data, "id"); | |
| 211 | 219 | this.loading = false; |
| 212 | 220 | }); |
| 213 | 221 | }, |
| ... | ... | @@ -217,14 +225,14 @@ export default { |
| 217 | 225 | delete node.children; |
| 218 | 226 | } |
| 219 | 227 | return { |
| 220 | - id: node.deptId, | |
| 221 | - label: node.deptName, | |
| 228 | + id: node.id, | |
| 229 | + label: node.name, | |
| 222 | 230 | children: node.children |
| 223 | 231 | }; |
| 224 | 232 | }, |
| 225 | 233 | // 字典状态字典翻译 |
| 226 | 234 | statusFormat(row, column) { |
| 227 | - return this.selectDictLabel(this.statusOptions, row.status); | |
| 235 | + return getDictDataLabel(DICT_TYPE.SYS_COMMON_STATUS, row.status) | |
| 228 | 236 | }, |
| 229 | 237 | // 取消按钮 |
| 230 | 238 | cancel() { |
| ... | ... | @@ -234,10 +242,10 @@ export default { |
| 234 | 242 | // 表单重置 |
| 235 | 243 | reset() { |
| 236 | 244 | this.form = { |
| 237 | - deptId: undefined, | |
| 245 | + id: undefined, | |
| 238 | 246 | parentId: undefined, |
| 239 | - deptName: undefined, | |
| 240 | - orderNum: undefined, | |
| 247 | + name: undefined, | |
| 248 | + sort: undefined, | |
| 241 | 249 | leader: undefined, |
| 242 | 250 | phone: undefined, |
| 243 | 251 | email: undefined, |
| ... | ... | @@ -257,32 +265,32 @@ export default { |
| 257 | 265 | /** 新增按钮操作 */ |
| 258 | 266 | handleAdd(row) { |
| 259 | 267 | this.reset(); |
| 260 | - if (row != undefined) { | |
| 261 | - this.form.parentId = row.deptId; | |
| 268 | + if (row !== undefined) { | |
| 269 | + this.form.parentId = row.id; | |
| 262 | 270 | } |
| 263 | 271 | this.open = true; |
| 264 | 272 | this.title = "添加部门"; |
| 265 | 273 | listDept().then(response => { |
| 266 | - this.deptOptions = this.handleTree(response.data, "deptId"); | |
| 274 | + this.deptOptions = this.handleTree(response.data, "id"); | |
| 267 | 275 | }); |
| 268 | 276 | }, |
| 269 | 277 | /** 修改按钮操作 */ |
| 270 | 278 | handleUpdate(row) { |
| 271 | 279 | this.reset(); |
| 272 | - getDept(row.deptId).then(response => { | |
| 280 | + getDept(row.id).then(response => { | |
| 273 | 281 | this.form = response.data; |
| 274 | 282 | this.open = true; |
| 275 | 283 | this.title = "修改部门"; |
| 276 | 284 | }); |
| 277 | - listDeptExcludeChild(row.deptId).then(response => { | |
| 278 | - this.deptOptions = this.handleTree(response.data, "deptId"); | |
| 285 | + listDept(row.id).then(response => { | |
| 286 | + this.deptOptions = this.handleTree(response.data, "id"); | |
| 279 | 287 | }); |
| 280 | 288 | }, |
| 281 | 289 | /** 提交按钮 */ |
| 282 | 290 | submitForm: function() { |
| 283 | 291 | this.$refs["form"].validate(valid => { |
| 284 | 292 | if (valid) { |
| 285 | - if (this.form.deptId != undefined) { | |
| 293 | + if (this.form.id !== undefined) { | |
| 286 | 294 | updateDept(this.form).then(response => { |
| 287 | 295 | this.msgSuccess("修改成功"); |
| 288 | 296 | this.open = false; |
| ... | ... | @@ -300,12 +308,12 @@ export default { |
| 300 | 308 | }, |
| 301 | 309 | /** 删除按钮操作 */ |
| 302 | 310 | handleDelete(row) { |
| 303 | - this.$confirm('是否确认删除名称为"' + row.deptName + '"的数据项?', "警告", { | |
| 311 | + this.$confirm('是否确认删除名称为"' + row.name + '"的数据项?', "警告", { | |
| 304 | 312 | confirmButtonText: "确定", |
| 305 | 313 | cancelButtonText: "取消", |
| 306 | 314 | type: "warning" |
| 307 | 315 | }).then(function() { |
| 308 | - return delDept(row.deptId); | |
| 316 | + return delDept(row.id); | |
| 309 | 317 | }).then(() => { |
| 310 | 318 | this.getList(); |
| 311 | 319 | this.msgSuccess("删除成功"); |
| ... | ... | @@ -313,4 +321,4 @@ export default { |
| 313 | 321 | } |
| 314 | 322 | } |
| 315 | 323 | }; |
| 316 | -</script> | |
| 317 | 324 | \ No newline at end of file |
| 325 | +</script> | ... | ... |
ruoyi-ui/src/views/system/menu/index.vue
| ... | ... | @@ -163,9 +163,10 @@ |
| 163 | 163 | <el-form-item v-if="form.type != '3'" label="菜单状态"> |
| 164 | 164 | <el-radio-group v-model="form.status"> |
| 165 | 165 | <el-radio |
| 166 | - v-for="dict in statusDictDatas" | |
| 167 | - :key="dict.value" | |
| 168 | - :label="parseInt(dict.value)" | |
| 166 | + v-for="dict in statusDictDatas" | |
| 167 | + :key="parseInt(dict.value)" | |
| 168 | + :label="dict.label" | |
| 169 | + :value="parseInt(dict.value)" | |
| 169 | 170 | >{{dict.label}}</el-radio> |
| 170 | 171 | </el-radio-group> |
| 171 | 172 | </el-form-item> |
| ... | ... | @@ -223,6 +224,9 @@ export default { |
| 223 | 224 | ], |
| 224 | 225 | path: [ |
| 225 | 226 | { required: true, message: "路由地址不能为空", trigger: "blur" } |
| 227 | + ], | |
| 228 | + status: [ | |
| 229 | + { required: true, message: "状态不能为空", trigger: "blur" } | |
| 226 | 230 | ] |
| 227 | 231 | }, |
| 228 | 232 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/SysDeptController.java
| ... | ... | @@ -2,17 +2,15 @@ package cn.iocoder.dashboard.modules.system.controller.dept; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.dashboard.common.enums.CommonStatusEnum; |
| 4 | 4 | import cn.iocoder.dashboard.common.pojo.CommonResult; |
| 5 | -import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO; | |
| 6 | -import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptRespVO; | |
| 7 | -import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptSimpleRespVO; | |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.*; | |
| 8 | 6 | import cn.iocoder.dashboard.modules.system.convert.dept.SysDeptConvert; |
| 9 | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; |
| 10 | 8 | import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; |
| 11 | 9 | import io.swagger.annotations.Api; |
| 10 | +import io.swagger.annotations.ApiImplicitParam; | |
| 12 | 11 | import io.swagger.annotations.ApiOperation; |
| 13 | -import org.springframework.web.bind.annotation.GetMapping; | |
| 14 | -import org.springframework.web.bind.annotation.RequestMapping; | |
| 15 | -import org.springframework.web.bind.annotation.RestController; | |
| 12 | +import org.springframework.validation.annotation.Validated; | |
| 13 | +import org.springframework.web.bind.annotation.*; | |
| 16 | 14 | |
| 17 | 15 | import javax.annotation.Resource; |
| 18 | 16 | import java.util.Comparator; |
| ... | ... | @@ -49,4 +47,39 @@ public class SysDeptController { |
| 49 | 47 | return success(SysDeptConvert.INSTANCE.convertList02(list)); |
| 50 | 48 | } |
| 51 | 49 | |
| 50 | + @ApiOperation("获得部门信息") | |
| 51 | + @ApiImplicitParam(name = "id", value = "编号", readOnly = true, example = "1024") | |
| 52 | +// @PreAuthorize("@ss.hasPermi('system:dept:query')") | |
| 53 | + @GetMapping("/get") | |
| 54 | + public CommonResult<SysDeptRespVO> getDept(@RequestParam("id") Long id) { | |
| 55 | + return success(SysDeptConvert.INSTANCE.convert(deptService.getDept(id))); | |
| 56 | + } | |
| 57 | + | |
| 58 | + @ApiOperation("新增部门") | |
| 59 | + @PostMapping("create") | |
| 60 | +// @PreAuthorize("@ss.hasPermi('system:dept:add')") | |
| 61 | +// @Log(title = "部门管理", businessType = BusinessType.INSERT) | |
| 62 | + public CommonResult<Long> createDept(@Validated @RequestBody SysDeptCreateReqVO reqVO) { | |
| 63 | + Long deptId = deptService.createDept(reqVO); | |
| 64 | + return success(deptId); | |
| 65 | + } | |
| 66 | + | |
| 67 | + @ApiOperation("修改部门") | |
| 68 | + @PostMapping("update") | |
| 69 | +// @PreAuthorize("@ss.hasPermi('system:dept:edit')") | |
| 70 | +// @Log(title = "部门管理", businessType = BusinessType.UPDATE) | |
| 71 | + public CommonResult<Boolean> updateDept(@Validated @RequestBody SysDeptUpdateReqVO reqVO) { | |
| 72 | + deptService.updateDept(reqVO); | |
| 73 | + return success(true); | |
| 74 | + } | |
| 75 | + | |
| 76 | + @ApiOperation("删除部门") | |
| 77 | + @ApiImplicitParam(name = "id", value = "编号", readOnly = true, example = "1024") | |
| 78 | + @PostMapping("delete") | |
| 79 | +// @PreAuthorize("@ss.hasPermi('system:dept:remove')") | |
| 80 | +// @Log(title = "部门管理", businessType = BusinessType.DELETE) | |
| 81 | + public CommonResult<Boolean> deleteDept(@RequestParam("id") Long id) { | |
| 82 | + deptService.deleteDept(id); | |
| 83 | + return success(true); | |
| 84 | + } | |
| 52 | 85 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/dept/SysDeptBaseVO.java
| ... | ... | @@ -40,4 +40,9 @@ public class SysDeptBaseVO { |
| 40 | 40 | @Size(max = 50, message = "邮箱长度不能超过50个字符") |
| 41 | 41 | private String email; |
| 42 | 42 | |
| 43 | + @ApiModelProperty(value = "状态", required = true, example = "1", notes = "见 SysCommonStatusEnum 枚举") | |
| 44 | + @NotNull(message = "状态不能为空") | |
| 45 | +// @InEnum(value = SysCommonStatusEnum.class, message = "修改状态必须是 {value}") | |
| 46 | + private Integer status; | |
| 47 | + | |
| 43 | 48 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/dept/SysDeptListReqVO.java
| ... | ... | @@ -3,12 +3,10 @@ package cn.iocoder.dashboard.modules.system.controller.dept.vo.dept; |
| 3 | 3 | import io.swagger.annotations.ApiModel; |
| 4 | 4 | import io.swagger.annotations.ApiModelProperty; |
| 5 | 5 | import lombok.Data; |
| 6 | -import lombok.EqualsAndHashCode; | |
| 7 | 6 | |
| 8 | 7 | @ApiModel("部门列表 Request VO") |
| 9 | 8 | @Data |
| 10 | -@EqualsAndHashCode(callSuper = true) | |
| 11 | -public class SysDeptListReqVO extends SysDeptBaseVO { | |
| 9 | +public class SysDeptListReqVO { | |
| 12 | 10 | |
| 13 | 11 | @ApiModelProperty(value = "部门名称", example = "芋道", notes = "模糊匹配") |
| 14 | 12 | private String name; | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/dept/SysDeptRespVO.java
| ... | ... | @@ -15,9 +15,6 @@ public class SysDeptRespVO extends SysDeptBaseVO { |
| 15 | 15 | @ApiModelProperty(value = "部门编号", required = true, example = "1024") |
| 16 | 16 | private Integer id; |
| 17 | 17 | |
| 18 | - @ApiModelProperty(value = "祖级列表", required = true, example = "0,100") | |
| 19 | - private String ancestors; | |
| 20 | - | |
| 21 | 18 | @ApiModelProperty(value = "状态", required = true, example = "1", notes = "参见 SysCommonStatusEnum 枚举类") |
| 22 | 19 | private Integer status; |
| 23 | 20 | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/controller/dept/vo/dept/SysDeptUpdateReqVO.java
src/main/java/cn/iocoder/dashboard/modules/system/convert/dept/SysDeptConvert.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.convert.dept; |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO; | |
| 3 | 4 | import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptRespVO; |
| 4 | 5 | import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptSimpleRespVO; |
| 6 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; | |
| 5 | 7 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; |
| 6 | 8 | import org.mapstruct.Mapper; |
| 7 | 9 | import org.mapstruct.factory.Mappers; |
| ... | ... | @@ -17,4 +19,10 @@ public interface SysDeptConvert { |
| 17 | 19 | |
| 18 | 20 | List<SysDeptSimpleRespVO> convertList02(List<SysDeptDO> list); |
| 19 | 21 | |
| 22 | + SysDeptRespVO convert(SysDeptDO bean); | |
| 23 | + | |
| 24 | + SysDeptDO convert(SysDeptCreateReqVO bean); | |
| 25 | + | |
| 26 | + SysDeptDO convert(SysDeptUpdateReqVO bean); | |
| 27 | + | |
| 20 | 28 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dao/dept/SysDeptMapper.java
| ... | ... | @@ -21,4 +21,13 @@ public interface SysDeptMapper extends BaseMapper<SysDeptDO> { |
| 21 | 21 | .eqIfPresent("status", reqVO.getStatus())); |
| 22 | 22 | } |
| 23 | 23 | |
| 24 | + default SysDeptDO selectByParentIdAndName(Long parentId, String name) { | |
| 25 | + return selectOne(new QueryWrapper<SysDeptDO>().eq("parent_id", parentId) | |
| 26 | + .eq("name", name)); | |
| 27 | + } | |
| 28 | + | |
| 29 | + default Integer selectCountByParentId(Long parentId) { | |
| 30 | + return selectCount(new QueryWrapper<SysDeptDO>().eq("parent_id", parentId)); | |
| 31 | + } | |
| 32 | + | |
| 24 | 33 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/dal/mysql/dataobject/dept/SysDeptDO.java
src/main/java/cn/iocoder/dashboard/modules/system/enums/SysErrorCodeConstants.java
| ... | ... | @@ -43,9 +43,10 @@ public interface SysErrorCodeConstants { |
| 43 | 43 | ErrorCode DEPT_PARENT_NOT_EXITS = new ErrorCode(1002004002,"父级部门不存在"); |
| 44 | 44 | ErrorCode DEPT_NOT_FOUND = new ErrorCode(1002004003, "当前部门不存在"); |
| 45 | 45 | ErrorCode DEPT_EXITS_CHILDREN = new ErrorCode(1002004004, "存在子部门,无法删除"); |
| 46 | - ErrorCode DEPT_PARENT_ERROR = new ErrorCode(1002004005, "不能设置自己为父资源"); | |
| 46 | + ErrorCode DEPT_PARENT_ERROR = new ErrorCode(1002004005, "不能设置自己为父部门"); | |
| 47 | 47 | ErrorCode DEPT_EXISTS_USER = new ErrorCode(1002004006, "部门中存在员工,无法删除"); |
| 48 | 48 | ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1002004007, "部门不处于开启状态,不允许选择"); |
| 49 | + ErrorCode DEPT_PARENT_IS_CHILD = new ErrorCode(1002004008, "不能设置自己的子部门为父部门"); | |
| 49 | 50 | |
| 50 | 51 | // ========== 岗位模块 1002005000 ========== |
| 51 | 52 | ErrorCode POST_NOT_FOUND = new ErrorCode(1002005001, "当前岗位不存在"); | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/enums/dept/DeptIdEnum.java
0 → 100644
| 1 | +package cn.iocoder.dashboard.modules.system.enums.dept; | |
| 2 | + | |
| 3 | +import lombok.AllArgsConstructor; | |
| 4 | +import lombok.Getter; | |
| 5 | + | |
| 6 | +/** | |
| 7 | + * 部门编号枚举 | |
| 8 | + */ | |
| 9 | +@Getter | |
| 10 | +@AllArgsConstructor | |
| 11 | +public enum DeptIdEnum { | |
| 12 | + | |
| 13 | + /** | |
| 14 | + * 根节点 | |
| 15 | + */ | |
| 16 | + ROOT(0L); | |
| 17 | + | |
| 18 | + private final Long id; | |
| 19 | + | |
| 20 | +} | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/dept/SysDeptService.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.service.dept; |
| 2 | 2 | |
| 3 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO; | |
| 3 | 4 | import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO; |
| 5 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; | |
| 4 | 6 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; |
| 5 | 7 | |
| 6 | 8 | import java.util.Collection; |
| ... | ... | @@ -58,4 +60,26 @@ public interface SysDeptService { |
| 58 | 60 | */ |
| 59 | 61 | SysDeptDO getDept(Long id); |
| 60 | 62 | |
| 63 | + /** | |
| 64 | + * 创建部门 | |
| 65 | + * | |
| 66 | + * @param reqVO 部门信息 | |
| 67 | + * @return 部门编号 | |
| 68 | + */ | |
| 69 | + Long createDept(SysDeptCreateReqVO reqVO); | |
| 70 | + | |
| 71 | + /** | |
| 72 | + * 更新部门 | |
| 73 | + * | |
| 74 | + * @param reqVO 部门信息 | |
| 75 | + */ | |
| 76 | + void updateDept(SysDeptUpdateReqVO reqVO); | |
| 77 | + | |
| 78 | + /** | |
| 79 | + * 删除部门 | |
| 80 | + * | |
| 81 | + * @param id 部门编号 | |
| 82 | + */ | |
| 83 | + void deleteDept(Long id); | |
| 84 | + | |
| 61 | 85 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/dept/impl/SysDeptServiceImpl.java
| 1 | 1 | package cn.iocoder.dashboard.modules.system.service.dept.impl; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.iocoder.dashboard.common.enums.CommonStatusEnum; | |
| 5 | +import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil; | |
| 6 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptCreateReqVO; | |
| 4 | 7 | import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptListReqVO; |
| 8 | +import cn.iocoder.dashboard.modules.system.controller.dept.vo.dept.SysDeptUpdateReqVO; | |
| 9 | +import cn.iocoder.dashboard.modules.system.convert.dept.SysDeptConvert; | |
| 5 | 10 | import cn.iocoder.dashboard.modules.system.dal.mysql.dao.dept.SysDeptMapper; |
| 6 | 11 | import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.dept.SysDeptDO; |
| 12 | +import cn.iocoder.dashboard.modules.system.enums.dept.DeptIdEnum; | |
| 7 | 13 | import cn.iocoder.dashboard.modules.system.service.dept.SysDeptService; |
| 8 | 14 | import com.google.common.collect.ImmutableMap; |
| 9 | 15 | import com.google.common.collect.ImmutableMultimap; |
| ... | ... | @@ -18,6 +24,8 @@ import java.util.Collection; |
| 18 | 24 | import java.util.List; |
| 19 | 25 | import java.util.Map; |
| 20 | 26 | |
| 27 | +import static cn.iocoder.dashboard.modules.system.enums.SysErrorCodeConstants.*; | |
| 28 | + | |
| 21 | 29 | /** |
| 22 | 30 | * 部门 Service 实现类 |
| 23 | 31 | * |
| ... | ... | @@ -119,4 +127,105 @@ public class SysDeptServiceImpl implements SysDeptService { |
| 119 | 127 | return deptMapper.selectById(id); |
| 120 | 128 | } |
| 121 | 129 | |
| 130 | + @Override | |
| 131 | + public Long createDept(SysDeptCreateReqVO reqVO) { | |
| 132 | + // 校验正确性 | |
| 133 | + checkCreateOrUpdate(null, reqVO.getParentId(), reqVO.getName()); | |
| 134 | + // 插入部门 | |
| 135 | + SysDeptDO dept = SysDeptConvert.INSTANCE.convert(reqVO); | |
| 136 | + deptMapper.insert(dept); | |
| 137 | + return dept.getId(); | |
| 138 | + } | |
| 139 | + | |
| 140 | + @Override | |
| 141 | + public void updateDept(SysDeptUpdateReqVO reqVO) { | |
| 142 | + // 校验正确性 | |
| 143 | + checkCreateOrUpdate(reqVO.getId(), reqVO.getParentId(), reqVO.getName()); | |
| 144 | + // 更新部门 | |
| 145 | + SysDeptDO updateObj = SysDeptConvert.INSTANCE.convert(reqVO); | |
| 146 | + deptMapper.updateById(updateObj); | |
| 147 | + } | |
| 148 | + | |
| 149 | + @Override | |
| 150 | + public void deleteDept(Long id) { | |
| 151 | + // 校验是否存在 | |
| 152 | + checkDeptExists(id); | |
| 153 | + // 校验是否有子部门 | |
| 154 | + if (deptMapper.selectCountByParentId(id) > 0) { | |
| 155 | + throw ServiceExceptionUtil.exception(DEPT_EXITS_CHILDREN); | |
| 156 | + } | |
| 157 | + // 删除部门 | |
| 158 | + deptMapper.deleteById(id); | |
| 159 | + } | |
| 160 | + | |
| 161 | + private void checkCreateOrUpdate(Long id, Long parentId, String name) { | |
| 162 | + // 校验自己存在 | |
| 163 | + checkDeptExists(id); | |
| 164 | + // 校验父部门的有效性 | |
| 165 | + checkParentDeptEnable(id, parentId); | |
| 166 | + // 校验部门名的唯一性 | |
| 167 | + checkDeptNameUnique(id, parentId, name); | |
| 168 | + } | |
| 169 | + | |
| 170 | + private void checkParentDeptEnable(Long id, Long parentId) { | |
| 171 | + if (parentId == null || DeptIdEnum.ROOT.getId().equals(parentId)) { | |
| 172 | + return; | |
| 173 | + } | |
| 174 | + // 不能设置自己为父部门 | |
| 175 | + if (parentId.equals(id)) { | |
| 176 | + throw ServiceExceptionUtil.exception(DEPT_PARENT_ERROR); | |
| 177 | + } | |
| 178 | + // 父菜单不存在 | |
| 179 | + SysDeptDO dept = deptMapper.selectById(parentId); | |
| 180 | + if (dept == null) { | |
| 181 | + throw ServiceExceptionUtil.exception(DEPT_PARENT_NOT_EXITS); | |
| 182 | + } | |
| 183 | + // 父部门被禁用 | |
| 184 | + if (!CommonStatusEnum.ENABLE.getStatus().equals(dept.getStatus())) { | |
| 185 | + throw ServiceExceptionUtil.exception(DEPT_NOT_ENABLE); | |
| 186 | + } | |
| 187 | + // 父部门不能是原来的子部门 | |
| 188 | + List<SysDeptDO> children = this.listDeptsByParentIdFromCache(id, true); | |
| 189 | + if (children.stream().anyMatch(dept1 -> dept1.getId().equals(parentId))) { | |
| 190 | + throw ServiceExceptionUtil.exception(DEPT_PARENT_IS_CHILD); | |
| 191 | + } | |
| 192 | + } | |
| 193 | + | |
| 194 | + private void checkDeptExists(Long id) { | |
| 195 | + if (id == null) { | |
| 196 | + return; | |
| 197 | + } | |
| 198 | + SysDeptDO dept = deptMapper.selectById(id); | |
| 199 | + if (dept == null) { | |
| 200 | + throw ServiceExceptionUtil.exception(DEPT_NOT_FOUND); | |
| 201 | + } | |
| 202 | + } | |
| 203 | + | |
| 204 | + private void checkDeptNameUnique(Long id, Long parentId, String name) { | |
| 205 | + SysDeptDO menu = deptMapper.selectByParentIdAndName(parentId, name); | |
| 206 | + if (menu == null) { | |
| 207 | + return; | |
| 208 | + } | |
| 209 | + // 如果 id 为空,说明不用比较是否为相同 id 的菜单 | |
| 210 | + if (id == null) { | |
| 211 | + throw ServiceExceptionUtil.exception(DEPT_NAME_DUPLICATE); | |
| 212 | + } | |
| 213 | + if (!menu.getId().equals(id)) { | |
| 214 | + throw ServiceExceptionUtil.exception(DEPT_NAME_DUPLICATE); | |
| 215 | + } | |
| 216 | + } | |
| 217 | + | |
| 218 | +// /** | |
| 219 | +// * 查询部门管理数据 | |
| 220 | +// * | |
| 221 | +// * @param dept 部门信息 | |
| 222 | +// * @return 部门信息集合 | |
| 223 | +// */ | |
| 224 | +// @Override | |
| 225 | +// @DataScope(deptAlias = "d") | |
| 226 | +// public List<SysDept> selectDeptList(SysDept dept) | |
| 227 | +// { | |
| 228 | +// return deptMapper.selectDeptList(dept); | |
| 229 | +// } | |
| 230 | + | |
| 122 | 231 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysRoleServiceImpl.java
| ... | ... | @@ -206,4 +206,16 @@ public class SysRoleServiceImpl implements SysRoleService { |
| 206 | 206 | } |
| 207 | 207 | } |
| 208 | 208 | |
| 209 | + | |
| 210 | +// /** | |
| 211 | +// * 根据条件分页查询角色数据 | |
| 212 | +// * | |
| 213 | +// * @param role 角色信息 | |
| 214 | +// * @return 角色数据集合信息 | |
| 215 | +// */ | |
| 216 | +// @Override | |
| 217 | +// @DataScope(deptAlias = "d") | |
| 218 | +// public List<SysRole> selectRoleList(SysRole role) { | |
| 219 | +// return roleMapper.selectRoleList(role); | |
| 220 | +// } | |
| 209 | 221 | } | ... | ... |
src/main/java/cn/iocoder/dashboard/modules/system/service/user/SysUserServiceImpl.java
| ... | ... | @@ -253,33 +253,6 @@ public class SysUserServiceImpl implements SysUserService { |
| 253 | 253 | }); |
| 254 | 254 | } |
| 255 | 255 | |
| 256 | - | |
| 257 | -// /** | |
| 258 | -// * 新增用户角色信息 | |
| 259 | -// * | |
| 260 | -// * @param user 用户对象 | |
| 261 | -// */ | |
| 262 | -// public void insertUserRole(SysUser user) | |
| 263 | -// { | |
| 264 | -// Long[] roles = user.getRoleIds(); | |
| 265 | -// if (StringUtils.isNotNull(roles)) | |
| 266 | -// { | |
| 267 | -// // 新增用户与角色管理 | |
| 268 | -// List<SysUserRole> list = new ArrayList<SysUserRole>(); | |
| 269 | -// for (Long roleId : roles) | |
| 270 | -// { | |
| 271 | -// SysUserRole ur = new SysUserRole(); | |
| 272 | -// ur.setUserId(user.getUserId()); | |
| 273 | -// ur.setRoleId(roleId); | |
| 274 | -// list.add(ur); | |
| 275 | -// } | |
| 276 | -// if (list.size() > 0) | |
| 277 | -// { | |
| 278 | -// userRoleMapper.batchUserRole(list); | |
| 279 | -// } | |
| 280 | -// } | |
| 281 | -// } | |
| 282 | - | |
| 283 | 256 | // /** |
| 284 | 257 | // * 导入用户数据 |
| 285 | 258 | // * |
| ... | ... | @@ -347,4 +320,15 @@ public class SysUserServiceImpl implements SysUserService { |
| 347 | 320 | // return successMsg.toString(); |
| 348 | 321 | // } |
| 349 | 322 | |
| 323 | +// /** | |
| 324 | +// * 根据条件分页查询用户列表 | |
| 325 | +// * | |
| 326 | +// * @param user 用户信息 | |
| 327 | +// * @return 用户信息集合信息 | |
| 328 | +// */ | |
| 329 | +// @Override | |
| 330 | +// @DataScope(deptAlias = "d", userAlias = "u") | |
| 331 | +// public List<SysUser> selectUserList(SysUser user) { | |
| 332 | +// return userMapper.selectUserList(user); | |
| 333 | +// } | |
| 350 | 334 | } | ... | ... |