feat:聊天记录

This commit is contained in:
dzc committed 2025-11-26 14:14:12 +08:00
1 parent 861bea219b
commit 3236c4aaf7
2 files changed
+69 -5

No files matched your search

@@ -5,6 +5,7 @@ import lombok.Data;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Data
@@ -23,9 +24,15 @@ public class ThirdPrivateMessageDTO {
@Schema(description = "发送用户id")
private Long sendId;
@Schema(description = "发送用户名称")
private String sendUserName;
@Schema(description = "接收用户id")
private Long recvId;
@Schema(description = "接收用户名称")
private String recvUserName;
@Schema(description = "发送内容")
private String content;
@@ -38,6 +45,9 @@ public class ThirdPrivateMessageDTO {
@Schema(description = "发送时间")
private Date sendTime;
@Schema(description = "发送时间列表")
private List<Date> sendTimeList;
@Schema(description = "请求参数")
private Map<String, Object> params = new HashMap<>();
@@ -2,6 +2,7 @@ package com.bx.implatform.service.third.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.IterUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -12,7 +13,9 @@ import com.bx.implatform.dto.third.privatemsg.ThirdPrivateMessageCountDTO;
import com.bx.implatform.dto.third.privatemsg.ThirdPrivateMessageDTO;
import com.bx.implatform.dto.third.privatemsg.ThirdPrivateMessageInfoDTO;
import com.bx.implatform.entity.PrivateMessage;
import com.bx.implatform.entity.User;
import com.bx.implatform.mapper.PrivateMessageMapper;
import com.bx.implatform.mapper.UserMapper;
import com.bx.implatform.service.third.ThirdPrivateMsgService;
import com.bx.implatform.vo.third.ThirdTableVO;
import com.bx.implatform.vo.third.privatemsg.ThirdPrivateMessageVO;
@@ -20,9 +23,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
/**
* 第三方私聊消息
@@ -32,18 +33,46 @@ import java.util.Objects;
@RequiredArgsConstructor
public class ThirdPrivateMsgServiceImpl extends ServiceImpl<PrivateMessageMapper, PrivateMessage> implements ThirdPrivateMsgService {
private final UserMapper userMapper;
/**
* 查询私聊消息列表
*/
@Override
public ThirdTableVO<ThirdPrivateMessageVO> page(ThirdPrivateMessageDTO dto) {
ThirdTableVO<ThirdPrivateMessageVO> result = new ThirdTableVO<ThirdPrivateMessageVO>();
Page<PrivateMessage> page = baseMapper.selectPage(new Page(dto.getPageNum(), dto.getPageSize()), buildQueryWrapper(dto));
result.setTotal(page.getTotal());
if (ObjectUtil.isNotEmpty(page.getRecords())) {
result.setRows(BeanUtil.copyToList(page.getRecords(), ThirdPrivateMessageVO.class));
List<PrivateMessage> pageList = page.getRecords();
List<ThirdPrivateMessageVO> resultPageList = BeanUtil.copyToList(pageList, ThirdPrivateMessageVO.class);
// 查询用户
List<Long> sendList = pageList.stream().map(PrivateMessage::getSendId).distinct().filter(ObjectUtil::isNotEmpty).toList();
List<Long> recvList = pageList.stream().map(PrivateMessage::getRecvId).distinct().filter(ObjectUtil::isNotEmpty).toList();
HashSet<Long> userSet = new HashSet<>();
userSet.addAll(sendList);
userSet.addAll(recvList);
List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>()
.in(User::getId, userSet.stream().toList())
);
if (ObjectUtil.isNotEmpty(users)) {
Map<Long, User> map = IterUtil.toMap(users, User::getId);
for (ThirdPrivateMessageVO user : resultPageList) {
User targetSendUser = map.get(user.getSendId());
if (ObjectUtil.isNotEmpty(targetSendUser)) {
user.setSendUserName(targetSendUser.getUserName());
}
User targetRecvUser = map.get(user.getRecvId());
if (ObjectUtil.isNotEmpty(targetRecvUser)) {
user.setRecvUserName(targetRecvUser.getUserName());
}
}
}
result.setRows(resultPageList);
}
return result;
@@ -74,6 +103,21 @@ public class ThirdPrivateMsgServiceImpl extends ServiceImpl<PrivateMessageMapper
}
private LambdaQueryWrapper<PrivateMessage> buildQueryWrapper(ThirdPrivateMessageDTO bo) {
List<Long> sendIds = new ArrayList<>();
List<Long> recvIds = new ArrayList<>();
if (ObjectUtil.isNotEmpty(bo.getSendUserName())) {
List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getNickName, bo.getSendUserName()));
if (ObjectUtil.isNotEmpty(users)) {
sendIds = users.stream().map(User::getId).distinct().filter(ObjectUtil::isNotEmpty).toList();
}
}
if (ObjectUtil.isNotEmpty(bo.getRecvUserName())) {
List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().like(User::getNickName, bo.getRecvUserName()));
if (ObjectUtil.isNotEmpty(users)) {
recvIds = users.stream().map(User::getId).distinct().filter(ObjectUtil::isNotEmpty).toList();
}
}
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<PrivateMessage> wrapper = Wrappers.lambdaQuery();
if (!Objects.isNull(bo.getSendId()) && !Objects.isNull(bo.getRecvId())) {
@@ -93,6 +137,16 @@ public class ThirdPrivateMsgServiceImpl extends ServiceImpl<PrivateMessageMapper
wrapper.like(ObjUtil.isNotEmpty(bo.getContent()), PrivateMessage::getContent, bo.getContent());
wrapper.eq(!Objects.isNull(bo.getType()), PrivateMessage::getType, bo.getType());
wrapper.eq(!Objects.isNull(bo.getStatus()), PrivateMessage::getStatus, bo.getStatus());
if (ObjectUtil.isNotEmpty(bo.getSendTimeList())) {
wrapper.between(PrivateMessage::getSendTime, bo.getSendTimeList().get(0), bo.getSendTimeList().get(1));
}
if (ObjectUtil.isNotEmpty(sendIds)) {
wrapper.in(PrivateMessage::getSendId, sendIds);
}
if (ObjectUtil.isNotEmpty(recvIds)) {
wrapper.in(PrivateMessage::getRecvId, recvIds);
}
wrapper.between(params.get("beginTime") != null && params.get("endTime") != null, PrivateMessage::getSendTime,
params.get("beginTime"), params.get("endTime"));
wrapper.orderByDesc(PrivateMessage::getId);