从零用java实现 小红书 springboot vue uniapp (10)系统消息模块 接收推送消息优化

前言

移动端演示 http://8.146.211.120:8081/#/

管理端演示 http://8.146.211.120:8088/#/

项目整体介绍及演示

前面的文章我们主要完成了后台客服系统的完成 和管理端的搭建 今天我们完成通知消息及推送相关优化
首先我们参考小红书的通知页面

可以看出由这几部分组成 标题 内容 时间 跳转页面

我们创建通知表

bash 复制代码
CREATE TABLE `business_notice` (
  `NOTICE_ID` varchar(32) NOT NULL COMMENT '通知id',
  `NOTICE_TITLE` varchar(500) DEFAULT NULL COMMENT '通知标题',
  `NOTICE_CONTENT` text COMMENT '通知内容',
  `REDIRECT_URL` varchar(500) DEFAULT NULL COMMENT '跳转url',
  `VERSION` bigint(10) DEFAULT '0' COMMENT '乐观锁字段',
  `DELETED` tinyint(2) DEFAULT '0' COMMENT '0正常 1删除',
  `SHOP_ID` varchar(32) DEFAULT NULL COMMENT '门店id',
  `SHOP_NAME` varchar(255) DEFAULT NULL COMMENT '门店名',
  `CREATE_NAME` varchar(255) DEFAULT NULL COMMENT '创建人',
  `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
  `CREATE_ID` varchar(32) DEFAULT NULL COMMENT '创建人id',
  `UPDATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `UPDATE_NAME` varchar(255) DEFAULT NULL COMMENT '修改人',
  `UPDATE_ID` varchar(32) DEFAULT NULL COMMENT '修改人id',
  `NOTICE_TYPE` tinyint(2) DEFAULT '0' COMMENT '通知类型',
  PRIMARY KEY (`NOTICE_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知公告表';

内容有样式编辑 所以我们需要集成markdowm编辑器

mavonEditor

1.下载依赖 npm install mavon-editor --save

2.在main.js中全局引入

bash 复制代码
//引入markdown
import mavonEditor from 'mavon-editor'
import 'mavon-editor/dist/css/index.css'
// use markdown
Vue.use(mavonEditor)

3.在页面使用

bash 复制代码
            <mavon-editor
              ref="md"
              placeholder="请输入文档内容..."
              :boxShadow="false"
              style="z-index:1;border: 1px solid #d9d9d9;height:50vh"
              v-model="temp.noticeContent"
              :toolbars="toolbars"
            />

之后正常完成消息创建模块

通知详情

创建通知表后 发送后进行消息发送

需要创建发送详情表

bash 复制代码
CREATE TABLE `business_receive` (
  `RECEIVE_ID` varchar(32) NOT NULL COMMENT '接收id',
  `AUTHOR_ID` varchar(32) DEFAULT NULL COMMENT '博主id',
  `AUTHOR_NAME` varchar(255) DEFAULT NULL COMMENT '博主名',
  `NOTICE_ID` varchar(32) DEFAULT NULL COMMENT '通知id',
  `NOTICE_TITLE` varchar(500) DEFAULT NULL COMMENT '通知标题',
  `DELETED` tinyint(2) DEFAULT '0' COMMENT '0正常 1删除',
  `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
  `UPDATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `RECEIVE_STATUS` tinyint(2) DEFAULT '0' COMMENT '0 发送 1已读',
  PRIMARY KEY (`RECEIVE_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='接收消息表';

发送消息后保存接收详情

bash 复制代码
    @ApiOperation(value = "发送通知")
    @ApiOperationSupport(order = 3)
    @PostMapping("/admin/notice/sendNotice")
    public ResultBean<Notice> sendNotice(@RequestBody @Validated SendNoticeDto sendNoticeDto) {
        System.out.println(sendNoticeDto);
        if(CollectionUtil.isNotEmpty(sendNoticeDto.getAuthorList())){
            Notice notice = noticeService.getById(sendNoticeDto.getNoticeId());
            List<Author> authorList = sendNoticeDto.getAuthorList();

            List<Receive> receiveList = new ArrayList<>();
            authorList.stream().forEach(author -> {
                Receive receive = new Receive();
                receive.setNoticeId(notice.getNoticeId());
                receive.setAuthorId(author.getAuthorId());
                receive.setAuthorName(author.getAuthorName());
                boolean add = receiveList.add(receive);
                //给指定用户发送
                if(add){
                    TioUtil.sendChatMessageToUser(bootstrap.getServerGroupContext(),author.getAuthorId(),HANDLER_NOTICE_COUNT,receive);
                }
            });

            receiveService.saveBatch(receiveList);

        }else{
            throw new ApiException("请选择发送对象~");
        }

        return ResultBean.success();
    }

发送后 向移动端推送 消息通知

移动端收到通知后 前端进行页面接收

其他方面和收到点赞消息一致

进入页面读取所有未读消息

滑动到页面进行加载更多 下拉刷新数据

通知消息模块开发完毕 如果想快速给某个作者发消息 在作者管理加接口

后续有其它通知也可以硬编码实现

消息推送优化

之前我们请求未读条数 更新消息角标的方式是每次进入页面进行刷新

这样极大浪费了我们的服务器资源

我们可以把所有的通知操作整合到websocket中

bash 复制代码
package com.dd.admin.business.webSocket;

public class WsConst {

    //点赞
    public final static String HANDLER_UP = "1";

    //收藏
    public final static String HANDLER_STAR = "2";

    //回复
    public final static String HANDLER_REPLY = "3";

    //关注
    public final static String HANDLER_FOLLOW = "4";

    //聊天
    public final static String HANDLER_CHAT = "5";

    //客服
    public final static String HANDLER_SERVE = "6";

    //客服
    public final static String HANDLER_READ_CHAT = "7";

    //客服
    public final static String HANDLER_CHAT_COUNT = "8";

    //客服
    public final static String HANDLER_TOTAL_COUNT = "9";

    //客服
    public final static String HANDLER_NOTICE_COUNT = "10";
}

hanlderType就是我们的操作标识

以推送系统消息为例

bash 复制代码
   boolean add = receiveList.add(receive);
                //给指定用户发送
                if(add){
                    TioUtil.sendChatMessageToUser(bootstrap.getServerGroupContext(),author.getAuthorId(),HANDLER_NOTICE_COUNT,receive);
                }

后台操作发送系统消息后 向前端推送handlerType = 10的操作

前端接收到以后

bash 复制代码
	wsClient.onSocketMessageCallback = (res) => {
					console.log('我是message页面收到消息的提示')
					console.log(res)

					if(res.handlerType=='1'||res.handlerType=='2'||
							res.handlerType=='3'||res.handlerType=='4'){
						//点赞收藏 回复 关注
						app.getTotalUnReadCount()
					}

					if(res.handlerType=='5'){
						this.getMessageList()
						app.getTotalUnReadCount()
					}
					//获取总数
					if(res.handlerType=='9'){
						app.setMessageTabBarBadge(res.body.totalUnReadCount)
						this.unReadData = res.body
					}
					//获取
					if(res.handlerType=='10'){
						this.getReceiveLast()
						app.getTotalUnReadCount()
					}
				}

就可以捕捉到 10之后的操作是 更新最后一次系统消息 以及更新角标

后面我们实现文章搜索功能

代码地址
https://gitee.com/ddeatrr/springboot_vue_xhs

相关推荐
IT枫斗者枫哥5 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
代码方舟5 小时前
Java数据工程:利用天远全网运营商三要素优化线上实名认证合规体验
java·人工智能
BBmmo5 小时前
我的 Java 学习笔记 · 第 7 篇:泛型与通配符
java
独泪了无痕5 小时前
Hutool之RandomUtil:随机数生成的终极利器
java·后端
花开路口5 小时前
深入理解 Java/Kotlin 协变与逆变
java·kotlin
farerboy5 小时前
WEB 项目如何禁用 F12 等功能
前端·vue.js·架构
运行时异常5 小时前
【WMS 仓储系统集成 AI Agent 实战】第 7 讲:Vue3 前端工程化——Token 刷新锁、Markdown 渲染踩坑与权限体系
java
她的男孩5 小时前
开放接口限流从 20 改到 200 还是每分钟 20 次:拆完防重放+幂等+限流,我找到 5 个静默失效的坑
java·后端·架构
天天被压力5 小时前
【Python 量化取数指南 #13】Python 把行情落库:sqlite 一键存,回测随用随取
java·人工智能·python
天天被压力5 小时前
【Python 量化取数指南 #14】Python 清洗行情数据:复权停牌对齐,回测不翻车
java·人工智能·python