SpringCloud微服务实战——搭建企业级开发框架(五十):集成移动端推送功能的系统通知公告数据库设计

news2025/7/22 9:15:12

  系统的通知公告功能似乎是很容易被忽略的功能模块,在传统的软件系统中,一般OA类软件系统不可或缺,而在应用软件系统中此功能或有或无,在现在大多数的互联网软件系统中,此功能又必不可缺。所以,在框架设计时,我们需要考虑业务系统是否需要此功能模块,然后将此功能作为扩展插件,在需要时开启,在不需要时配置关闭即可。

  在系统公告设计之前,我们需要综合考虑目前系统通知公告功能都有哪些类型和实现方式。在类型方面如果是电商类网站,那么系统的通知公告有账户变动通知、物流变动通知、订单变动通知等等;如果是OA类系统,那么系统的通知公告有待办事项、审批通知、公司公告通知等等;在实现方式方面,有站内通知、短信通知、微信通知、APP推送消息等等。

  在通知公告的来源和通知公告的目标方面也要做好区分,通常的通知公告来源有系统通知、群组通知、用户通知;相对于通知公告的目标方,有群组、角色、用户等分类,下面是通知公告功能关键表的E-R图,不包含RBAC模型关系,框架支持多租户:

通知公告关键表的E-R图

1、系统公告来源
  • 系统通知:来源于某一个功能模块或者统一抽象为系统消息,比如账户异地登录、密码尝试次数过多等,这些显示来源于系统消息即可;如果是告警等需要详细的来源时,比如微服务模式下每个服务所引发的告警等信息,这里需要标识具体的系统来源模块。
  • 群组通知:来源于某一个部门的的消息,有些消息内容是由部门来统一发出,比如考勤、放假等通知由行政部门发出,薪资等相关内容由财务部门发出。
  • 用户通知:由某一个人发出的通知公告,此种情况使用比较少,区别于用户对用户的私信消息,用户私信功能需要和系统通知公告功能做好区分。

数据库表设计公告通知来源字段:

    `message_category` VARCHAR(32)    COMMENT '系统公告 待办消息  账户通知 关注/收藏/点赞通知' ,
    `receive_type` VARCHAR(32)    COMMENT '接收消息类型 全员  组  角色  用户' ,
    `to_organization_id` BIGINT(20)    COMMENT '接收消息的群组' ,
    `to_role_id` BIGINT(20)    COMMENT '接收消息的角色' ,
    `to_user_id` BIGINT(20)    COMMENT '接收消息的用户' ,
2、系统公告目标
  • 群组目标:某一公告通知是针对于群组的,就是某一个部门内的人才能够收到的消息。
  • 角色目标:针对于角色的通知公告,比如某一条通知公告是只发送给公司内部所有的部门经理的。
  • 用户目标:这个比较好理解,针对个人的消息通知,比如自己的请假申请或者报销审批通过等,系统需要发送消息到个人。

数据库表设计公告通知目标字段:

    `send_from_type` VARCHAR(32)    COMMENT '消息来源类型 系统 组  用户' ,
    `from_group_id` BIGINT(20)    COMMENT '发送消息的组' ,
    `from_user_id` BIGINT(20)    COMMENT '发送消息的用户' ,
    `from_system` VARCHAR(32)    COMMENT '发送消息的系统' ,
3、系统公告级别

  系统通知公告可以根据情况设置通知公告的级别,比如高、中、低,那么在前端提醒的方式就可以采取强制弹框、静默提醒等方式来处理这些通知公告。如果是定时发送,那么需要设置定时任务根据发布时间来定时发送;如果有消息撤回,那么需要标识已撤回以及消息撤回时间。

数据库表设计通知公告级别和发布时间字段:

    `publish_time` DATETIME    COMMENT '发布时间' ,
    `recall_flag` TINYINT(2)    COMMENT '是否撤回' ,
    `recall_time` DATETIME    COMMENT '撤回时间' ,
    `message_level` VARCHAR(32)    COMMENT '消息级别  高 中 低' ,
4、系统公告附加内容

  有些系统的公告通知可能不只是文本消息,基于用户体验考虑,有些消息到达时,用户可以直接通过点击通知跳转到具体的业务处理模块,比如工作流的待办事项、未支付订单的提醒等等。在现在的APP推送消息中,甚至可以设置消息通知的缩略图,那么我们在数据库表设计的时候也需要把这些情况考虑进去。

数据库表设计通知公告附加字段:

`title` VARCHAR(100)    COMMENT '标题' ,
`content` VARCHAR(1000)    COMMENT '内容' ,
`redirect_url` VARCHAR(255)    COMMENT '跳转链接' ,
`image_url` VARCHAR(255)    COMMENT '消息图片' ,
......
 `publish_time` DATETIME    COMMENT '发布时间' ,
 `recall_flag` TINYINT(2)    COMMENT '是否撤回' ,
 `recall_time` DATETIME    COMMENT '撤回时间' ,
 `message_level` VARCHAR(32)    COMMENT '消息级别  高 中 低' ,
5、系统公告通知渠道

  现在移动办公越来越普遍,针对于移动客户端的多种方式,那么我们在发送通知公告时的渠道也是需要有配置的,比如发送到PC端、APP端、微信小程序端、微信公众号通知、短信通知、电话通知等等,有可能是一种,也有可能是多种,那么此时我们需要为通知公告增加不同的通知渠道。由于是不定数量的渠道,所以这里我们增加关联表,来为某一条通知公告设置通知渠道。默认如果不配置渠道,那么都是静默通知,不弹框也不APP推送。

数据库表设计通知公告通知渠道配置表:

CREATE TABLE t_sys_message_channel(
    `id` VARCHAR(32)    COMMENT '主键' ,
    `tenant_id` BIGINNT(20)    COMMENT '租户id' ,
    `message_id` VARCHAR(32)    COMMENT '系统消息id' ,
    `message_channel_type` VARCHAR(32)    COMMENT '渠道类型(短信、电话、APP PUSH等)' ,
    `channel_redirect_url` VARCHAR(255)    COMMENT '本渠道的跳转链接' ,
    `channel_image_url` VARCHAR(255)    COMMENT '本渠道的图片' ,
    `creator` BIGINNT(20)    COMMENT '创建者' ,
    `create_time` DATETIME    COMMENT '创建时间' ,
    `operator` BIGINNT(20)    COMMENT '更新者' ,
    `update_time` DATETIME    COMMENT '更新时间' ,
    `del_flag` tinyint(2)    COMMENT '是否删除' 
)  COMMENT = '通知渠道和系统消息关联表';

6、系统公告表优化

  除了完成基本的内容表设计时,我们还需要考虑数据量非常大时的数据库设计优化问题。在我们的通知公告中,我们发现有很多消息是通用消息,是发送给群组的、角色的,这类消息的内容是一致的,如果为每个用户都新建一条这样的通知公告数据库记录。那么会冗余很多无用数据。但是,我们又需要针对群组、角色中的某一个用户标识出通知公告的已读/未读状态等内容,所以此处需要增加关联表,利用关联表来标识某一个用户是否读取了消息。

数据库表设计通知公告某一用户的状态字段:

CREATE TABLE t_sys_message_user(
    `id` VARCHAR(32)    COMMENT '主键' ,
    `tenant_id` BIGINNT(20)    COMMENT '租户id' ,
    `user_id` BIGINNT(20)    COMMENT '用户id' ,
    `message_id` VARCHAR(32)    COMMENT '系统消息id' ,
    `read_already` VARCHAR(32)    COMMENT '是否已读' ,
    `creator` BIGINNT(20)    COMMENT '创建者' ,
    `create_time` DATETIME    COMMENT '创建时间' ,
    `operator` BIGINNT(20)    COMMENT '更新者' ,
    `update_time` DATETIME    COMMENT '更新时间' ,
    `del_flag` tinyint(2)    COMMENT '是否删除' 
)  COMMENT = '用户和系统消息关联表';

通知公告主表完整建表脚本:

CREATE TABLE t_sys_message(
    `id` VARCHAR(32) NOT NULL   COMMENT '主键(雪花算法)' ,
    `tenant_id` BIGINT(20)    COMMENT '租户号' ,
    `title` VARCHAR(100)    COMMENT '标题' ,
    `content` VARCHAR(1000)    COMMENT '内容' ,
    `redirect_url` VARCHAR(255)    COMMENT '跳转链接' ,
    `image_url` VARCHAR(255)    COMMENT '消息图片' ,
    `message_category` VARCHAR(32)    COMMENT '系统公告 待办消息  账户通知 关注/收藏/点赞通知' ,
    `receive_type` VARCHAR(32)    COMMENT '接收消息类型 全员  组  角色  用户' ,
    `to_organization_id` BIGINT(20)    COMMENT '接收消息的群组' ,
    `to_role_id` BIGINT(20)    COMMENT '接收消息的角色' ,
    `to_user_id` BIGINT(20)    COMMENT '接收消息的用户' ,
    `send_from_type` VARCHAR(32)    COMMENT '消息来源类型 系统 组  用户' ,
    `from_group_id` BIGINT(20)    COMMENT '发送消息的组' ,
    `from_user_id` BIGINT(20)    COMMENT '发送消息的用户' ,
    `from_system` VARCHAR(32)    COMMENT '发送消息的系统' ,
    `publish_time` DATETIME    COMMENT '发布时间' ,
    `recall_flag` TINYINT(2)    COMMENT '是否撤回' ,
    `recall_time` DATETIME    COMMENT '撤回时间' ,
    `message_level` VARCHAR(32)    COMMENT '消息级别  高 中 低' ,
    `creator` BIGINT(20)    COMMENT '创建人' ,
    `create_time` DATETIME    COMMENT '创建时间' ,
    `operator` BIGINT(20)    COMMENT '更新人' ,
    `update_time` DATETIME    COMMENT '更新时间' ,
    `del_flag` TINYINT(2) NOT NULL   COMMENT '是否删除' ,
    PRIMARY KEY (id)
)  COMMENT = '消息通知表';

  系统通知公告通常有系统因业务状态变化自动发起的通知公告和管理人员通过后台管理主动发起的通知公告。如果是因业务状态自动发起的通知公告,那么其发送的渠道需要结合业务需求,在编码时确定。如果是管理人员通过界面发起的通知公告,那么需要在配置界面提供可选择的渠道,根据业务需求由发起人来确定通过哪些渠道发送。

GitEgg-Cloud是一款基于SpringCloud整合搭建的企业级微服务应用开发框架,开源项目地址:

Gitee: https://gitee.com/wmz1930/GitEgg
GitHub: https://github.com/wmz1930/GitEgg

欢迎感兴趣的小伙伴Star支持一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++基础了解-04-C++ 变量作用域

变量作用域 一、C 变量作用域 作用域是程序的一个区域,一般来说有三个地方可以定义变量: 1、在函数或一个代码块内部声明的变量,称为局部变量。 2、在函数参数的定义中声明的变量,称为形式参数。 3、在所有函数外部声明的变量…

神经网络结构常见可视化工具汇总及效果演示

文章目录各种训练框架自带的可视化工具pytorch自带pytorchvizkeras自带visualkerasTensorFlow自带TensorBoard其它画图工具NN-SVG:FCNN style、LeNet style、AlexNet stylePlotNeuralNet:使用Latex编写Netron:多种格式的网络模型文件可视化ZE…

计算机网络的166个概念你知道几个 第九部分

计算机网络网络层 路由选择算法:网络层中决定分组发送路径的一种算法。 转发:它指的是将分组从一个输入链路转移到合适的输出链路的动作。 路由选择:指确定分组从一端发送到另一端所选择路径的处理过程。 三种路由交换技术:内…

对word文档中指定的相同内容/文字加颜色或背景颜色

1.请看一段文章。 2.我们要给文中的“code”换成白色字体,黑色背景如何批量呢? 2.1.先摁下“ctrl”"H" 2.2.选择“查找” 2.3.查找内容框填入“code” 2.4.点击以下项中查找,选择主文档。(如果你要对某一段文章的相…

Docker操作指南

Docker操作指南 概念解释: 镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起供运行启动,称为镜像。 容器(Container):镜像中的应用程序运行后形…

3.7 最大异或对

异或 二进制位同为0,异为1 异或符号 ^ 异或性质: a^a0 a^00 (a^ b ^c) (a^c ^b) 一道异或的题目 最大异或对 题目链接 思路 注重思维方式 首先是暴力想法,使用两重循环,对每两个数字进行取异或运算,得出最大值考虑…

wireshark 着色规则的含义

文章目录前言wireshark 着色规则的含义前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!! wires…

【FATE联邦学习debug】 No module named ‘federatedml‘

直接pip install federatedml是无法找得到这个库的。 这个的原因是环境变量的事情,因为在部署文档中,本身提示我们要更新一些环境变量,如果不export那些变量,下面的fate_test其实也是无法测试成功的。 打开bin/init_env.sh&#x…

活动回顾|龙蜥社区标准化SIG首届MeetUp圆满落幕 《龙蜥社区治理规范》征求意见稿正式发布

2 月 25 日周六,龙蜥社区标准化 SIG 召开首次 MeetUp,会上发布了《龙蜥社区治理规范》征求意见稿,致力于通过标准规范开源社区发展,进而推动操作系统行业的规范发展。(图/现场合照)本次会议共有来自电子标准…

Espressif-IDE v2.8.0 新增功能及开发方向

在乐鑫最近发布的 Espressif-IDE 2.8.0 版本中,我们推出了分区表编辑器和 NVS 分区编辑器功能,优化现有调试器的配置功能并修复多项 Bug ,进一步为用户提升了插件质量以及稳定性。 用户可以点此获取最新版本。 • 若您的设备为 Windows 系统…

Python 插件虚拟环境支持

eKuiper 团队于年前发布了 1.8.0 版本,并在 2 月对该版本的文档进行了完善,同时通过 EMQ Demo Day 直播帮助用户更进一步了解新功能的使用场景。 我们也开始了下一个版本 1.9.0 的开发,该版本将是一个较小的迭代版本,主要目标是实…

矩阵打印问题

文章目录1、题目一:正方形矩阵顺时针转动90度1.1 题目描述1.2 思路分析1.3 代码实现2、题目二:转圈打印长方形矩阵2.1 题目描述2.2 思路分析2.3 代码实现3、题目三:zigzag打印矩阵3.1 题目描述3.2 思路分析3.3 代码实现4、题目四:…

NFS服务器与CGI程序详解

目录 NFS 服务器 一,NFS 服务器简介 二,NFS的使用 三,客户端使用 autofs 自动挂载 1,autofs产生的原因 四,autofs的安装与配置文件 五,autofs的使用 www服务器---cgi程序 CGI程序的应用 NFS 服务器 一&a…

React(六):Redux的使用、react-redux简化代码、redux模块化、RTK的使用

React(六)一、Redux测试项目搭建1.创建store仓库2.创建reducer函数(纯函数)3.constants.js保存action名字4.修改store中的数据5.动态生成action二、React中如何使用redux1.安装redux2.创建store3.组件中订阅store4.派发action修改…

运行Hive

Hive的定义:基于Hadoop的数据仓库解决方案将结构化的数据文件映射为数据库表提供类sql的查询语言HQL (Hive Query Language)Hive让更多的人使用hadoopHive的运行机制Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 D…

LinkedIn最好的辅助工具

领英精灵都有什么功能领英精灵是我国技术人员花巨资针对领英平台研发的辅助工具。具有好友分组、备注,一键批量加好友,批量撤回邀请,批量群发消息,批量导出好友资料,批量点赞六大功能。通过领英精灵可大大提高领英开发…

自建服务器系列- DDNS配置

1、环境说明 光猫桥接路由器拔号的模式 2、DDNS是什么 对于DHCP方式获得的IP,无论对于局域网内来说,还是外网来说,都会有使得IP地址每隔一段时间变化一次,如果想要通过恒定不变的地址访问主机,就需要动态域名解析。…

凝聚共识,锚定未来 | 第四届OpenI/O 启智开发者大会NLP大模型论坛成功举办!

2023年2月24日下午,第四届OpenI/O启智开发者大会NLP大模型分论坛在深圳人才研修院隆重举办。该论坛以“开源集智创新探索中文NLP大模型生态发展”为主题,众多业内人士和研发者在此共享NLP领域的前沿动态和研发经验,畅想中国NLP领域的发展前景…

RocketMQ 5.0 学习笔记

1. 需求 背景:业务需要,平台将使用rocketMQ来实现消息的发送与消费,替代redis的消息功能。 需要在搭建好rocketMQ平台后,进行研究和验证。 技术:Springboot RocketMQ5.0 使用场景:签到活动&#xff0c…

DBCO intermidate 3,二苯并环辛炔-四乙酰甘露糖胺一种生化小分子糖标记

DBCO-四乙酰甘露糖胺 ,二苯并环辛炔-四乙酰甘露糖胺 | 纯度:95% | DBCO intermidate 31.试剂信息:CAS:N/A外观:固体/粉末分子量:C33H34N2O11分子式:634.64溶解性:溶于有机溶剂&#…