system-tenant 多应用多租户支持

This commit is contained in:
Github_lizhw 2024-10-13 23:40:32 +08:00
parent cf9027c7e9
commit ac7f15c3d7
33 changed files with 217 additions and 360 deletions

View File

@ -125,6 +125,14 @@ tenant:
- sys_user_role
- sys_client
- sys_oss_config
- sys_saas_menu
- sys_saas_tenant
- sys_saas_tenant_package
- sys_saas_application
- sys_saas_role_dept
- sys_saas_role_menu
- sys_saas_user_post
- sys_saas_user_role
# MyBatisPlus配置
# https://baomidou.com/config/

View File

@ -0,0 +1,18 @@
package org.dromara.common.core.service;
/**
* 通用 部门服务
*
* @author Lion Li
*/
public interface SaasDeptService {
/**
* 通过部门ID查询部门名称
*
* @param deptIds 部门ID串逗号分隔
* @return 部门名称串逗号分隔
*/
String selectDeptNameByIds(String deptIds);
}

View File

@ -0,0 +1,67 @@
package org.dromara.common.core.service;
import java.util.Map;
/**
* 通用 字典服务
*
* @author Lion Li
*/
public interface SaasDictService {
/**
* 分隔符
*/
String SEPARATOR = ",";
/**
* 根据字典类型和字典值获取字典标签
*
* @param dictType 字典类型
* @param dictValue 字典值
* @return 字典标签
*/
default String getDictLabel(String dictType, String dictValue) {
return getDictLabel(dictType, dictValue, SEPARATOR);
}
/**
* 根据字典类型和字典标签获取字典值
*
* @param dictType 字典类型
* @param dictLabel 字典标签
* @return 字典值
*/
default String getDictValue(String dictType, String dictLabel) {
return getDictValue(dictType, dictLabel, SEPARATOR);
}
/**
* 根据字典类型和字典值获取字典标签
*
* @param dictType 字典类型
* @param dictValue 字典值
* @param separator 分隔符
* @return 字典标签
*/
String getDictLabel(String dictType, String dictValue, String separator);
/**
* 根据字典类型和字典标签获取字典值
*
* @param dictType 字典类型
* @param dictLabel 字典标签
* @param separator 分隔符
* @return 字典值
*/
String getDictValue(String dictType, String dictLabel, String separator);
/**
* 获取字典下所有的字典值与标签
*
* @param dictType 字典类型
* @return dictValue为keydictLabel为值组成的Map
*/
Map<String, String> getAllDictByDictType(String dictType);
}

View File

@ -0,0 +1,29 @@
package org.dromara.common.core.service;
import org.dromara.common.core.domain.dto.OssDTO;
import java.util.List;
/**
* 通用 OSS服务
*
* @author Lion Li
*/
public interface SaasOssService {
/**
* 通过ossId查询对应的url
*
* @param ossIds ossId串逗号分隔
* @return url串逗号分隔
*/
String selectUrlByIds(String ossIds);
/**
* 通过ossId查询列表
*
* @param ossIds ossId串逗号分隔
* @return 列表
*/
List<OssDTO> selectByIds(String ossIds);
}

View File

@ -0,0 +1,85 @@
package org.dromara.common.core.service;
import org.dromara.common.core.domain.dto.UserDTO;
import java.util.List;
/**
* 通用 用户服务
*
* @author Lion Li
*/
public interface SaasUserService {
/**
* 通过用户ID查询用户账户
*
* @param userId 用户ID
* @return 用户账户
*/
String selectUserNameById(Long userId);
/**
* 通过用户ID查询用户账户
*
* @param userId 用户ID
* @return 用户名称
*/
String selectNicknameById(Long userId);
/**
* 通过用户ID查询用户账户
*
* @param userIds 用户ID 多个用逗号隔开
* @return 用户名称
*/
String selectNicknameByIds(String userIds);
/**
* 通过用户ID查询用户手机号
*
* @param userId 用户id
* @return 用户手机号
*/
String selectPhonenumberById(Long userId);
/**
* 通过用户ID查询用户邮箱
*
* @param userId 用户id
* @return 用户邮箱
*/
String selectEmailById(Long userId);
/**
* 通过用户ID查询用户列表
*
* @param userIds 用户ids
* @return 用户列表
*/
List<UserDTO> selectListByIds(List<Long> userIds);
/**
* 通过角色ID查询用户ID
*
* @param roleIds 角色ids
* @return 用户ids
*/
List<Long> selectUserIdsByRoleIds(List<Long> roleIds);
/**
* 通过角色ID查询用户
*
* @param roleIds 角色ids
* @return 用户
*/
List<UserDTO> selectUsersByRoleIds(List<Long> roleIds);
/**
* 通过部门ID查询用户
*
* @param deptIds 部门ids
* @return 用户
*/
List<UserDTO> selectUsersByDeptIds(List<Long> deptIds);
}

View File

@ -3,7 +3,7 @@ package org.dromara.system.saas.controller.system;
import cn.dev33.satoken.annotation.SaCheckPermission;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.service.TwoDictService;
import org.dromara.common.core.service.SaasDictService;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -28,7 +28,7 @@ import org.springframework.web.bind.annotation.*;
public class Sys2NoticeController extends BaseController {
private final ISys2NoticeService noticeService;
private final TwoDictService dictService;
private final SaasDictService dictService;
/**
* 获取通知公告列表

View File

@ -11,7 +11,7 @@ import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.service.TwoDeptService;
import org.dromara.common.core.service.SaasDeptService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
@ -43,7 +43,7 @@ import java.util.List;
*/
@RequiredArgsConstructor
@Service
public class Sys2DeptServiceImpl implements ISys2DeptService, TwoDeptService {
public class Sys2DeptServiceImpl implements ISys2DeptService, SaasDeptService {
private final Sys2DeptMapper baseMapper;
private final Sys2RoleMapper roleMapper;

View File

@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.service.TwoDictService;
import org.dromara.common.core.service.SaasDictService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
@ -43,7 +43,7 @@ import java.util.stream.Collectors;
*/
@RequiredArgsConstructor
@Service
public class Sys2DictTypeServiceImpl implements ISys2DictTypeService, TwoDictService {
public class Sys2DictTypeServiceImpl implements ISys2DictTypeService, SaasDictService {
private final Sys2DictTypeMapper baseMapper;
private final Sys2DictDataMapper dictDataMapper;

View File

@ -11,7 +11,7 @@ import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.domain.dto.OssDTO;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.service.TwoOssService;
import org.dromara.common.core.service.SaasOssService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
@ -48,7 +48,7 @@ import java.util.Map;
*/
@RequiredArgsConstructor
@Service
public class Sys2OssServiceImpl implements ISys2OssService, TwoOssService {
public class Sys2OssServiceImpl implements ISys2OssService, SaasOssService {
private final Sys2OssMapper baseMapper;

View File

@ -17,7 +17,7 @@ import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.domain.dto.UserDTO;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.service.TwoUserService;
import org.dromara.common.core.service.SaasUserService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
@ -51,7 +51,7 @@ import java.util.Map;
@Slf4j
@RequiredArgsConstructor
@Service
public class Sys2UserServiceImpl implements ISys2UserService, TwoUserService {
public class Sys2UserServiceImpl implements ISys2UserService, SaasUserService {
private final Sys2UserMapper baseMapper;
private final Sys2DeptMapper deptMapper;

View File

@ -1,55 +0,0 @@
package org.dromara.system.tenant.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.system.tenant.domain.vo.CacheListInfoVo;
import lombok.RequiredArgsConstructor;
import org.redisson.spring.data.connection.RedissonConnectionFactory;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
/**
* 缓存监控
*
* @author Lion Li
*/
@RequiredArgsConstructor
@RestController
@RequestMapping("/monitor/cache")
public class CacheController {
private final RedissonConnectionFactory connectionFactory;
/**
* 获取缓存监控列表
*/
@SaCheckPermission("monitor:cache:list")
@GetMapping()
public R<CacheListInfoVo> getInfo() throws Exception {
RedisConnection connection = connectionFactory.getConnection();
Properties commandStats = connection.commands().info("commandstats");
List<Map<String, String>> pieList = new ArrayList<>();
if (commandStats != null) {
commandStats.stringPropertyNames().forEach(key -> {
Map<String, String> data = new HashMap<>(2);
String property = commandStats.getProperty(key);
data.put("name", StringUtils.removeStart(key, "cmdstat_"));
data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));
pieList.add(data);
});
}
CacheListInfoVo infoVo = new CacheListInfoVo();
infoVo.setInfo(connection.commands().info());
infoVo.setDbSize(connection.commands().dbSize());
infoVo.setCommandStats(pieList);
return R.ok(infoVo);
}
}

View File

@ -1,15 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.system.tenant.domain.SysApplication;
import org.dromara.system.tenant.domain.vo.SysApplicationVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 应用Mapper接口
*
* @author Lion Li
* @date 2024-09-22
*/
public interface SysApplicationMapper extends BaseMapperPlus<SysApplication, SysApplicationVo> {
}

View File

@ -1,17 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.dromara.system.tenant.domain.SysClient;
import org.dromara.system.tenant.domain.vo.SysClientVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 授权管理Mapper接口
*
* @author Michelle.Chung
* @date 2023-05-15
*/
@Mapper
public interface SysClientMapper extends BaseMapperPlus<SysClient, SysClientVo> {
}

View File

@ -1,14 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysConfig;
import org.dromara.system.tenant.domain.vo.SysConfigVo;
/**
* 参数配置 数据层
*
* @author Lion Li
*/
public interface SysConfigMapper extends BaseMapperPlus<SysConfig, SysConfigVo> {
}

View File

@ -1,23 +0,0 @@
package org.dromara.system.tenant.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysDictData;
import org.dromara.system.tenant.domain.vo.SysDictDataVo;
import java.util.List;
/**
* 字典表 数据层
*
* @author Lion Li
*/
public interface SysDictDataMapper extends BaseMapperPlus<SysDictData, SysDictDataVo> {
default List<SysDictDataVo> selectDictDataByType(String dictType) {
return selectVoList(
new LambdaQueryWrapper<SysDictData>()
.eq(SysDictData::getDictType, dictType)
.orderByAsc(SysDictData::getDictSort));
}
}

View File

@ -1,14 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.system.tenant.domain.SysDictType;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.vo.SysDictTypeVo;
/**
* 字典表 数据层
*
* @author Lion Li
*/
public interface SysDictTypeMapper extends BaseMapperPlus<SysDictType, SysDictTypeVo> {
}

View File

@ -1,14 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysLogininfor;
import org.dromara.system.tenant.domain.vo.SysLogininforVo;
/**
* 系统访问日志情况信息 数据层
*
* @author Lion Li
*/
public interface SysLogininforMapper extends BaseMapperPlus<SysLogininfor, SysLogininforVo> {
}

View File

@ -1,14 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysNotice;
import org.dromara.system.tenant.domain.vo.SysNoticeVo;
/**
* 通知公告表 数据层
*
* @author Lion Li
*/
public interface SysNoticeMapper extends BaseMapperPlus<SysNotice, SysNoticeVo> {
}

View File

@ -1,14 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysOperLog;
import org.dromara.system.tenant.domain.vo.SysOperLogVo;
/**
* 操作日志 数据层
*
* @author Lion Li
*/
public interface SysOperLogMapper extends BaseMapperPlus<SysOperLog, SysOperLogVo> {
}

View File

@ -1,16 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysOssConfig;
import org.dromara.system.tenant.domain.vo.SysOssConfigVo;
/**
* 对象存储配置Mapper接口
*
* @author Lion Li
* @author 孤舟烟雨
* @date 2021-08-13
*/
public interface SysOssConfigMapper extends BaseMapperPlus<SysOssConfig, SysOssConfigVo> {
}

View File

@ -1,13 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysOss;
import org.dromara.system.tenant.domain.vo.SysOssVo;
/**
* 文件上传 数据层
*
* @author Lion Li
*/
public interface SysOssMapper extends BaseMapperPlus<SysOss, SysOssVo> {
}

View File

@ -1,13 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysRoleDept;
/**
* 角色与部门关联表 数据层
*
* @author Lion Li
*/
public interface SysRoleDeptMapper extends BaseMapperPlus<SysRoleDept, SysRoleDept> {
}

View File

@ -1,13 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysRoleMenu;
/**
* 角色与菜单关联表 数据层
*
* @author Lion Li
*/
public interface SysRoleMenuMapper extends BaseMapperPlus<SysRoleMenu, SysRoleMenu> {
}

View File

@ -1,14 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysSocial;
import org.dromara.system.tenant.domain.vo.SysSocialVo;
/**
* 社会化关系Mapper接口
*
* @author thiszhc
*/
public interface SysSocialMapper extends BaseMapperPlus<SysSocial, SysSocialVo> {
}

View File

@ -1,15 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.system.tenant.domain.SysTenantApplication;
import org.dromara.system.tenant.domain.vo.SysTenantApplicationVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 租户和应用关联Mapper接口
*
* @author Lion Li
* @date 2024-09-22
*/
public interface SysTenantApplicationMapper extends BaseMapperPlus<SysTenantApplication, SysTenantApplicationVo> {
}

View File

@ -1,14 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.system.tenant.domain.SysTenant;
import org.dromara.system.tenant.domain.vo.SysTenantVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 租户Mapper接口
*
* @author Michelle.Chung
*/
public interface SysTenantMapper extends BaseMapperPlus<SysTenant, SysTenantVo> {
}

View File

@ -1,14 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysTenantPackage;
import org.dromara.system.tenant.domain.vo.SysTenantPackageVo;
/**
* 租户套餐Mapper接口
*
* @author Michelle.Chung
*/
public interface SysTenantPackageMapper extends BaseMapperPlus<SysTenantPackage, SysTenantPackageVo> {
}

View File

@ -1,13 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysUserPost;
/**
* 用户与岗位关联表 数据层
*
* @author Lion Li
*/
public interface SysUserPostMapper extends BaseMapperPlus<SysUserPost, SysUserPost> {
}

View File

@ -1,17 +0,0 @@
package org.dromara.system.tenant.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.tenant.domain.SysUserRole;
import java.util.List;
/**
* 用户与角色关联表 数据层
*
* @author Lion Li
*/
public interface SysUserRoleMapper extends BaseMapperPlus<SysUserRole, SysUserRole> {
List<Long> selectUserIdsByRoleId(Long roleId);
}

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.tenant.mapper.SysDictDataMapper">
</mapper>

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.tenant.mapper.SysLogininforMapper">
</mapper>

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.tenant.mapper.SysTenantApplicationMapper">
</mapper>

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.system.tenant.mapper.SysTenantPackageMapper">
</mapper>