From 9f4c4e77bd7936645d174f21a6abf8951b533e8d Mon Sep 17 00:00:00 2001
From: liuhaonan <konodioda2333@vip.qq.com>
Date: 星期二, 18 一月 2022 17:51:10 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java |   99 +++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 90 insertions(+), 9 deletions(-)

diff --git a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java
index 89e0a5b..8ad8b8a 100644
--- a/ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java
+++ b/ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java
@@ -3,22 +3,23 @@
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.PageHelper;
+import com.sandu.common.enums.RoleLevelStatus;
 import com.sandu.common.execption.BusinessException;
+import com.sandu.common.execption.EntityExistException;
 import com.sandu.common.service.impl.BaseServiceImpl;
-import com.sandu.ximon.dao.domain.AdminRoleRelation;
-import com.sandu.ximon.dao.domain.Menu;
-import com.sandu.ximon.dao.domain.Role;
-import com.sandu.ximon.dao.domain.RoleMenuRelation;
+import com.sandu.common.util.BeanConvertUtil;
+import com.sandu.ximon.admin.param.RoleParam;
+import com.sandu.ximon.admin.security.SecurityUtils;
+import com.sandu.ximon.dao.domain.*;
 import com.sandu.ximon.dao.mapper.RoleMapper;
 import lombok.AllArgsConstructor;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -73,8 +74,88 @@
         List<AdminRoleRelation> list = adminRoleRelationService.list(Wrappers.lambdaQuery(AdminRoleRelation.class).eq(AdminRoleRelation::getAdminId, adminId).select(AdminRoleRelation::getRoleId));
         List<Long> roleIdList = list.stream().map(AdminRoleRelation::getRoleId).collect(Collectors.toList());
         if (CollectionUtil.isEmpty(roleIdList)) {
-            throw new BusinessException("褰撳墠鐢ㄦ埛娌℃湁瑙掕壊");
+            return null;
         }
         return listByIds(roleIdList);
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addRole(RoleParam param) {
+        Role role = new Role();
+        role.setName(param.getName());
+        role.setRemark(param.getRemark());
+        role.setLevel(RoleLevelStatus.COMMON.getCode());
+        if(!save(role)){
+            throw new BusinessException("娣诲姞瑙掕壊澶辫触");
+        }
+
+        roleMenuRelationService.addRoleMenuList(role.getId(),param.getMenuIdList());
+
+        return true;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateRole(Long roleId, RoleParam param) {
+        Role role = getById(roleId);
+        if (role == null) {
+            throw new BusinessException("鎵句笉鍒拌鑹蹭俊鎭�");
+        }
+        assertLevels(role.getLevel());
+        Role update = new Role();
+        update.setId(roleId);
+        update.setName(param.getName());
+        update.setRemark(param.getRemark());
+        if(!updateById(update)){
+            throw new BusinessException("缂栬緫瑙掕壊澶辫触");
+        }
+        roleMenuRelationService.remove(Wrappers.lambdaQuery(RoleMenuRelation.class).eq(RoleMenuRelation::getRoleId,roleId));
+
+        roleMenuRelationService.addRoleMenuList(role.getId(),param.getMenuIdList());
+        return true;
+    }
+
+
+    /**
+     * 鍒ゆ柇褰撳墠瑙掕壊鑳戒笉鑳芥搷浣滅洰鏍囩敤鎴� 涓嶈鐨勮瘽鐩存帴鎶涘嚭寮傚父
+     * @param roleLevel 鐩爣鐢ㄦ埛鐨勬渶楂樿鑹茬瓑绾�
+     * @return 鎿嶄綔浜虹殑鏈�楂樿鑹茬瓑绾�
+     */
+    public int assertLevels(Integer roleLevel) {
+        Long userId = SecurityUtils.getUserId();
+        List<Role> roles = listByAdminId(userId);
+        if(CollectionUtil.isEmpty(roles)){
+            throw new BusinessException("褰撳墠鐢ㄦ埛娌℃湁瑙掕壊");
+        }
+        List<Integer> levels = roles.stream().map(Role::getLevel).collect(Collectors.toList());
+        int min = Collections.min(levels);
+        if (roleLevel != null) {
+            if (roleLevel < min) {
+                throw new BusinessException("鏉冮檺涓嶈冻锛屼綘鐨勮鑹茬骇鍒細" + min + "锛屼綆浜庢搷浣滅殑瑙掕壊绾у埆锛�" + roleLevel);
+            }
+        }
+        return min;
+    }
+
+    public boolean delRole(Long roleId) {
+        Role role = getById(roleId);
+        if (role == null) {
+            throw new BusinessException("鎵句笉鍒拌鑹�");
+        }
+        assertLevels(role.getLevel());
+        List<AdminRoleRelation> list = adminRoleRelationService.list(Wrappers.lambdaQuery(AdminRoleRelation.class).eq(AdminRoleRelation::getRoleId, role));
+        if(CollectionUtil.isNotEmpty(list)){
+            throw new BusinessException("褰撳墠瑙掕壊鏈夌鐞嗗憳浣跨敤锛屾棤娉曞垹闄�");
+        }
+        roleMenuRelationService.remove(Wrappers.lambdaQuery(RoleMenuRelation.class).eq(RoleMenuRelation::getRoleId,roleId));
+        return removeById(roleId);
+    }
+
+    public List<RoleDetail> listRole(int pageNo, int pageSize) {
+        PageHelper.startPage(pageNo, pageSize);
+        List<Long> roleIdList = list().stream().map(Role::getId).collect(Collectors.toList());
+        if(CollectionUtil.isEmpty(roleIdList)){
+            return null;
+        }
+        return baseMapper.listRole(roleIdList);
+    }
 }

--
Gitblit v1.9.3