zhou zhou
7 小时以前 82624affb0251b75b62b35567d3eb260c06efe78
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.vincent.rsf.server.ai.mapper.AiChatMessageMapper">
 
    <insert id="insertBatch">
        insert into sys_ai_chat_message
        (session_id, seq_no, role, content, content_length, user_id, tenant_id, deleted, create_by, create_time)
        values
        <foreach collection="list" item="item" separator=",">
            (#{item.sessionId}, #{item.seqNo}, #{item.role}, #{item.content}, #{item.contentLength},
            #{item.userId}, #{item.tenantId}, #{item.deleted}, #{item.createBy}, #{item.createTime})
        </foreach>
    </insert>
 
    <update id="softDeleteByIds">
        update sys_ai_chat_message
        set deleted = 1
        where deleted = 0
        and id in
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </update>
 
    <update id="softDeleteBySessionId">
        update sys_ai_chat_message
        set deleted = 1
        where session_id = #{sessionId}
          and deleted = 0
    </update>
 
    <select id="selectLatestMessagesBySessionIds" resultType="com.vincent.rsf.server.ai.entity.AiChatMessage">
        select m.id,
               m.session_id,
               m.seq_no,
               m.role,
               m.content,
               m.content_length,
               m.user_id,
               m.tenant_id,
               m.deleted,
               m.create_by,
               m.create_time
        from sys_ai_chat_message m
                 inner join (
            select latest.session_id, max(candidate.id) as max_id
            from sys_ai_chat_message candidate
                     inner join (
                select session_id, max(seq_no) as max_seq_no
                from sys_ai_chat_message
                where deleted = 0
                  and session_id in
                <foreach collection="sessionIds" item="sessionId" open="(" separator="," close=")">
                    #{sessionId}
                </foreach>
                group by session_id
            ) latest on latest.session_id = candidate.session_id
                and latest.max_seq_no = candidate.seq_no
            where candidate.deleted = 0
            group by latest.session_id
        ) latest on latest.max_id = m.id
        where m.deleted = 0
    </select>
</mapper>