From a59c45cf807e7b800cd8ab901fe15a90d4894bb5 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 31 May 2022 16:57:37 +0800
Subject: [PATCH] 20220527

---
 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java |  169 ++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 144 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java
index 7b15c11..dd3877c 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java
@@ -1,27 +1,33 @@
 package com.xcong.farmer.cms.modules.system.service.Impl;
 
 import cn.hutool.crypto.SecureUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xcong.farmer.cms.common.response.Result;
 import com.xcong.farmer.cms.modules.system.dto.AdminAddUserDto;
 import com.xcong.farmer.cms.modules.system.dto.AdminUpdateUserDto;
 import com.xcong.farmer.cms.modules.system.dto.AdminUserDto;
-import com.xcong.farmer.cms.modules.system.entity.RoleEntity;
-import com.xcong.farmer.cms.modules.system.entity.UserEntity;
-import com.xcong.farmer.cms.modules.system.mapper.RoleMapper;
-import com.xcong.farmer.cms.modules.system.mapper.UserMapper;
+import com.xcong.farmer.cms.modules.system.entity.*;
+import com.xcong.farmer.cms.modules.system.mapper.*;
 import com.xcong.farmer.cms.modules.system.service.IUserService;
+import com.xcong.farmer.cms.modules.system.util.LoginUserUtil;
+import com.xcong.farmer.cms.modules.system.vo.AdminRoleVo;
 import com.xcong.farmer.cms.modules.system.vo.AdminSeeUserInfoVo;
+import com.xcong.farmer.cms.modules.system.vo.AdminUserMenuVo;
 import com.xcong.farmer.cms.modules.system.vo.AdminUserVo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.ObjectUtil;
+
+import cn.hutool.core.collection.CollUtil;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.*;
 
 @Service
 @Slf4j
@@ -29,6 +35,12 @@
 
     @Resource
     private RoleMapper roleMapper;
+    @Resource
+    private UserRoleMapper userRoleMapper;
+    @Resource
+    private RoleMenuMapper roleMenuMapper;
+    @Resource
+    private MenuMapper menuMapper;
 
     @Override
     public Result getUserInPage(AdminUserDto adminUserDto) {
@@ -37,8 +49,28 @@
         if(StrUtil.isNotEmpty(adminUserDto.getUsername())){
             userEntity.setUsername(adminUserDto.getUsername());
         }
-        IPage<AdminUserVo> list = this.baseMapper.selectAdminUserVoInPage(page,userEntity);
-        return Result.ok(list);
+        IPage<AdminUserVo> AdminUserVos = this.baseMapper.selectAdminUserVoInPage(page,userEntity);
+        List<AdminUserVo> records = AdminUserVos.getRecords();
+        if(CollUtil.isNotEmpty(records)){
+            for(AdminUserVo adminUserVo : records){
+                List<AdminRoleVo> adminRoleVos = new ArrayList<>();
+                QueryWrapper<UserRoleEntity> objectQueryWrapper = new QueryWrapper<>();
+                objectQueryWrapper.eq("user_id",adminUserVo.getId());
+                List<UserRoleEntity> userRoleEntities = userRoleMapper.selectList(objectQueryWrapper);
+                if(CollUtil.isNotEmpty(userRoleEntities)){
+                    for(UserRoleEntity userRoleEntity : userRoleEntities){
+                        RoleEntity roleEntity = roleMapper.selectById(userRoleEntity.getRoleId());
+                        AdminRoleVo adminRoleVo = new AdminRoleVo();
+                        adminRoleVo.setId(roleEntity.getId());
+                        adminRoleVo.setRoleName(roleEntity.getRoleName());
+                        adminRoleVos.add(adminRoleVo);
+                    }
+                }
+                adminUserVo.setAdminRoleVos(adminRoleVos);
+            }
+        }
+
+        return Result.ok(AdminUserVos);
     }
 
     @Override
@@ -48,12 +80,8 @@
         if(StrUtil.isEmpty(username)){
             return Result.fail("请输入用户名");
         }
-        Long roleId = adminAddUserDto.getRoleId();
-        if(ObjectUtil.isEmpty(roleId)){
-            return Result.fail("请选择用户角色");
-        }
-        RoleEntity roleEntity = roleMapper.selectById(roleId);
-        if(ObjectUtil.isEmpty(roleEntity)){
+        String roleIds = adminAddUserDto.getRoleIds();
+        if(StrUtil.isEmpty(roleIds)){
             return Result.fail("请选择用户角色");
         }
         String phone = adminAddUserDto.getPhone();
@@ -63,19 +91,17 @@
         UserEntity userEntity = new UserEntity();
         userEntity.setUsername(username);
         userEntity.setPhone(phone);
-        userEntity.setRoleId(roleId);
-        userEntity.setRoleName(roleEntity.getRoleName());
         if(StrUtil.isNotEmpty(adminAddUserDto.getNickname())){
             userEntity.setNickname(adminAddUserDto.getNickname());
         }
         if(StrUtil.isNotEmpty(adminAddUserDto.getEmail())){
             userEntity.setEmail(adminAddUserDto.getEmail());
         }
-
         userEntity.setPassword(SecureUtil.md5(UserEntity.PASSWORD_DEFAULT));
         userEntity.setStatus(UserEntity.STATUS_ENABLE);
         int insert = this.baseMapper.insert(userEntity);
         if(insert > 0){
+            saveUserRole(roleIds,userEntity.getId());
             return Result.ok("添加成功");
         }
         return Result.fail("添加失败");
@@ -113,6 +139,10 @@
             return Result.fail("用户不存在");
         }
         this.baseMapper.deleteById(id);
+
+        QueryWrapper<UserRoleEntity> objectQueryWrapper = new QueryWrapper<>();
+        objectQueryWrapper.eq("user_id",userEntity.getId());
+        userRoleMapper.delete(objectQueryWrapper);
         return Result.ok("删除成功");
     }
 
@@ -128,8 +158,21 @@
         adminSeeUserInfoVo.setNickname(userEntity.getNickname());
         adminSeeUserInfoVo.setPhone(userEntity.getPhone());
         adminSeeUserInfoVo.setEmail(userEntity.getEmail());
-        adminSeeUserInfoVo.setRoleId(userEntity.getRoleId());
-        adminSeeUserInfoVo.setRoleName(userEntity.getRoleName());
+
+        List<AdminRoleVo> adminRoleVos = new ArrayList<>();
+        QueryWrapper<UserRoleEntity> objectQueryWrapper = new QueryWrapper<>();
+        objectQueryWrapper.eq("user_id",userEntity.getId());
+        List<UserRoleEntity> userRoleEntities = userRoleMapper.selectList(objectQueryWrapper);
+        if(CollUtil.isNotEmpty(userRoleEntities)){
+            for(UserRoleEntity userRoleEntity : userRoleEntities){
+                RoleEntity roleEntity = roleMapper.selectById(userRoleEntity.getRoleId());
+                AdminRoleVo adminRoleVo = new AdminRoleVo();
+                adminRoleVo.setId(roleEntity.getId());
+                adminRoleVo.setRoleName(roleEntity.getRoleName());
+                adminRoleVos.add(adminRoleVo);
+            }
+        }
+        adminSeeUserInfoVo.setAdminRoleVos(adminRoleVos);
         return Result.ok(adminSeeUserInfoVo);
     }
 
@@ -140,12 +183,8 @@
         if(StrUtil.isEmpty(username)){
             return Result.fail("请输入用户名");
         }
-        Long roleId = adminUpdateUserDto.getRoleId();
-        if(ObjectUtil.isEmpty(roleId)){
-            return Result.fail("请选择用户角色");
-        }
-        RoleEntity roleEntity = roleMapper.selectById(roleId);
-        if(ObjectUtil.isEmpty(roleEntity)){
+        String roleIds = adminUpdateUserDto.getRoleIds();
+        if(StrUtil.isEmpty(roleIds)){
             return Result.fail("请选择用户角色");
         }
         String phone = adminUpdateUserDto.getPhone();
@@ -158,8 +197,6 @@
         }
         userEntity.setUsername(username);
         userEntity.setPhone(phone);
-        userEntity.setRoleId(roleId);
-        userEntity.setRoleName(roleEntity.getRoleName());
         if(StrUtil.isNotEmpty(adminUpdateUserDto.getNickname())){
             userEntity.setNickname(adminUpdateUserDto.getNickname());
         }
@@ -168,6 +205,11 @@
         }
         int insert = this.baseMapper.updateById(userEntity);
         if(insert > 0){
+            QueryWrapper<UserRoleEntity> objectQueryWrapper = new QueryWrapper<>();
+            objectQueryWrapper.eq("user_id",userEntity.getId());
+            userRoleMapper.delete(objectQueryWrapper);
+
+            saveUserRole(roleIds,userEntity.getId());
             return Result.ok("更新成功");
         }
         return Result.fail("更新失败");
@@ -184,4 +226,81 @@
         this.baseMapper.updateById(userEntity);
         return Result.ok("重置成功");
     }
+
+    @Override
+    public Result userMenu() {
+        Long userId = LoginUserUtil.getLoginUser().getId();
+        List<AdminUserMenuVo> adminUserMenuVos = new ArrayList<>();
+
+        QueryWrapper<UserRoleEntity> userRoleQueryWrapper = new QueryWrapper<>();
+        userRoleQueryWrapper.eq("user_id",userId);
+        List<UserRoleEntity> userRoleEntities = userRoleMapper.selectList(userRoleQueryWrapper);
+        if(CollUtil.isNotEmpty(userRoleEntities)){
+            List menuIds = new ArrayList<Long>();
+            for(UserRoleEntity userRoleEntity : userRoleEntities){
+                List<RoleMenuEntity> roleMenuEntities = roleMenuMapper.selectListByRoleId(userRoleEntity.getRoleId());
+                if(CollUtil.isNotEmpty(roleMenuEntities)){
+                    for(RoleMenuEntity roleMenuEntity : roleMenuEntities){
+                        menuIds.add(roleMenuEntity.getMenuId());
+                    }
+                }
+            }
+            if(CollUtil.isNotEmpty(menuIds)){
+                HashSet hashSet = CollUtil.newHashSet(menuIds);
+                List<Long> parentMenuIds = new ArrayList<>();
+                List<Long> childMenuIds = new ArrayList<>();
+                for(Object s : hashSet){
+                    MenuEntity menuEntity = menuMapper.selectById(Long.parseLong(s.toString()));
+                    Long parentId = menuEntity.getParentId();
+                    if(parentId == 0L){
+                        parentMenuIds.add(menuEntity.getId());
+                    }else{
+                        childMenuIds.add(menuEntity.getId());
+                    }
+                }
+                Map<Long, AdminUserMenuVo> menuMap = new HashMap<>();
+                if(CollUtil.isNotEmpty(parentMenuIds)){
+                    for(Long parentId : parentMenuIds){
+                        AdminUserMenuVo adminUserMenuVo = menuMapper.selectAdminRoleMenuVoById(parentId);
+                        menuMap.put(parentId,adminUserMenuVo);
+                    }
+                }
+                if(CollUtil.isNotEmpty(childMenuIds)){
+                    for(Long childId : childMenuIds){
+                        AdminUserMenuVo adminUserMenuVo = menuMapper.selectAdminRoleMenuVoById(childId);
+                        Long parentId = adminUserMenuVo.getParentId();
+                        AdminUserMenuVo adminUserMenuVoParent = menuMap.get(parentId);
+                        List<AdminUserMenuVo> child = adminUserMenuVoParent.getChild();
+                        if(CollUtil.isEmpty(child)){
+                            List<AdminUserMenuVo> list = new ArrayList<>();
+                            list.add(adminUserMenuVo);
+                            adminUserMenuVoParent.setChild(list);
+                        }else{
+                            child.add(adminUserMenuVo);
+                        }
+                    }
+                }
+                Set<Map.Entry<Long, AdminUserMenuVo>> entries = menuMap.entrySet();
+                Iterator<Map.Entry<Long, AdminUserMenuVo>> iterator = entries.iterator();
+                while (iterator.hasNext()){
+                    adminUserMenuVos.add(iterator.next().getValue());
+                }
+
+            }
+        }
+        return Result.ok(adminUserMenuVos);
+    }
+
+    private void saveUserRole(String roleIds,Long userId) {
+        if (StrUtil.isNotEmpty(roleIds)) {
+            String[] roleIdList = roleIds.split(StringPool.COMMA);
+            Arrays.stream(roleIdList).forEach(roleId -> {
+                UserRoleEntity userRoleEntity = new UserRoleEntity();
+                userRoleEntity.setRoleId(Long.valueOf(roleId));
+                userRoleEntity.setUserId(userId);
+                userRoleMapper.insert(userRoleEntity);
+            });
+        }
+    }
+
 }

--
Gitblit v1.9.1