|
@@ -4,68 +4,72 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
|
<mapper namespace="com.ruoyi.system.mapper.CommunityChatMsgMapper">
|
|
|
<select id="getChatListWithLatestMessage" resultType="com.ruoyi.system.domain.vo.SysUserVo">
|
|
|
- SELECT r.id as id,
|
|
|
- u.nick_name as nickName,
|
|
|
- u.user_name as username,
|
|
|
- u.avatar as avatar,
|
|
|
- (SELECT u2.nick_name from sys_user u2 where u2.user_id = r.sender_id) as senderNickName,
|
|
|
- r.receiver_is_read as receiverIsRead,
|
|
|
- r.receiver_id as receiverId,
|
|
|
- r.sender_is_read as senderIsRead,
|
|
|
- r.sender_id as senderId,
|
|
|
- CASE
|
|
|
- WHEN r.message_type = 1 THEN '[图片]'
|
|
|
- WHEN r.message_type = 2 THEN '[语音]'
|
|
|
- WHEN r.message_type = 3 THEN '[定位]'
|
|
|
- WHEN r.message_type = 4 THEN '[视频]'
|
|
|
- ELSE r.content
|
|
|
- END AS msg,
|
|
|
- r.create_time AS msgTime,
|
|
|
- COALESCE(
|
|
|
- (
|
|
|
- SELECT num
|
|
|
- FROM (
|
|
|
- SELECT sender_id, COUNT(*) AS num
|
|
|
- FROM community_chat_msg
|
|
|
- WHERE receiver_id = #{userId} AND receiver_is_read = '0' AND type = #{type}
|
|
|
- GROUP BY sender_id
|
|
|
- ) A
|
|
|
- WHERE A.sender_id = r.sender_id
|
|
|
- ),
|
|
|
- 0
|
|
|
- ) AS unreads
|
|
|
- FROM (SELECT CASE
|
|
|
- WHEN sender_id = #{userId} THEN receiver_id
|
|
|
- ELSE sender_id
|
|
|
- END AS chat_user_id,
|
|
|
- MAX(create_time) AS latest_time
|
|
|
- FROM community_chat_msg
|
|
|
- WHERE (sender_id = #{userId}
|
|
|
- OR receiver_id = #{userId})
|
|
|
- and type = #{type}
|
|
|
- and (
|
|
|
- (
|
|
|
- sender_id = #{userId} AND (
|
|
|
- is_delete IS NULL OR is_delete != 1
|
|
|
- )
|
|
|
- )
|
|
|
- OR (
|
|
|
- receiver_id = #{userId} AND (
|
|
|
- receiver_is_delete IS NULL OR receiver_is_delete != 1
|
|
|
- )
|
|
|
- )
|
|
|
- )
|
|
|
- GROUP BY chat_user_id) latest
|
|
|
- JOIN community_chat_msg r ON
|
|
|
- (
|
|
|
- (r.sender_id = #{userId} AND r.receiver_id = latest.chat_user_id
|
|
|
- OR
|
|
|
- r.sender_id = latest.chat_user_id AND r.receiver_id = #{userId})
|
|
|
- AND r.create_time = latest.latest_time and r.type = #{type}
|
|
|
- )
|
|
|
- JOIN sys_user u ON
|
|
|
- u.user_id = latest.chat_user_id
|
|
|
- ORDER BY latest.latest_time DESC
|
|
|
+ WITH LatestMessages AS (
|
|
|
+ SELECT r.id as id,
|
|
|
+ u.nick_name as nickName,
|
|
|
+ u.user_name as username,
|
|
|
+ u.avatar as avatar,
|
|
|
+ (SELECT u2.nick_name
|
|
|
+ FROM sys_user u2
|
|
|
+ WHERE u2.user_id = r.sender_id) as senderNickName,
|
|
|
+ r.receiver_is_read as receiverIsRead,
|
|
|
+ r.receiver_id as receiverId,
|
|
|
+ r.sender_is_read as senderIsRead,
|
|
|
+ r.sender_id as senderId,
|
|
|
+ CASE
|
|
|
+ WHEN r.message_type = 1 THEN '[图片]'
|
|
|
+ WHEN r.message_type = 2 THEN '[语音]'
|
|
|
+ WHEN r.message_type = 3 THEN '[定位]'
|
|
|
+ WHEN r.message_type = 4 THEN '[视频]'
|
|
|
+ ELSE r.content
|
|
|
+ END AS msg,
|
|
|
+ r.create_time AS msgTime,
|
|
|
+ COALESCE(
|
|
|
+ (
|
|
|
+ SELECT num
|
|
|
+ FROM (
|
|
|
+ SELECT sender_id, COUNT(*) AS num
|
|
|
+ FROM community_chat_msg
|
|
|
+ WHERE receiver_id = #{userId} AND receiver_is_read = '0' AND type = #{type}
|
|
|
+ GROUP BY sender_id
|
|
|
+ ) A
|
|
|
+ WHERE A.sender_id = r.sender_id
|
|
|
+ ),
|
|
|
+ 0
|
|
|
+ ) AS unreads
|
|
|
+ FROM (
|
|
|
+ SELECT CASE
|
|
|
+ WHEN sender_id = #{userId} THEN receiver_id
|
|
|
+ ELSE sender_id
|
|
|
+ END AS chat_user_id,
|
|
|
+ MAX(create_time) AS latest_time
|
|
|
+ FROM community_chat_msg
|
|
|
+ WHERE (sender_id = #{userId} OR receiver_id = #{userId})
|
|
|
+ AND type = #{type}
|
|
|
+ AND (
|
|
|
+ (sender_id = #{userId} AND (is_delete IS NULL OR is_delete != 1))
|
|
|
+ OR (receiver_id = #{userId} AND (receiver_is_delete IS NULL OR receiver_is_delete != 1))
|
|
|
+ )
|
|
|
+ GROUP BY chat_user_id
|
|
|
+ ) latest
|
|
|
+ JOIN community_chat_msg r ON
|
|
|
+ (
|
|
|
+ (r.sender_id = #{userId} AND r.receiver_id = latest.chat_user_id
|
|
|
+ OR
|
|
|
+ r.sender_id = latest.chat_user_id AND r.receiver_id = #{userId} )
|
|
|
+ AND r.create_time = latest.latest_time AND r.type = #{type}
|
|
|
+ )
|
|
|
+ JOIN sys_user u ON u.user_id = latest.chat_user_id
|
|
|
+ ),
|
|
|
+ RankedMessages AS (
|
|
|
+ SELECT *,
|
|
|
+ ROW_NUMBER() OVER (PARTITION BY username ORDER BY msgTime DESC) as rn
|
|
|
+ FROM LatestMessages
|
|
|
+ )
|
|
|
+ SELECT *
|
|
|
+ FROM RankedMessages
|
|
|
+ WHERE rn = 1
|
|
|
+ ORDER BY msgTime DESC;
|
|
|
</select>
|
|
|
<select id="getChatMsgRecord" resultType="com.ruoyi.system.domain.CommunityChatMsg">
|
|
|
SELECT
|