Ver código fonte

Merge branch 'refs/heads/master_20240730' into master_20240722

zhaopeiqing 7 meses atrás
pai
commit
d727ee597a

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuRespVO.java

@@ -73,6 +73,6 @@ public class MenuRespVO {
     private LocalDateTime createTime;
 
     // 假设有一个子菜单列表
-    private List<MenuDO> children = new ArrayList<>();
+    private List<MenuRespVO> children = new ArrayList<>();
 
 }

+ 10 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java

@@ -116,12 +116,20 @@ public class AdminAuthServiceImpl implements AdminAuthService {
         if (reqVO.getScene() != 5 && userService.getUserByMobile(reqVO.getMobile()) == null) {
             throw exception(AUTH_MOBILE_NOT_EXISTS);
         }
+        if (reqVO.getScene() == 5 && userService.getUserByUsername(reqVO.getMobile()) != null) {
+            throw exception(USER_USERNAME_EXISTS);
+        }
         // 发送验证码
         smsCodeApi.sendSmsCode(AuthConvert.INSTANCE.convert(reqVO).setCreateIp(getClientIP()));
     }
 
     @Override
     public AuthLoginRespVO smsRegister(AuthSmsLoginReqVO reqVO) {
+        // 校验账号是否存在
+        AdminUserDO user = userService.getUserByUsername(reqVO.getMobile());
+        if (user != null) {
+            throw exception(USER_USERNAME_EXISTS);
+        }
         // 校验验证码
         smsCodeApi.useSmsCode(AuthConvert.INSTANCE.convert(reqVO, SmsSceneEnum.MEMBER_REGISTER.getScene(), getClientIP()));
         // 创建用户信息
@@ -131,8 +139,8 @@ public class AdminAuthServiceImpl implements AdminAuthService {
         userSaveReqVO.setMobile(reqVO.getMobile());
         userSaveReqVO.setPassword(reqVO.getMobile());
         Long id = userService.smsRegister(userSaveReqVO);
-        // 获得用户信息
-        AdminUserDO user = userService.getUserByMobile(reqVO.getMobile());
+        // 获得用户信息
+        user = userService.getUserByMobile(reqVO.getMobile());
         if (user == null) {
             throw exception(USER_NOT_EXISTS);
         }

+ 72 - 16
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java

@@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuLi
 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper;
 import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
@@ -31,6 +32,8 @@ import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
+import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 import static cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO.ID_ROOT;
 import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
 
@@ -52,6 +55,8 @@ public class MenuServiceImpl implements MenuService {
     private TenantService tenantService;
     @Resource
     private AdminUserService userService;
+    @Resource
+    private RoleService roleService;
 
     @Override
     @CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, key = "#createReqVO.permission",
@@ -175,22 +180,33 @@ public class MenuServiceImpl implements MenuService {
 
     @Override
     public List<MenuRespVO> getPrimarySecondaryMenus() {
-        // 获取所有一级菜单
-        List<MenuDO> primaryMenus = getMenuList(new MenuListReqVO().setParentId(0L));
-        List<MenuDO> secondaryMenus = new ArrayList<>();
-        // 将一级菜单转换为响应对象,并为其添加二级菜单(如果有的话)
-        List<MenuRespVO> respMenus = primaryMenus.stream()
-                .map(primaryMenu -> {
-                    MenuRespVO respMenu = BeanUtils.toBean(primaryMenu, MenuRespVO.class);
-                    // 获取当前一级菜单下的所有二级菜单
-                    List<MenuDO> childMenus = getMenuList(new MenuListReqVO().setParentId(primaryMenu.getId()));
-                     respMenu.setChildren(childMenus);
-
-                    // 这里我们假设直接返回了简化版的一级菜单响应对象
-                    return respMenu;
-                })
-                .collect(Collectors.toList());
-
+//        // 获取所有一级菜单
+//        List<MenuDO> primaryMenus = getMenuList(new MenuListReqVO().setParentId(0L));
+//        List<MenuDO> secondaryMenus = new ArrayList<>();
+//        // 将一级菜单转换为响应对象,并为其添加二级菜单(如果有的话)
+//        List<MenuRespVO> respMenus = primaryMenus.stream()
+//                .map(primaryMenu -> {
+//                    MenuRespVO respMenu = BeanUtils.toBean(primaryMenu, MenuRespVO.class);
+//                    // 获取当前一级菜单下的所有二级菜单
+//                    List<MenuDO> childMenus = getMenuList(new MenuListReqVO().setParentId(primaryMenu.getId()));
+//                     respMenu.setChildren(childMenus);
+//
+//                    // 这里我们假设直接返回了简化版的一级菜单响应对象
+//                    return respMenu;
+//                })
+//                .collect(Collectors.toList());
+        Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(getLoginUserId());
+        if (CollUtil.isEmpty(roleIds)) {
+            throw exception(ROLE_NOT_EXISTS);
+        }
+        // 获得角色列表
+        List<RoleDO> roles = roleService.getRoleList(roleIds);
+        roles.removeIf(role -> !CommonStatusEnum.ENABLE.getStatus().equals(role.getStatus())); // 移除禁用的角色
+        // 获得菜单列表
+        Set<Long> menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId));
+        List<MenuDO> menuList = this.getMenuList(menuIds);
+        menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单
+        List<MenuRespVO> respMenus = this.buildMenuTree(menuList);
         return respMenus;
     }
 
@@ -307,4 +323,44 @@ public class MenuServiceImpl implements MenuService {
         return menuIds;
     }
 
+    private List<MenuRespVO> buildMenuTree(List<MenuDO> menuDOList) {
+        List<MenuRespVO> menuList = BeanUtils.toBean(menuDOList, MenuRespVO.class);
+        List<MenuRespVO> pList = new ArrayList<>(); // 用于存放parentId为0的菜单项
+        Map<Long, MenuRespVO> idMap = new HashMap<>(); // 用于快速查找
+
+        // 第一步:构建idMap并筛选出parentId为0的菜单项
+        for (MenuRespVO menu : menuList) {
+            idMap.put(menu.getId(), menu);
+            if (menu.getParentId() == 0) {
+                pList.add(menu);
+            }
+        }
+
+        // 第二步:为pList中的每个元素设置children
+        for (MenuRespVO parent : pList) {
+            List<MenuRespVO> children = new ArrayList<>();
+            for (MenuRespVO menu : menuList) {
+                if (menu.getParentId() == parent.getId()) {
+                    children.add(menu);
+                    // 递归处理子菜单的子菜单(如果需要的话)
+//                     buildChildren(menu, idMap);
+                }
+            }
+            parent.setChildren(children);
+        }
+        return pList;
+    }
+
+    // 如果有需要递归处理子菜单的子菜单,可以添加这样的方法
+    private void buildChildren(MenuRespVO menu, Map<Long, MenuRespVO> idMap) {
+        List<MenuRespVO> children = new ArrayList<>();
+        for (MenuRespVO subMenu : idMap.values()) {
+            if (subMenu.getParentId() == menu.getId()) {
+                children.add(subMenu);
+                buildChildren(subMenu, idMap); // 递归
+            }
+        }
+        menu.setChildren(children);
+    }
+
 }

+ 5 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java

@@ -228,7 +228,9 @@ public class AdminUserServiceImpl implements AdminUserService {
     public void updateUserPassword(Long id, String password) {
         // 1. 校验用户存在
         AdminUserDO user = validateUserExists(id);
-
+        if (!ValidationUtils.isValidPassword(password)) {// 校验密码
+            throw exception(USER_PASSWORD_SIMPLE_FAILED);
+        }
         // 2. 更新密码
         AdminUserDO updateObj = new AdminUserDO();
         updateObj.setId(id);
@@ -271,11 +273,13 @@ public class AdminUserServiceImpl implements AdminUserService {
     }
 
     @Override
+    @TenantIgnore
     public AdminUserDO getUserByUsername(String username) {
         return userMapper.selectByUsername(username);
     }
 
     @Override
+    @TenantIgnore
     public AdminUserDO getUserByMobile(String mobile) {
         return userMapper.selectByMobile(mobile);
     }