| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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( |
| | |
| | | add.setTenantId(tenantId); |
| | | boolean flag = baseMapper.insert(add) > 0; |
| | | if (!flag) { |
| | | TenantHelper.disableIgnore(); |
| | | throw new ServiceException("创建租户失败"); |
| | | } |
| | | bo.setId(add.getId()); |
| | |
| | | @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; |
| | |
| | | @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); |
| | | } |
| | | |
| | |
| | | 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; |
| | | } |
| | |
| | | * 校验企业名称是否唯一 |
| | | */ |
| | | @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; |
| | | } |
| | | } |