疯狂的狮子li
2023-03-31 c36bc040d0b6127b08f3f4bccf5d1ae02bf25121
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代表不限制
        if (tenant.getAccountCount() == -1) {
            return TenantConstants.PASS;
            return true;
        }
        Long userNumber = sysUserMapper.selectCount(new LambdaQueryWrapper<>());
        Long userNumber = userMapper.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 = 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;
    }
}