项目场景:

在项目中,有一个报表功能多版本的需求,觉得非常有意思,做一次分享给大家:
报表多版本要求:

  • 一个报表分为未发布(编辑版本)版本和发布(查看版本)版本,编辑版本操作过程中不影响别人查看当前版本
  • 报表支持版本回退,比如当前报表版本已经是V3了,可以回退到V1版本
  • 报表支持多版本预览,比如报表可以分享当前指定版本给用户查看

实体图


数据库表设计

新增报表信息表report_info

CREATE TABLE `report_info` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',`group_id` bigint DEFAULT NULL COMMENT '文件组ID',`tenant_id` bigint DEFAULT '0' COMMENT '租户id',`report_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '报表编码',`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '名称',`update_model_relation` varchar(64) DEFAULT NULL COMMENT '更新数据联动的模块',`issue_flag` int DEFAULT '0' COMMENT '是否发布 0=未发布  1=已发布',`run_env` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '项目运行环境',`bg_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '背景图链接',`version` bigint DEFAULT '0' COMMENT '版本号',`create_by` bigint DEFAULT NULL COMMENT '创建人',`update_by` bigint DEFAULT NULL COMMENT '更新人',`creator` varchar(50) DEFAULT NULL COMMENT '创建人',`updater` varchar(50) DEFAULT NULL COMMENT '更新人',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',`update_time` timestamp NULL DEFAULT NULL COMMENT '更新时间',`publisher` varchar(50) DEFAULT NULL COMMENT '发布人名称',`publish_time` timestamp NULL DEFAULT NULL COMMENT '发布时间',`delete_flag` int DEFAULT '0' COMMENT '1 删除 0未删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='报表信息表';

新增画布主要信息表canvas_info

CREATE TABLE `canvas_info` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',`tenant_id` bigint DEFAULT '0' COMMENT '租户id',`report_id` bigint DEFAULT '0' COMMENT '报表id',`create_by` bigint DEFAULT NULL COMMENT '创建人id',`update_by` bigint DEFAULT NULL COMMENT '最新修改人ID',`creator` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建用户',`updater` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新用户',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '最新修改时间',`delete_flag` int DEFAULT '0' COMMENT '逻辑删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='画布主要信息表';

新增画布详细配置表canvas_config

CREATE TABLE `canvas_config` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',`canvas_id` bigint DEFAULT NULL COMMENT '报表id',`orgin_id` bigint DEFAULT NULL COMMENT '报表源ID',`tenant_id` bigint DEFAULT '0' COMMENT '租户id',`name` varchar(255) DEFAULT NULL COMMENT '报表名称',`version` bigint DEFAULT '0' COMMENT '版本号',`config` json DEFAULT NULL COMMENT '联动,下钻的配置条件',`issue_flag` int DEFAULT '0' COMMENT '是否发布 0=未发布  1=已发布',`sort` int DEFAULT '0' COMMENT '排序号',`preview_status` varchar(50) DEFAULT 'UNLOCK' COMMENT '预览状态',`canvas_template_id` bigint DEFAULT NULL COMMENT '模版id,有模版ID的为模版报表',`set_template` tinyint DEFAULT '0' COMMENT '是否设为模版',`from_template_id` bigint DEFAULT NULL COMMENT '该报表来自哪个模版(即该报表由哪个模版生成)',`update_model_relation` varchar(64) DEFAULT NULL COMMENT '更新数据联动的模块',`uuid` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '唯一业务标识',`create_by` bigint DEFAULT NULL COMMENT '创建人id',`update_by` bigint DEFAULT NULL COMMENT '最新修改人ID',`creator` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '创建用户',`updater` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '更新用户',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '最新修改时间',`delete_flag` int DEFAULT '0' COMMENT '逻辑删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='画布详细配置';

新增图表主要信息表icon_info

CREATE TABLE `icon_info` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',`tenant_id` bigint DEFAULT '0' COMMENT '租户id',`canvas_id` bigint DEFAULT '0' COMMENT '画布id',`create_by` bigint DEFAULT NULL COMMENT '创建人',`update_by` bigint DEFAULT NULL COMMENT '更新人',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`delete_flag` int DEFAULT '0' COMMENT '逻辑删除标记; 删除:1,未删除:0',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='图表主要信息表';

新增图表详细配置表icon_config

CREATE TABLE `icon_config` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',`canvas_id` bigint DEFAULT NULL COMMENT '画布id',`orgin_id` bigint DEFAULT NULL COMMENT '报表源ID',`tenant_id` bigint DEFAULT '0' COMMENT '租户id',`name` varchar(255) DEFAULT NULL,`version` bigint DEFAULT '0' COMMENT '版本号',`data_model_id` bigint DEFAULT NULL COMMENT '数据模型id',`uuid` varchar(100) DEFAULT NULL COMMENT '图表uuid',`config` json DEFAULT NULL COMMENT '图表配置信息',`issue_flag` int DEFAULT '0' COMMENT '是否发布 0=未发布  1=已发布',`request_info` json DEFAULT NULL COMMENT '请求信息',`template_data` json DEFAULT NULL COMMENT '图表模版的数据',`sql` varchar(1000) DEFAULT NULL COMMENT '数据源后经过计算的sql',`update_model_relation` varchar(64) DEFAULT NULL COMMENT '更新数据联动的模块',`create_by` bigint DEFAULT NULL COMMENT '创建人',`update_by` bigint DEFAULT NULL COMMENT '更新人',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`delete_flag` int DEFAULT '0' COMMENT '逻辑删除标记; 删除:1,未删除:0',PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `icon_unique` (`canvas_id`,`uuid`),KEY `index_name_idx` (`canvas_id`),KEY `data_model_id_idx` (`data_model_id`),KEY `uuid_idx` (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='图表详细配置表';

发布流程:

下面是发布操作



总结

每次发布这里使用到COW(copy to write)写时拷贝的思想,发布的时候拷贝副本作为上一个版本的快照,方便切换版本的操作。

还有一种是ROW(redirect to write)写时重定向,记录报表操作的变更,每次读取的时候指向新的版本也可以。具体看实际场景,我这边目前是写少读多用COW读取非常快。

【分享】草稿箱多版本功能设计相关推荐

  1. 微博分享回调成功,但是微博客户端却进入草稿箱,提示错误码 8995。第三方问题排查思路总结

    问题再现 问题描述:Android平台微博分享,app收到api回调,表示分享成功,但是打开微博客户端app,该分享进入草稿箱,并提示 : (8995)app auth fail for appKey ...

  2. Android工作中遇到的问题:友盟分享到新浪微博,内容被放入草稿箱

    项目工作中使用到了友盟SDK6.42进行分享,但在测试分享到新浪微博的功能时发现,分享虽然成功了,但分享的内容却被新浪微博放进了草稿箱. 分享新浪微博代码: ShareAction sa = new ...

  3. 成都拓嘉辰丰:拼多多草稿箱怎样删除商品,草稿箱在哪

    编辑商品信息的时候,系统是会把你的信息给储蓄起来,如果过一段时间你不想要了, 那么就可以进行一键删除,接下来小编就给大家讲讲拼多多草稿箱怎样删除,拼多多草稿箱在哪里? 怎样删除? 先是进入" ...

  4. 只要100行代码,实现文本编辑器中的草稿箱功能

    本文节选自<设计模式就该这样学> 1 使用备忘录模式实现草稿箱功能 大家都用过网页中的富文本编辑器,编辑器通常都会附带草稿箱.撤销等操作.下面用一段代码来实现一个这样的功能.假设,我们在G ...

  5. 上传失败 已保存至草稿_抖音上传失败保存草稿箱怎么回事,抖音上传失败已保存至草稿箱...

    抖音上传失败保存草稿箱怎么回事,抖音上传失败已保存至草稿箱 抖音上传失败保存草稿箱的原因可能有: 1.网络信号不好,建议到一个信号好的地方上传: 2.抖音版本过低,建议升级最新版本: 3.视频格式不正 ...

  6. 公众号更新:图文素材升级为草稿箱、群发和发布的区别?

    前一段时间,自动更新的公众号平台草稿箱功能,大家都已经适应跟习惯了吗? 有的运营小伙伴在更新的第二天,就去微信官方吐槽,表示:不是所有公众号都有此功能?还表明要取消草稿箱功能 这一吐槽引起了其他小伙伴 ...

  7. 100行代码,轻松实现文本编辑器中草稿箱功能

    本文节选自<设计模式就该这样学> 1 使用备忘录模式实现草稿箱功能 大家都用过网页中的富文本编辑器,编辑器通常都会附带草稿箱.撤销等操作.下面用一段代码来实现一个这样的功能.假设,我们在G ...

  8. 保存到草稿箱php,zblog文章如何保存到草稿箱?非常实用的zblog博客必备插件

    随着zblogphp版本的推出,越来越多的人也开始使用zblog程序了,手赚126网也是利用zblogphp程序建设的.由于是第一次使用zblog程序,在使用的过程中也遇到了很多问题,特别是文章保存到 ...

  9. 微博HTML5草稿箱在哪,新版手机微博草稿箱在哪

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 找到新版新浪微博草稿箱的方法: 1.打开新浪微博客户端(微博网页端是没有草稿箱的),点击页面右下角的我,进入我的界面. 2.向下滑 ...

最新文章

  1. Ceilometer Polling Performance Improvement
  2. Datawindow.net 子数据窗口出错
  3. mysql中括号_mysql进阶知识点,启动项、系统变量、字符集介绍!
  4. 2019山东夏令营摸鱼记
  5. 一份超级全面的PHP面试题
  6. ACL 2020 | 基于不同硬件搜索更好的Transformer结构
  7. VLAN与trunk配置
  8. npm包的上传npm包的步骤,与更新和下载步骤
  9. hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)
  10. 通过javascript在网页端生成zip压缩包并下载
  11. python代码风格
  12. Lesson_8 上课笔记 ----继承
  13. 数据库的主键Id不是从1开始的
  14. 有道词典pc离线包打包下载_【超福利】安卓手机上最好用的离线词典
  15. mysql多表联合查询 去重_MySQL多表联合查询
  16. 测试投入度量元的选择
  17. 【AVS】AVS2编码器开源啦:xAVS2
  18. 华为手机计算机如何表达平方,华为手机郑平方:荣耀成功源于共享质量体系
  19. 2020年前端面试题集锦(奥利给!!!)
  20. couldnt resolve host name

热门文章

  1. excel流程图分叉 合并_Excel流程图绘制技巧,对齐组合轻松便利,在奇怪的流程一样搞定...
  2. centos如何清理服务器日志文件,centos设置定时删除文件定时清理网站日志
  3. 一级造价工程师(安装)- 计量笔记 - 重点必考考点
  4. [MAUI 项目实战] 手势控制音乐播放器(二): 手势交互
  5. Educoder头歌数据结构栈基本运算的实现及其应用
  6. java XML解析
  7. 【BZOJ1001】狼抓兔子(网络流)
  8. 树莓派可以频繁重启吗_手机资讯: iPhone XS Max 可以在低温环境下使用吗冬天设备频繁关机怎么办...
  9. 4、k8s之deployment
  10. 汉高任命蔡雪仙担任亚太区总裁,同时负责全球粘合剂技术移动和电子事业部...