mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-10-31 22:57:17 +08:00 
			
		
		
		
	refactor: 优化系统管理相关代码及初始菜单脚本
1.优化方法排序 2.优化前端模板 3.完善菜单
This commit is contained in:
		| @@ -36,6 +36,14 @@ import java.util.Set; | ||||
|  */ | ||||
| public interface RoleService extends BaseService<RoleResp, RoleDetailResp, RoleQuery, RoleReq>, IService<RoleDO> { | ||||
|  | ||||
|     /** | ||||
|      * 分配角色给用户 | ||||
|      * | ||||
|      * @param id      角色 ID | ||||
|      * @param userIds 用户 ID 列表 | ||||
|      */ | ||||
|     void assignToUsers(Long id, List<Long> userIds); | ||||
|  | ||||
|     /** | ||||
|      * 根据用户 ID 查询权限码 | ||||
|      * | ||||
| @@ -91,12 +99,4 @@ public interface RoleService extends BaseService<RoleResp, RoleDetailResp, RoleQ | ||||
|      * @return 角色数量 | ||||
|      */ | ||||
|     int countByNames(List<String> roleNames); | ||||
|  | ||||
|     /** | ||||
|      * 分配角色给用户 | ||||
|      * | ||||
|      * @param id      角色 ID | ||||
|      * @param userIds 用户 ID 列表 | ||||
|      */ | ||||
|     void assignToUsers(Long id, List<Long> userIds); | ||||
| } | ||||
|   | ||||
| @@ -39,14 +39,6 @@ import java.util.List; | ||||
|  */ | ||||
| public interface UserService extends BaseService<UserResp, UserDetailResp, UserQuery, UserReq>, IService<UserDO> { | ||||
|  | ||||
|     /** | ||||
|      * 新增 | ||||
|      * | ||||
|      * @param user 用户信息 | ||||
|      * @return ID | ||||
|      */ | ||||
|     Long add(UserDO user); | ||||
|  | ||||
|     /** | ||||
|      * 下载导入模板 | ||||
|      * | ||||
| @@ -132,6 +124,14 @@ public interface UserService extends BaseService<UserResp, UserDetailResp, UserQ | ||||
|      */ | ||||
|     void updateEmail(String newEmail, String oldPassword, Long id); | ||||
|  | ||||
|     /** | ||||
|      * 新增 | ||||
|      * | ||||
|      * @param user 用户信息 | ||||
|      * @return ID | ||||
|      */ | ||||
|     Long add(UserDO user); | ||||
|  | ||||
|     /** | ||||
|      * 根据用户名查询 | ||||
|      * | ||||
|   | ||||
| @@ -52,36 +52,14 @@ import java.util.Optional; | ||||
| @RequiredArgsConstructor | ||||
| public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptResp, DeptResp, DeptQuery, DeptReq> implements DeptService { | ||||
|  | ||||
|     private final RoleDeptService roleDeptService; | ||||
|     @Resource | ||||
|     private UserService userService; | ||||
|     private final RoleDeptService roleDeptService; | ||||
|     @Resource | ||||
|     private DataSource dataSource; | ||||
|  | ||||
|     @Override | ||||
|     public List<DeptDO> listChildren(Long id) { | ||||
|         DatabaseType databaseType = MetaUtils.getDatabaseTypeOrDefault(dataSource, DatabaseType.MYSQL); | ||||
|         return baseMapper.lambdaQuery().apply(databaseType.findInSet(id, "ancestors")).list(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<DeptDO> listByNames(List<String> list) { | ||||
|         if (CollUtil.isEmpty(list)) { | ||||
|             return Collections.emptyList(); | ||||
|         } | ||||
|         return this.list(Wrappers.<DeptDO>lambdaQuery().in(DeptDO::getName, list)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int countByNames(List<String> deptNames) { | ||||
|         if (CollUtil.isEmpty(deptNames)) { | ||||
|             return 0; | ||||
|         } | ||||
|         return (int)this.count(Wrappers.<DeptDO>lambdaQuery().in(DeptDO::getName, deptNames)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeAdd(DeptReq req) { | ||||
|     public void beforeAdd(DeptReq req) { | ||||
|         String name = req.getName(); | ||||
|         boolean isExists = this.isNameExists(name, req.getParentId(), null); | ||||
|         CheckUtils.throwIf(isExists, "新增失败,[{}] 已存在", name); | ||||
| @@ -89,7 +67,7 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptRes | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeUpdate(DeptReq req, Long id) { | ||||
|     public void beforeUpdate(DeptReq req, Long id) { | ||||
|         String name = req.getName(); | ||||
|         boolean isExists = this.isNameExists(name, req.getParentId(), id); | ||||
|         CheckUtils.throwIf(isExists, "修改失败,[{}] 已存在", name); | ||||
| @@ -124,7 +102,7 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptRes | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeDelete(List<Long> ids) { | ||||
|     public void beforeDelete(List<Long> ids) { | ||||
|         List<DeptDO> list = baseMapper.lambdaQuery() | ||||
|             .select(DeptDO::getName, DeptDO::getIsSystem) | ||||
|             .in(DeptDO::getId, ids) | ||||
| @@ -138,6 +116,28 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptRes | ||||
|         roleDeptService.deleteByDeptIds(ids); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<DeptDO> listChildren(Long id) { | ||||
|         DatabaseType databaseType = MetaUtils.getDatabaseTypeOrDefault(dataSource, DatabaseType.MYSQL); | ||||
|         return baseMapper.lambdaQuery().apply(databaseType.findInSet(id, "ancestors")).list(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<DeptDO> listByNames(List<String> list) { | ||||
|         if (CollUtil.isEmpty(list)) { | ||||
|             return Collections.emptyList(); | ||||
|         } | ||||
|         return this.list(Wrappers.<DeptDO>lambdaQuery().in(DeptDO::getName, list)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int countByNames(List<String> deptNames) { | ||||
|         if (CollUtil.isEmpty(deptNames)) { | ||||
|             return 0; | ||||
|         } | ||||
|         return (int)this.count(Wrappers.<DeptDO>lambdaQuery().in(DeptDO::getName, deptNames)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 名称是否存在 | ||||
|      * | ||||
|   | ||||
| @@ -55,14 +55,14 @@ public class DictItemServiceImpl extends BaseServiceImpl<DictItemMapper, DictIte | ||||
|     private static final Map<String, List<LabelValueResp>> ENUM_DICT_CACHE = new ConcurrentHashMap<>(); | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeAdd(DictItemReq req) { | ||||
|     public void beforeAdd(DictItemReq req) { | ||||
|         String value = req.getValue(); | ||||
|         CheckUtils.throwIf(this.isValueExists(value, null, req.getDictId()), "新增失败,字典值 [{}] 已存在", value); | ||||
|         RedisUtils.deleteByPattern(CacheConstants.DICT_KEY_PREFIX + StringConstants.ASTERISK); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeUpdate(DictItemReq req, Long id) { | ||||
|     public void beforeUpdate(DictItemReq req, Long id) { | ||||
|         String value = req.getValue(); | ||||
|         CheckUtils.throwIf(this.isValueExists(value, id, req.getDictId()), "修改失败,字典值 [{}] 已存在", value); | ||||
|         RedisUtils.deleteByPattern(CacheConstants.DICT_KEY_PREFIX + StringConstants.ASTERISK); | ||||
|   | ||||
| @@ -45,7 +45,7 @@ public class DictServiceImpl extends BaseServiceImpl<DictMapper, DictDO, DictRes | ||||
|     private final DictItemService dictItemService; | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeAdd(DictReq req) { | ||||
|     public void beforeAdd(DictReq req) { | ||||
|         String name = req.getName(); | ||||
|         CheckUtils.throwIf(this.isNameExists(name, null), "新增失败,[{}] 已存在", name); | ||||
|         String code = req.getCode(); | ||||
| @@ -53,7 +53,7 @@ public class DictServiceImpl extends BaseServiceImpl<DictMapper, DictDO, DictRes | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeUpdate(DictReq req, Long id) { | ||||
|     public void beforeUpdate(DictReq req, Long id) { | ||||
|         String name = req.getName(); | ||||
|         CheckUtils.throwIf(this.isNameExists(name, id), "修改失败,[{}] 已存在", name); | ||||
|         DictDO oldDict = super.getById(id); | ||||
| @@ -61,7 +61,7 @@ public class DictServiceImpl extends BaseServiceImpl<DictMapper, DictDO, DictRes | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeDelete(List<Long> ids) { | ||||
|     public void beforeDelete(List<Long> ids) { | ||||
|         List<DictDO> list = baseMapper.lambdaQuery() | ||||
|             .select(DictDO::getName, DictDO::getIsSystem) | ||||
|             .in(DictDO::getId, ids) | ||||
|   | ||||
| @@ -105,7 +105,7 @@ public class MenuServiceImpl extends BaseServiceImpl<MenuMapper, MenuDO, MenuRes | ||||
|     public List<MenuResp> listByRoleCode(String roleCode) { | ||||
|         List<MenuDO> menuList = baseMapper.selectListByRoleCode(roleCode); | ||||
|         List<MenuResp> list = BeanUtil.copyToList(menuList, MenuResp.class); | ||||
|         list.forEach(this::fill); | ||||
|         list.forEach(super::fill); | ||||
|         return list; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -106,7 +106,7 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleRes | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeDelete(List<Long> ids) { | ||||
|     public void beforeDelete(List<Long> ids) { | ||||
|         List<RoleDO> list = baseMapper.lambdaQuery() | ||||
|             .select(RoleDO::getName, RoleDO::getIsSystem) | ||||
|             .in(RoleDO::getId, ids) | ||||
| @@ -122,7 +122,16 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleRes | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void fill(Object obj) { | ||||
|     public void assignToUsers(Long id, List<Long> userIds) { | ||||
|         super.getById(id); | ||||
|         // 保存用户和角色关联 | ||||
|         userRoleService.assignRoleToUsers(id, userIds); | ||||
|         // 更新用户上下文 | ||||
|         this.updateUserContext(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void fill(Object obj) { | ||||
|         super.fill(obj); | ||||
|         if (obj instanceof RoleDetailResp detail) { | ||||
|             Long roleId = detail.getId(); | ||||
| @@ -188,15 +197,6 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleRes | ||||
|         return (int)this.count(Wrappers.<RoleDO>lambdaQuery().in(RoleDO::getName, roleNames)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void assignToUsers(Long id, List<Long> userIds) { | ||||
|         super.getById(id); | ||||
|         // 保存用户和角色关联 | ||||
|         userRoleService.assignRoleToUsers(id, userIds); | ||||
|         // 更新用户上下文 | ||||
|         this.updateUserContext(id); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 名称是否存在 | ||||
|      * | ||||
|   | ||||
| @@ -65,7 +65,7 @@ public class StorageServiceImpl extends BaseServiceImpl<StorageMapper, StorageDO | ||||
|     private FileService fileService; | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeAdd(StorageReq req) { | ||||
|     public void beforeAdd(StorageReq req) { | ||||
|         this.decodeSecretKey(req, null); | ||||
|         CheckUtils.throwIf(Boolean.TRUE.equals(req.getIsDefault()) && this.isDefaultExists(null), "请先取消原有默认存储"); | ||||
|         String code = req.getCode(); | ||||
| @@ -74,7 +74,7 @@ public class StorageServiceImpl extends BaseServiceImpl<StorageMapper, StorageDO | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeUpdate(StorageReq req, Long id) { | ||||
|     public void beforeUpdate(StorageReq req, Long id) { | ||||
|         StorageDO oldStorage = super.getById(id); | ||||
|         CheckUtils.throwIfNotEqual(req.getCode(), oldStorage.getCode(), "不允许修改存储编码"); | ||||
|         CheckUtils.throwIfNotEqual(req.getType(), oldStorage.getType(), "不允许修改存储类型"); | ||||
| @@ -99,7 +99,7 @@ public class StorageServiceImpl extends BaseServiceImpl<StorageMapper, StorageDO | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void beforeDelete(List<Long> ids) { | ||||
|     public void beforeDelete(List<Long> ids) { | ||||
|         CheckUtils.throwIf(fileService.countByStorageIds(ids) > 0, "所选存储存在文件关联,请删除文件后重试"); | ||||
|         List<StorageDO> storageList = baseMapper.lambdaQuery().in(StorageDO::getId, ids).list(); | ||||
|         storageList.forEach(s -> { | ||||
|   | ||||
| @@ -209,13 +209,6 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes | ||||
|         ids.forEach(onlineUserService::kickOut); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Long add(UserDO user) { | ||||
|         user.setStatus(DisEnableStatusEnum.ENABLE); | ||||
|         baseMapper.insert(user); | ||||
|         return user.getId(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void downloadImportTemplate(HttpServletResponse response) throws IOException { | ||||
|         try { | ||||
| @@ -360,19 +353,6 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes | ||||
|         return new UserImportResp(insertList.size() + updateList.size(), insertList.size(), updateList.size()); | ||||
|     } | ||||
|  | ||||
|     public void doImportUser(List<UserDO> insertList, List<UserDO> updateList, List<UserRoleDO> userRoleDOList) { | ||||
|         if (CollUtil.isNotEmpty(insertList)) { | ||||
|             baseMapper.insert(insertList); | ||||
|         } | ||||
|         if (CollUtil.isNotEmpty(updateList)) { | ||||
|             this.updateBatchById(updateList); | ||||
|             userRoleService.deleteByUserIds(updateList.stream().map(UserDO::getId).toList()); | ||||
|         } | ||||
|         if (CollUtil.isNotEmpty(userRoleDOList)) { | ||||
|             userRoleService.saveBatch(userRoleDOList); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void resetPassword(UserPasswordResetReq req, Long id) { | ||||
|         super.getById(id); | ||||
| @@ -459,6 +439,13 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes | ||||
|         baseMapper.lambdaUpdate().set(UserDO::getEmail, newEmail).eq(UserDO::getId, id).update(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Long add(UserDO user) { | ||||
|         user.setStatus(DisEnableStatusEnum.ENABLE); | ||||
|         baseMapper.insert(user); | ||||
|         return user.getId(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public UserDO getByUsername(String username) { | ||||
|         return baseMapper.selectByUsername(username); | ||||
| @@ -523,6 +510,26 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes | ||||
|             .in(CollUtil.isNotEmpty(userIdList), "t1.id", userIdList); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 导入用户 | ||||
|      * | ||||
|      * @param insertList     新增用户 | ||||
|      * @param updateList     修改用户 | ||||
|      * @param userRoleDOList 用户角色关联 | ||||
|      */ | ||||
|     private void doImportUser(List<UserDO> insertList, List<UserDO> updateList, List<UserRoleDO> userRoleDOList) { | ||||
|         if (CollUtil.isNotEmpty(insertList)) { | ||||
|             baseMapper.insert(insertList); | ||||
|         } | ||||
|         if (CollUtil.isNotEmpty(updateList)) { | ||||
|             this.updateBatchById(updateList); | ||||
|             userRoleService.deleteByUserIds(updateList.stream().map(UserDO::getId).toList()); | ||||
|         } | ||||
|         if (CollUtil.isNotEmpty(userRoleDOList)) { | ||||
|             userRoleService.saveBatch(userRoleDOList); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 判断是否跳过导入 | ||||
|      * | ||||
| @@ -681,6 +688,12 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes | ||||
|         return null != count && count > 0; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 根据用户名获取用户列表 | ||||
|      * | ||||
|      * @param usernames 用户名列表 | ||||
|      * @return 用户列表 | ||||
|      */ | ||||
|     private List<UserDO> listByUsernames(List<String> usernames) { | ||||
|         return this.list(Wrappers.<UserDO>lambdaQuery() | ||||
|             .in(UserDO::getUsername, usernames) | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > | ||||
| <mapper namespace="top.continew.admin.system.mapper.DictItemMapper"> | ||||
|     <select id="listByDictCode" resultType="top.continew.starter.extension.crud.model.resp.LabelValueResp"> | ||||
|         SELECT t1.label, t1.value, t1.color AS extend | ||||
|         SELECT t1.label, t1.value, t1.color AS extra | ||||
|         FROM sys_dict_item AS t1 | ||||
|         LEFT JOIN sys_dict AS t2 ON t1.dict_id = t2.id | ||||
|         WHERE t1.status = 1 AND t2.code = #{dictCode} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user