add
This commit is contained in:
@ -10,4 +10,4 @@ UPDATE sys_role_menu set tenant_id = '1';
|
||||
UPDATE sys_user_post set tenant_id = '1';
|
||||
UPDATE sys_user_role set tenant_id = '1';
|
||||
UPDATE sys_dict_data set tenant_id = '1';
|
||||
UPDATE sys_dict_type set tenant_id = '1';
|
||||
UPDATE sys_dict_type set tenant_id = '1';
|
||||
|
@ -54,7 +54,7 @@ public interface AuthConfigApiService {
|
||||
/**
|
||||
* 验证验证码
|
||||
*
|
||||
* @param code code
|
||||
* @param code result
|
||||
* @param uuid uuid
|
||||
*/
|
||||
void validateCaptcha(String code, String uuid);
|
||||
|
@ -44,7 +44,7 @@ public class RouterVo {
|
||||
private String component;
|
||||
|
||||
/**
|
||||
* 路由参数:如 {"id": 1, "name": "ry"}
|
||||
* 路由参数:如 {"id": 1, "dbName": "ry"}
|
||||
*/
|
||||
private String query;
|
||||
|
||||
|
@ -0,0 +1,43 @@
|
||||
package com.qiaoba.common.base.code;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 数据源错误信息
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 9:22
|
||||
*/
|
||||
@Getter
|
||||
public enum DatasourceErrorCode {
|
||||
|
||||
/**
|
||||
* 未找到
|
||||
*/
|
||||
NOT_FIND(50101, "未找到数据源信息"),
|
||||
|
||||
/**
|
||||
* 连接错误
|
||||
*/
|
||||
CONNECT_ERROR(50102, "数据源无法连接"),
|
||||
|
||||
/**
|
||||
* 切换模式错误
|
||||
*/
|
||||
SWITCH_SCHEMA_ERROR(50103, "切换模式错误"),
|
||||
|
||||
/**
|
||||
* 创建表错误
|
||||
*/
|
||||
CREATE_TABLE_ERROR(50104, "创建表错误");
|
||||
|
||||
private final Integer code;
|
||||
private final String msg;
|
||||
|
||||
DatasourceErrorCode(Integer code, String msg) {
|
||||
this.code = code;
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
}
|
@ -38,7 +38,7 @@ public enum DataBaseEnum {
|
||||
* PostgreSQL
|
||||
*/
|
||||
POSTGRE_SQL("PostgreSQL",
|
||||
"jdbc:postgresql://{}:{}/mydb?currentSchema={}&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true",
|
||||
"jdbc:postgresql://{}:{}/{}?currentSchema={}&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true",
|
||||
"org.postgresql.Driver",
|
||||
"SELECT 1"),
|
||||
|
||||
@ -65,10 +65,10 @@ public enum DataBaseEnum {
|
||||
throw new ServiceException(StrUtil.format("未找到数据库驱动, Type: {}", type));
|
||||
}
|
||||
|
||||
public static String getUrl(String type, String ip, String port, String database) {
|
||||
public static String getUrl(String type, String ip, String port, String dbName, String schema) {
|
||||
for (DataBaseEnum dataBaseEnum : values()) {
|
||||
if (dataBaseEnum.getType().equals(type)) {
|
||||
return StrUtil.format(dataBaseEnum.url, ip, port, database);
|
||||
return StrUtil.format(dataBaseEnum.url, ip, port, dbName, schema);
|
||||
}
|
||||
}
|
||||
throw new ServiceException(StrUtil.format("未找到数据库Url, Type: {}", type));
|
||||
|
@ -17,7 +17,7 @@ public class AjaxResult extends HashMap<String, Object> {
|
||||
/**
|
||||
* 状态码
|
||||
*/
|
||||
public static final String CODE_TAG = "code";
|
||||
public static final String CODE_TAG = "result";
|
||||
|
||||
/**
|
||||
* 返回内容
|
||||
|
@ -3,6 +3,7 @@ package com.qiaoba.common.database.handlers.schema;
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.qiaoba.common.base.context.BaseContext;
|
||||
import com.qiaoba.common.database.utils.SqlUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -32,14 +33,10 @@ public class MysqlSchemaHandler implements SchemaHandler {
|
||||
// eg: use qiaoba-1;
|
||||
String sql = StrUtil.format("use `{}-{}`;", baseDatabase, BaseContext.getTenantId());
|
||||
log.debug("Run MysqlSchemaHandler, Sql: {}", sql);
|
||||
Statement statement = null;
|
||||
try {
|
||||
statement = conn.createStatement();
|
||||
statement.execute(sql);
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
IoUtil.close(statement);
|
||||
SqlUtil.runSql(conn, sql);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,8 @@ import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.qiaoba.common.base.enums.DataBaseEnum;
|
||||
import com.qiaoba.common.base.exceptions.ServiceException;
|
||||
import com.qiaoba.common.database.config.DynamicDataSourceConfig;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.sql.Connection;
|
||||
@ -49,7 +50,7 @@ public class JdbcUtil {
|
||||
/**
|
||||
* 检查数据源连接可用性
|
||||
*
|
||||
* @param conn 数据源
|
||||
* @param conn 数据源
|
||||
* @return 结果
|
||||
*/
|
||||
public static boolean checkConnect(Connection conn) {
|
||||
@ -81,4 +82,28 @@ public class JdbcUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static CheckResult check(String driver, String url, String username, String password) {
|
||||
Connection conn = null;
|
||||
try {
|
||||
Class.forName(driver);
|
||||
//建立连接
|
||||
conn = DriverManager.getConnection(url, username, password);
|
||||
return new CheckResult(true, null);
|
||||
} catch (Exception e) {
|
||||
return new CheckResult(false, e.getMessage());
|
||||
} finally {
|
||||
IoUtil.close(conn);
|
||||
}
|
||||
}
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
public static class CheckResult {
|
||||
private boolean result;
|
||||
private String msg;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println(check("oracle.jdbc.OracleDriver", "jdbc:oracle:thin:@//192.168.0.205:1521/ORCL", "system", "root"));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,28 @@
|
||||
package com.qiaoba.common.database.utils;
|
||||
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
/**
|
||||
* SqlUtil
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 17:30
|
||||
*/
|
||||
public class SqlUtil {
|
||||
|
||||
public static void runSql(Connection connection, String sql) throws SQLException {
|
||||
|
||||
Statement statement = null;
|
||||
try {
|
||||
statement = connection.createStatement();
|
||||
statement.execute(sql);
|
||||
} finally {
|
||||
IoUtil.close(statement);
|
||||
}
|
||||
}
|
||||
}
|
@ -41,7 +41,7 @@ public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
|
||||
void deleteByUserIds(@Param("list") List<String> userIds);
|
||||
|
||||
/**
|
||||
* 通过userId查询所绑定的角色(id + name)列表
|
||||
* 通过userId查询所绑定的角色(id + dbName)列表
|
||||
*
|
||||
* @param userId userId
|
||||
* @param status 状态
|
||||
|
@ -53,7 +53,7 @@ public interface SysUserRoleService {
|
||||
List<String> selectRoleIdsByUserId(String userId, String status);
|
||||
|
||||
/**
|
||||
* 通过userId查询所绑定的角色(id + name)列表
|
||||
* 通过userId查询所绑定的角色(id + dbName)列表
|
||||
*
|
||||
* @param userId userId
|
||||
* @param status 状态
|
||||
|
@ -56,4 +56,11 @@ public class SysTenantDatasourceController {
|
||||
public AjaxResult list(@RequestParam String tenantId) {
|
||||
return AjaxResult.success(sysTenantDatasourceService.selectList(tenantId));
|
||||
}
|
||||
|
||||
@PreAuthorize("hasAuthority('tenant:datasource:edit')")
|
||||
@PutMapping("/switchPrimary/{tenantId}/{id}")
|
||||
@Operation(summary = "切换为主数据源")
|
||||
public AjaxResult switchPrimary(@PathVariable String tenantId, @PathVariable String id) {
|
||||
return AjaxResult.toAjax(sysTenantDatasourceService.switchPrimary(tenantId, id));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,41 @@
|
||||
package com.qiaoba.module.tenant.controller;
|
||||
|
||||
import com.qiaoba.module.tenant.entity.vo.TenantInitCheckVo;
|
||||
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
|
||||
import com.qiaoba.module.tenant.service.SysTenantInitService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 租户初始化 Web层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 9:03
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/tenant/init")
|
||||
@RequiredArgsConstructor
|
||||
@Tag(name = "租户初始化管理")
|
||||
public class SysTenantInitController {
|
||||
|
||||
private final SysTenantInitService sysTenantInitService;
|
||||
|
||||
@PostMapping(value = "/check/{tenantId}")
|
||||
@Operation(summary = "步骤一: 检查各项参数")
|
||||
public TenantInitCheckVo check(@PathVariable String tenantId) {
|
||||
return sysTenantInitService.check(tenantId);
|
||||
}
|
||||
|
||||
@PostMapping(value = "/createTables/{tenantId}")
|
||||
@Operation(summary = "步骤二: 创建数据库表")
|
||||
public TenantInitVo createTables(@PathVariable String tenantId) {
|
||||
return sysTenantInitService.createTables(tenantId);
|
||||
}
|
||||
|
||||
}
|
@ -35,7 +35,7 @@ public class SysTenant extends BaseEntity {
|
||||
public static final String COLUMN_MODE = "1";
|
||||
|
||||
/**
|
||||
* 数据库模式
|
||||
* SCHEMA 模式
|
||||
*/
|
||||
public static final String SCHEMA_MODE = "2";
|
||||
|
||||
|
@ -43,7 +43,10 @@ public class SysTenantDatasource extends BaseEntity {
|
||||
|
||||
@NotBlank(message = "数据库名称不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
@Schema(description = "数据库名称")
|
||||
private String name;
|
||||
private String dbName;
|
||||
|
||||
@Schema(description = "模式名称")
|
||||
private String schemaName;
|
||||
|
||||
@NotBlank(message = "数据库账号不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
@Schema(description = "数据库账号")
|
||||
@ -53,10 +56,13 @@ public class SysTenantDatasource extends BaseEntity {
|
||||
@Schema(description = "数据库密码")
|
||||
private String password;
|
||||
|
||||
@Schema(description = "连接池-初始化大小-默认: 5")
|
||||
private Integer initCount;
|
||||
|
||||
@Schema(description = "连接池-最小空闲线程数-默认: 10")
|
||||
private Integer minCount;
|
||||
|
||||
@Schema(description = "连接池-最大连接池数量-默认: 20")
|
||||
private Integer maxCount;
|
||||
|
||||
private String isPrimary;
|
||||
|
@ -0,0 +1,45 @@
|
||||
package com.qiaoba.module.tenant.entity.vo;
|
||||
|
||||
import com.qiaoba.module.tenant.entity.SysTenantDatasource;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 租户初始化之前的检查
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 9:09
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@NoArgsConstructor
|
||||
public class TenantInitCheckVo extends TenantInitVo {
|
||||
|
||||
|
||||
@Schema(description = "租户名称")
|
||||
private String tenantName;
|
||||
|
||||
@Schema(description = "1-字段,2-SCHEMA,3数据源")
|
||||
private String mode;
|
||||
|
||||
private SysTenantDatasource datasource;
|
||||
|
||||
public TenantInitCheckVo(String tenantName, String mode, Integer result, String msg) {
|
||||
this.tenantName = tenantName;
|
||||
this.mode = mode;
|
||||
this.result = result;
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
|
||||
public TenantInitCheckVo(String tenantName, String mode, SysTenantDatasource datasource, Integer result, String msg) {
|
||||
this.tenantName = tenantName;
|
||||
this.mode = mode;
|
||||
this.datasource = datasource;
|
||||
this.result = result;
|
||||
this.msg = msg;
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.qiaoba.module.tenant.entity.vo;
|
||||
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* TenantInitVo
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 16:16
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TenantInitVo implements Serializable {
|
||||
|
||||
private final Integer code = HttpStatus.HTTP_OK;
|
||||
|
||||
public Integer result;
|
||||
|
||||
public String msg;
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package com.qiaoba.module.tenant.init;
|
||||
|
||||
/**
|
||||
* 初始化数据策略
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 13:05
|
||||
*/
|
||||
public interface InitDataStrategy {
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.qiaoba.module.tenant.init;
|
||||
|
||||
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
|
||||
|
||||
import java.sql.Connection;
|
||||
|
||||
/**
|
||||
* 初始化表策略
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 13:05
|
||||
*/
|
||||
public interface InitTablesStrategy {
|
||||
|
||||
/**
|
||||
* 创建表
|
||||
*
|
||||
* @param conn 连接对象
|
||||
* @param schema 模式
|
||||
* @return 结果
|
||||
*/
|
||||
TenantInitVo create(Connection conn, String schema);
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package com.qiaoba.module.tenant.init;
|
||||
|
||||
import com.qiaoba.common.base.enums.DataBaseEnum;
|
||||
import com.qiaoba.common.base.exceptions.ServiceException;
|
||||
import com.qiaoba.module.tenant.init.impl.MysqlInitTablesStrategy;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* 策略工厂-租户初始化-创建表
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 16:41
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class InitTablesStrategyFactory {
|
||||
|
||||
private static Map<String, InitTablesStrategy> FACTORY = new ConcurrentHashMap<>();
|
||||
|
||||
private final MysqlInitTablesStrategy mysqlInitTablesStrategy;
|
||||
|
||||
|
||||
@PostConstruct
|
||||
public void register() {
|
||||
FACTORY.put(DataBaseEnum.MY_SQL.getType(), mysqlInitTablesStrategy);
|
||||
}
|
||||
|
||||
public static InitTablesStrategy getStrategy(String name) {
|
||||
InitTablesStrategy strategy = FACTORY.get(name);
|
||||
if (Objects.isNull(strategy)) {
|
||||
throw new ServiceException("[ InitTablesStrategy ]策略工厂异常, 类型:[" + name + "]找不到相对应的策略");
|
||||
}
|
||||
return strategy;
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package com.qiaoba.module.tenant.init.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.db.sql.SqlExecutor;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.qiaoba.common.base.code.DatasourceErrorCode;
|
||||
import com.qiaoba.common.database.utils.SqlUtil;
|
||||
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
|
||||
import com.qiaoba.module.tenant.init.InitTablesStrategy;
|
||||
import com.qiaoba.module.tenant.utils.DbUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
/**
|
||||
* 初始化表策略-Mysql
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 16:01
|
||||
*/
|
||||
@Service
|
||||
public class MysqlInitTablesStrategy implements InitTablesStrategy {
|
||||
@Override
|
||||
public TenantInitVo create(Connection conn, String schema) {
|
||||
|
||||
// 切换 Schema
|
||||
try {
|
||||
SqlUtil.runSql(conn, StrUtil.format("use `{}`;", schema));
|
||||
DbUtil.runScript(conn, "MySQL/table/base_tables");
|
||||
conn.commit();
|
||||
return new TenantInitVo(HttpStatus.HTTP_OK, null);
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return new TenantInitVo(DatasourceErrorCode.CREATE_TABLE_ERROR.getCode(), null);
|
||||
}
|
||||
}
|
@ -29,5 +29,5 @@ public interface SysTenantDatasourceMapper extends BaseMapper<SysTenantDatasourc
|
||||
* @param excludeId 排除Id
|
||||
* @param code 否
|
||||
*/
|
||||
void setBackupDatasourceExcludeId(@Param("tenantId") String tenantId, @Param("excludeId") String excludeId, @Param("code") String code);
|
||||
void setBackupDatasourceExcludeId(@Param("tenantId") String tenantId, @Param("excludeId") String excludeId, @Param("result") String code);
|
||||
}
|
||||
|
@ -85,4 +85,13 @@ public interface SysTenantDatasourceService {
|
||||
* @param excludeId 排除Id
|
||||
*/
|
||||
void setBackupDatasourceExcludeId(String tenantId, String excludeId);
|
||||
|
||||
/**
|
||||
* 切换为主数据源
|
||||
*
|
||||
* @param tenantId 租户ID
|
||||
* @param datasourceId 数据源ID
|
||||
* @return 结果
|
||||
*/
|
||||
int switchPrimary(String tenantId, String datasourceId);
|
||||
}
|
||||
|
@ -0,0 +1,30 @@
|
||||
package com.qiaoba.module.tenant.service;
|
||||
|
||||
import com.qiaoba.module.tenant.entity.vo.TenantInitCheckVo;
|
||||
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
|
||||
|
||||
/**
|
||||
* 租户初始化 服务层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 9:06
|
||||
*/
|
||||
public interface SysTenantInitService {
|
||||
|
||||
/**
|
||||
* 初始化之前的检查
|
||||
*
|
||||
* @param tenantId 租户ID
|
||||
* @return 检查结果信息
|
||||
*/
|
||||
TenantInitCheckVo check(String tenantId);
|
||||
|
||||
/**
|
||||
* 创建表
|
||||
*
|
||||
* @param tenantId 租户ID
|
||||
* @return 结果
|
||||
*/
|
||||
TenantInitVo createTables(String tenantId);
|
||||
}
|
@ -47,6 +47,15 @@ public interface SysTenantService {
|
||||
*/
|
||||
SysTenant selectById(String tenantId);
|
||||
|
||||
/**
|
||||
* 查询租户信息
|
||||
*
|
||||
* @param tenantId 租户ID
|
||||
* @param allowNull 是否允许为空
|
||||
* @return 租户信息
|
||||
*/
|
||||
SysTenant selectById(String tenantId, Boolean allowNull);
|
||||
|
||||
/**
|
||||
* 在缓存中查询详情
|
||||
*
|
||||
|
@ -73,7 +73,7 @@ public class DynamicDatasourceServiceImpl implements DynamicDatasourceService {
|
||||
dynamicDataSource.setMinIdle(datasource.getMinCount());
|
||||
dynamicDataSource.setMaxActive(datasource.getMaxCount());
|
||||
dynamicDataSource.setDriver(DataBaseEnum.getDriver(datasource.getType()));
|
||||
dynamicDataSource.setUrl(DataBaseEnum.getUrl(datasource.getType(), datasource.getIp(), datasource.getPort(), datasource.getName()));
|
||||
dynamicDataSource.setUrl(DataBaseEnum.getUrl(datasource.getType(), datasource.getIp(), datasource.getPort(), datasource.getDbName(), datasource.getSchemaName()));
|
||||
return dynamicDataSource;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package com.qiaoba.module.tenant.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.qiaoba.common.base.constants.BaseConstant;
|
||||
import com.qiaoba.common.base.enums.BaseEnum;
|
||||
import com.qiaoba.module.tenant.entity.SysTenantDatasource;
|
||||
import com.qiaoba.module.tenant.entity.param.SysTenantDatasourceParam;
|
||||
@ -9,6 +10,7 @@ import com.qiaoba.module.tenant.mapper.SysTenantDatasourceMapper;
|
||||
import com.qiaoba.module.tenant.service.SysTenantDatasourceService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -72,6 +74,22 @@ public class SysTenantDatasourceServiceImpl implements SysTenantDatasourceServic
|
||||
sysTenantDatasourceMapper.setBackupDatasourceExcludeId(tenantId, excludeId, BaseEnum.NO.getCode());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int switchPrimary(String tenantId, String datasourceId) {
|
||||
// 更新其他的为非主要
|
||||
setBackupDatasourceExcludeId(tenantId, datasourceId);
|
||||
// 更新他为主要
|
||||
SysTenantDatasource datasource = sysTenantDatasourceMapper.selectById(datasourceId);
|
||||
datasource.setIsPrimary(BaseEnum.YES.getCode());
|
||||
int result = updateById(datasource);
|
||||
// 刷新PrimaryDatasourceMap
|
||||
if (result > BaseConstant.HANDLE_ERROR) {
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private QueryWrapper<SysTenantDatasource> paramToWrapper(SysTenantDatasourceParam param) {
|
||||
QueryWrapper<SysTenantDatasource> wrapper = new QueryWrapper<>();
|
||||
wrapper.lambda()
|
||||
|
@ -0,0 +1,99 @@
|
||||
package com.qiaoba.module.tenant.service.impl;
|
||||
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.qiaoba.common.base.code.DatasourceErrorCode;
|
||||
import com.qiaoba.common.base.constants.TenantConstant;
|
||||
import com.qiaoba.common.base.enums.DataBaseEnum;
|
||||
import com.qiaoba.common.database.config.DynamicDataSourceConfig;
|
||||
import com.qiaoba.common.database.utils.JdbcUtil;
|
||||
import com.qiaoba.module.tenant.entity.SysTenant;
|
||||
import com.qiaoba.module.tenant.entity.SysTenantDatasource;
|
||||
import com.qiaoba.module.tenant.entity.vo.TenantInitCheckVo;
|
||||
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
|
||||
import com.qiaoba.module.tenant.init.InitTablesStrategyFactory;
|
||||
import com.qiaoba.module.tenant.service.SysTenantDatasourceService;
|
||||
import com.qiaoba.module.tenant.service.SysTenantInitService;
|
||||
import com.qiaoba.module.tenant.service.SysTenantService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 租户初始化 服务层实现
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 9:07
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SysTenantInitServiceImpl implements SysTenantInitService {
|
||||
|
||||
private final SysTenantService sysTenantService;
|
||||
private final SysTenantDatasourceService sysTenantDatasourceService;
|
||||
|
||||
|
||||
@Override
|
||||
public TenantInitCheckVo check(String tenantId) {
|
||||
// 1. 查询租户信息, 获取租户名称|租户模式
|
||||
SysTenant sysTenant = sysTenantService.selectById(tenantId, false);
|
||||
// 2. 租户模式 = 3 数据源模式
|
||||
if (SysTenant.DATASOURCE_MODE.equals(sysTenant.getMode())) {
|
||||
// 3. 根据租户ID查询主要数据源(1条)
|
||||
SysTenantDatasource datasource = sysTenantDatasourceService.selectPrimary(tenantId);
|
||||
// 4. 若没有主要数据源, 返回 未找到数据源信息
|
||||
if (Objects.isNull(datasource)) {
|
||||
return new TenantInitCheckVo(sysTenant.getCompanyName(), sysTenant.getMode(), DatasourceErrorCode.NOT_FIND.getCode(), DatasourceErrorCode.NOT_FIND.getMsg());
|
||||
}
|
||||
// 5. 有数据源, 检查连接性
|
||||
JdbcUtil.CheckResult connectResult = JdbcUtil.check(DataBaseEnum.getDriver(datasource.getType()),
|
||||
DataBaseEnum.getUrl(datasource.getType(), datasource.getIp(), datasource.getPort(), datasource.getDbName(), datasource.getSchemaName()),
|
||||
datasource.getUsername(), datasource.getPassword());
|
||||
if (!connectResult.isResult()) {
|
||||
// 6. 数据源无法连接, 返回
|
||||
return new TenantInitCheckVo(sysTenant.getCompanyName(), sysTenant.getMode(), datasource, DatasourceErrorCode.CONNECT_ERROR.getCode(), connectResult.getMsg());
|
||||
}
|
||||
|
||||
// 7. 全部正常
|
||||
return new TenantInitCheckVo(sysTenant.getCompanyName(), sysTenant.getMode(), datasource, HttpStatus.HTTP_OK, null);
|
||||
|
||||
}
|
||||
|
||||
return new TenantInitCheckVo(sysTenant.getCompanyName(), sysTenant.getMode(), HttpStatus.HTTP_OK, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TenantInitVo createTables(String tenantId) {
|
||||
SysTenant sysTenant = sysTenantService.selectById(tenantId, false);
|
||||
// 字段模式
|
||||
if (SysTenant.COLUMN_MODE.equals(sysTenant.getMode())) {
|
||||
return new TenantInitVo(HttpStatus.HTTP_OK, "字段模式, 无需新建表");
|
||||
}
|
||||
// Schema模式
|
||||
if (SysTenant.SCHEMA_MODE.equals(sysTenant.getMode())) {
|
||||
Connection connection = null;
|
||||
try {
|
||||
String schema = "qiaoba-boot-2";
|
||||
// 获取主库Connection 和 Schema
|
||||
DruidDataSource dataSource = (DruidDataSource) DynamicDataSourceConfig.PRIMARY_DATASOURCE_MAP.get(TenantConstant.DEFAULT_TENANT_ID);
|
||||
connection = dataSource.getConnection();
|
||||
return InitTablesStrategyFactory.getStrategy(DynamicDataSourceConfig.TENANT_DATASOURCE_TYPE_MAP.get(TenantConstant.DEFAULT_TENANT_ID)).create(connection, schema);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
IoUtil.close(connection);
|
||||
}
|
||||
}
|
||||
// 数据源模式
|
||||
if (SysTenant.DATASOURCE_MODE.equals(sysTenant.getMode())) {
|
||||
|
||||
}
|
||||
return new TenantInitVo(500, "未知异常");
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.qiaoba.auth.utils.SecurityUtil;
|
||||
import com.qiaoba.common.base.code.TenantErrorCode;
|
||||
import com.qiaoba.common.base.constants.BaseConstant;
|
||||
import com.qiaoba.common.base.constants.TenantConstant;
|
||||
import com.qiaoba.common.base.context.BaseContext;
|
||||
@ -85,6 +86,17 @@ public class SysTenantServiceImpl implements SysTenantService {
|
||||
return sysTenantMapper.selectById(tenantId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysTenant selectById(String tenantId, Boolean allowNull) {
|
||||
SysTenant sysTenant = selectById(tenantId);
|
||||
if (!allowNull) {
|
||||
if (Objects.isNull(sysTenant)) {
|
||||
throw new ServiceException(TenantErrorCode.NOT_FIND.getCode(), TenantErrorCode.NOT_FIND.getMsg());
|
||||
}
|
||||
}
|
||||
return sysTenant;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysTenant selectFromCache(String tenantId) {
|
||||
BaseContext.setTenantId(TenantConstant.DEFAULT_TENANT_ID);
|
||||
@ -185,7 +197,7 @@ public class SysTenantServiceImpl implements SysTenantService {
|
||||
if (Objects.isNull(primary)) {
|
||||
throw new ServiceException("未找到租户主数据源信息");
|
||||
}
|
||||
return JdbcUtil.getConnection(DataBaseEnum.getDriver(primary.getType()), DataBaseEnum.getUrl(primary.getType(), primary.getIp(), primary.getPort(), primary.getName()), primary.getUsername(), primary.getPassword());
|
||||
return JdbcUtil.getConnection(DataBaseEnum.getDriver(primary.getType()), DataBaseEnum.getUrl(primary.getType(), primary.getIp(), primary.getPort(), primary.getDbName(), primary.getSchemaName()), primary.getUsername(), primary.getPassword());
|
||||
}
|
||||
|
||||
private void toCache(SysTenant sysTenant) {
|
||||
|
@ -0,0 +1,30 @@
|
||||
package com.qiaoba.module.tenant.utils;
|
||||
|
||||
import org.apache.ibatis.jdbc.ScriptRunner;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.sql.Connection;
|
||||
|
||||
/**
|
||||
* 数据库工具类
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/6/27 16:11
|
||||
*/
|
||||
public class DbUtil {
|
||||
|
||||
public static void runScript(Connection conn, String filePath) throws IOException {
|
||||
ClassPathResource resource = new ClassPathResource(filePath);
|
||||
File file = resource.getFile();
|
||||
FileReader reader = new FileReader(file);
|
||||
ScriptRunner scriptRunner = new ScriptRunner(conn);
|
||||
scriptRunner.setSendFullScript(true);
|
||||
scriptRunner.runScript(reader);
|
||||
reader.close();
|
||||
}
|
||||
}
|
@ -1,186 +1,313 @@
|
||||
/*
|
||||
Navicat Premium Data Transfer
|
||||
|
||||
Source Server : 虚拟机-202
|
||||
Source Server Type : MySQL
|
||||
Source Server Version : 50742
|
||||
Source Host : 192.168.0.202:3306
|
||||
Source Schema : qiaoba-boot
|
||||
|
||||
Target Server Type : MySQL
|
||||
Target Server Version : 50742
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 27/06/2023 13:18:39
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_config`;
|
||||
CREATE TABLE `sys_config` (
|
||||
`config_id` bigint NOT NULL COMMENT '参数主键',
|
||||
`config_name` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '参数名称',
|
||||
`config_key` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '参数键名',
|
||||
`config_value` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '参数键值',
|
||||
`config_type` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`config_id` bigint(20) NOT NULL COMMENT '参数主键',
|
||||
`config_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数名称',
|
||||
`config_key` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数键名',
|
||||
`config_value` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '参数键值',
|
||||
`config_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint NULL DEFAULT NULL,
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(20) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`config_id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1666019098658177025 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '参数配置表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '参数配置表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_dept
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_dept`;
|
||||
CREATE TABLE `sys_dept` (
|
||||
`dept_id` bigint NOT NULL COMMENT '部门id',
|
||||
`parent_id` bigint NULL DEFAULT 0 COMMENT '父部门id',
|
||||
`ancestors` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '祖级列表',
|
||||
`dept_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '部门名称',
|
||||
`order_num` int NULL DEFAULT 0 COMMENT '显示顺序',
|
||||
`leader` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '负责人ID',
|
||||
`phone` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '手机号',
|
||||
`email` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '邮箱',
|
||||
`status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '部门状态(1正常 0停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`dept_id` bigint(20) NOT NULL COMMENT '部门id',
|
||||
`parent_id` bigint(20) NULL DEFAULT 0 COMMENT '父部门id',
|
||||
`ancestors` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '祖级列表',
|
||||
`dept_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '部门名称',
|
||||
`order_num` int(11) NULL DEFAULT 0 COMMENT '显示顺序',
|
||||
`leader` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '负责人ID',
|
||||
`phone` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号',
|
||||
`email` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
|
||||
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '部门状态(1正常 0停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID',
|
||||
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户ID',
|
||||
PRIMARY KEY (`dept_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '部门表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_dict_data
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_dict_data`;
|
||||
CREATE TABLE `sys_dict_data` (
|
||||
`dict_code` bigint NOT NULL COMMENT '字典编码',
|
||||
`dict_sort` int NULL DEFAULT 0 COMMENT '字典排序',
|
||||
`dict_label` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '字典标签',
|
||||
`dict_value` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '字典键值',
|
||||
`dict_type` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '字典类型',
|
||||
`css_class` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)',
|
||||
`list_class` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '表格回显样式',
|
||||
`is_default` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT 'N' COMMENT '是否默认(Y是 N否)',
|
||||
`status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`dict_code` bigint(20) NOT NULL COMMENT '字典编码',
|
||||
`dict_sort` int(11) NULL DEFAULT 0 COMMENT '字典排序',
|
||||
`dict_label` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典标签',
|
||||
`dict_value` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典键值',
|
||||
`dict_type` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典类型',
|
||||
`css_class` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)',
|
||||
`list_class` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '表格回显样式',
|
||||
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户ID',
|
||||
PRIMARY KEY (`dict_code`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1665587655929507842 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '字典数据表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '字典数据表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_dict_type
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_dict_type`;
|
||||
CREATE TABLE `sys_dict_type` (
|
||||
`dict_id` bigint NOT NULL COMMENT '字典主键',
|
||||
`dict_name` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '字典名称',
|
||||
`dict_type` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '字典类型',
|
||||
`status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`dict_id` bigint(20) NOT NULL COMMENT '字典主键',
|
||||
`dict_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典名称',
|
||||
`dict_type` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '字典类型',
|
||||
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户ID',
|
||||
PRIMARY KEY (`dict_id`) USING BTREE,
|
||||
UNIQUE INDEX `dict_type`(`dict_type`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1665587609699889155 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '字典类型表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '字典类型表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_login_log
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_login_log`;
|
||||
CREATE TABLE `sys_login_log` (
|
||||
`login_id` bigint(20) NOT NULL,
|
||||
`device_sn` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '设备编码',
|
||||
`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '登录账号',
|
||||
`nickname` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名称',
|
||||
`ip` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '访问IP',
|
||||
`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '登录地点',
|
||||
`browser` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '浏览器',
|
||||
`os` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作系统',
|
||||
`login_time` datetime NULL DEFAULT NULL COMMENT '登录时间',
|
||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(20) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`login_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '登录日志' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_menu
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_menu`;
|
||||
CREATE TABLE `sys_menu` (
|
||||
`menu_id` bigint NOT NULL COMMENT '菜单ID',
|
||||
`menu_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '菜单名称',
|
||||
`parent_id` bigint NULL DEFAULT 0 COMMENT '父菜单ID',
|
||||
`order_num` int NULL DEFAULT 0 COMMENT '显示顺序',
|
||||
`path` varchar(200) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '路由地址',
|
||||
`component` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '组件路径',
|
||||
`query` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '路由参数',
|
||||
`is_frame` int NULL DEFAULT 1 COMMENT '是否为外链(1是 0否)',
|
||||
`is_cache` int NULL DEFAULT 0 COMMENT '是否缓存(1缓存 0不缓存)',
|
||||
`menu_type` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)',
|
||||
`is_visible` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '菜单状态(1显示 0隐藏)',
|
||||
`perms` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '权限标识',
|
||||
`icon` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '#' COMMENT '菜单图标',
|
||||
`create_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
|
||||
`menu_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '菜单名称',
|
||||
`parent_id` bigint(20) NULL DEFAULT 0 COMMENT '父菜单ID',
|
||||
`order_num` int(11) NULL DEFAULT 0 COMMENT '显示顺序',
|
||||
`path` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '路由地址',
|
||||
`component` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '组件路径',
|
||||
`query` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '路由参数',
|
||||
`is_frame` int(11) NULL DEFAULT 1 COMMENT '是否为外链(1是 0否)',
|
||||
`is_cache` int(11) NULL DEFAULT 0 COMMENT '是否缓存(1缓存 0不缓存)',
|
||||
`menu_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '菜单类型(M目录 C菜单 F按钮)',
|
||||
`is_visible` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '菜单状态(1显示 0隐藏)',
|
||||
`perms` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限标识',
|
||||
`icon` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '#' COMMENT '菜单图标',
|
||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '备注',
|
||||
`tenant_id` bigint NULL DEFAULT NULL,
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '备注',
|
||||
`tenant_id` bigint(20) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`menu_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '菜单权限表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '菜单权限表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_post
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_post`;
|
||||
CREATE TABLE `sys_post` (
|
||||
`post_id` bigint NOT NULL COMMENT '岗位ID',
|
||||
`post_code` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '岗位编码',
|
||||
`post_name` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '岗位名称',
|
||||
`post_sort` int NOT NULL COMMENT '显示顺序',
|
||||
`status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '状态(1正常 0停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`post_id` bigint(20) NOT NULL COMMENT '岗位ID',
|
||||
`post_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '岗位编码',
|
||||
`post_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '岗位名称',
|
||||
`post_sort` int(11) NOT NULL COMMENT '显示顺序',
|
||||
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '状态(1正常 0停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户ID',
|
||||
PRIMARY KEY (`post_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '岗位信息表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '岗位信息表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_role
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_role`;
|
||||
CREATE TABLE `sys_role` (
|
||||
`role_id` bigint NOT NULL COMMENT '角色ID',
|
||||
`role_name` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '角色名称',
|
||||
`role_key` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '角色权限字符串',
|
||||
`role_sort` int NOT NULL COMMENT '显示顺序',
|
||||
`data_scope` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
|
||||
`status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '角色状态(1正常 0停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
||||
`role_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色名称',
|
||||
`role_key` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色权限字符串',
|
||||
`role_sort` int(11) NOT NULL COMMENT '显示顺序',
|
||||
`data_scope` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
|
||||
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色状态(1正常 0停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户ID',
|
||||
PRIMARY KEY (`role_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '角色信息表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色信息表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_role_dept
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_role_dept`;
|
||||
CREATE TABLE `sys_role_dept` (
|
||||
`role_id` bigint NOT NULL COMMENT '角色ID',
|
||||
`dept_id` bigint NOT NULL COMMENT '部门ID',
|
||||
`tenant_id` bigint NOT NULL COMMENT '租户ID',
|
||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
||||
`dept_id` bigint(20) NOT NULL COMMENT '部门ID',
|
||||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||||
PRIMARY KEY (`role_id`, `dept_id`, `tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '角色和部门关联表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色和部门关联表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_role_menu
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_role_menu`;
|
||||
CREATE TABLE `sys_role_menu` (
|
||||
`role_id` bigint NOT NULL COMMENT '角色ID',
|
||||
`menu_id` bigint NOT NULL COMMENT '菜单ID',
|
||||
`tenant_id` bigint NOT NULL COMMENT '租户ID',
|
||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
||||
`menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
|
||||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||||
PRIMARY KEY (`role_id`, `menu_id`, `tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_tenant
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_tenant`;
|
||||
CREATE TABLE `sys_tenant` (
|
||||
`tenant_id` bigint(20) NOT NULL,
|
||||
`company_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '公司名称',
|
||||
`contact_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系人名称',
|
||||
`contact_phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系人电话',
|
||||
`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '公司地址',
|
||||
`profile` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '公司简介',
|
||||
`license_number` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '统一社会信用代码',
|
||||
`domain` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '域名',
|
||||
`expire_time` datetime NULL DEFAULT NULL COMMENT '过期时间',
|
||||
`account_count` bigint(20) NULL DEFAULT NULL COMMENT '用户数量',
|
||||
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态',
|
||||
`mode` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '模式',
|
||||
`initialized` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否已初始化',
|
||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
PRIMARY KEY (`tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '租户表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_tenant_datasource
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_tenant_datasource`;
|
||||
CREATE TABLE `sys_tenant_datasource` (
|
||||
`datasource_id` bigint(20) NOT NULL,
|
||||
`type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '类型',
|
||||
`ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'IP',
|
||||
`port` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '端口',
|
||||
`db_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '数据库名称',
|
||||
`schema_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '模式名称',
|
||||
`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '账号',
|
||||
`password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
|
||||
`init_count` int(11) NULL DEFAULT NULL COMMENT '初始连接数',
|
||||
`min_count` int(11) NULL DEFAULT NULL COMMENT '最小空闲数',
|
||||
`max_count` int(11) NULL DEFAULT NULL COMMENT '最大连接数',
|
||||
`is_primary` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主要数据源',
|
||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(20) NOT NULL,
|
||||
PRIMARY KEY (`datasource_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '租户数据源' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_user
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_user`;
|
||||
CREATE TABLE `sys_user` (
|
||||
`user_id` bigint NOT NULL COMMENT '用户ID',
|
||||
`dept_id` bigint NULL DEFAULT NULL COMMENT '部门ID',
|
||||
`username` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '用户账号',
|
||||
`nickname` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '用户昵称',
|
||||
`email` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '用户邮箱',
|
||||
`phone` varchar(11) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '手机号码',
|
||||
`gender` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
|
||||
`avatar` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '头像地址',
|
||||
`password` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '密码',
|
||||
`status` char(1) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '0' COMMENT '帐号状态(1正常 0停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
|
||||
`dept_id` bigint(20) NULL DEFAULT NULL COMMENT '部门ID',
|
||||
`username` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户账号',
|
||||
`nickname` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户昵称',
|
||||
`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '用户邮箱',
|
||||
`phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '手机号码',
|
||||
`gender` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
|
||||
`avatar` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '头像地址',
|
||||
`password` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '密码',
|
||||
`status` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '帐号状态(1正常 0停用)',
|
||||
`create_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_user` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint NULL DEFAULT NULL COMMENT '租户ID',
|
||||
`remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`tenant_id` bigint(20) NULL DEFAULT NULL COMMENT '租户ID',
|
||||
PRIMARY KEY (`user_id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1660830718629277698 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_user_post
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_user_post`;
|
||||
CREATE TABLE `sys_user_post` (
|
||||
`user_id` bigint NOT NULL COMMENT '用户ID',
|
||||
`post_id` bigint NOT NULL COMMENT '岗位ID',
|
||||
`tenant_id` bigint NOT NULL COMMENT '租户ID',
|
||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
|
||||
`post_id` bigint(20) NOT NULL COMMENT '岗位ID',
|
||||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||||
PRIMARY KEY (`user_id`, `post_id`, `tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '用户与岗位关联表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户与岗位关联表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for sys_user_role
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `sys_user_role`;
|
||||
CREATE TABLE `sys_user_role` (
|
||||
`user_id` bigint NOT NULL COMMENT '用户ID',
|
||||
`role_id` bigint NOT NULL COMMENT '角色ID',
|
||||
`tenant_id` bigint NOT NULL COMMENT '租户ID',
|
||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
|
||||
`role_id` bigint(20) NOT NULL COMMENT '角色ID',
|
||||
`tenant_id` bigint(20) NOT NULL COMMENT '租户ID',
|
||||
PRIMARY KEY (`user_id`, `role_id`, `tenant_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '用户和角色关联表' ROW_FORMAT = DYNAMIC;
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户和角色关联表' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
Reference in New Issue
Block a user