疯狂的狮子li
2023-03-07 856f0767b4ada087e9e2cb33f373e23dbcf39b85
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,7 +267,7 @@
    @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);
    }
@@ -278,6 +279,9 @@
    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
        if (isValid) {
            // 做一些业务上的校验,判断是否需要校验
            if (ids.contains(TenantConstants.SUPER_ADMIN_ID)) {
                throw new ServiceException("超管租户不能删除");
            }
        }
        return baseMapper.deleteBatchIds(ids) > 0;
    }
@@ -286,49 +290,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代表不限制
        if (tenant.getAccountCount() == -1) {
            return TenantConstants.PASS;
            return true;
        }
        Long userNumber = sysUserMapper.selectCount(new LambdaQueryWrapper<>());
        // 如果余额大于0代表还有可用名额
        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;
    }
}