租户管理功能用户维护租户数据,租户这个概念对内可以称为租户,对外称为企业。 租户功能涉及的表为`c_tenant`,涉及的代码主要为:lamp-tenant-biz、lamp-tenant-controller、lamp-tenant-datasource、lamp-tenant-entity 4个模块。 ## 功能讲解 1. 新增租户: 单纯的向 c_tenant 表插入一条租户信息 2. 修改租户信息 3. 删除租户 4. 初始化租户信息: 动态的向**运行中**的其他服务(如文件、消息、认证、权限等服务)发送初始化租户信息的指令,其他服务就动态的给该租户创建数据库,初始化表结构,初始化必要数据,并动态添加 数据源连接。 ## 新增租户流程 1. 点击新增按钮, 弹出新增页面,填写租户(企业)编码和租户(企业)名称,租户编码会实时去后台`c_tenant`表校验是否唯一,需要保证租户编码唯一性,填完信息后,点击`确定`按钮。 2. 前端依次调用: submitForm -> save -> post 请求 /api/authority/tenant 接口 3. 后端: SaveController#save -> TenantController#handlerSave -> TenantServiceImpl#save 4. TenantServiceImpl#save中 先校验参数,然后将租户数据保存到 lamp_defaults库的 c_tenant 表, 此时租户状态为待初始化状态。 5. 然后前端需要在单独调用/tenant/initConnect POST ,根据策略模式初始化数据库、表接口、内置数据、动态数据源等 6. 根据 databaseProperties.getMultiTenantType() (`lamp.database.multiTenantType`)的配置,初始化系统数据有3个实现类 6.1. COLUMN模式会执行`ColumnInitSystemStrategy#init`方法,该方法只会将内置的菜单、资源、角色、角色&资源、字典、参数等租户内置的数据,批量插入新的租户表中。 6.2. SCHEMA模式会执行`SchemaInitSystemStrategy#init`方法,该方法首先会创建 租户的业务数据库,然后在库里面执行 `lamp-tenant-server/src/main/resources/sqls/lamp_base.sql` 、`lamp-tenant-server/src/main/resources/sqls/lamp_extend.sql` 脚本初始化表结构, 然后在执行 `lamp-tenant-server/src/main/resources/sqls/lamp_base_data.sql` 、`lamp-tenant-server/src/main/resources/sqls/lamp_extend_data.sql` 脚本初始化租户的数据。 > 注意: lamp-boot 项目没有lamp_extend库, 只有lamp_base库, 但lamp-boot项目base库里的表 = lamp-cloud 项目 base库 + extend 库. lamp-boot 项目的动态脚本在 `lamp-authority-server/src/main/resources/sqls/lamp_base*` 6.3. DATASOURCE模式会执行`DatasourceInitSystemStrategy#init`方法, 该方法异步或者远程调用各个服务的初始化接口,让各个服务自己创建 租户的数据源链接,然后在库里面执行 `resources/sqls/*.sql` 脚本初始化表结构, 然后在执行`resources/sqls/*_data.sql` 脚本初始化租户的数据。 7. 租户信息初始化完成后,会在租户库新增一个隐藏的超级管理员: lampAdmin/lamp, 该账号的主要作用是给`开发者公司运营使用的` 8. 在然后在去 [超级用户](超级用户.md) 页面新增超级管理员, 提供给 租户(企业) 使用