【代码评审】IM:消息相关接口

This commit is contained in:
YunaiV 2024-12-15 19:17:04 +08:00
parent d67362043e
commit 1f58fd2be4
6 changed files with 8 additions and 13 deletions

View File

@ -1,18 +1,12 @@
package cn.iocoder.yudao.module.im.controller.admin.conversation;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.websocket.core.sender.WebSocketMessageSender;
import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationCreateReqVO;
import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdateLastReadTimeReqVO;
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;
import cn.iocoder.yudao.module.im.service.conversation.ImConversationService;
import cn.iocoder.yudao.module.im.service.message.ImMessageService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@ -25,7 +19,6 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;

View File

@ -19,6 +19,7 @@ public class ImMessageListReqVO {
@NotNull(message = "接收人编号不能为空")
private Long receiverId;
// TODO @dylan这个是不是不用传递呀因为 http 连接有当前的 userid
@Schema(description = "会话所属人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32494")
@NotNull(message = "会话所属人编号不能为空")
private Long userId;

View File

@ -24,6 +24,7 @@ public class ImMessageSendReqVO {
@NotNull(message = "会话类型不能为空")
private Integer conversationType;
// TODO @dylan这个是不是不用传递呀因为 http 连接有当前的 userid
@Schema(description = "会话所属用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "会话所属用户id")
private Long conversationUserId;

View File

@ -8,8 +8,6 @@ import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversatio
import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO;
import cn.iocoder.yudao.module.im.dal.mysql.conversation.ImConversationMapper;
import cn.iocoder.yudao.module.im.enums.conversation.ImConversationTypeEnum;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@ -26,6 +24,7 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti
@Service
@Validated
public class ImConversationServiceImpl implements ImConversationService {
private final String IM_CONVERSATION_ADD = "im-conversation-add";
@Resource
@ -108,6 +107,7 @@ public class ImConversationServiceImpl implements ImConversationService {
conversation = insertConversation(no, loginUserId, createReqVO.getTargetId(), createReqVO.getType());
}
// TODO @dylan这个是不是不用 push 对于发送端它自己肯定知道对于接收端貌似收到 message 的时候再创建更合理一点
// 发送打开会话的通知并推送会话实体
// 给自己发送创建会话成功的通知
webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), getLoginUserId(),
@ -116,9 +116,7 @@ public class ImConversationServiceImpl implements ImConversationService {
// 给接受者发送创建会话的通知
webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), createReqVO.getTargetId(),
IM_CONVERSATION_ADD, conversation);
return conversation;
}
}

View File

@ -23,7 +23,6 @@ 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;
@ -51,9 +50,10 @@ public class ImMessageServiceImpl implements ImMessageService {
@Override
public List<ImMessageDO> getMessageList(ImMessageListReqVO listReqVO) {
// TODO @dylanuserId controller 传递service 保持无状态
// 1. 获得会话编号
Long loginUserId = getLoginUserId();
// TODO @dylan修复下 generateConversationNo 方法fromUserIdreceiverId 需要小的放前面大的放后面这样可以保证一定只生成唯一的
String no1 = generateConversationNo(loginUserId, listReqVO.getReceiverId(), listReqVO.getConversationType());
String no2 = generateConversationNo(listReqVO.getReceiverId(),loginUserId, listReqVO.getConversationType());

View File

@ -101,6 +101,7 @@ public class UserController {
pageResult.getTotal()));
}
// TODO @dylan可以服用 getSimpleUserList
@GetMapping("/all")
@Operation(summary = "获得所有用户列表")
@PreAuthorize("@ss.hasPermission('system:user:list')")
@ -115,6 +116,7 @@ public class UserController {
return success(UserConvert.INSTANCE.convertList(result, deptMap));
}
// TODO @dylan融合到 getSimpleUserList 接口允许传递 deptId 筛选
@GetMapping("/listByDept")
@Operation(summary = "获得部门用户列表")
@PreAuthorize("@ss.hasPermission('system:user:list')")