diff --git a/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/dto/RoleDto.java b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/dto/RoleDto.java index ebcb976..c8e064e 100644 --- a/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/dto/RoleDto.java +++ b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/dto/RoleDto.java @@ -12,6 +12,9 @@ import lombok.Data; @Data public class RoleDto { + @ApiModelProperty(value = "角色ID") + private Integer roleId; + @ApiModelProperty(value = "角色名称") private String roleName; } diff --git a/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/RoleVo.java b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/RoleVo.java index 9cd86ae..7ad948e 100644 --- a/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/RoleVo.java +++ b/securitycontrol-commons/securitycontrol-commons-entity/src/main/java/com/securitycontrol/entity/system/vo/RoleVo.java @@ -2,6 +2,11 @@ package com.securitycontrol.entity.system.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import java.util.List; /** * @author:cwchen @@ -16,9 +21,24 @@ public class RoleVo { private Integer roleId; @ApiModelProperty(value = "角色名称") + @NotBlank(message = "角色名称不能为空") + @Length(max = 30,message = "字符长度不能超过30个字符") private String roleName; @ApiModelProperty(value = "排序") + @NotBlank(message = "排序不能为空") + @Pattern(regexp = "[1-9]\\d{0,2}$|^1000",message = "排序为1-1000") private String roleSort; + @ApiModelProperty(value = "创建时间") + private String createTime; + + @ApiModelProperty(value = "flag") + private boolean flag; + + @ApiModelProperty(value = "类型") + private Integer type; + + @ApiModelProperty(value = "菜单ID集合") + private List menuIds; } diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/controller/RoleController.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/controller/RoleController.java index cc4954c..3e99749 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/controller/RoleController.java +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/controller/RoleController.java @@ -1,10 +1,17 @@ package com.securitycontrol.system.base.controller; +import com.securitycontrol.common.core.web.controller.BaseController; +import com.securitycontrol.common.core.web.domain.AjaxResult; +import com.securitycontrol.common.core.web.page.TableDataInfo; +import com.securitycontrol.entity.system.dto.RoleDto; +import com.securitycontrol.entity.system.vo.RoleVo; import com.securitycontrol.system.base.service.IRoleService; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; /** * @author:cwchen @@ -14,8 +21,52 @@ import javax.annotation.Resource; */ @RestController @RequestMapping("/sys/role/") -public class RoleController { +public class RoleController extends BaseController { @Resource(name = "IRoleService") private IRoleService service; + + @ApiOperation(value = "获取角色列表") + @GetMapping("getRoleLists") + public TableDataInfo getRoleLists(RoleDto dto) { + startPage(); + List list = service.getRoleLists(dto); + return getDataTable(list); + } + + @ApiOperation(value = "新增角色") + @PostMapping("addRole") + public AjaxResult addRole(@Valid @RequestBody RoleVo vo){ + return service.addOrUpdateRole(vo); + } + + @ApiOperation(value = "修改角色") + @PostMapping("editRole") + public AjaxResult editRole(@Valid @RequestBody RoleVo vo){ + return service.addOrUpdateRole(vo); + } + + @ApiOperation(value = "角色详情") + @GetMapping("getRoleById") + public AjaxResult getRoleById(RoleDto dto){ + return service.getRoleById(dto); + } + + @ApiOperation(value = "删除角色") + @PostMapping("delRole") + public AjaxResult delRole(RoleDto dto){ + return service.delRole(dto); + } + + @ApiOperation(value = "角色授权菜单") + @PostMapping("authMenu") + public AjaxResult authMenu(@RequestBody RoleVo vo){ + return service.authMenu(vo); + } + + @ApiOperation(value = "获取角色授权的菜单") + @GetMapping("getAuthMenus") + public AjaxResult getAuthMenu(RoleDto dto){ + return service.getAuthMenu(dto); + } } diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/controller/SelectController.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/controller/SelectController.java index 83822f2..48507d4 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/controller/SelectController.java +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/controller/SelectController.java @@ -35,4 +35,9 @@ public class SelectController extends BaseController { return service.getRoleLists(); } + @ApiOperation(value = "菜单树") + @PostMapping("getMenuTree") + public AjaxResult getMenuTree(){ + return service.getMenuTree(); + } } diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/mapper/IRoleMapper.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/mapper/IRoleMapper.java index 4a98b1b..874eb3a 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/mapper/IRoleMapper.java +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/mapper/IRoleMapper.java @@ -1,7 +1,11 @@ package com.securitycontrol.system.base.mapper; +import com.securitycontrol.entity.system.dto.RoleDto; +import com.securitycontrol.entity.system.vo.RoleVo; import org.springframework.stereotype.Repository; +import java.util.List; + /** * @author:cwchen * @date:2024-02-23-18:34 @@ -10,4 +14,98 @@ import org.springframework.stereotype.Repository; */ @Repository(value = "IRoleMapper") public interface IRoleMapper { + + /** + * 角色列表 + * + * @param dto + * @return List + * @description 角色列表 + * @author cwchen + * @date 2024/2/26 9:34 + */ + List getRoleLists(RoleDto dto); + + /** + * 新增/修改角色 + * + * @param vo + * @description + * @author cwchen + * @date 2024/2/26 10:32 + */ + void addOrUpdateRole(RoleVo vo); + + /** + * 角色是否存在 + * + * @param roleName + * @return int + * @description 角色是否存在 + * @author cwchen + * @date 2024/2/26 10:38 + */ + int isRoleName(String roleName); + + /** + * 角色详情 + * + * @param dto + * @return RoleVo + * @description 角色详情 + * @author cwchen + * @date 2024/2/26 10:45 + */ + RoleVo getRoleById(RoleDto dto); + + /** + * 是否存在用户使用该角色 + * + * @param dto + * @return int + * @description 是否存在用户使用该角色 + * @author cwchen + * @date 2024/2/26 10:50 + */ + int isUserUse(RoleDto dto); + + /** + * 删除角色 + * + * @param dto + * @description 删除角色 + * @author cwchen + * @date 2024/2/26 10:51 + */ + void deleteRole(RoleDto dto); + + /** + * 删除角色已授权的菜单数据 + * + * @param vo + * @description + * @author cwchen + * @date 2024/2/26 14:49 + */ + void delRoleMenu(RoleVo vo); + + /** + * 新增角色授权的菜单数据 + * + * @param vo + * @description + * @author cwchen + * @date 2024/2/26 14:49 + */ + void addRoleMenu(RoleVo vo); + + /** + * 获取角色授权的菜单 + * @param dto + * @return List + * @description 获取角色授权的菜单 + * @author cwchen + * @date 2024/2/26 14:55 + */ + List getAuthMenu(RoleDto dto); } diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/mapper/ISelectMapper.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/mapper/ISelectMapper.java index bab3911..2af6440 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/mapper/ISelectMapper.java +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/mapper/ISelectMapper.java @@ -27,10 +27,20 @@ public interface ISelectMapper { /** * 角色下拉选 + * * @return List * @description 角色下拉选 * @author cwchen * @date 2024/2/22 13:28 */ List getRoleLists(); + + /** + * 菜单树 + * @return List + * @description + * @author cwchen + * @date 2024/2/26 13:35 + */ + List getMenuTree(); } diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/IRoleService.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/IRoleService.java index 7a2cbae..2c1896a 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/IRoleService.java +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/IRoleService.java @@ -1,5 +1,11 @@ package com.securitycontrol.system.base.service; +import com.securitycontrol.common.core.web.domain.AjaxResult; +import com.securitycontrol.entity.system.dto.RoleDto; +import com.securitycontrol.entity.system.vo.RoleVo; + +import java.util.List; + /** * @author:cwchen * @date:2024-02-23-18:32 @@ -7,4 +13,69 @@ package com.securitycontrol.system.base.service; * @description:角色管理-业务层 */ public interface IRoleService { + + /** + * 角色列表 + * + * @param dto + * @return List + * @description 角色列表 + * @author cwchen + * @date 2024/2/26 9:32 + */ + List getRoleLists(RoleDto dto); + + /** + * 新增/修改角色 + * + * @param vo + * @return AjaxResult + * @description 新增/修改角色 + * @author cwchen + * @date 2024/2/26 10:29 + */ + AjaxResult addOrUpdateRole(RoleVo vo); + + /** + * 角色详情 + * + * @param dto + * @return AjaxResult + * @description + * @author cwchen + * @date 2024/2/26 10:42 + */ + AjaxResult getRoleById(RoleDto dto); + + /** + * 删除角色 + * + * @param dto + * @return AjaxResult + * @description + * @author cwchen + * @date 2024/2/26 10:48 + */ + AjaxResult delRole(RoleDto dto); + + /** + * 角色授权菜单 + * + * @param vo + * @return AjaxResult + * @description 角色授权菜单 + * @author cwchen + * @date 2024/2/26 14:41 + */ + AjaxResult authMenu(RoleVo vo); + + /** + * 获取角色授权的菜单 + * @param dto + * @return AjaxResult + * @description 获取角色授权的菜单 + * @author cwchen + * @date 2024/2/26 14:54 + */ + AjaxResult getAuthMenu(RoleDto dto); } diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/ISelectService.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/ISelectService.java index 26b0073..002ca2f 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/ISelectService.java +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/ISelectService.java @@ -22,10 +22,20 @@ public interface ISelectService { /** * 角色下拉选 + * * @return AjaxResult * @description 角色下拉选 * @author cwchen * @date 2024/2/22 13:27 */ AjaxResult getRoleLists(); + + /** + * 菜单树 + * @return AjaxResult + * @description 菜单树 + * @author cwchen + * @date 2024/2/26 13:33 + */ + AjaxResult getMenuTree(); } diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/RoleServiceImpl.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/RoleServiceImpl.java index 43b249c..c3bb343 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/RoleServiceImpl.java +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/RoleServiceImpl.java @@ -1,10 +1,19 @@ package com.securitycontrol.system.base.service.impl; +import com.securitycontrol.common.core.utils.aes.DateTimeHelper; +import com.securitycontrol.common.core.web.domain.AjaxResult; +import com.securitycontrol.entity.system.dto.RoleDto; +import com.securitycontrol.entity.system.vo.RoleVo; import com.securitycontrol.system.base.mapper.IRoleMapper; import com.securitycontrol.system.base.service.IRoleService; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; /** * @author:cwchen @@ -13,8 +22,81 @@ import javax.annotation.Resource; * @description:角色管理-业务逻辑层 */ @Service(value = "IRoleService") +@Slf4j public class RoleServiceImpl implements IRoleService { @Resource(name = "IRoleMapper") private IRoleMapper mapper; + + @Override + public List getRoleLists(RoleDto dto) { + List list = new ArrayList<>(); + list = mapper.getRoleLists(dto); + return list; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult addOrUpdateRole(RoleVo vo) { + try { + int result = mapper.isRoleName(vo.getRoleName()); + if (vo.getRoleId() == null) { + vo.setType(1); + vo.setCreateTime(DateTimeHelper.getNowTime()); + if(result > 0){ + return AjaxResult.error("角色已存在"); + } + } else { + vo.setType(2); + if(vo.isFlag()){ + if(result > 0){ + return AjaxResult.error("角色已存在"); + } + } + } + mapper.addOrUpdateRole(vo); + } catch (Exception e) { + log.error("角色",e); + //手动回滚异常 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + @Override + public AjaxResult getRoleById(RoleDto dto) { + RoleVo vo = new RoleVo(); + vo = mapper.getRoleById(dto); + return AjaxResult.success(vo); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult delRole(RoleDto dto) { + int result = mapper.isUserUse(dto); + if(result > 0){ + return AjaxResult.error("已有用户绑定该角色,请先删除用户"); + } + mapper.deleteRole(dto); + return AjaxResult.success(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public AjaxResult authMenu(RoleVo vo) { + if(vo.getRoleId() == null || vo.getMenuIds() == null){ + return AjaxResult.error("参数不完整"); + } + mapper.delRoleMenu(vo); + mapper.addRoleMenu(vo); + return AjaxResult.success(); + } + + @Override + public AjaxResult getAuthMenu(RoleDto dto) { + List list = new ArrayList<>(); + list = mapper.getAuthMenu(dto); + return AjaxResult.success(list); + } } diff --git a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/ISelectServiceImpl.java b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/SelectServiceImpl.java similarity index 70% rename from securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/ISelectServiceImpl.java rename to securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/SelectServiceImpl.java index dc35dda..b9a2a40 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/ISelectServiceImpl.java +++ b/securitycontrol-model/securitycontrol-system/src/main/java/com/securitycontrol/system/base/service/impl/SelectServiceImpl.java @@ -22,7 +22,7 @@ import java.util.List; */ @Service(value = "ISelectService") @Slf4j -public class ISelectServiceImpl implements ISelectService { +public class SelectServiceImpl implements ISelectService { @Resource(name = "ISelectMapper") private ISelectMapper mapper; @@ -34,7 +34,7 @@ public class ISelectServiceImpl implements ISelectService { List list = mapper.getOrgTree(); if (CollectionUtils.isNotEmpty(list)) { // 创建树形结构(数据集合作为参数) - groupList= TreeBuild.transTreeList(list); + groupList = TreeBuild.transTreeList(list); } } catch (Exception e) { log.error("组织机构树-查询失败", e); @@ -49,5 +49,18 @@ public class ISelectServiceImpl implements ISelectService { return AjaxResult.success(list); } - + @Override + public AjaxResult getMenuTree() { + List groupList = new ArrayList<>(); + try { + List list = mapper.getMenuTree(); + if (CollectionUtils.isNotEmpty(list)) { + // 创建树形结构(数据集合作为参数) + groupList = TreeBuild.transTreeList(list); + } + } catch (Exception e) { + log.error("菜单树-查询失败", e); + } + return AjaxResult.success(groupList); + } } diff --git a/securitycontrol-model/securitycontrol-system/src/main/resources/mapper/base/RoleMapper.xml b/securitycontrol-model/securitycontrol-system/src/main/resources/mapper/base/RoleMapper.xml index af35218..bd24acc 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/resources/mapper/base/RoleMapper.xml +++ b/securitycontrol-model/securitycontrol-system/src/main/resources/mapper/base/RoleMapper.xml @@ -1,5 +1,80 @@ + + + + INSERT INTO sys_role + + role_name, + role_sort, + create_time, + + + #{roleName}, + #{roleSort}, + #{createTime}, + + + + UPDATE sys_role + + role_name = #{roleName}, + role_sort = #{roleSort}, + + WHERE role_id = #{roleId} + + + + + INSERT INTO sys_role_menu(role_id,menu_id) VALUES + + ( + #{roleId},#{item} + ) + + + + + UPDATE sys_role SET del_flag = 1 WHERE role_id = #{roleId} + + + + DELETE FROM sys_role_menu WHERE role_id = #{roleId} + + + + + + + + + + + \ No newline at end of file diff --git a/securitycontrol-model/securitycontrol-system/src/main/resources/mapper/base/SelectMapper.xml b/securitycontrol-model/securitycontrol-system/src/main/resources/mapper/base/SelectMapper.xml index 9fa2c56..5888555 100644 --- a/securitycontrol-model/securitycontrol-system/src/main/resources/mapper/base/SelectMapper.xml +++ b/securitycontrol-model/securitycontrol-system/src/main/resources/mapper/base/SelectMapper.xml @@ -18,4 +18,13 @@ WHERE del_flag = 0 ORDER BY role_sort + + \ No newline at end of file