diff --git a/pom.xml b/pom.xml
index 73d13a3..167f2a4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -171,6 +171,12 @@
spring-boot-starter-data-redis
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ 1.4.7
+
+
diff --git a/src/main/java/com/bao/dating/common/result/PageResult.java b/src/main/java/com/bao/dating/common/result/PageResult.java
new file mode 100644
index 0000000..f1634ef
--- /dev/null
+++ b/src/main/java/com/bao/dating/common/result/PageResult.java
@@ -0,0 +1,28 @@
+package com.bao.dating.common.result;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PageResult {
+ /** 总记录数 */
+ private Long total;
+ /** 当前页码 */
+ private Integer page;
+ /** 每页大小 */
+ private Integer size;
+ /** 总页数 */
+ private Integer pages;
+ /** 当前页数据 */
+ private List records;
+
+ public PageResult(Long total, Integer page, Integer size, List records) {
+ this.total = total;
+ this.page = page;
+ this.size = size;
+ this.records = records;
+ // 计算总页数
+ this.pages = (int) Math.ceil((double) total / size);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/bao/dating/config/WebConfig.java b/src/main/java/com/bao/dating/config/WebConfig.java
index 37e08aa..98a0683 100644
--- a/src/main/java/com/bao/dating/config/WebConfig.java
+++ b/src/main/java/com/bao/dating/config/WebConfig.java
@@ -4,9 +4,7 @@ package com.bao.dating.config;
import com.bao.dating.interceptor.TokenInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
@@ -34,14 +32,4 @@ public class WebConfig implements WebMvcConfigurer {
"/user/login"
);
}
-
- /**
- * 配置静态资源映射
- * @param registry 静态资源注册器
- */
- @Override
- public void addResourceHandlers(ResourceHandlerRegistry registry) {
- registry.addResourceHandler("/**")
- .addResourceLocations("classpath:/static/");
- }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/bao/dating/controller/ChatController.java b/src/main/java/com/bao/dating/controller/ChatController.java
index 74efc7f..95acbce 100644
--- a/src/main/java/com/bao/dating/controller/ChatController.java
+++ b/src/main/java/com/bao/dating/controller/ChatController.java
@@ -1,9 +1,42 @@
package com.bao.dating.controller;
+import com.bao.dating.common.Result;
+import com.bao.dating.common.ResultCode;
+import com.bao.dating.common.result.PageResult;
+import com.bao.dating.context.UserContext;
+import com.bao.dating.pojo.dto.ChatHistoryQueryDTO;
+import com.bao.dating.pojo.vo.ChatRecordsVO;
+import com.bao.dating.service.ChatService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
/**
* 聊天控制器
* @author lenovo
*/
+@Slf4j
+@RestController
+@RequestMapping("/chat")
public class ChatController {
+ @Autowired
+ private ChatService chatService;
+ /**
+ * 获取聊天记录
+ * @param targetUserId 目标用户ID
+ * @param queryDTO 查询参数
+ * @return 聊天记录列表
+ */
+ @GetMapping("/history/{targetUserId}")
+ public Result> getChatHistory(
+ @PathVariable Long targetUserId,
+ ChatHistoryQueryDTO queryDTO){
+ Long currentUserId = UserContext.getUserId();
+ PageResult history = chatService.getChatHistory(currentUserId, targetUserId, queryDTO);
+ return Result.success(ResultCode.SUCCESS, "获取聊天记录成功", history);
+ }
}
diff --git a/src/main/java/com/bao/dating/mapper/ChatRecordsMapper.java b/src/main/java/com/bao/dating/mapper/ChatRecordsMapper.java
index 49b21ab..2e37587 100644
--- a/src/main/java/com/bao/dating/mapper/ChatRecordsMapper.java
+++ b/src/main/java/com/bao/dating/mapper/ChatRecordsMapper.java
@@ -1,8 +1,13 @@
package com.bao.dating.mapper;
+import com.bao.dating.pojo.dto.ChatHistoryQueryDTO;
import com.bao.dating.pojo.entity.ChatRecords;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDateTime;
+import java.util.List;
@Mapper
public interface ChatRecordsMapper {
@@ -10,4 +15,16 @@ public interface ChatRecordsMapper {
* 插入聊天记录
*/
int insert(ChatRecords chatRecords);
+
+ /**
+ * 根据用户ID和接收方用户ID查询聊天记录
+ */
+ List selectByUsersAndConditions(
+ @Param("currentUserId") Long currentUserId,
+ @Param("targetUserId") Long targetUserId,
+ @Param("messageContent") String messageContent,
+ @Param("startTime") LocalDateTime startTime,
+ @Param("endTime") LocalDateTime endTime,
+ @Param("messageType") Integer messageType
+ );
}
diff --git a/src/main/java/com/bao/dating/pojo/dto/ChatHistoryQueryDTO.java b/src/main/java/com/bao/dating/pojo/dto/ChatHistoryQueryDTO.java
new file mode 100644
index 0000000..96816d6
--- /dev/null
+++ b/src/main/java/com/bao/dating/pojo/dto/ChatHistoryQueryDTO.java
@@ -0,0 +1,23 @@
+package com.bao.dating.pojo.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+
+/**
+ * 聊天记录查询参数
+ * @author KilLze
+ */
+@Data
+public class ChatHistoryQueryDTO {
+ private Integer page;
+ private Integer size;
+ private Long targetUserId;
+ private String messageContent;
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
+ private LocalDate date;
+ private Integer messageType;
+}
\ No newline at end of file
diff --git a/src/main/java/com/bao/dating/service/ChatService.java b/src/main/java/com/bao/dating/service/ChatService.java
index a4042a2..c9aa62a 100644
--- a/src/main/java/com/bao/dating/service/ChatService.java
+++ b/src/main/java/com/bao/dating/service/ChatService.java
@@ -1,8 +1,14 @@
package com.bao.dating.service;
+import com.bao.dating.common.result.PageResult;
+import com.bao.dating.pojo.dto.ChatHistoryQueryDTO;
import com.bao.dating.pojo.dto.ChatRecordSendDTO;
import com.bao.dating.pojo.vo.ChatRecordsVO;
+/**
+ * 聊天服务
+ * @author lenovo
+ */
public interface ChatService {
/**
* 消息入库,如果会话不存在则创建会话
@@ -11,4 +17,13 @@ public interface ChatService {
* @return 聊天记录VO
*/
ChatRecordsVO createSession(Long senderUserId, ChatRecordSendDTO dto);
+
+ /**
+ * 获取聊天记录
+ * @param currentUserId 发送方用户ID
+ * @param targetUserId 接收方用户ID
+ * @param queryDTO 查询参数
+ * @return 聊天记录VO列表
+ */
+ PageResult getChatHistory(Long currentUserId, Long targetUserId, ChatHistoryQueryDTO queryDTO);
}
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 2da21b0..a7f668c 100644
--- a/src/main/java/com/bao/dating/service/impl/ChatServiceImpl.java
+++ b/src/main/java/com/bao/dating/service/impl/ChatServiceImpl.java
@@ -1,7 +1,9 @@
package com.bao.dating.service.impl;
+import com.bao.dating.common.result.PageResult;
import com.bao.dating.mapper.ChatRecordsMapper;
import com.bao.dating.mapper.ChatSessionsMapper;
+import com.bao.dating.pojo.dto.ChatHistoryQueryDTO;
import com.bao.dating.pojo.dto.ChatRecordSendDTO;
import com.bao.dating.pojo.dto.UserNicknameDTO;
import com.bao.dating.pojo.entity.ChatRecords;
@@ -9,6 +11,8 @@ import com.bao.dating.pojo.entity.ChatSessions;
import com.bao.dating.pojo.vo.ChatRecordsVO;
import com.bao.dating.service.ChatService;
import com.bao.dating.service.UserService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,8 +20,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
-
-
+import java.time.LocalTime;
+import java.util.List;
+import java.util.stream.Collectors;
/**
@@ -108,4 +113,58 @@ public class ChatServiceImpl implements ChatService {
return vo;
}
+ /**
+ * 获取聊天记录
+ * @param currentUserId 当前用户ID
+ * @param targetUserId 目标用户ID
+ * @param queryDTO 查询参数
+ * @return 聊天记录列表
+ */
+ @Override
+ public PageResult getChatHistory(Long currentUserId, Long targetUserId, ChatHistoryQueryDTO queryDTO) {
+ Integer page = queryDTO.getPage();
+ if (page == null || page < 1) {
+ page = 1;
+ }
+ Integer size = queryDTO.getSize();
+ if (size == null || size < 1 || size > 100) {
+ size = 50;
+ }
+
+ LocalDateTime startTime = null;
+ LocalDateTime endTime = null;
+ if (queryDTO.getDate() != null) {
+ startTime = queryDTO.getDate().atStartOfDay();
+ endTime = queryDTO.getDate().atTime(LocalTime.MAX);
+ }
+
+ // 分页
+ PageHelper.startPage(page, size);
+
+ // 查询
+ List recordsList = chatRecordsMapper.selectByUsersAndConditions(
+ currentUserId,
+ targetUserId,
+ queryDTO.getMessageContent(),
+ startTime,
+ endTime,
+ queryDTO.getMessageType()
+ );
+
+ // 使用 PageInfo 封装查询结果
+ PageInfo pageInfo = new PageInfo<>(recordsList);
+
+ // 转换为 VO
+ List voList = recordsList.stream()
+ .map(record -> {
+ ChatRecordsVO vo = new ChatRecordsVO();
+ BeanUtils.copyProperties(record, vo);
+ return vo;
+ })
+ .collect(Collectors.toList());
+
+ // 使用 PageInfo 的信息创建 PageResult
+ return new PageResult<>(pageInfo.getTotal(), pageInfo.getPageNum(), pageInfo.getPageSize(), voList);
+ }
+
}
diff --git a/src/main/resources/com/bao/dating/mapper/ChatRecordsMapper.xml b/src/main/resources/com/bao/dating/mapper/ChatRecordsMapper.xml
index 91be40d..273a47e 100644
--- a/src/main/resources/com/bao/dating/mapper/ChatRecordsMapper.xml
+++ b/src/main/resources/com/bao/dating/mapper/ChatRecordsMapper.xml
@@ -31,4 +31,30 @@
)
+
+
\ No newline at end of file