From 9be00db5e4b9873cbd4cb478c0a7020f177f6a28 Mon Sep 17 00:00:00 2001 From: ailanyin Date: Wed, 17 May 2023 17:28:31 +0800 Subject: [PATCH] add --- .../com/qiaoba/api/system/entity/SysDept.java | 7 +- .../com/qiaoba/api/system/entity/SysPost.java | 6 +- .../com/qiaoba/api/system/entity/SysRole.java | 27 +++----- .../api/system/entity/dto/SysRoleDto.java | 40 +++-------- .../api/system/entity/param/SysRoleParam.java | 5 ++ .../api/system/entity/vo/SysUserVo.java | 13 +--- .../api/system/service/SysDeptApiService.java | 7 -- .../api/system/service/SysRoleApiService.java | 10 ++- .../api/system/service/SysUserApiService.java | 7 -- .../qiaoba/common/base/entity/BaseEntity.java | 5 -- .../system/controller/SysDeptController.java | 10 ++- .../system/controller/SysLoginController.java | 4 -- .../system/controller/SysMenuController.java | 9 +-- .../system/controller/SysRoleController.java | 66 +++++++++++-------- .../system/controller/SysUserController.java | 43 +++++++----- .../module/system/mapper/SysMenuMapper.java | 18 ++++- .../system/mapper/SysRoleDeptMapper.java | 11 ++++ .../module/system/mapper/SysRoleMapper.java | 19 ++++-- .../module/system/mapper/SysUserMapper.java | 9 +++ .../system/service/SysRoleDeptService.java | 9 ++- .../system/service/SysRoleMenuService.java | 7 ++ .../module/system/service/SysUserService.java | 11 ++++ .../service/impl/SysDeptServiceImpl.java | 12 +--- .../service/impl/SysMenuServiceImpl.java | 16 ++++- .../service/impl/SysRoleDeptServiceImpl.java | 5 ++ .../service/impl/SysRoleMenuServiceImpl.java | 8 +++ .../service/impl/SysRoleServiceImpl.java | 45 ++++++++++--- .../impl/SysUserDetailsServiceImpl.java | 1 - .../service/impl/SysUserServiceImpl.java | 11 ++-- .../system/templates/SysUserExport.java | 55 ++++++++++++++++ .../main/resources/mapper/SysMenuMapper.xml | 18 ++++- .../resources/mapper/SysRoleDeptMapper.xml | 8 +++ .../main/resources/mapper/SysRoleMapper.xml | 23 +++++-- .../main/resources/mapper/SysUserMapper.xml | 54 +++++++++++++++ 34 files changed, 422 insertions(+), 177 deletions(-) create mode 100644 qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/templates/SysUserExport.java diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysDept.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysDept.java index 816616a..7574698 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysDept.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysDept.java @@ -34,6 +34,7 @@ public class SysDept extends BaseEntity { /** * 父部门ID */ + @NotBlank(message = "parentId不能为空") private String parentId; /** @@ -44,7 +45,8 @@ public class SysDept extends BaseEntity { /** * 部门名称 */ - @Size(min = 1, max = 20, message = "部门名称允许长度: {min}-{max}") + @NotBlank(message = "部门名称不能为空") + @Size(max = 20, message = "部门名称最大长度: {max}") private String deptName; /** @@ -57,16 +59,19 @@ public class SysDept extends BaseEntity { /** * 负责人 */ + @Size(max = 20, message = "负责人名称过长") private String leader; /** * 联系电话 */ + @Size(max = 20, message = "手机号过长") private String phone; /** * 邮箱 */ + @Size(max = 30, message = "邮箱号过长") private String email; /** diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysPost.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysPost.java index 7e35f6c..ef2f498 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysPost.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysPost.java @@ -33,12 +33,14 @@ public class SysPost extends BaseEntity { @Excel(name = "岗位名称", width = 20) @Schema(description = "岗位名称") - @Size(min = 1, max = 20, message = "岗位名称允许长度: {min}-{max}") + @NotBlank(message = "岗位名称不能为空") + @Size(max = 20, message = "岗位名称最大长度: {max}") private String postName; @Excel(name = "岗位编码", width = 20) @Schema(description = "岗位编码") - @Size(min = 1, max = 20, message = "岗位编码允许长度: {min}-{max}") + @NotBlank(message = "岗位编码不能为空") + @Size(max = 20, message = "岗位编码最大长度: {max}") private String postCode; @Excel(name = "岗位排序", width = 20) diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysRole.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysRole.java index 3c73cb6..16efc33 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysRole.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/SysRole.java @@ -1,5 +1,6 @@ package com.qiaoba.api.system.entity; +import cn.afterturn.easypoi.excel.annotation.Excel; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.qiaoba.common.base.entity.BaseEntity; @@ -20,35 +21,23 @@ public class SysRole extends BaseEntity { private static final long serialVersionUID = 1L; - /** - * 角色ID - */ @TableId + @Excel(name = "岗位序号", width = 20) private String roleId; - /** - * 角色名称 - */ + @Excel(name = "岗位序号", width = 20) private String roleName; - /** - * 角色权限 - */ + @Excel(name = "岗位序号", width = 20) private String roleKey; - /** - * 角色排序 - */ - private String roleSort; + @Excel(name = "岗位序号", width = 20) + private Integer roleSort; - /** - * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) - */ + @Excel(name = "数据范围" , width = 20, replace = {"所有数据权限_1" , "自定义数据权限_2" , "本部门数据权限_3" , "本部门及以下数据权限_4" , "仅本人数据权限_5"}) private String dataScope; - /** - * 角色状态(1正常 0停用) - */ + @Excel(name = "状态", width = 20, replace = {"正常_1", "禁用_0"}) private String status; } diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/dto/SysRoleDto.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/dto/SysRoleDto.java index d1fe71f..9de533c 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/dto/SysRoleDto.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/dto/SysRoleDto.java @@ -1,5 +1,6 @@ package com.qiaoba.api.system.entity.dto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.Setter; @@ -19,49 +20,28 @@ public class SysRoleDto implements Serializable { private static final long serialVersionUID = 1L; - /** - * 角色ID - */ + @Schema(description = "角色ID") private String roleId; - /** - * 租户ID - */ - private String tenantId; - - /** - * 角色名称 - */ + @Schema(description = "角色名称") private String roleName; - /** - * 角色权限 - */ + @Schema(description = "权限字符") private String roleKey; - /** - * 角色排序 - */ - private String roleSort; + @Schema(description = "角色排序") + private Integer roleSort; - /** - * 备注 - */ + @Schema(description = "备注") private String remark; - /** - * 角色状态(1正常 0停用) - */ + @Schema(description = "状态(0->禁用,1->正常)") private String status; - /** - * 部门组(数据权限) - */ + @Schema(description = "部门组(数据权限)") private Set deptIds; - /** - * 菜单组 - */ + @Schema(description = "菜单组") private Set menuIds; } diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/param/SysRoleParam.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/param/SysRoleParam.java index b7a261a..6354dde 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/param/SysRoleParam.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/param/SysRoleParam.java @@ -19,13 +19,18 @@ public class SysRoleParam implements Serializable { private static final long serialVersionUID = 1L; + @Schema(description = "角色名称") private String roleName; + @Schema(description = "权限字符") private String roleKey; + @Schema(description = "状态(0->禁用,1->正常)") private String status; + @Schema(description = "开始时间") private String beginTime; + @Schema(description = "结束时间") private String endTime; } diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/vo/SysUserVo.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/vo/SysUserVo.java index e05dafc..196c5a9 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/vo/SysUserVo.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/entity/vo/SysUserVo.java @@ -1,6 +1,5 @@ package com.qiaoba.api.system.entity.vo; -import cn.afterturn.easypoi.excel.annotation.Excel; import lombok.Getter; import lombok.Setter; @@ -20,30 +19,22 @@ public class SysUserVo implements Serializable { private static final long serialVersionUID = 1L; - @Excel(name = "用户ID", width = 25) private String userId; - @Excel(name = "登录账号", width = 20) private String username; - @Excel(name = "姓名", width = 20) private String nickname; - @Excel(name = "部门", width = 20) private String deptName; - @Excel(name = "性别", replace = {"男_0", "女_1", "未知_2"}) private String gender; - @Excel(name = "手机", width = 20) private String phone; - @Excel(name = "邮箱", width = 20) private String email; - @Excel(name = "创建时间", width = 30, format = "yyyy-MM-dd HH:mm:ss") + private String status; + private Date createTime; - @Excel(name = "状态", replace = {"正常_1", "停用_0"}) - private String status; } diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysDeptApiService.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysDeptApiService.java index 13fa2e0..fe15744 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysDeptApiService.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysDeptApiService.java @@ -55,13 +55,6 @@ public interface SysDeptApiService { */ int deleteById(String deptId); - /** - * 构建前端部门树 - * - * @return tree - */ - List> selectDeptTree(); - /** * 根据角色ID查询部门树信息 * diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysRoleApiService.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysRoleApiService.java index eca34be..674481c 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysRoleApiService.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysRoleApiService.java @@ -54,7 +54,7 @@ public interface SysRoleApiService { * @param roleId 角色Id * @return > 0 = success */ - int deleteById(Long roleId); + int deleteById(String roleId); /** * 批量删除 @@ -72,4 +72,12 @@ public interface SysRoleApiService { */ int authDataScope(DataScopeDto dto); + /** + * 更改状态 + * + * @param roleId roleId + * @param status status + * @return 结果 + */ + int changeStatus(String roleId, String status); } diff --git a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysUserApiService.java b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysUserApiService.java index 7bfa599..3007735 100644 --- a/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysUserApiService.java +++ b/qiaoba-apis/qiaoba-api-system/src/main/java/com/qiaoba/api/system/service/SysUserApiService.java @@ -79,12 +79,5 @@ public interface SysUserApiService { */ void handleUserRole(String userId, Set roleIds, boolean isUpdate); - /** - * 查询用户列表 - * - * @param param 查询条件 - * @return list - */ - List selectVoList(SysUserParam param); } diff --git a/qiaoba-commons/qiaoba-common-base/src/main/java/com/qiaoba/common/base/entity/BaseEntity.java b/qiaoba-commons/qiaoba-common-base/src/main/java/com/qiaoba/common/base/entity/BaseEntity.java index 6ba59ce..e52bff9 100644 --- a/qiaoba-commons/qiaoba-common-base/src/main/java/com/qiaoba/common/base/entity/BaseEntity.java +++ b/qiaoba-commons/qiaoba-common-base/src/main/java/com/qiaoba/common/base/entity/BaseEntity.java @@ -45,9 +45,4 @@ public class BaseEntity implements Serializable { */ private String remark; - /** - * 租户Id - */ - private String tenantId; - } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysDeptController.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysDeptController.java index e605dff..b3277de 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysDeptController.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysDeptController.java @@ -49,13 +49,21 @@ public class SysDeptController { return AjaxResult.success(sysDeptService.selectById(deptId)); } - @GetMapping("/deptTree") + @GetMapping("/dept-tree") @Operation(summary = "构建部门树") public AjaxResult deptTree(SysDeptParam param) { List list = sysDeptService.selectList(param); return AjaxResult.success(sysDeptService.buildDeptTree(list)); } + @GetMapping(value = "/dept-tree/{roleId}") + public AjaxResult deptTree(@PathVariable("roleId") String roleId, SysDeptParam param) { + AjaxResult ajax = AjaxResult.success(); + ajax.put("checkedKeys", sysDeptService.selectDeptIdsByRoleId(roleId)); + ajax.put("depts", sysDeptService.buildDeptTree(sysDeptService.selectList(param))); + return ajax; + } + @PreAuthorize("hasAuthority('system:dept:add')") @PostMapping @Operation(summary = "新增部门") diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysLoginController.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysLoginController.java index e1824e8..5816068 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysLoginController.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysLoginController.java @@ -61,8 +61,4 @@ public class SysLoginController { //return "{\"msg\":\"操作成功\",\"code\":200,\"data\":[{\"name\":\"System\",\"path\":\"/system\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统管理\",\"icon\":\"system\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"User\",\"path\":\"user\",\"hidden\":false,\"component\":\"system/user/index\",\"meta\":{\"title\":\"用户管理\",\"icon\":\"user\",\"noCache\":false,\"link\":null}},{\"name\":\"Role\",\"path\":\"role\",\"hidden\":false,\"component\":\"system/role/index\",\"meta\":{\"title\":\"角色管理\",\"icon\":\"peoples\",\"noCache\":false,\"link\":null}},{\"name\":\"Menu\",\"path\":\"menu\",\"hidden\":false,\"component\":\"system/menu/index\",\"meta\":{\"title\":\"菜单管理\",\"icon\":\"tree-table\",\"noCache\":false,\"link\":null}},{\"name\":\"Dept\",\"path\":\"dept\",\"hidden\":false,\"component\":\"system/dept/index\",\"meta\":{\"title\":\"部门管理\",\"icon\":\"tree\",\"noCache\":false,\"link\":null}},{\"name\":\"Post\",\"path\":\"post\",\"hidden\":false,\"component\":\"system/post/index\",\"meta\":{\"title\":\"岗位管理\",\"icon\":\"post\",\"noCache\":false,\"link\":null}},{\"name\":\"Dict\",\"path\":\"dict\",\"hidden\":false,\"component\":\"system/dict/index\",\"meta\":{\"title\":\"字典管理\",\"icon\":\"dict\",\"noCache\":false,\"link\":null}},{\"name\":\"Config\",\"path\":\"config\",\"hidden\":false,\"component\":\"system/config/index\",\"meta\":{\"title\":\"参数设置\",\"icon\":\"edit\",\"noCache\":false,\"link\":null}},{\"name\":\"Notice\",\"path\":\"notice\",\"hidden\":false,\"component\":\"system/notice/index\",\"meta\":{\"title\":\"通知公告\",\"icon\":\"message\",\"noCache\":false,\"link\":null}},{\"name\":\"Log\",\"path\":\"log\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"ParentView\",\"alwaysShow\":true,\"meta\":{\"title\":\"日志管理\",\"icon\":\"log\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Operlog\",\"path\":\"operlog\",\"hidden\":false,\"component\":\"monitor/operlog/index\",\"meta\":{\"title\":\"操作日志\",\"icon\":\"form\",\"noCache\":false,\"link\":null}},{\"name\":\"Logininfor\",\"path\":\"logininfor\",\"hidden\":false,\"component\":\"monitor/logininfor/index\",\"meta\":{\"title\":\"登录日志\",\"icon\":\"logininfor\",\"noCache\":false,\"link\":null}}]}]},{\"name\":\"Monitor\",\"path\":\"/monitor\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统监控\",\"icon\":\"monitor\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Online\",\"path\":\"online\",\"hidden\":false,\"component\":\"monitor/online/index\",\"meta\":{\"title\":\"在线用户\",\"icon\":\"online\",\"noCache\":false,\"link\":null}},{\"name\":\"Job\",\"path\":\"job\",\"hidden\":false,\"component\":\"monitor/job/index\",\"meta\":{\"title\":\"定时任务\",\"icon\":\"job\",\"noCache\":false,\"link\":null}},{\"name\":\"Druid\",\"path\":\"druid\",\"hidden\":false,\"component\":\"monitor/druid/index\",\"meta\":{\"title\":\"数据监控\",\"icon\":\"druid\",\"noCache\":false,\"link\":null}},{\"name\":\"Server\",\"path\":\"server\",\"hidden\":false,\"component\":\"monitor/server/index\",\"meta\":{\"title\":\"服务监控\",\"icon\":\"server\",\"noCache\":false,\"link\":null}},{\"name\":\"Cache\",\"path\":\"cache\",\"hidden\":false,\"component\":\"monitor/cache/index\",\"meta\":{\"title\":\"缓存监控\",\"icon\":\"redis\",\"noCache\":false,\"link\":null}},{\"name\":\"CacheList\",\"path\":\"cacheList\",\"hidden\":false,\"component\":\"monitor/cache/list\",\"meta\":{\"title\":\"缓存列表\",\"icon\":\"redis-list\",\"noCache\":false,\"link\":null}}]},{\"name\":\"Tool\",\"path\":\"/tool\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统工具\",\"icon\":\"tool\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Build\",\"path\":\"build\",\"hidden\":false,\"component\":\"tool/build/index\",\"meta\":{\"title\":\"表单构建\",\"icon\":\"build\",\"noCache\":false,\"link\":null}},{\"name\":\"Gen\",\"path\":\"gen\",\"hidden\":false,\"component\":\"tool/gen/index\",\"meta\":{\"title\":\"代码生成\",\"icon\":\"code\",\"noCache\":false,\"link\":null}},{\"name\":\"Swagger\",\"path\":\"swagger\",\"hidden\":false,\"component\":\"tool/swagger/index\",\"meta\":{\"title\":\"系统接口\",\"icon\":\"swagger\",\"noCache\":false,\"link\":null}}]},{\"name\":\"Http://ruoyi.vip\",\"path\":\"http://ruoyi.vip\",\"hidden\":false,\"component\":\"Layout\",\"meta\":{\"title\":\"若依官网\",\"icon\":\"guide\",\"noCache\":false,\"link\":\"http://ruoyi.vip\"}}]}"; } - @PostMapping("/logout") - public AjaxResult logout() { - return AjaxResult.success(); - } } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysMenuController.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysMenuController.java index 5ab08f2..f20d74e 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysMenuController.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysMenuController.java @@ -6,6 +6,7 @@ import com.qiaoba.api.system.entity.vo.SysMenuVo; import com.qiaoba.common.base.result.AjaxResult; import com.qiaoba.module.system.service.SysMenuService; import lombok.RequiredArgsConstructor; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -31,25 +32,25 @@ public class SysMenuController { return AjaxResult.success(menus); } - //@PreAuthorize("hasAuthority('system:menu:query')") + @PreAuthorize("hasAuthority('system:menu:query')") @GetMapping(value = "/{menuId}") public AjaxResult getInfo(@PathVariable String menuId) { return AjaxResult.success(sysMenuService.selectById(menuId)); } - //@PreAuthorize("hasAuthority('system:menu:add')") + @PreAuthorize("hasAuthority('system:menu:add')") @PostMapping public AjaxResult add(@Validated @RequestBody SysMenu menu) { return AjaxResult.toAjax(sysMenuService.insert(menu)); } - //@PreAuthorize("hasAuthority('system:menu:edit')") + @PreAuthorize("hasAuthority('system:menu:edit')") @PutMapping public AjaxResult edit(@Validated @RequestBody SysMenu menu) { return AjaxResult.toAjax(sysMenuService.updateById(menu)); } - //@PreAuthorize("hasAuthority('system:menu:remove')") + @PreAuthorize("hasAuthority('system:menu:remove')") @DeleteMapping("/{menuId}") public AjaxResult remove(@PathVariable("menuId") String menuId) { return AjaxResult.toAjax(sysMenuService.deleteById(menuId)); diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysRoleController.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysRoleController.java index f6e8bd4..5bb3f8f 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysRoleController.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysRoleController.java @@ -8,14 +8,18 @@ import com.qiaoba.api.system.entity.param.SysUserParam; import com.qiaoba.common.base.result.AjaxResult; import com.qiaoba.common.database.entity.PageQuery; import com.qiaoba.common.database.entity.TableDataInfo; -import com.qiaoba.module.system.service.SysDeptService; +import com.qiaoba.common.poi.utils.ExcelUtil; import com.qiaoba.module.system.service.SysRoleService; import com.qiaoba.module.system.service.SysUserRoleService; import com.qiaoba.module.system.service.SysUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -28,93 +32,97 @@ import java.util.List; @RestController @RequestMapping("/system/role") @RequiredArgsConstructor +@Tag(name = "角色管理") public class SysRoleController { private final SysRoleService sysRoleService; - private final SysDeptService sysDeptService; private final SysUserService sysUserService; private final SysUserRoleService sysUserRoleService; - //@PreAuthorize("hasAuthority('system:role:list')") + @PreAuthorize("hasAuthority('system:role:list')") @GetMapping("/list") + @Operation(summary = "获取列表") public TableDataInfo list(SysRoleParam param, PageQuery pageQuery) { return sysRoleService.selectPageList(param, pageQuery); } - //@PreAuthorize("hasAuthority('system:role:query')") + @PreAuthorize("hasAuthority('system:role:export')") + @PostMapping("/export") + @Operation(summary = "导出列表") + public void export(HttpServletResponse response, SysRoleParam param) throws Exception { + List list = sysRoleService.selectList(param); + ExcelUtil.exportExcel(list, SysRole.class, "角色数据", response); + } + + @PreAuthorize("hasAuthority('system:role:query')") @GetMapping(value = "/{roleId}") + @Operation(summary = "获取详情") public AjaxResult getInfo(@PathVariable String roleId) { return AjaxResult.success(sysRoleService.selectById(roleId)); } - //@PreAuthorize("hasAuthority('system:role:add')") + @PreAuthorize("hasAuthority('system:role:add')") @PostMapping + @Operation(summary = "添加角色") public AjaxResult add(@Validated @RequestBody SysRoleDto roleDto) { return AjaxResult.toAjax(sysRoleService.insert(roleDto)); } - //@PreAuthorize("hasAuthority('system:role:edit')") + @PreAuthorize("hasAuthority('system:role:edit')") @PutMapping + @Operation(summary = "修改角色") public AjaxResult edit(@Validated @RequestBody SysRoleDto roleDto) { return AjaxResult.toAjax(sysRoleService.updateById(roleDto)); } - //@PreAuthorize("hasAuthority('system:role:edit')") + @PreAuthorize("hasAuthority('system:role:edit')") @PutMapping("/changeStatus") + @Operation(summary = "更改状态") public AjaxResult changeStatus(@RequestBody SysRoleDto dto) { - return AjaxResult.toAjax(sysRoleService.updateById(dto)); + return AjaxResult.toAjax(sysRoleService.changeStatus(dto.getRoleId(), dto.getStatus())); } - //@PreAuthorize("hasAuthority('system:role:remove')") + @PreAuthorize("hasAuthority('system:role:remove')") @DeleteMapping("/{roleIds}") + @Operation(summary = "删除角色") public AjaxResult remove(@PathVariable List roleIds) { return AjaxResult.toAjax(sysRoleService.deleteByIds(roleIds)); } - //@PreAuthorize("hasAuthority('system:role:query')") - @GetMapping(value = "/deptTree/{roleId}") - public AjaxResult deptTree(@PathVariable("roleId") String roleId) { - AjaxResult ajax = AjaxResult.success(); - ajax.put("checkedKeys", sysDeptService.selectDeptIdsByRoleId(roleId)); - ajax.put("depts", sysDeptService.selectDeptTree()); - return ajax; - } - - //@PreAuthorize("hasAuthority('system:role:edit')") + @PreAuthorize("hasAuthority('system:role:edit')") @PutMapping("/dataScope") + @Operation(summary = "数据权限") public AjaxResult dataScope(@RequestBody DataScopeDto dto) { return AjaxResult.toAjax(sysRoleService.authDataScope(dto)); } - //@PreAuthorize("hasAuthority('system:role:list')") + @PreAuthorize("hasAuthority('system:role:list')") @GetMapping("/authUser/allocatedList") + @Operation(summary = "已绑定用户") public TableDataInfo allocatedList(SysUserParam param, PageQuery pageQuery) { return sysUserService.selectAllocatedList(param, pageQuery); } - //@PreAuthorize("hasAuthority('system:role:edit')") + @PreAuthorize("hasAuthority('system:role:edit')") @PutMapping("/authUser/cancel") + @Operation(summary = "解绑用户") public AjaxResult cancelAuthUser(@RequestParam("roleId") String roleId, @RequestParam("userIds") List userIds) { sysUserRoleService.deleteByRoleIdAndUserIds(roleId, userIds); return AjaxResult.success(); } - /** - * 查询未分配用户角色列表 - */ - //@PreAuthorize("hasAuthority('system:role:list')") + @PreAuthorize("hasAuthority('system:role:list')") @GetMapping("/authUser/unallocatedList") + @Operation(summary = "未绑定用户") public TableDataInfo unallocatedList(SysUserParam param, PageQuery pageQuery) { return sysUserService.selectUnAllocatedList(param, pageQuery); } - /** - * 批量选择用户授权 - */ - //@PreAuthorize("hasAuthority('system:role:edit')") + @PreAuthorize("hasAuthority('system:role:edit')") @PutMapping("/authUser/insert") + @Operation(summary = "绑定用户") public AjaxResult insertAuthUsers(@RequestParam("roleId") String roleId, @RequestParam("userIds") List userIds) { sysUserRoleService.insertAuthUsers(roleId, userIds); return AjaxResult.success(); diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysUserController.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysUserController.java index 234557c..adb644a 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysUserController.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/controller/SysUserController.java @@ -16,8 +16,11 @@ import com.qiaoba.common.database.entity.PageQuery; import com.qiaoba.common.database.entity.TableDataInfo; import com.qiaoba.common.poi.utils.ExcelUtil; import com.qiaoba.module.system.service.*; +import com.qiaoba.module.system.templates.SysUserExport; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -45,50 +48,50 @@ public class SysUserController { private final SysUserPostService sysUserPostService; private final SysUserRoleService sysUserRoleService; - //@PreAuthorize("hasAuthority('system:user:add')") + @PreAuthorize("hasAuthority('system:user:add')") @PostMapping + @Operation(summary = "新增用户") public AjaxResult add(@Validated @RequestBody SysUserDto dto) { return AjaxResult.toAjax(sysUserService.saveOrUpdate(dto, false)); } - //@PreAuthorize("hasAuthority('system:user:edit')") + @PreAuthorize("hasAuthority('system:user:edit')") @PutMapping + @Operation(summary = "修改用户") public AjaxResult edit(@Validated @RequestBody SysUserDto dto) { return AjaxResult.toAjax(sysUserService.saveOrUpdate(dto, true)); } - //@PreAuthorize("hasAuthority('system:user:resetPwd')") + @PreAuthorize("hasAuthority('system:user:resetPwd')") @PutMapping("/resetPwd") + @Operation(summary = "重置密码") public AjaxResult resetPwd(@RequestBody ResetPwdDto dto) { return AjaxResult.toAjax(sysUserService.resetPwd(dto)); } - //@PreAuthorize("hasAuthority('system:user:edit')") + @PreAuthorize("hasAuthority('system:user:edit')") @PutMapping("/changeStatus") + @Operation(summary = "更改状态") public AjaxResult changeStatus(@RequestBody ResetUserStatusDto dto) { return AjaxResult.toAjax(sysUserService.updateUserStatus(dto)); } - //@PreAuthorize("hasAuthority('system:user:remove')") + @PreAuthorize("hasAuthority('system:user:remove')") @DeleteMapping("/{userIds}") + @Operation(summary = "删除用户") public AjaxResult remove(@PathVariable List userIds) { return AjaxResult.toAjax(sysUserService.deleteByIds(userIds, true)); } @GetMapping("/list") + @Operation(summary = "分页查询") public TableDataInfo list(SysUserParam param, PageQuery pageQuery) { return sysUserService.selectVoPageList(param, pageQuery); } - //@PreAuthorize("hasAuthority('system:user:export')") - @PostMapping("/export") - public void export(HttpServletResponse response, SysUserParam param) { - List list = sysUserService.selectVoList(param); - ExcelUtil.exportExcel(list, SysUserVo.class, "用户数据", response); - } - - //@PreAuthorize("hasAuthority('system:user:query')") + @PreAuthorize("hasAuthority('system:user:query')") @GetMapping(value = {"/", "/{userId}"}) + @Operation(summary = "获取详情") public AjaxResult getInfo(@PathVariable(value = "userId", required = false) String userId) { AjaxResult ajax = AjaxResult.success(); List roles = sysRoleService.selectList(new SysRoleParam()); @@ -103,8 +106,17 @@ public class SysUserController { return ajax; } - //@PreAuthorize("hasAuthority('system:user:query')") + @PreAuthorize("hasAuthority('system:user:export')") + @PostMapping("/export") + @Operation(summary = "导出用户") + public void export(HttpServletResponse response, SysUserParam param) { + List list = sysUserService.selectExportData(param); + ExcelUtil.exportExcel(list, SysUserExport.class, "用户数据", response); + } + + @PreAuthorize("hasAuthority('system:user:query')") @GetMapping("/authRole/{userId}") + @Operation(summary = "已分配角色列表") public AjaxResult authRole(@PathVariable("userId") String userId) { AjaxResult ajax = AjaxResult.success(); SysUser user = sysUserService.selectById(userId, false); @@ -115,8 +127,9 @@ public class SysUserController { return ajax; } - //@PreAuthorize("hasAuthority('system:user:edit')") + @PreAuthorize("hasAuthority('system:user:edit')") @PutMapping("/authRole") + @Operation(summary = "分配角色") public AjaxResult handleUserRole(String userId, String[] roleIds) { sysUserService.handleUserRole(userId, Arrays.stream(roleIds).collect(Collectors.toSet()), true); return AjaxResult.success(); diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysMenuMapper.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysMenuMapper.java index a13d222..905c364 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysMenuMapper.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysMenuMapper.java @@ -22,7 +22,23 @@ public interface SysMenuMapper extends BaseMapperPlus 是 + */ + String existChild(String menuId); + + /** + * 校验菜单是否被绑定 + * + * @param menuId menuId + * @return 绑定的角色名称 + */ + String existUsed(String menuId); /** * 根据角色ID查询菜单树信息 diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleDeptMapper.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleDeptMapper.java index 7d7f17b..2c83d8c 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleDeptMapper.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleDeptMapper.java @@ -2,6 +2,9 @@ package com.qiaoba.module.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qiaoba.api.system.entity.SysRoleDept; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 角色部门关联 数据层 @@ -19,4 +22,12 @@ public interface SysRoleDeptMapper extends BaseMapper { */ void deleteByRoleId(String roleId); + /** + * 通过角色ID批量删除角色和部门的绑定关系 + * + * @param ids 角色ids + */ + void deleteByRoleIds(@Param("list") List ids); + + } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleMapper.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleMapper.java index a86f93f..3d26a60 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleMapper.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysRoleMapper.java @@ -2,6 +2,9 @@ package com.qiaoba.module.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qiaoba.api.system.entity.SysRole; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 角色管理 数据层 @@ -16,16 +19,24 @@ public interface SysRoleMapper extends BaseMapper { * 校验角色名称是否唯一 * * @param role role - * @return count + * @return != null -> 不唯一 */ - int checkRoleNameUnique(SysRole role); + String checkRoleNameUnique(SysRole role); /** * 校验角色权限是否唯一 * * @param role role - * @return count + * @return != null -> 不唯一 */ - int checkRoleKeyUnique(SysRole role); + String checkRoleKeyUnique(SysRole role); + + /** + * 查询角色已绑定的第一个人名 + * + * @param ids ids + * @return 已绑定的人名 + */ + String selectBindUserByRoleId(@Param("list") List ids); } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserMapper.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserMapper.java index 155ee07..d2b7ab8 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserMapper.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/mapper/SysUserMapper.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.qiaoba.api.system.entity.SysUser; import com.qiaoba.api.system.entity.param.SysUserParam; import com.qiaoba.api.system.entity.vo.SysUserVo; +import com.qiaoba.module.system.templates.SysUserExport; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -68,6 +69,14 @@ public interface SysUserMapper extends BaseMapper { */ List selectVoList(@Param("param") SysUserParam param); + /** + * 查询导出数据 + * + * @param param 查询条件 + * @return list + */ + List selectExportData(@Param("param") SysUserParam param); + /** * 分页查询角色已绑定的用户列表 * diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysRoleDeptService.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysRoleDeptService.java index ca25e1a..c53e853 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysRoleDeptService.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysRoleDeptService.java @@ -21,9 +21,16 @@ public interface SysRoleDeptService { void insertBatch(List list); /** - * 通过角色ID批量删除角色和部门的绑定关系 + * 通过角色ID删除角色和部门的绑定关系 * * @param roleId 角色id */ void deleteByRoleId(String roleId); + + /** + * 通过角色ID批量删除角色和部门的绑定关系 + * + * @param ids 角色ids + */ + void deleteByRoleIds(List ids); } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysRoleMenuService.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysRoleMenuService.java index f532903..08868f0 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysRoleMenuService.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysRoleMenuService.java @@ -26,4 +26,11 @@ public interface SysRoleMenuService { * @param ids 角色ids */ void deleteByRoleIds(List ids); + + /** + * 通过角色ID删除角色和菜单的绑定关系 + * + * @param roleId 角色id + */ + void deleteByRoleId(String roleId); } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserService.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserService.java index d026b03..7d76e55 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserService.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/SysUserService.java @@ -7,6 +7,8 @@ import com.qiaoba.api.system.entity.vo.SysUserVo; import com.qiaoba.api.system.service.SysUserApiService; import com.qiaoba.common.database.entity.PageQuery; import com.qiaoba.common.database.entity.TableDataInfo; +import com.qiaoba.module.system.templates.SysUserExport; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -63,4 +65,13 @@ public interface SysUserService extends SysUserApiService { */ TableDataInfo selectUnAllocatedList(SysUserParam param, PageQuery pageQuery); + + /** + * 查询导出数据 + * + * @param param 查询条件 + * @return list + */ + List selectExportData(@Param("param") SysUserParam param); + } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysDeptServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysDeptServiceImpl.java index 7030beb..d56f47a 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysDeptServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysDeptServiceImpl.java @@ -95,21 +95,11 @@ public class SysDeptServiceImpl implements SysDeptService { } String nickname = sysDeptMapper.existUsed(deptId); if (StrUtil.isNotBlank(nickname)) { - throw new ServiceException(StrUtil.format("用户[{}]已绑定部门,不允许删除", nickname)); + throw new ServiceException(StrUtil.format("用户[{}]已绑定该部门,请解绑后删除", nickname)); } return sysDeptMapper.deleteById(deptId); } - @Override - public List> selectDeptTree() { - List deptList = selectList(new SysDeptParam()); - TreeNodeConfig config = TreeNodeConfig.DEFAULT_CONFIG.setNameKey(BaseConstant.TREE_KEY_NAME); - return TreeUtil.build(deptList, BaseConstant.DEFAULT_PARENT_ID_VALUE, config, (dept, tree) -> - tree.setId(dept.getDeptId()) - .setParentId(dept.getParentId()) - .setName(dept.getDeptName()) - .setWeight(dept.getOrderNum())); - } @Override public List selectDeptIdsByRoleId(String roleId) { diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysMenuServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysMenuServiceImpl.java index bbe5f09..61f97e7 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysMenuServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysMenuServiceImpl.java @@ -9,6 +9,7 @@ import com.qiaoba.api.system.entity.SysMenu; import com.qiaoba.api.system.entity.param.SysMenuParam; import com.qiaoba.api.system.entity.vo.RouterVo; import com.qiaoba.api.system.entity.vo.SysMenuVo; +import com.qiaoba.auth.utils.SecurityUtil; import com.qiaoba.common.base.constants.BaseConstant; import com.qiaoba.common.base.exceptions.ServiceException; import com.qiaoba.module.system.mapper.SysMenuMapper; @@ -40,6 +41,7 @@ public class SysMenuServiceImpl implements SysMenuService { throw new ServiceException("同级下菜单名称不允许重复!"); } sysMenu.setCreateTime(new Date()); + sysMenu.setCreateUser(SecurityUtil.getLoginUsername()); return sysMenuMapper.insert(sysMenu); } @@ -48,6 +50,8 @@ public class SysMenuServiceImpl implements SysMenuService { if (checkMenuNameNotUnique(sysMenu)) { throw new ServiceException("同级下菜单名称不允许重复!"); } + sysMenu.setUpdateTime(new Date()); + sysMenu.setUpdateUser(SecurityUtil.getLoginUsername()); return sysMenuMapper.updateById(sysMenu); } @@ -63,6 +67,7 @@ public class SysMenuServiceImpl implements SysMenuService { @Override public int deleteById(String menuId) { + checkAllowDelete(menuId); return sysMenuMapper.deleteById(menuId); } @@ -107,8 +112,17 @@ public class SysMenuServiceImpl implements SysMenuService { private boolean checkMenuNameNotUnique(SysMenu menu) { - return sysMenuMapper.checkMenuNameUnique(menu) > 0; + return StrUtil.isNotBlank(sysMenuMapper.checkMenuNameUnique(menu)); } + private void checkAllowDelete(String menuId) { + if (StrUtil.isNotBlank(sysMenuMapper.existChild(menuId))) { + throw new ServiceException("存在子菜单, 不允许删除!"); + } + String role = sysMenuMapper.existUsed(menuId); + if (StrUtil.isNotBlank(role)) { + throw new ServiceException(StrUtil.format("已绑定角色: {}, 请解绑后删除!", role)); + } + } } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleDeptServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleDeptServiceImpl.java index 1f26848..14e3334 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleDeptServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleDeptServiceImpl.java @@ -32,4 +32,9 @@ public class SysRoleDeptServiceImpl implements SysRoleDeptService { sysRoleDeptMapper.deleteByRoleId(roleId); } + @Override + public void deleteByRoleIds(List ids) { + sysRoleDeptMapper.deleteByRoleIds(ids); + } + } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleMenuServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleMenuServiceImpl.java index d40ea05..e435008 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleMenuServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleMenuServiceImpl.java @@ -1,5 +1,6 @@ package com.qiaoba.module.system.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.Db; import com.qiaoba.api.system.entity.SysRoleMenu; import com.qiaoba.module.system.mapper.SysRoleMenuMapper; @@ -32,4 +33,11 @@ public class SysRoleMenuServiceImpl implements SysRoleMenuService { sysRoleMenuMapper.deleteByRoleIds(ids); } + @Override + public void deleteByRoleId(String roleId) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.lambda().eq(SysRoleMenu::getRoleId, roleId); + sysRoleMenuMapper.delete(wrapper); + } + } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java index 73883b9..52d5f98 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysRoleServiceImpl.java @@ -50,6 +50,7 @@ public class SysRoleServiceImpl implements SysRoleService { sysRole.setCreateTime(new Date()); checkAllowAddOrUpdate(sysRole); + int row = sysRoleMapper.insert(sysRole); insertRoleMenu(sysRole.getRoleId(), roleDto.getMenuIds()); return row; @@ -59,6 +60,11 @@ public class SysRoleServiceImpl implements SysRoleService { @Transactional(rollbackFor = Exception.class) public int updateById(SysRoleDto roleDto) { SysRole sysRole = BeanUtil.copyProperties(roleDto, SysRole.class); + sysRole.setUpdateUser(SecurityUtil.getLoginUsername()); + sysRole.setUpdateTime(new Date()); + + checkAllowAddOrUpdate(sysRole); + sysRoleMenuService.deleteByRoleIds(CollUtil.toList(sysRole.getRoleId())); insertRoleMenu(sysRole.getRoleId(), roleDto.getMenuIds()); return sysRoleMapper.updateById(sysRole); @@ -75,18 +81,25 @@ public class SysRoleServiceImpl implements SysRoleService { } @Override - public int deleteById(Long roleId) { - return 0; + @Transactional(rollbackFor = Exception.class) + public int deleteById(String roleId) { + checkAllowDelete(CollUtil.toList(roleId)); + sysRoleMenuService.deleteByRoleId(roleId); + sysRoleDeptService.deleteByRoleId(roleId); + return sysRoleMapper.deleteById(roleId); } @Override @Transactional(rollbackFor = Exception.class) public int deleteByIds(List ids) { + checkAllowDelete(ids); + sysRoleDeptService.deleteByRoleIds(ids); sysRoleMenuService.deleteByRoleIds(ids); return sysRoleMapper.deleteBatchIds(ids); } @Override + @Transactional(rollbackFor = Exception.class) public int authDataScope(DataScopeDto dto) { // 更新信息 SysRole sysRole = BeanUtil.copyProperties(dto, SysRole.class); @@ -105,6 +118,14 @@ public class SysRoleServiceImpl implements SysRoleService { return row; } + @Override + public int changeStatus(String roleId, String status) { + SysRole sysRole = new SysRole(); + sysRole.setRoleId(roleId); + sysRole.setStatus(status); + return sysRoleMapper.updateById(sysRole); + } + private QueryWrapper param2Wrapper(SysRoleParam param) { QueryWrapper wrapper = new QueryWrapper<>(); @@ -124,10 +145,10 @@ public class SysRoleServiceImpl implements SysRoleService { } private void checkAllowAddOrUpdate(SysRole role) { - if (!checkRoleNameUnique(role)) { + if (checkRoleNameNotUnique(role)) { throw new ServiceException(StrUtil.format("新增或修改角色'{}'失败,角色名称已存在", role.getRoleName())); } - if (!checkRoleKeyUnique(role)) { + if (checkRoleKeyNotUnique(role)) { throw new ServiceException(StrUtil.format("新增或修改角色'{}'失败,角色权限已存在", role.getRoleName())); } } @@ -138,8 +159,8 @@ public class SysRoleServiceImpl implements SysRoleService { * @param role 角色信息 * @return 结果 */ - private boolean checkRoleNameUnique(SysRole role) { - return sysRoleMapper.checkRoleNameUnique(role) == 0; + private boolean checkRoleNameNotUnique(SysRole role) { + return StrUtil.isNotBlank(sysRoleMapper.checkRoleNameUnique(role)); } /** @@ -148,10 +169,11 @@ public class SysRoleServiceImpl implements SysRoleService { * @param role 角色信息 * @return 结果 */ - private boolean checkRoleKeyUnique(SysRole role) { - return sysRoleMapper.checkRoleKeyUnique(role) == 0; + private boolean checkRoleKeyNotUnique(SysRole role) { + return StrUtil.isNotBlank(sysRoleMapper.checkRoleKeyUnique(role)); } + private void insertRoleMenu(String roleId, Set menuIds) { if (CollUtil.isEmpty(menuIds)) { return; @@ -162,4 +184,11 @@ public class SysRoleServiceImpl implements SysRoleService { } sysRoleMenuService.insertBatch(list); } + + private void checkAllowDelete(List ids) { + String user = sysRoleMapper.selectBindUserByRoleId(ids); + if (StrUtil.isNotBlank(user)) { + throw new ServiceException(StrUtil.format("删除角色失败,已绑定用户: {}", user)); + } + } } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserDetailsServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserDetailsServiceImpl.java index a2513e5..9642b4c 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserDetailsServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserDetailsServiceImpl.java @@ -34,7 +34,6 @@ public class SysUserDetailsServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { SysUser user = sysUserService.selectByUsername(username); - StrUtil.format("{}",1); return createUserDetails(user); } diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserServiceImpl.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserServiceImpl.java index 4042a42..c84cfe1 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserServiceImpl.java +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/service/impl/SysUserServiceImpl.java @@ -24,6 +24,7 @@ import com.qiaoba.module.system.mapper.SysUserMapper; import com.qiaoba.module.system.service.SysUserPostService; import com.qiaoba.module.system.service.SysUserRoleService; import com.qiaoba.module.system.service.SysUserService; +import com.qiaoba.module.system.templates.SysUserExport; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -84,9 +85,8 @@ public class SysUserServiceImpl implements SysUserService { @Override public int resetPwd(ResetPwdDto dto) { - // todo 加密密码 - dto.setPassword("123456"); SysUser sysUser = BeanUtil.copyProperties(dto, SysUser.class); + sysUser.setPassword(SecurityUtil.encryptPassword(dto.getPassword())); return sysUserMapper.updateById(sysUser); } @@ -148,8 +148,9 @@ public class SysUserServiceImpl implements SysUserService { } @Override - public List selectVoList(SysUserParam param) { - return sysUserMapper.selectVoList(param); + public List selectExportData(SysUserParam param) { + return sysUserMapper.selectExportData(param); + //return sysUserMapper.selectVoList(param); } private QueryWrapper param2Wrapper(SysUserParam sysUserParam) { @@ -168,7 +169,7 @@ public class SysUserServiceImpl implements SysUserService { private SysUser dtoToSysUser(SysUserDto dto, Boolean isUpdate) { if (StrUtil.isNotBlank(dto.getPassword())) { - dto.setPassword("123456"); + dto.setPassword(SecurityUtil.encryptPassword(dto.getPassword())); } SysUser sysUser = BeanUtil.copyProperties(dto, SysUser.class); if (isUpdate) { diff --git a/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/templates/SysUserExport.java b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/templates/SysUserExport.java new file mode 100644 index 0000000..1999526 --- /dev/null +++ b/qiaoba-modules/qiaoba-module-system/src/main/java/com/qiaoba/module/system/templates/SysUserExport.java @@ -0,0 +1,55 @@ +package com.qiaoba.module.system.templates; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import cn.afterturn.easypoi.excel.annotation.ExcelCollection; +import cn.hutool.core.collection.CollUtil; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * 用户导出模板 + * + * @author ailanyin + * @version 1.0 + * @since 2023/5/17 17:16 + */ +@Data +public class SysUserExport { + + @Excel(name = "用户ID", width = 25) + private String userId; + + @Excel(name = "登录账号", width = 20) + private String username; + + @Excel(name = "姓名", width = 20) + private String nickname; + + @Excel(name = "部门", width = 20) + private String deptName; + + @Excel(name = "性别", replace = {"男_0", "女_1", "未知_2"}) + private String gender; + + @Excel(name = "手机", width = 20) + private String phone; + + @Excel(name = "邮箱", width = 20) + private String email; + + @Excel(name = "状态", replace = {"正常_1", "停用_0"}) + private String status; + + @Excel(name = "创建时间", width = 30, format = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + private String role = this.roles.toString(); + //@ExcelCollection(name = "角色") + private List roles; + + //@ExcelCollection(name = "岗位") + private List posts; + +} diff --git a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysMenuMapper.xml b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysMenuMapper.xml index 6198cdb..3ed5d2e 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysMenuMapper.xml +++ b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysMenuMapper.xml @@ -4,13 +4,24 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + select menu_id from sys_menu where menu_name= #{menuName} and parent_id = #{parentId} and menu_id != #{menuId} - limit 1 + + + + + + diff --git a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysRoleDeptMapper.xml b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysRoleDeptMapper.xml index 12bd96f..2017113 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysRoleDeptMapper.xml +++ b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysRoleDeptMapper.xml @@ -7,4 +7,12 @@ delete from sys_role_dept where role_id = #{roleId} + + + delete from sys_role_dept where role_id in + + #{roleId} + + + diff --git a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysRoleMapper.xml b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysRoleMapper.xml index 4dd3d4f..662103e 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysRoleMapper.xml +++ b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysRoleMapper.xml @@ -4,22 +4,33 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + select role_id from sys_role + where role_name = #{roleName} and role_id != #{roleId} limit 1 - + select role_id from sys_role + where role_key = #{roleKey} and role_id != #{roleId} limit 1 + diff --git a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysUserMapper.xml b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysUserMapper.xml index 5fa9153..94e833a 100644 --- a/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysUserMapper.xml +++ b/qiaoba-modules/qiaoba-module-system/src/main/resources/mapper/SysUserMapper.xml @@ -16,6 +16,28 @@ + + + + + + + + + + + + + + + + + + + + + + SELECT u.user_id,u.dept_id,u.username,u.nickname,u.gender,u.phone,u.status,u.email,u.create_time,t2.dept_name FROM sys_user u @@ -49,6 +71,38 @@ + +