From 0ec6fbd34ca4633a415e17ee50450f12e815a4aa Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期一, 13 三月 2023 23:29:05 +0800 Subject: [PATCH] fix 修复 管理租户被修改导致无法登录超管账号问题 --- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTenantServiceImpl.java | 80 +++++++++++++++++++++++++++++---------- 1 files changed, 59 insertions(+), 21 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 ff84c9f..da71f89 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 @@ -1,7 +1,6 @@ package com.ruoyi.system.service.impl; import cn.dev33.satoken.secure.BCrypt; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; @@ -12,6 +11,7 @@ import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.constant.TenantConstants; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.MapstructUtils; import com.ruoyi.common.core.utils.SpringUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.mybatis.core.page.PageQuery; @@ -115,7 +115,7 @@ public Boolean insertByBo(SysTenantBo bo) { TenantHelper.enableIgnore(); - SysTenant add = BeanUtil.toBean(bo, SysTenant.class); + SysTenant add = MapstructUtils.convert(bo, SysTenant.class); // 鑾峰彇鎵�鏈夌鎴风紪鍙� List<String> tenantIds = baseMapper.selectObjs( @@ -124,6 +124,7 @@ add.setTenantId(tenantId); boolean flag = baseMapper.insert(add) > 0; if (!flag) { + TenantHelper.disableIgnore(); throw new ServiceException("鍒涘缓绉熸埛澶辫触"); } bo.setId(add.getId()); @@ -251,7 +252,7 @@ @CacheEvict(cacheNames = CacheNames.SYS_TENANT, key = "#bo.tenantId") @Override public Boolean updateByBo(SysTenantBo bo) { - SysTenant tenant = BeanUtil.toBean(bo, SysTenant.class); + SysTenant tenant = MapstructUtils.convert(bo, SysTenant.class); tenant.setTenantId(null); tenant.setPackageId(null); return baseMapper.updateById(tenant) > 0; @@ -266,8 +267,20 @@ @CacheEvict(cacheNames = CacheNames.SYS_TENANT, key = "#bo.tenantId") @Override public int updateTenantStatus(SysTenantBo bo) { - SysTenant tenant = BeanUtil.toBean(bo, SysTenant.class); + SysTenant tenant = MapstructUtils.convert(bo, SysTenant.class); return baseMapper.updateById(tenant); + } + + /** + * 鏍¢獙绉熸埛鏄惁鍏佽鎿嶄綔 + * + * @param tenantId 绉熸埛ID + */ + @Override + public void checkTenantAllowed(String tenantId) { + if (ObjectUtil.isNotNull(tenantId) && TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) { + throw new ServiceException("涓嶅厑璁告搷浣滅鐞嗙鎴�"); + } } /** @@ -289,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<>()); // 濡傛灉浣欓澶т簬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 = sysTenantPackageMapper.selectById(packageId); + List<SysRole> roles = sysRoleMapper.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); + }); + sysRoleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, item.getRoleId())); + sysRoleMenuMapper.insertBatch(roleMenus); + } else { + roleIds.add(item.getRoleId()); + } + }); + if (!roleIds.isEmpty()) { + sysRoleMenuMapper.delete( + new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds).notIn(!menuIds.isEmpty(), SysRoleMenu::getMenuId, menuIds)); + } + TenantHelper.disableIgnore(); + return true; + } } -- Gitblit v1.9.3