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

news/2024/5/3 15:47:28/文章来源:https://blog.csdn.net/wmz1932/article/details/129380381

  系统的通知公告功能似乎是很容易被忽略的功能模块,在传统的软件系统中,一般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.luyixian.cn/news_show_267388.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年天津体育学院专升本专业课考试考生考前防疫及入场须知

天津体育学院2023年高职升本科专业考试考生考前须知 一、防疫要求 1.考生要强化自我健康“第一责任人”的意识和责任,自觉履行考前每日健康监测义务。须于考前7天(3月8日前)下载《天津体育学院2023年高职升本科专业考试考生健康安全承诺书》&…

【C++】Clang-Format:代码自动格式化(看这一篇就够了)

文章目录Clang-format格式化C代码1.引言&安装1.1引言1.2 安装2. 配置字解释2.1 language 编程语言2.2 BaseOnStyle 基础风格2.3 AccessModifierOffset 访问性修饰符偏移2.4 AlignAfterOpenBracket 开括号后的对齐2.5 AlignArrayOfStructures 对齐结构体数组2.6 AlignConsec…

智能交通数据集Rope3D(仅限科研使用)

Rope3D Dataset 官网:https://thudair.baai.ac.cn/index !!!如想要使用Rope3D数据集进行2D检测,最后有我们处理完的数据集链接。 !!! 介绍: DAIR-V2X数据集是首个用于…

STM32定时器的编码器接口模式

MCU为STM32L431,通用定时器框图: 编码器接口模式一共有三种,通过TIMx_SMCR寄存器的SMS[3:0]位来选择。模式1计数器仅在TI1FP1的边沿根据TI2FP2的电平来判断向上/下计数;模式2计数器仅在TI2FP2的边沿根据TI1FP1的电平来判断向上/下…

C#开发的OpenRA的游戏主界面怎么样创建4

继续游戏主界面创建的主题, 前面已经说到怎么样找到mainmenu.yaml来显示主界面,也说了怎么样找到各个子控件类。 现在就来仔细分析一下,主界面每一部分的功能。 比如下面这个区域的界面是怎么样创建: 要创建这一小部分的界面显示,也是需要做很多的工作。 因为在这里所有UI…

Softing smartLink网关——推进过程工业数字化转型

虽然在过程工业中各工厂所投入的运营时间千差万别,但仍需按照新标准来进行有效控制和管理,而这就需要使用一种能够聚合其异构数据的数字通信架构。对此,Softing提供了两种网关解决方案,可用于将过程工业通信架构集成到现有以太网系…

C语言设计模式:实现简单工厂模式和工程创建

目录 一,设计模式概念引入 ① 什么是设计模式 ② 什么是类和对象 ③ 什么是工厂模式 二,C语言工厂模式的实现 ① 普通类和对象的代码实现 ② 工厂模式代码实现 ● cat.c ● dog.c ● person.c ● animal.h ● mainpro.c ● 完善mainpro.c …

水库大坝安全监测及水情自动测报系统(设备清单)

解决方案水库大坝安全监测及水情自动测报系统方案,系统主要由降雨量监测站、水库水位监测站、大坝安全监测中的渗流量、渗流压力和变形监测站及视频和图像监测站等站点组成,同时建立规范、统一的监测平台,集数据传输、信息共享、数据储存于一…

【黄河流域公安院校网络空间安全技能挑战赛】部分wp

文章目录webbabyPHPfunnyPHPEzphp**遍历文件目录的类**1、DirectoryIterator&#xff1a;2、FilesystemIterator:3、**Globlterator**读取文件内容的类&#xff1a;SplFileObjectMisc套娃web babyPHP <?php highlight_file(__FILE__); error_reporting(0);$num $_GET[nu…

小程序技术如何提升企业的移动研发效率?

随着移动互联网的普及&#xff0c;移动应用程序已成为企业营销和服务的重要途径。随着技术的不断发展和革新&#xff0c;移动应用程序的开发方式也在不断地演变。 一些技术趋势 1、跨平台开发 跨平台开发已成为移动应用程序开发的趋势。根据 Statista 的报告&#xff0c;截至…

matplotlib: 绘制柱状图

通过matplotlib绘制柱形图 第一个例子 from matplotlib import pyplot as plty [10, 11, 12, 11, 9, 8, 13, 10] # 创建y轴坐标 x list(range(1,9)) # 创建x轴坐标# 创建x轴显示的参数&#xff08;此功能在与在图像中x轴仅显示能被10整除的刻度&#xff0c;避免刻度过多分…

概率论小课堂:泊松分布(完善你对随机性的认识,特别是对风险防范的认识)

文章目录引言I 泊松分布1.1 概率计算公式1.2 应对随机性&#xff0c;需要的冗余比平均值要大1.3 池子越大&#xff0c;越能抵消随机性带来的误差引言 伯努利试验&#xff1a;解释了随机事件的发生概率在理论和现实中的差距泊松分布&#xff1a;进一步完善你对随机性的认识&…

OpenCV各模块函数使用实例(11)--- 矩阵和数组操作(Operations on arrays)

OpenCV各模块函数使用实例&#xff08;11&#xff09;M、矩阵和数组操作&#xff08;Operations on arrays&#xff09;本节描述矩阵的基本操作&#xff0c;这些操作是图像处理和其他数组算法实现的基本操作&#xff0c;包括矩阵的运算&#xff0c;特征值和特征向量&#xff0c…

react router零基础使用教程

安装既然学习 react router 就免不了运行 react安装 reactnpx create-react-app my-appcd my-appnpm start安装 react routernpm install react-router-dom如果一切正常&#xff0c;就让我们打开 index.js 文件。配置路由引入 react-router-dom 的 RouterProviderimport {Route…

RTOS中的消息队列的原理以及应用

消息队列的原理 RTOS中的消息队列是一种用于任务间通信的机制&#xff0c;它可以实现任务之间的异步通信&#xff0c;从而实现任务间的解耦。消息队列是一个先进先出的数据结构&#xff0c;任务可以向队列中发送消息&#xff0c;也可以从队列中接收消息。 消息队列的原理如下…

Web3中的营销:如何在2023年获得优势

Mar. 2022, Daniel在过去的一年里&#xff0c;让人们对你的Web3项目或协议感兴趣已经变得越来越有挑战性。许多曾经充满希望的项目因为各种不同的原因&#xff0c;都在熊市中倒下了。然而&#xff0c;那些迄今为止幸存下来的项目都有一个共同点&#xff1a;强大的社区。Web3营销…

Spark 平衡 CPU

Spark 平衡 CPUCPU/内存平衡CPU 低效线程挂起调度开销优化 CPUCPU/内存平衡 Spark 将内存分 : Execution Memory : 用于分布式任务执行Storage Memory : 用于 RDD 缓存RDD 缓存展开前消耗 Execution Memory , 最后占用 Storage Memory 线程/执行内存关系&#xff1a; 执行内…

2.3 二分搜索技术

二分搜索算法是运用分治策略的典型例子。给定己排好府的 n个元素a10:n-1]&#xff0c;现要在这n个元素中找出一特定元素3。首先较容易想到的是用顺序搜索方法&#xff0c;逐个比较a10:1-1]中元素&#xff0c;直至找出元素&#xff0c;或搜索遍整个数组后确定&#xff0c;不在其…

字节3次都没裁掉的7年老测试。掌握设计业务与技术方案,打开上升通道!

前言职场中的那些魔幻操作&#xff0c;研发最烦的是哪个&#xff1f;“面对业务需求的时候&#xff0c;可能都听过这样一句话&#xff1a;这个很简单&#xff0c;直接开发&#xff0c;三天内上线&#xff1b;”朋友说&#xff1a;“产品听了流泪&#xff0c;测试见了崩溃&#…

元宇宙、区块链 通俗易懂

什么是区块链&#xff1f;比特币挖矿是什么&#xff1f;元宇宙是什么&#xff1f;Web(万维网)的三权化进化&#xff1a;基于此&#xff0c;介绍下“元宇宙”。1992年&#xff0c;美国作家史蒂芬森在《雪崩》一书中首次提出了“元宇宙(Metaverse)”的概念。元宇宙实际上就是一种…