From f233ba26bbf8703fcc4e86a5dbb9d6026f91e7d6 Mon Sep 17 00:00:00 2001
From: zhanzhiqin <895896009@qq.com>
Date: 星期五, 04 三月 2022 18:14:03 +0800
Subject: [PATCH] C3充电桩

---
 ximon-admin/src/main/java/com/sandu/ximon/admin/service/RoleService.java |  121 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 112 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..2426ae0 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,24 @@
 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.MenuMapper;
 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;
 
 /**
@@ -32,6 +34,8 @@
     private final AdminRoleRelationService adminRoleRelationService;
     private final RoleMenuRelationService roleMenuRelationService;
     private final MenuService menuService;
+    private final MenuMapper menuMapper;
+
 
     /**
      * 鑾峰彇鎸囧畾绠$悊鍛樼殑spring security鏉冮檺璁よ瘉鍒楄〃
@@ -73,8 +77,107 @@
         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) {
+        if (param.getMenuIdList().isEmpty()) {
+            throw new BusinessException("鏉冮檺鍙傛暟寮傚父");
+        }
+        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("鎵句笉鍒拌鑹�");
+        }
+        //瓒呯骇绠$悊鍛樹笉鑳藉垹闄�
+        if(RoleLevelStatus.SUPER.getCode().equals(role.getLevel())){
+            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;
+        }
+
+        List<RoleDetail> list = baseMapper.listRole(roleIdList);
+        for (RoleDetail roleDetail : list) {
+            if (roleDetail.getId() == 1) {
+                roleDetail.setMenuIdList(menuMapper.listMenu());
+
+                break;
+            }
+        }
+
+        return list;
+    }
 }

--
Gitblit v1.9.3