需求
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