springboot项目实现站内信功能
- 功能介绍:
(一)站内信肯定大家都不陌生,是指在系统现有的人员架构的基础上,进行一对一或一对多发送邮件的功能。
(二)站内信的目的是为了消息通知的更为便捷,只在内部流转,且系统中留有存底的消息信息。
(三)站内信的信息以明码的方式留存到数据库中,不做真删除。
- 数据库设计:
(一)设计前提:
明确了需求,下一步对于后台开发来说就是数据库表的设计。对于用户量大的系统,设计一个好的数据库表结构可以为系统节省性能,提高查询效率的同时用户体验也会更好。
(二)设计思路:
1、发送站内信,在数据库中冗余最多的信息便是站内信的消息内容,内容多且繁杂,若要一对百或千或万发送那么数据库中就要存入成千上万条重复的消息内容;
2、如果系统使用用户多(上千上万级别),但是又有许多废弃或常年不登录的僵尸号,此时群发站内信也会造成没必要的数据录入。后台也需要设计过时消息功能,对数据库表定时处理,防止常年不登录的账户突然登录站内信过多的问题。
3、站内信的删除,接收者和发送者都有该条站内信的数据,一方删除另一方仍然可以查到该条站内信,就需要做好单向删除。
(三)数据库表结构:
我在此设计了三张表,用于站内信功能的使用。基于实现,表可能会更多或更少。也欢迎各位大佬提出意见建议。
站内信发送表:off_mail
该表记录站内信发送人以及接收人的信息,通过发送时间和收信人信息状态判定是否为过时消息,对接收人进行删除处理。
站内信信息表:off_message
该表记录站内信的消息内容,状态是做草稿箱处理的。关联id是站内信的id
站内信接收表:off_receive
该表记录站内信的接收人的信息,当用户登录时去查询站内信发送表是否有该用户且未过时的站内信,进行写入。
- 功能实现:
(一)代码生成:
代码生成使用mybatis-plus代码生成器生成。是在本地部署的,线上那版过期了😭若有小伙伴需要欢迎私信或下载。
(二)逻辑思路:
代码就不贴了,因为各个系统的都不一样。以上功能完成后我把我开发流程梳理一下吧
1.前端页面写好站内信并选好发送人后提交后台进行数据录入,录入两个表,站内信发送表以及站内信信息表。
如果是一对多站内信发送表将所有收件人挨个录入,站内信信息表只存一条信息。
点击发送,此时发送者已经可以看到发送的消息(表头应为收信人),但是接收表为空,因为该用户还未登录或为不在线状态
登录水煮鱼用户,可以看到该条站内信,此时receive表中只有该用户的信息
测试单向删除功能,是对站内信发送表中的接收和发送人状态进行更改
将发件箱中发送至水煮鱼的站内信删除,登录水煮鱼账户可见站内信仍在收件箱中。
至此功能结束。
欢迎大家留言交流。