php实现站内私信功能的方法:1、读取POST请求的request body;2、调用子模块,插入发送给全站或所属用户组的站内信;3、获取未读站内信数量;4、检查messageId是不是属于当前用户;5、实现批量删除即可。
本文操作环境:windows7系统、PHP7.1版,DELL G3电脑 php怎么实现站内私信功能? PHP实现站内信设计思路与方案 一、背景 当前使用运维平台的用户进行沟通时,更多的是依赖微信和邮件通知,而运维平台作为一个整体的产品,也需要能够进行内部沟通的一种服务 - 站内信。
站内信的设计基调 站内信的设计基调取决于用户如何使用站内信:
上面的描述都意味着用户基本不会使用站内信,那么在什么样的场合会使用站内信呢?
当前只有产品消息通知,消息展示也没有进行归类聚合,以后增加全站通知、mention、like、comment等类型的站内信时,就需要考虑按类型进行消息聚合了。
二、需求描述
(还有一种是用户对产品的站内信,例如对某个模块的反馈、疑问之类的)
我们目前的需求是: 1管理员对多用户发送站内信 对用户真实性不做校验 对标题长度、内容长度进行限制(分别是45个字节、150个字节,对应中文字符15个、50个) 对收件人的拼音长度进行限制(最长50个字节) 【推荐学习:《PHP视频教程》】 2 用户可以查看自己的站内信 按“全部、已读、未读”过滤 按消息来源分类:工单平台、资源管理、自动装机、漏洞平台、故障平台。。。
3 用户可以删除、批量删除站内信 4 用户可以已阅、批量已阅、全部标记为已读 站内信 5 运维平台页面顶部的消息图标
6 管理员页面: 更新用户 删除消息 统计数据 增加module 增加站内信类型 发送全站消息 四、系统流程 发送站内信
获取站内信列表
获取未读站内信数量
批量已阅
全部已阅 update inbox_message set “read”=1, “update_time”=now where “receiver_name”=currentUser() and “read” = 0 批量删除
全部删除update inbox_message set “deleted”=1, “update_time”=now where “receiver_name”=currentUser() and “deleted” = 0
五、数据库设计站内信内容表CREATE TABLE `inbox_message_text` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `title` varchar(128) NOT NULL DEFAULT '', `content` longtext NOT NULL, `create_time` datetime NOT NULL, `update_time` datetime NOT NULL, `send_type` tinyint(4) NOT NULL DEFAULT '0', `creator_name` varchar(255) NOT NULL DEFAULT '', `deleted` tinyint(4) NOT NULL DEFAULT '0', `module_id` bigint(20) NOT NULL, `link` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 站内信本身除了消息来源(module_name),还有一个纬度的描述,叫消息类型(message_type),例如安全消息、活动消息、服务消息等,每一大类里,又可以划分子类,例如活动消息-优惠活动
消息来源和消息类型可以是正交关系,即工单平台也可以有活动消息;消息来源也可以是消息类型的一种,称为“产品消息”
站内信发送表CREATE TABLE `inbox_message` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `message_text_id` bigint(20) NOT NULL, `receiver_name` varchar(255) NOT NULL DEFAULT '', `read` tinyint(4) NOT NULL DEFAULT '0', `deleted` tinyint(4) NOT NULL DEFAULT '0', `create_time` datetime NOT NULL, `update_time` datetime NOT NULL, PRIMARY KEY (`id`), KEY `inbox_message_receiver_name_deleted_read_id` (`receiver_name`,`deleted`,`read`,`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 消息来源表CREATE TABLE `inbox_module` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `code` varchar(128) NOT NULL DEFAULT '', `name` varchar(128) NOT NULL DEFAULT '', `create_time` datetime NOT NULL, `update_time` datetime NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `code` (`code`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 六、API设计发送站内信:POST /v1/messagerequest body Content-Type: application/json { "title": "工单审批", "content": "XXX提交了变更申请,请审批", "to": "sunzhongyuan,shenli,wangya", "module_name": "工单平台", "link": "xxx" } response { "code": 200, "data": 32, "msg": "OK" } 获取站内信列表:GET /v1/message User-Id: xxxhttp://127.0.0.1:10085/v1/message?query=message_text_id.module_id.name:xxx&limit=1 { "code": 200, "data": { "data": [ { "id": 1, "message_text": { "id": 1, "title": "title 2", "content": "content 2", "create_time": "2018-01-12 11:13:48", "update_time": "2018-01-12 11:13:48", "send_type": 1, "creator_name": "sysadmin", "deleted": 0, "link": "xxx", "Messages": null, "module": { "id": 4, "code": "secure", "name": "xxx", "create_time": "2018-01-11 15:38:01", "update_time": "2018-01-11 15:38:01", "MessageTexts": null } }, "receiver_name": "xxx", "read": 0, "deleted": 0, "create_time": "2018-01-12 11:13:48", "update_time": "2018-01-12 11:13:48" } ], "total": 2 }, "msg": "OK" } 已阅、批量已阅站内信:PUT /v1/read_messages/:messageIdsresponse { "code": 200, "data": "OK", "msg": "OK" } 全部已阅 PUT:/v1/read_all_messages response 同上
删除、批量删除站内信:PUT /v1/delete_messages/:messageIds response 同上
全部删除站内信:PUT /v1/delete_all_messages response 同上
获取消息来源列表:GET /v1/module response { "code": 200, "data": [ { "id": 1, "code": "worksheet", "name": "工单平台", "create_time": "2018-01-11 15:21:38", "update_time": "2018-01-11 15:21:38", "MessageTexts": null }, { "id": 2, "code": "cmdb", "name": "资源管理", "create_time": "2018-01-11 15:22:28", "update_time": "2018-01-11 15:22:28", "MessageTexts": null }, ... ], "msg": "OK" }
七、测试注意点 1 发送站内信
2 其他接口都可以通过前端页面测试
八、优化
九、关键功能点设计 右上角的图标行为 1 点击图标,展示最近的N条未读消息
2 下拉框里,展示消息来源、时间(相对现在的时间:10分钟前)、title
3 点击下拉框里的某一个消息
4 弹出框展示消息的来源、时间(绝对时间)、title、content 5 关闭弹出框或者点击外围:
6 再次点击下拉框和图标的外围
7 再次点击图标,重新回到#1状态
阿里云的图标行为是:
4 点击未读消息,新开一个Tab,展示该消息的详情(detail页面),原Tab内容不变,即没有未读数减一,也没从下拉框里删除刚点击的消息
5 最多展示5条消息,只要不刷新页面,就一直是这5条 6 没有滚动更多的功能,只有查看更多,点击进入站内信管理页面,默认是“未读消息”
7 多了一个“消息接受管理”的按钮,当前页面跳转到站内信管理页面,但是默认即“基本接收管理”
隐藏浏览器进度条 每10秒的获取未读消息数接口,会触发浏览器展示进度条,导致分散用户注意力,要把这个进度条隐藏掉。 其他刷新页面的行为不受影响。 以上就是php怎么实现站内私信功能的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |