TODO处理

This commit is contained in:
dylanmay 2024-10-28 16:29:38 +08:00
parent 40be6ed727
commit 29a3ad42b6
5 changed files with 30 additions and 45 deletions

View File

@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversatio
import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationRespVO;
import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdatePinnedReqVO;
import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageListByNoReqVO;
import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageListReqVO;
import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO;
import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO;
import cn.iocoder.yudao.module.im.enums.message.ImMessageContentTypeEnum;
@ -56,28 +57,6 @@ public class ImConversationController {
item.setNickname(receiverUser.getNickname());
}
// 处理未读消息条数TODO
// 处理最后一条消息描述
ImMessageListByNoReqVO imMessageListByNoReqVO = new ImMessageListByNoReqVO();
imMessageListByNoReqVO.setConversationNo(item.getNo());
List<ImMessageDO> listMessage = imMessageService.getMessageListByConversationNo(imMessageListByNoReqVO);
if (!listMessage.isEmpty()) {
ImMessageDO lastMessage = listMessage.get(listMessage.size() - 1);
if (lastMessage != null) {
if (Objects.equals(lastMessage.getContentType(), ImMessageContentTypeEnum.TEXT.getType())) {
item.setLastMessageDescription(lastMessage.getContent());
} else if (Objects.equals(lastMessage.getContentType(), ImMessageContentTypeEnum.PICTURE.getType())) {
item.setLastMessageDescription("[图片]");
} else {
item.setLastMessageDescription("[未知类型]");
}
}
}
});
return success(imConversationRespVOList);
}

View File

@ -51,11 +51,4 @@ public class ImMessageController {
return success(BeanUtils.toBean(messagePage, ImMessageRespVO.class));
}
@GetMapping("/listByNo")
@Operation(summary = "消息列表-根据接收人和发送时间进行分页查询")
public CommonResult<List<ImMessageRespVO>> getMessageListByNo(@Valid ImMessageListByNoReqVO listReqVO) {
List<ImMessageDO> messagePage = imMessageService.getMessageListByConversationNo(listReqVO);
return success(BeanUtils.toBean(messagePage, ImMessageRespVO.class));
}
}

View File

@ -15,14 +15,13 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@Data
public class ImMessageListReqVO {
// TODO @dylan是不是 receiverId senderId 保留一个 receiverId 就行这样A + 自己调用接口 getLoginUserId 然后 conversationType最终可以拼接出 conversationNo
@Schema(description = "接收人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32494")
@NotNull(message = "接收人编号不能为空")
private Long receiverId;
@Schema(description = "发送人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32494")
@NotNull(message = "发送人编号不能为空")
private Long senderId;
@Schema(description = "会话所属人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32494")
@NotNull(message = "会话所属人编号不能为空")
private Long userId;
@Schema(description = "会话类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@InEnum(value = ImConversationTypeEnum.class,message = "会话类型必须是 {value}")
@ -33,9 +32,4 @@ public class ImMessageListReqVO {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDateTime sendTime;
// TODO @dylan这个可以根据 receiverIdsenderIdconversationType 推导的建议可以去掉
@Schema(description = "会话编号编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32494")
@NotNull(message = "会话编号不能为空")
private String conversationNo;
}

View File

@ -24,10 +24,9 @@ public class ImMessageSendReqVO {
@NotNull(message = "会话类型不能为空")
private Integer conversationType;
// TODO @dylan这个 conversationNo直接计算哈不用传递
@Schema(description = "会话编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "会话编号不能为空")
private String conversationNo;
@Schema(description = "会话所属用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "会话所属用户id")
private Long conversationUserId;
@Schema(description = "消息类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@InEnum(ImMessageContentTypeEnum.class)

View File

@ -23,9 +23,12 @@ import org.springframework.validation.annotation.Validated;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.MESSAGE_RECEIVER_NOT_EXISTS;
import static cn.iocoder.yudao.module.im.enums.conversation.ImConversationTypeEnum.generateConversationNo;
/**
* 消息 Service 实现类
@ -48,8 +51,16 @@ public class ImMessageServiceImpl implements ImMessageService {
@Override
public List<ImMessageDO> getMessageList(ImMessageListReqVO listReqVO) {
// 1. 获得会话编号
String no = ImConversationTypeEnum.generateConversationNo(listReqVO.getSenderId(), listReqVO.getReceiverId(), listReqVO.getConversationType());
String no = "";
Long loginUserId = getLoginUserId();
if (Objects.equals(loginUserId, listReqVO.getUserId())) {
no = generateConversationNo(loginUserId, listReqVO.getReceiverId(), listReqVO.getConversationType());
} else {
no = generateConversationNo(listReqVO.getReceiverId(),loginUserId , listReqVO.getConversationType());
}
// 2. 查询历史消息
ImMessageDO message = new ImMessageDO()
.setSendTime(listReqVO.getSendTime())
@ -92,11 +103,20 @@ public class ImMessageServiceImpl implements ImMessageService {
validateReceiverIdExists(message);
// 2. 查询发送人信息
AdminUserRespDTO fromUser = adminUserApi.getUser(fromUserId);
// 3. 保存消息
// 3. 生成conversationNo
String conversationNo = "";
if (fromUserId == message.getConversationUserId()) {
conversationNo = generateConversationNo(fromUserId, message.getReceiverId(), message.getConversationType());
} else {
conversationNo = generateConversationNo(message.getReceiverId(), fromUserId, message.getConversationType());
}
// 4. 保存消息
ImMessageDO imMessageDO = BeanUtil.copyProperties(message, ImMessageDO.class)
.setSenderNickname(fromUser.getNickname()).setSenderAvatar(fromUser.getAvatar())
.setSenderId(fromUserId)
.setConversationNo(message.getConversationNo())
.setConversationNo(conversationNo)
.setSendFrom(ImMessageSourceEnum.USER_SEND.getSource())
.setMessageStatus(ImMessageStatusEnum.SENDING.getStatus())
.setSendTime(LocalDateTime.now());