From c36bc040d0b6127b08f3f4bccf5d1ae02bf25121 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期五, 31 三月 2023 14:37:10 +0800
Subject: [PATCH] update 优化 角色 sort 值一样的排序问题

---
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java |  121 ++++++++++++++++++++++++++--------------
 1 files changed, 79 insertions(+), 42 deletions(-)

diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java
index ea2bc54..785e48c 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java
@@ -43,16 +43,16 @@
 public class SysTenantServiceImpl implements ISysTenantService {
 
     private final SysTenantMapper baseMapper;
-    private final SysTenantPackageMapper sysTenantPackageMapper;
-    private final SysUserMapper sysUserMapper;
-    private final SysDeptMapper sysDeptMapper;
-    private final SysRoleMapper sysRoleMapper;
-    private final SysRoleMenuMapper sysRoleMenuMapper;
-    private final SysRoleDeptMapper sysRoleDeptMapper;
-    private final SysUserRoleMapper sysUserRoleMapper;
-    private final SysDictTypeMapper sysDictTypeMapper;
-    private final SysDictDataMapper sysDictDataMapper;
-    private final SysConfigMapper sysConfigMapper;
+    private final SysTenantPackageMapper tenantPackageMapper;
+    private final SysUserMapper userMapper;
+    private final SysDeptMapper deptMapper;
+    private final SysRoleMapper roleMapper;
+    private final SysRoleMenuMapper roleMenuMapper;
+    private final SysRoleDeptMapper roleDeptMapper;
+    private final SysUserRoleMapper userRoleMapper;
+    private final SysDictTypeMapper dictTypeMapper;
+    private final SysDictDataMapper dictDataMapper;
+    private final SysConfigMapper configMapper;
 
     /**
      * 鏌ヨ绉熸埛
@@ -139,14 +139,14 @@
         dept.setLeader(bo.getUsername());
         dept.setParentId(Constants.TOP_PARENT_ID);
         dept.setAncestors(Constants.TOP_PARENT_ID.toString());
-        sysDeptMapper.insert(dept);
+        deptMapper.insert(dept);
         Long deptId = dept.getDeptId();
 
         // 瑙掕壊鍜岄儴闂ㄥ叧鑱旇〃
         SysRoleDept roleDept = new SysRoleDept();
         roleDept.setRoleId(roleId);
         roleDept.setDeptId(deptId);
-        sysRoleDeptMapper.insert(roleDept);
+        roleDeptMapper.insert(roleDept);
 
         // 鍒涘缓绯荤粺鐢ㄦ埛
         SysUser user = new SysUser();
@@ -155,18 +155,18 @@
         user.setNickName(bo.getUsername());
         user.setPassword(BCrypt.hashpw(bo.getPassword()));
         user.setDeptId(deptId);
-        sysUserMapper.insert(user);
+        userMapper.insert(user);
 
         // 鐢ㄦ埛鍜岃鑹插叧鑱旇〃
         SysUserRole userRole = new SysUserRole();
         userRole.setUserId(user.getUserId());
         userRole.setRoleId(roleId);
-        sysUserRoleMapper.insert(userRole);
+        userRoleMapper.insert(userRole);
 
         String defaultTenantId = TenantConstants.DEFAULT_TENANT_ID;
-        List<SysDictType> dictTypeList = sysDictTypeMapper.selectList(
+        List<SysDictType> dictTypeList = dictTypeMapper.selectList(
             new LambdaQueryWrapper<SysDictType>().eq(SysDictType::getTenantId, defaultTenantId));
-        List<SysDictData> dictDataList = sysDictDataMapper.selectList(
+        List<SysDictData> dictDataList = dictDataMapper.selectList(
             new LambdaQueryWrapper<SysDictData>().eq(SysDictData::getTenantId, defaultTenantId));
         for (SysDictType dictType : dictTypeList) {
             dictType.setDictId(null);
@@ -176,16 +176,16 @@
             dictData.setDictCode(null);
             dictData.setTenantId(tenantId);
         }
-        sysDictTypeMapper.insertBatch(dictTypeList);
-        sysDictDataMapper.insertBatch(dictDataList);
+        dictTypeMapper.insertBatch(dictTypeList);
+        dictDataMapper.insertBatch(dictDataList);
 
-        List<SysConfig> sysConfigList = sysConfigMapper.selectList(
+        List<SysConfig> sysConfigList = configMapper.selectList(
             new LambdaQueryWrapper<SysConfig>().eq(SysConfig::getTenantId, defaultTenantId));
         for (SysConfig config : sysConfigList) {
             config.setConfigId(null);
             config.setTenantId(tenantId);
         }
-        sysConfigMapper.insertBatch(sysConfigList);
+        configMapper.insertBatch(sysConfigList);
 
         TenantHelper.disableIgnore();
         return true;
@@ -214,9 +214,9 @@
      * @param packageId 绉熸埛濂楅id
      * @return 瑙掕壊id
      */
-    public Long createTenantRole(String tenantId, Long packageId) {
+    private Long createTenantRole(String tenantId, Long packageId) {
         // 鑾峰彇绉熸埛濂楅
-        SysTenantPackage tenantPackage = sysTenantPackageMapper.selectById(packageId);
+        SysTenantPackage tenantPackage = tenantPackageMapper.selectById(packageId);
         if (ObjectUtil.isNull(tenantPackage)) {
             throw new ServiceException("濂楅涓嶅瓨鍦�");
         }
@@ -230,7 +230,7 @@
         role.setRoleKey(TenantConstants.TENANT_ADMIN_ROLE_KEY);
         role.setRoleSort(1);
         role.setStatus(TenantConstants.NORMAL);
-        sysRoleMapper.insert(role);
+        roleMapper.insert(role);
         Long roleId = role.getRoleId();
 
         // 鍒涘缓瑙掕壊鑿滃崟
@@ -241,7 +241,7 @@
             roleMenu.setMenuId(menuId);
             roleMenus.add(roleMenu);
         });
-        sysRoleMenuMapper.insertBatch(roleMenus);
+        roleMenuMapper.insertBatch(roleMenus);
 
         return roleId;
     }
@@ -272,6 +272,18 @@
     }
 
     /**
+     * 鏍¢獙绉熸埛鏄惁鍏佽鎿嶄綔
+     *
+     * @param tenantId 绉熸埛ID
+     */
+    @Override
+    public void checkTenantAllowed(String tenantId) {
+        if (ObjectUtil.isNotNull(tenantId) && TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) {
+            throw new ServiceException("涓嶅厑璁告搷浣滅鐞嗙鎴�");
+        }
+    }
+
+    /**
      * 鎵归噺鍒犻櫎绉熸埛
      */
     @CacheEvict(cacheNames = CacheNames.SYS_TENANT, allEntries = true)
@@ -290,49 +302,74 @@
      * 鏍¢獙浼佷笟鍚嶇О鏄惁鍞竴
      */
     @Override
-    public String checkCompanyNameUnique(SysTenantBo bo) {
+    public boolean checkCompanyNameUnique(SysTenantBo bo) {
         boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysTenant>()
             .eq(SysTenant::getCompanyName, bo.getCompanyName())
             .ne(ObjectUtil.isNotNull(bo.getTenantId()), SysTenant::getTenantId, bo.getTenantId()));
-        if (exist) {
-            return TenantConstants.NOT_PASS;
-        }
-        return TenantConstants.PASS;
+        return !exist;
     }
 
     /**
      * 鏍¢獙璐﹀彿浣欓
      */
     @Override
-    public String checkAccountBalance(String tenantId) {
+    public boolean checkAccountBalance(String tenantId) {
         SysTenantVo tenant = SpringUtils.getAopProxy(this).queryByTenantId(tenantId);
         // 濡傛灉浣欓涓�-1浠h〃涓嶉檺鍒�
         if (tenant.getAccountCount() == -1) {
-            return TenantConstants.PASS;
+            return true;
         }
-        Long userNumber = sysUserMapper.selectCount(new LambdaQueryWrapper<>());
+        Long userNumber = userMapper.selectCount(new LambdaQueryWrapper<>());
         // 濡傛灉浣欓澶т簬0浠h〃杩樻湁鍙敤鍚嶉
-        if (tenant.getAccountCount() - userNumber > 0) {
-            return TenantConstants.PASS;
-        }
-        return TenantConstants.NOT_PASS;
+        return tenant.getAccountCount() - userNumber > 0;
     }
 
     /**
      * 鏍¢獙鏈夋晥鏈�
      */
     @Override
-    public String checkExpireTime(String tenantId) {
+    public boolean checkExpireTime(String tenantId) {
         SysTenantVo tenant = SpringUtils.getAopProxy(this).queryByTenantId(tenantId);
         // 濡傛灉鏈缃繃鏈熸椂闂翠唬琛ㄤ笉闄愬埗
         if (ObjectUtil.isNull(tenant.getExpireTime())) {
-            return TenantConstants.PASS;
+            return true;
         }
         // 濡傛灉褰撳墠鏃堕棿鍦ㄨ繃鏈熸椂闂翠箣鍓嶅垯閫氳繃
-        if (new Date().before(tenant.getExpireTime())) {
-            return TenantConstants.PASS;
-        }
-        return TenantConstants.NOT_PASS;
+        return new Date().before(tenant.getExpireTime());
     }
 
+    /**
+     * 鍚屾绉熸埛濂楅
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean syncTenantPackage(String tenantId, String packageId) {
+        TenantHelper.enableIgnore();
+        SysTenantPackage tenantPackage = tenantPackageMapper.selectById(packageId);
+        List<SysRole> roles = roleMapper.selectList(
+            new LambdaQueryWrapper<SysRole>().eq(SysRole::getTenantId, tenantId));
+        List<Long> roleIds = new ArrayList<>(roles.size() - 1);
+        List<Long> menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong);
+        roles.forEach(item -> {
+            if (TenantConstants.TENANT_ADMIN_ROLE_KEY.equals(item.getRoleKey())) {
+                List<SysRoleMenu> roleMenus = new ArrayList<>(menuIds.size());
+                menuIds.forEach(menuId -> {
+                    SysRoleMenu roleMenu = new SysRoleMenu();
+                    roleMenu.setRoleId(item.getRoleId());
+                    roleMenu.setMenuId(menuId);
+                    roleMenus.add(roleMenu);
+                });
+                roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, item.getRoleId()));
+                roleMenuMapper.insertBatch(roleMenus);
+            } else {
+                roleIds.add(item.getRoleId());
+            }
+        });
+        if (!roleIds.isEmpty()) {
+            roleMenuMapper.delete(
+                new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds).notIn(!menuIds.isEmpty(), SysRoleMenu::getMenuId, menuIds));
+        }
+        TenantHelper.disableIgnore();
+        return true;
+    }
 }

--
Gitblit v1.9.3