package com.caimei.service.sys.impl; import com.caimei.mapper.cmMapper.SystemMapper; import com.caimei.model.ResponseJson; import com.caimei.model.po.SysRole; import com.caimei.service.sys.SysRoleService; import com.caimei.utils.CommonUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.util.List; /** * Description * * @author : Charles * @date : 2022/1/6 */ @Slf4j @Service public class SysRoleServiceImpl implements SysRoleService { @Resource private SystemMapper systemMapper; /** * 获取角色列表 * * @param pageNum 页码 * @param pageSize 每页大小 */ @Override public ResponseJson> getRoleList(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); List roles = systemMapper.getRoleList(); PageInfo pageData = new PageInfo<>(roles); return ResponseJson.success(pageData); } /** * 根据ID获取角色 */ @Override public ResponseJson getRoleInfo(Integer id) { SysRole sysRole = getRole(id); if (null != sysRole) { // 根据角色ID获取菜单Ids List menuIdList = systemMapper.getMenuIdsByRoleId(id); String menuIds = CommonUtil.idListToString(menuIdList, ","); // 根据角色ID获取(权限-菜单)Ids List permissionIdList = systemMapper.getPermissionMenuIdsByRoleId(id); StringBuilder ids = new StringBuilder(menuIds); for (String permissionId : permissionIdList) { ids.append(",").append(permissionId); } sysRole.setMenuIds(ids.toString()); } return ResponseJson.success(sysRole); } private SysRole getRole(Integer id) { return systemMapper.getRole(id); } /** * 根据ID更新角色 */ @Transactional(rollbackFor=Exception.class) @Override public ResponseJson updateRole(Integer id, SysRole sysRole) { sysRole.setId(id); sysRole.setDelFlag(0); // 菜单Ids,用","隔开 String menuIds = sysRole.getMenuIds(); if (1 == id) { sysRole.setRoleName("shop_base_role"); sysRole.setRoleDesc("供应商基础功能角色"); } systemMapper.updateRole(sysRole); // 保存角色菜单关系 saveRoleMenuRelation(sysRole.getId(), menuIds); return ResponseJson.success(); } /** * 添加角色 */ @Transactional(rollbackFor=Exception.class) @Override public ResponseJson addRole(SysRole sysRole) { if (StringUtils.hasLength(sysRole.getRoleName())) { // 查询是否存在当前角色 SysRole dbRole = systemMapper.getRoleByRoleName(sysRole.getRoleName()); if (null == dbRole) { String menuIds = sysRole.getMenuIds(); // 保存角色 sysRole.setRoleType(null == sysRole.getRoleType() ? 1 : sysRole.getRoleType()); systemMapper.insertRole(sysRole); // 保存角色菜单关系 saveRoleMenuRelation(sysRole.getId(), menuIds); return ResponseJson.success(); }else { return ResponseJson.error("角色名已存在", null); } } return ResponseJson.error("角色名称不能为空", null); } /** * 根据ID删除角色 */ @Transactional(rollbackFor=Exception.class) @Override public ResponseJson deleteRole(Integer id) { // 删除角色菜单关联 systemMapper.deleteRoleMenuRelation(id); // 删除原有角色权限关联 systemMapper.deleteRolePermissionRelation(id); // 删除角色 systemMapper.deleteRole(id); return ResponseJson.success(); } /** * 角色授权菜单 */ @Override public ResponseJson setRoleMenu(Integer id, SysRole sysRole) { // 删除原有角色菜单关联 systemMapper.deleteRoleMenuRelation(id); // 保存角色菜单关系 String menuIds = sysRole.getMenuIds(); saveRoleMenuRelation(id, menuIds); return ResponseJson.success(); } /** * 保存角色菜单关系 */ private void saveRoleMenuRelation(Integer roleId, String menuIds) { // 删除原有角色菜单关联 systemMapper.deleteRoleMenuRelation(roleId); // 删除原有角色权限关联 systemMapper.deleteRolePermissionRelation(roleId); if (StringUtils.hasLength(menuIds)) { // 设置角色菜单 String[] split = menuIds.split(","); for (String s : split) { if (StringUtils.hasLength(s)) { if (s.contains("-")) { // 保存角色权限关系 String[] ids = s.split("-"); systemMapper.insertRolePermissionRelation(roleId, Integer.valueOf(ids[0])); } else { // 保存角色菜单关系 systemMapper.insertRoleMenuRelation(roleId, Integer.valueOf(s)); } } } } } }