From b6953cb8d0abf108cc19ba384e8bb9fdb725ada0 Mon Sep 17 00:00:00 2001 From: KilLze Date: Wed, 7 Jan 2026 03:33:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BC=9A=E8=AF=9D=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=9F=A5=E8=AF=A2=E5=B9=B6=E6=A0=A1=E9=AA=8C=E4=BC=9A?= =?UTF-8?q?=E8=AF=9D=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bao/dating/common/result/ChatSendResult.java | 15 +++++++++++++++ .../com/bao/dating/mapper/ChatSessionsMapper.java | 10 ++++++++++ .../bao/dating/service/impl/ChatServiceImpl.java | 11 +++++++---- .../com/bao/dating/mapper/ChatSessionsMapper.xml | 1 + 4 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/bao/dating/common/result/ChatSendResult.java diff --git a/src/main/java/com/bao/dating/common/result/ChatSendResult.java b/src/main/java/com/bao/dating/common/result/ChatSendResult.java new file mode 100644 index 0000000..cb694bd --- /dev/null +++ b/src/main/java/com/bao/dating/common/result/ChatSendResult.java @@ -0,0 +1,15 @@ +package com.bao.dating.common.result; + +import com.bao.dating.pojo.vo.ChatRecordsVO; +import lombok.Data; + +/** + * 聊天发送结果 + * @author KilLze + */ +@Data +public class ChatSendResult { + private boolean success; + private String message; + private ChatRecordsVO record; +} diff --git a/src/main/java/com/bao/dating/mapper/ChatSessionsMapper.java b/src/main/java/com/bao/dating/mapper/ChatSessionsMapper.java index 2351070..ed53feb 100644 --- a/src/main/java/com/bao/dating/mapper/ChatSessionsMapper.java +++ b/src/main/java/com/bao/dating/mapper/ChatSessionsMapper.java @@ -5,6 +5,7 @@ import com.bao.dating.pojo.entity.ChatRecords; import com.bao.dating.pojo.entity.ChatSessions; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -18,6 +19,15 @@ public interface ChatSessionsMapper { */ int upsertSessionForSender(ChatSessions chatSessions); + /** + * 获取会话 + * @param userId 用户ID + * @param targetUserId 目标用户ID + * @return 会话 + */ + @Select("SELECT * FROM chat_sessions WHERE user_id = #{userId} AND target_user_id = #{targetUserId} LIMIT 1") + ChatSessions getSession(@Param("userId") Long userId, @Param("targetUserId") Long targetUserId); + /** * 如果接收方存在会话则更新,不存在则创建 * @param chatSessions 会话 diff --git a/src/main/java/com/bao/dating/service/impl/ChatServiceImpl.java b/src/main/java/com/bao/dating/service/impl/ChatServiceImpl.java index 32d4fec..2347d18 100644 --- a/src/main/java/com/bao/dating/service/impl/ChatServiceImpl.java +++ b/src/main/java/com/bao/dating/service/impl/ChatServiceImpl.java @@ -30,7 +30,7 @@ import java.util.stream.Collectors; */ @Slf4j @Service -public class ChatServiceImpl implements ChatService { +public class ChatServiceImpl implements ChatService { @Autowired private ChatRecordsMapper chatRecordsMapper; @@ -49,6 +49,12 @@ public class ChatServiceImpl implements ChatService { @Override @Transactional(rollbackFor = Exception.class) public ChatRecordsVO createSession(Long senderUserId, ChatRecordSendDTO dto) { + + ChatSessions session = chatSessionsMapper.getSession(senderUserId, dto.getReceiverUserId()); + if (session != null && session.getSessionStatus() == 3) { + throw new RuntimeException("会话已删除,无法发送消息"); + } + ChatRecords record = new ChatRecords(); record.setSenderUserId(senderUserId); record.setReceiverUserId(dto.getReceiverUserId()); @@ -102,9 +108,6 @@ public class ChatServiceImpl implements ChatService { chatSessionsMapper.upsertSessionForReceiver(sessions); - - - // 3. 返回 VO ChatRecordsVO vo = new ChatRecordsVO(); BeanUtils.copyProperties(record, vo); diff --git a/src/main/resources/com/bao/dating/mapper/ChatSessionsMapper.xml b/src/main/resources/com/bao/dating/mapper/ChatSessionsMapper.xml index 015bf04..2e73961 100644 --- a/src/main/resources/com/bao/dating/mapper/ChatSessionsMapper.xml +++ b/src/main/resources/com/bao/dating/mapper/ChatSessionsMapper.xml @@ -58,6 +58,7 @@ FROM chat_sessions WHERE user_id = #{userId} AND session_status = 1 + AND session_status in (1,2) ORDER BY top_status DESC, last_message_time DESC \ No newline at end of file