<?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>
|