设计思路-已读未读设计

需求

1.针对工单,或者会话已读未读设计。

2.未读数量

 

 

方案一

首先想到的可能是在消息表的每个字段上设计一个已读未读字段,但是消息维护成本和频率高,比如整个sass大量的发送消息

方案二

如工单

设计阅读记录表

复制代码
@MappedSuperclass
public class AbstractTicketViewRecord extends Entity {
    private static final long serialVersionUID = 8794872508619902240L;

    @Id
    @Column(name = "uid")
    private String uid;

    /**
     * 工单Id
     */
    @Column(name = "ticket_id")
    private Integer ticketId;

    /**
     * 用户Id
     */
    @Column(name = "user_id")
    private Integer userId;

    /**
     * 企业Id
     */
    @Column(name = "provider_id")
    private Integer providerId;

    /**
     * 最后一次阅读时间
     */
    @Column(name = "view_at")
    private Timestamp viewAt;

}
复制代码

实现需求一消息的已读未读表示

当用户获得web页面焦点 则更新最后一次阅读时间,然后服务端发送websocket给其他用户更新这个用户的最后一次阅读时间,通过时间判断此消息已读未读

实现需求二未读消息总数

表连接消息表就行了

select count(1) from `ticket_view_record` r 
join `ticket_comment` c where r.`ticket_id` =c.`ticket_id` 
and r.`view_at` <c.`created_at`  and c.`user_id` !=1885141 and r.`user_id`=1885141

 

posted @   意犹未尽  阅读(889)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示