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