跳转到内容

0.13 改动

  • Library
    • Framework: 0.13.0-SNAPSHOT
    • MavenPlugin: 0.13.0-SNAPSHOT
  • Image
    • MetaStoreManagement Image: registry.cn-hangzhou.aliyuncs.com/terminus/trantor-metastore:201029.201509
    • MetaStore Image: registry.cn-hangzhou.aliyuncs.com/terminus/trantor-metastore:201103.095110
    • Trantor Console: registry.cn-hangzhou.aliyuncs.com/terminus/trantor-console:1.13.0-beta.49
    • Trantor Workspace: registry.cn-hangzhou.aliyuncs.com/terminus/trantor-workspace:1.13.0-beta.49
    • DataStore 建议配套版本:registry.cn-hangzhou.aliyuncs.com/terminus/datastore:5.1.0.36
  • Tool
    • Trantor CLI: 0.13.8

变更内容

新增变更

  • 【机制】增加了制品和定制功能 Trantor 对于端点的业务产品搭建结构做了一些定义, 包括标品的研发流程以及定制项目的研发流程, 增加了很多新的概念和流程.

  • 【机制】增加了菜单项资源 菜单项从完全运行态配置, 变成了模块可以声明可用菜单项, 再由菜单项配制出菜单的方式进行, 所以在原有的资源声明中, 多了 菜单项 这种资源.

  • 【机制】增加分库配置 增加了分库的配置, 允许项目针对模块做不同的分库配置, 从而达到业务上基于模块的垂直分库.

  • 【机制】增加分表配置 之前 Trantor 的分表配置是完全在模型上声明的, 包括分表键和分表数量, 这其实是不对的, 因为分表与否以及分表数量, 在不同环境可能都是不同的情况, 应该跟随部署结构走. 所以这次我们做了一些调整, 模型上只配置分表键, 但是是否开启分表, 分表数量都在环境上, 跟随发布计划完成配置.

  • 【机制】增加 Link 和 Lookup 关联关系 考虑到未来 Trantor 可能面临数据会分库等场景, 会导致联查联写变得很困难, 需要考虑分布式事务, 分库键等问题. 所以考虑提供另外一种数据关联方式, 就是不会影响目标模型, 且不允许级联写, 但是查询方面变化不大.

  • 【机制】增加了字典项分组的功能 某些场景下, 我们会对字典项的可选范围作出一些限制, Trantor 之前没有很好的 API 来使用, 需要声明每一个可用的字典项, 这就比较繁琐. 因此我们提供了一个字典项分组的功能, 可用给字典项增加分组, 然后在 DSL 中根据分组进行过滤.

  • 【机制】增加了业务维度的机制 相关背景是包括交付控制台在内, 会有很多业务有一些业务数据划分, 比如企业下的项目, 公司内的门店, 本身是一个被授予权限的数据, 但是用户的权限和数据可见性都会受到该数据的限制. 所以我们提供了业务维度的概念, 可以在应用级别直接声明数据隔离.

  • 【工作台】增加 HomePage 功能 Trantor 增加了新的导航页面, 效果如下: image.png

  • 【前端】增加无 Count 列表 可用于某些大数据量情况下, count 十分耗时的场景, 这一类场景一般也不会查看最后几页, 数据也都比较多, 所以可以不关心总共有多少条, 具体有多少页, 只提供基于页数翻页即可.

  • 【工具】CLI 支持命令直接清除本地 mysql 或配置数据,运行 trantor clean db 即可。也支持备份旧数据 trantor clean db -b。 更多 clean 命令可以运行 trantor clean -h。

优化

  • 【机制】修改了 Trantor 配置的加载方式: 模块不在需要显式的声明 Incloud Trantor 的 application.yml
  • 【机制】默认支持了 Dice addon 的环境变量 Key, 不再需要手动配置, 其中 Mysql, Oss, RocketMQ 已支持

不兼容变更

  • 【机制】增加制品概念, 标品需转制品 因为制品概念的引入, 提供了版本拉平, 统一管理标品依赖的能力, 对于现在的标品, 我们需要创建 SCP 制品项目, 并且将标品元信息都上传至 SCP.

  • 【机制】修改了 trantor.yml 声明格式 因为引入了制品和定制的概念, 所以我们修改了 trantor.yml 的声明文件, 而且制品项目和定制项目会有所区别. 针对 0.12 来说, 最显著的改动就是增加了制品的声明, 并且修改了模块依赖的声明方式.

  • 【机制】应用/菜单/权限, 从运行态迁移至研发态 应用从原来的运行态概念, 变成了研发态内的一个新的概念, 制品也可以产出应用, 应用下包含菜单, 权限, 角色等资源, 可以被发布到运行态, 也可以在定制项目中被二次开发.

  • 【机制】地址库模型District从底座Meta_store模块移动到Base模块 如果业务模型中使用了地址库模型District,需要更改package路径。如果之前meta_store_District表数据有变更,可以将base_District默认初始化数据清空,将数据导入到base_District,比如执行
insert into base_District select * from meta_store_District

BugFix

  • 【DAO】修复 *ConnectRelation 系列方法中的 connect 行为, 之前是在关联中增加新的对象, 修复为将对象的关联设置为新的对象. 举例来说, 原本对象 A 内字段 orders, 当前记录是 [1,2]. 调用 updateConnectRelation 设置 orders: [3,4] 时, 之前为结果会变成 [1,2,3,4], 但期望变成 [3,4]. 所以需要项目组整体过一遍相关的 api, 看是否对 api 有错误的期望, 导致更新后效果不一致的情况.
  • 【DAO】修复 *IgnoreRelation 系列方法中, 某些情况下 ignore 会失效的问题.

迁移升级

trantor.yml 声明修改

  • 制品项目模块声明格式如下:
product: # 当前制品的信息
key: scp # 制品的唯一标识
version: 2.0.0.RELEASE # 当前制品版本
dependencies: # 依赖制品的那些模块, 这里不用填写版本
- key: order-center
module: # 模块信息, 基本和之前的一致
key: meta_store
name: Meta Store
packageName: io.terminus.trantor.metaStore
version: 1.0.0-SNAPSHOT
description: Meta Store Module
- 定制项目模块声明格式如下:
product: # 当前项目的信息
key: trantor
version: 0.0.0-SNAPSHOT # 目前定制项目的版本是固定的, 都是 0.0.0-SNAPSHOT
dependencies: # 当前项目范围内的依赖
- key: base
standardProduct: # 定制项目所依赖的制品信息
key: SCP # 依赖的制品 Key, 公司内默认都是 SCP
version: 2.0.0.RELEASE # 依赖的制品版本
dependencies: # 依赖的制品模块, 不用填写版本
- key: user-center
module: # 模块信息, 基本和之前的一致
key: meta_store
name: Meta Store
packageName: io.terminus.trantor.metaStore
version: 1.0.0-SNAPSHOT
description: Meta Store Module

菜单项资源声明

菜单项需要声明在模块内, 可以在 trantor 资源目录下创建以 -menu-item.json 结尾的文件, 文件内声明该模块提供的菜单项内容, 该文件的内容会被上报到研发态, 供应用配置菜单时使用.

文件格式如下:

[
{
"originalKey": "toList", // 菜单Key
"name": "用户列表", // 菜单标题
"routingType": "Action", // 菜单的类型
// 如果是类型是 Action, 则配置 ViewAction
// 如果是类型是 IFrame 或者 URL, 则配置 URL
"routeKey": "usercenter_UserCenter_userList"
},
{
"originalKey": "toForm",
"name": "用户表单",
"routingType": "Action",
"routeKey": "usercenter_UserCenter_userForm"
}
]

应用配置

因为应用声明从运行态移到研发态, 会导致之前声明在具体环境内的应用失效, 所以我们需要在制品/定制项目内, 重新配置应用声明. 这部分完全是在线上的交付控制台进行操作, 步骤如下:

  1. 切换至具体项目
  2. (可选) 如果是制品, 则还需要切换制品版本
  3. 左侧菜单选择应用
  4. 右上角点击创建, 填入基本信息后保存
  5. (详见菜单配置)在应用管理列表上, 找到刚创建的应用, 右侧选择菜单配置
  6. (详见权限配置)在应用管理列表上, 找到刚创建的应用, 右侧选择功能权限

菜单配置

我们可以提供脚本让运行态的菜单依然可以使用, 但是不完成配置的情况下, 发布元信息会导致这部分菜单丢失. 所以我们需要在研发态的应用下, 重新创建菜单, 步骤如下:

  1. 切换至具体项目
  2. (可选) 如果是制品, 则还需要切换制品版本
  3. 左侧菜单选择应用
  4. 右上角点击创建, 填入基本信息后保存
  5. (详见菜单配置)在应用管理列表上, 找到刚创建的应用, 右侧选择菜单配置
  6. 点击新增根菜单或者在某菜单内新增子级菜单
  7. 填写相关信息保存

权限配置

因为权限是基于菜单项展开的, 以及应用被移到研发态, 导致之前配置的运行态权限会失效, 所以我们需要在应用下重新配置一次功能权限,

数据权限类似, 此处不再复述.

制品数据重新上报

  1. 创建 SCP 制品项目
  2. 创建相应 SCP 制品版本
  3. 修改模块内 trantor.yml, 增加制品和版本声明
  4. 上报元信息

本地开发

在 013 之前,本地编码上报之前不需要关心交付控制台。013 之后加入了产品概念,因此需要在上报之前新建一个产品。 目前概念上产品几乎等价于项目,在本地 Trantor 底座启动完毕以后访问交付控制台,会看到一个默认租户,在该租户下新建一个制品项目即可。注意,该制品项目的 key 需要与 trantor.yml 中申明的 product key 相同, version 同理。 下面是操作流程,以图片表示:

  1. image0.png
  2. image1.png

ACL升级到2.0.0版本

ACL 低于2.0.0版本分为Server和Client两个应用。2.0.0以后变更为基于Trantor模块运行,新增了ACL Trantor模块应用服务,旧的Server和Client合并成一个服务。ACL模块元信息发布完成后,需要将Taurus数据库表数据迁移到对应的模型表中,迁移脚本如下:

  1. ACL 2.0数据迁移(数据库表字段驼峰命名)
-- 迁移项目
insert into `taurus_domain__project`(`id`, `key`,`name`, `tenantId`,`desc`, `createdAt`,`updatedAt`,`isDeleted`,`createUser`)
(select `id`, `key`,`name`,`tenant_id`, `desc`, `created_at`, `modified_at`,`deleted`,`create_user` from taurus.`acl_project` where `key`='trantor' and `deleted`=0);
-- 迁移应用
INSERT INTO `taurus_domain__app` (`metaData`, `createdAt`, `isDeleted`, `tenantId`, `name`, `id`, `projectId`, `key`, `desc`, `updatedAt`, `CreatedBy`, `UpdatedBy`)
(select `meta_data`,`created_at`,`deleted`,`tenant_id`,`name`,`id`, `project_id`, `key`, `desc`, `modified_at`, 1,1 from taurus.`acl_app`
where `deleted`=0 and `project_id` = (select `id` from taurus.`acl_project` where `key`='trantor' and `deleted`=0) );
-- 迁移角色表
INSERT INTO `taurus_domain__role` (`id`, `name`, `key`, `hide`,`limited`, `mastered`, `metaData`, `createdAt`, `deleted`, `isDeleted`, `appId`, `affiliationType`, `tenantId`, `typeId`,`affiliationId`, `projectId`, `relatedRoleId`, `desc`, `updatedAt`, `UpdatedBy`, `CreatedBy`)
(select `id`, `name`,`key`, `hide`, `limited`, `mastered`, `meta_data`, `created_at`, `deleted`, 0, `app_id`, `affiliation_type`, `tenant_id`, `type_id`, `affiliation_id`, `project_id`, `related_role_Id`, `desc`, `modified_at`, 1, 1 from taurus.`acl_role` where `deleted` = 0)
-- 迁移用户
INSERT INTO `taurus_domain__user_info` (`createdAt`, `isDeleted`, `mobile`, `tenantId`, `id`, `userName`, `userId`, `updatedAt`, `UpdatedBy`, `CreatedBy`)
select `created_At`, 0, `mobile`, `tenant_Id`, `id`, `user_Name`, `user_Id`, `updated_At`, 1, 1 from taurus.`acl_user_info`
-- 迁移权限
INSERT INTO `taurus_domain__permission` ( `id`,`name`, `key`, `directed`, `type`, `parentId`, `metaData`, `createdAt`, `deleted`, `isDeleted`, `appId`, `tenantId`, `projectId`,`desc`, `updatedAt`, `CreatedBy`, `UpdatedBy`)
(select `id`,`name`,`key`, `directed`, `type`, `parent_id`, `meta_data`, `created_at`, `deleted`, 0, `app_id`, `tenant_id`, `project_id`, `desc`, `modified_at`, 1, 1 from taurus.`acl_permission` where `deleted` = 0);
-- 迁移用户角色
INSERT INTO `taurus_domain__role_relation` (`permissionDelegate`, `bizType`, `roleId`, `createdAt`, `hide`, `isDeleted`, `tenantId`, `bizId`, `id`, `ruleId`, `projectId`, `updatedAt`, `CreatedBy`, `UpdatedBy`)
(select `permission_Delegate`, `biz_Type`, `role_Id`, `created_At`, `hide`, 0, `tenant_Id`, `biz_Id`, `id`, `rule_Id`, `project_Id`, `modified_at`, 1, 1 from taurus.`acl_role_relation`)
-- 迁移角色权限授权
INSERT INTO `taurus_domain__role_permission_authorization` (`permissionId`, `permissionType`, `roleId`, `permissionRule`, `createdAt`, `isDeleted`, `disable`, `permissionKey`, `inherit`, `tenantId`, `id`, `authType`, `projectId`, `updatedAt`, `CreatedBy`, `UpdatedBy`)
(select `permission_Id`, `permission_Type`, `role_Id`, `permission_Rule`, `created_At`, 0, `disable`, `permission_Key`, `inherit`, `tenant_Id`, `id`, `auth_Type`, `project_Id`, `modified_at`, 1, 1 from taurus.`acl_role_permission_authorization`)
  1. ACL 2.0数据迁移(数据库字段命名下划线)
-- 迁移项目
insert into `taurus_domain__project`(`id`, `key`,`name`, `tenant_id`,`desc`, `created_at`,`updated_at`,`is_deleted`,`create_user`)
(select `id`, `key`,`name`,`tenant_id`, `desc`, `created_at`, `modified_at`,`deleted`,`create_user` from taurus.`acl_project` where `key`='trantor' and `deleted`=0);
-- 迁移应用
INSERT INTO `taurus_domain__app` (`meta_data`, `created_at`, `is_deleted`, `tenant_id`, `name`, `id`, `project_id`, `key`, `desc`, `updated_at`, `created_by`, `updated_by`)
(select `meta_data`,`created_at`,`deleted`,`tenant_id`,`name`,`id`, `project_id`, `key`, `desc`, `modified_at`, 1,1 from taurus.`acl_app`
where `project_id` = (select `id` from taurus.`acl_project` where `key`='trantor' and `deleted`=0) ) and `deleted`=0;
-- 迁移角色表
INSERT INTO `taurus_domain__role` (`id`, `name`, `key`, `hide`,`limited`, `mastered`, `meta_data`, `created_at`, `deleted`, `is_deleted`, `app_id`, `affiliation_type`, `tenant_id`, `type_id`,`affiliation_id`, `project_id`, `related_role_id`, `desc`, `updated_at`, `updated_by`, `created_by`)
(select `id`, `name`,`key`, `hide`, `limited`, `mastered`, `meta_data`, `created_at`, `deleted`, 0, `app_id`, `affiliation_type`, `tenant_id`, `type_id`, `affiliation_id`, `project_id`, `related_role_Id`, `desc`, `modified_at`, 1, 1 from taurus.`acl_role` where `deleted` = 0)
-- 迁移用户
INSERT INTO `taurus_domain__user_info` (`created_at`, `is_deleted`, `mobile`, `tenant_id`, `id`, `user_name`, `user_id`, `updated_at`, `updated_by`, `created_by`)
select `created_At`, 0, `mobile`, `tenant_Id`, `id`, `user_Name`, `user_Id`, `updated_At`, 1, 1 from taurus.`acl_user_info`
-- 迁移权限
INSERT INTO `taurus_domain__permission` ( `id`,`name`, `key`, `directed`, `type`, `parent_id`, `meta_data`, `created_at`, `deleted`, `is_deleted`, `app_id`, `tenant_id`, `project_id`,`desc`, `updated_at`, `created_by`, `updated_by`)
(select `id`,`name`,`key`, `directed`, `type`, `parent_id`, `meta_data`, `created_at`, `deleted`, 0, `app_id`, `tenant_id`, `project_id`, `desc`, `modified_at`, 1, 1 from taurus.`acl_permission` where `deleted` = 0);
-- 迁移用户角色
INSERT INTO `taurus_domain__role_relation` (`permission_Delegate`, `biz_Type`, `role_Id`, `created_At`, `hide`, `is_Deleted`, `tenant_Id`, `biz_Id`, `id`, `rule_Id`, `project_Id`, `updated_At`, `Created_By`, `Updated_By`)
(select `permission_Delegate`, `biz_Type`, `role_Id`, `created_At`, `hide`, 0, `tenant_Id`, `biz_Id`, `id`, `rule_Id`, `project_Id`, `modified_at`, 1, 1 from taurus.`acl_role_relation`)
-- 迁移角色权限授权
INSERT INTO `taurus_domain__role_permission_authorization` (`permission_Id`, `permission_Type`, `role_Id`, `permission_Rule`, `created_At`, `is_Deleted`, `disable`, `permission_Key`, `inherit`, `tenant_Id`, `id`, `auth_Type`, `project_Id`, `updated_At`, `Created_By`, `Updated_By`)
(select `permission_Id`, `permission_Type`, `role_Id`, `permission_Rule`, `created_At`, 0, `disable`, `permission_Key`, `inherit`, `tenant_Id`, `id`, `auth_Type`, `project_Id`, `modified_at`, 1, 1 from taurus.`acl_role_permission_authorization`)