- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
系统的通知公告功能似乎是很容易被忽略的功能模块,在传统的软件系统中,一般OA类软件系统不可或缺,而在应用软件系统中此功能或有或无,在现在大多数的互联网软件系统中,此功能又必不可缺。所以,在框架设计时,我们需要考虑业务系统是否需要此功能模块,然后将此功能作为扩展插件,在需要时开启,在不需要时配置关闭即可.
在系统公告设计之前,我们需要综合考虑目前系统通知公告功能都有哪些类型和实现方式。在类型方面如果是电商类网站,那么系统的通知公告有账户变动通知、物流变动通知、订单变动通知等等;如果是OA类系统,那么系统的通知公告有待办事项、审批通知、公司公告通知等等;在实现方式方面,有站内通知、短信通知、微信通知、APP推送消息等等.
在通知公告的来源和通知公告的目标方面也要做好区分,通常的通知公告来源有系统通知、群组通知、用户通知;相对于通知公告的目标方,有群组、角色、用户等分类,下面是通知公告功能关键表的E-R图,不包含RBAC模型关系,框架支持多租户:
数据库表设计公告通知来源字段:
`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 '消息级别 高 中 低' ,
有些系统的公告通知可能不只是文本消息,基于用户体验考虑,有些消息到达时,用户可以直接通过点击通知跳转到具体的业务处理模块,比如工作流的待办事项、未支付订单的提醒等等。在现在的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 '消息级别 高 中 低' ,
现在移动办公越来越普遍,针对于移动客户端的多种方式,那么我们在发送通知公告时的渠道也是需要有配置的,比如发送到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 = '通知渠道和系统消息关联表';
除了完成基本的内容表设计时,我们还需要考虑数据量非常大时的数据库设计优化问题。在我们的通知公告中,我们发现有很多消息是通用消息,是发送给群组的、角色的,这类消息的内容是一致的,如果为每个用户都新建一条这样的通知公告数据库记录。那么会冗余很多无用数据。但是,我们又需要针对群组、角色中的某一个用户标识出通知公告的已读/未读状态等内容,所以此处需要增加关联表,利用关联表来标识某一个用户是否读取了消息.
数据库表设计通知公告某一用户的状态字段:
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 = '消息通知表';
系统通知公告通常有系统因业务状态变化自动发起的通知公告和管理人员通过后台管理主动发起的通知公告。如果是因业务状态自动发起的通知公告,那么其发送的渠道需要结合业务需求,在编码时确定。如果是管理人员通过界面发起的通知公告,那么需要在配置界面提供可选择的渠道,根据业务需求由发起人来确定通过哪些渠道发送.
Gitee: https://gitee.com/wmz1930/GitEgg 。
GitHub: https://github.com/wmz1930/GitEgg 。
最后此篇关于SpringCloud微服务实战——搭建企业级开发框架(五十):集成移动端推送功能的系统通知公告数据库设计的文章就讲到这里了,如果你想了解更多关于SpringCloud微服务实战——搭建企业级开发框架(五十):集成移动端推送功能的系统通知公告数据库设计的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我需要开发一个简单的网站,我通常使用 bootstrap CSS 框架,但是我想使用 Gumbyn,它允许我使用 16 列而不是 12 列。 我想知道是否: 我可以轻松地改变绿色吗? 如何使用固定布局
这个问题在这里已经有了答案: 关闭 13 年前。 与直接编写 PHP 代码相比,使用 PHP 框架有哪些优点/缺点?
我开发了一个 Spring/JPA 应用程序:服务、存储库和域层即将完成。 唯一缺少的层是网络层。我正在考虑将 Playframework 2.0 用于 Web 层,但我不确定是否可以在我的 Play
我现有的 struts Web 应用程序具有单点登录功能。然后我将使用 spring 框架创建一个不同的 Web 应用程序。然后想要使用从 struts 应用程序登录的用户来链接新的 spring 应
我首先使用Spark框架和ORMLite处理网页上表单提交的数据,在提交中文字符时看到了unicode问题。我首先想到问题可能是由于ORMLite,因为我的MySQL数据库的字符集已设置为使用utf8
我有一个使用 .Net 4.5 功能的模块,我们的应用程序也适用于 XP 用户。所以我正在考虑将这个 .net 4.5 依赖模块移动到单独的项目中。我怎样才能有一个解决方案,其中有两个项目针对不同的版
我知道这是一个非常笼统的问题,但我想我并不是真的在寻找明确的答案。作为 PHP 框架的新手,我很难理解它。 Javascript 框架,尤其是带有 UI 扩展的框架,似乎通过将 JS 代码与设计分开来
我需要收集一些关于现有 ORM 解决方案的信息。 请随意编写任何编程语言。 你能谈谈你用过的最好的 ORM 框架吗?为什么它比其他的更好? 最佳答案 我使用了 NHibernate 和 Entity
除了 Apple 的 SDK 之外,还有什么强大的 iPhone 框架可供开始开发?有没有可以加快开发时间的方法? 最佳答案 此类框架最大的是Three20 。 Facebook 和许多其他公司都使用
有人可以启发我使用 NodeJS 的 Web 框架吗?我最近开始从免费代码营学习express js,虽然一切进展顺利,但我对express到底是什么感到困惑。是全栈框架吗?纯粹是为了后端吗?我发现您
您可以推荐哪种 Ajax 框架/工具包来构建使用 struts 的 Web 应用程序的 GUI? 最佳答案 我会说你的 AJAX/javascript 库选择应该较少取决于你的后端是如何实现的,而更多
我有生成以下错误的 python 代码: objc[36554]: Class TKApplication is implemented in both /Library/Frameworks/Tk.
首先,很抱歉,如果我问的问题很明显,因为我没有编程背景,那我去吧: 我想运行一系列测试场景并在背景部分声明了几个变量(我打印它们以仔细检查它们是否已正确声明),第一个是整数,另外两个字符串为你可以看到
在我们承担的一个项目中,我们正在寻找一个视频捕获和录制库。我们的基础工作(基于 google 搜索)表明 vlc (libvlc)、ffmpeg (libavcodec) 和 gstreamer 是三
我试过没有运气的情况下寻找某种功能来杀死/中断Play中的正常工作!框架。 我想念什么吗?还是玩了!实际没有添加此功能? 最佳答案 Java stop类中没有像Thread方法那样的东西,由于种种原因
我们希望在我们的系统中保留所有重大事件的记录。例如,在数据库可能存储当前用户状态的地方,事件日志应记录对该状态的所有更改以及更改发生的时间。 事件记录工具应该尽可能接近于事件引发器的零开销,应该容纳结
那里有 ActionScript 2.0/3.0 的测试框架列表吗? 最佳答案 2010-05-18 更新 由于这篇文章有点旧,而且我刚刚收到了赞成票,因此可能值得提供一些更新的信息,这样人们就不会追
我有一个巨大的 numpy 数组列表(一维),它们是不同事件的时间序列。每个点都有一个标签,我想根据其标签对 numpy 数组进行窗口化。我的标签是 0、1 和 2。每个窗口都有一个固定的大小 M。
我是 Play 的新手!并编写了我的第一个应用程序。这个应用程序有一组它依赖的 URL,从 XML 响应中提取数据并返回有效的 URL。 此应用程序需要在不同的环境(Dev、Staging 和 Pro
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我是一名优秀的程序员,十分优秀!