Commit 1f58fd2be488203bb18a1515bc2921a2e527f53d

Authored by YunaiV
1 parent d6736204

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

yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/conversation/ImConversationController.java
1 package cn.iocoder.yudao.module.im.controller.admin.conversation; 1 package cn.iocoder.yudao.module.im.controller.admin.conversation;
2 2
3 -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;  
4 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils; 4 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 -import cn.iocoder.yudao.framework.websocket.core.sender.WebSocketMessageSender;  
7 import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationCreateReqVO; 5 import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationCreateReqVO;
8 import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdateLastReadTimeReqVO; 6 import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdateLastReadTimeReqVO;
9 import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationRespVO; 7 import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationRespVO;
10 import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdatePinnedReqVO; 8 import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdatePinnedReqVO;
11 -import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageListByNoReqVO;  
12 -import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageListReqVO;  
13 import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO; 9 import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO;
14 -import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO;  
15 -import cn.iocoder.yudao.module.im.enums.message.ImMessageContentTypeEnum;  
16 import cn.iocoder.yudao.module.im.service.conversation.ImConversationService; 10 import cn.iocoder.yudao.module.im.service.conversation.ImConversationService;
17 import cn.iocoder.yudao.module.im.service.message.ImMessageService; 11 import cn.iocoder.yudao.module.im.service.message.ImMessageService;
18 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 12 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -25,7 +19,6 @@ import org.springframework.validation.annotation.Validated; @@ -25,7 +19,6 @@ import org.springframework.validation.annotation.Validated;
25 import org.springframework.web.bind.annotation.*; 19 import org.springframework.web.bind.annotation.*;
26 20
27 import java.util.List; 21 import java.util.List;
28 -import java.util.Objects;  
29 22
30 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 23 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
31 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; 24 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/ImMessageListReqVO.java
@@ -19,6 +19,7 @@ public class ImMessageListReqVO { @@ -19,6 +19,7 @@ public class ImMessageListReqVO {
19 @NotNull(message = "接收人编号不能为空") 19 @NotNull(message = "接收人编号不能为空")
20 private Long receiverId; 20 private Long receiverId;
21 21
  22 + // TODO @dylan:这个是不是不用传递呀。因为 http 连接,有当前的 userid 呀
22 @Schema(description = "会话所属人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32494") 23 @Schema(description = "会话所属人编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32494")
23 @NotNull(message = "会话所属人编号不能为空") 24 @NotNull(message = "会话所属人编号不能为空")
24 private Long userId; 25 private Long userId;
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/ImMessageSendReqVO.java
@@ -24,6 +24,7 @@ public class ImMessageSendReqVO { @@ -24,6 +24,7 @@ public class ImMessageSendReqVO {
24 @NotNull(message = "会话类型不能为空") 24 @NotNull(message = "会话类型不能为空")
25 private Integer conversationType; 25 private Integer conversationType;
26 26
  27 + // TODO @dylan:这个是不是不用传递呀。因为 http 连接,有当前的 userid 呀
27 @Schema(description = "会话所属用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") 28 @Schema(description = "会话所属用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
28 @NotNull(message = "会话所属用户id") 29 @NotNull(message = "会话所属用户id")
29 private Long conversationUserId; 30 private Long conversationUserId;
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationServiceImpl.java
@@ -8,8 +8,6 @@ import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversatio @@ -8,8 +8,6 @@ import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversatio
8 import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO; 8 import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO;
9 import cn.iocoder.yudao.module.im.dal.mysql.conversation.ImConversationMapper; 9 import cn.iocoder.yudao.module.im.dal.mysql.conversation.ImConversationMapper;
10 import cn.iocoder.yudao.module.im.enums.conversation.ImConversationTypeEnum; 10 import cn.iocoder.yudao.module.im.enums.conversation.ImConversationTypeEnum;
11 -import cn.iocoder.yudao.module.system.api.user.AdminUserApi;  
12 -import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;  
13 import jakarta.annotation.Resource; 11 import jakarta.annotation.Resource;
14 import org.springframework.stereotype.Service; 12 import org.springframework.stereotype.Service;
15 import org.springframework.validation.annotation.Validated; 13 import org.springframework.validation.annotation.Validated;
@@ -26,6 +24,7 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti @@ -26,6 +24,7 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti
26 @Service 24 @Service
27 @Validated 25 @Validated
28 public class ImConversationServiceImpl implements ImConversationService { 26 public class ImConversationServiceImpl implements ImConversationService {
  27 +
29 private final String IM_CONVERSATION_ADD = "im-conversation-add"; 28 private final String IM_CONVERSATION_ADD = "im-conversation-add";
30 29
31 @Resource 30 @Resource
@@ -108,6 +107,7 @@ public class ImConversationServiceImpl implements ImConversationService { @@ -108,6 +107,7 @@ public class ImConversationServiceImpl implements ImConversationService {
108 conversation = insertConversation(no, loginUserId, createReqVO.getTargetId(), createReqVO.getType()); 107 conversation = insertConversation(no, loginUserId, createReqVO.getTargetId(), createReqVO.getType());
109 } 108 }
110 109
  110 + // TODO @dylan:这个是不是不用 push 呀。对于发送端,它自己肯定知道;对于接收端,貌似收到 message 的时候,再创建更合理一点。
111 // 发送打开会话的通知,并推送会话实体 111 // 发送打开会话的通知,并推送会话实体
112 // 给自己发送创建会话成功的通知 112 // 给自己发送创建会话成功的通知
113 webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), getLoginUserId(), 113 webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), getLoginUserId(),
@@ -116,9 +116,7 @@ public class ImConversationServiceImpl implements ImConversationService { @@ -116,9 +116,7 @@ public class ImConversationServiceImpl implements ImConversationService {
116 // 给接受者发送创建会话的通知 116 // 给接受者发送创建会话的通知
117 webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), createReqVO.getTargetId(), 117 webSocketMessageSender.sendObject(UserTypeEnum.ADMIN.getValue(), createReqVO.getTargetId(),
118 IM_CONVERSATION_ADD, conversation); 118 IM_CONVERSATION_ADD, conversation);
119 -  
120 return conversation; 119 return conversation;
121 } 120 }
122 121
123 -  
124 } 122 }
125 \ No newline at end of file 123 \ No newline at end of file
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java
@@ -23,7 +23,6 @@ import org.springframework.validation.annotation.Validated; @@ -23,7 +23,6 @@ import org.springframework.validation.annotation.Validated;
23 import java.time.LocalDateTime; 23 import java.time.LocalDateTime;
24 import java.util.Collections; 24 import java.util.Collections;
25 import java.util.List; 25 import java.util.List;
26 -import java.util.Objects;  
27 26
28 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 27 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
29 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; 28 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@@ -51,9 +50,10 @@ public class ImMessageServiceImpl implements ImMessageService { @@ -51,9 +50,10 @@ public class ImMessageServiceImpl implements ImMessageService {
51 50
52 @Override 51 @Override
53 public List<ImMessageDO> getMessageList(ImMessageListReqVO listReqVO) { 52 public List<ImMessageDO> getMessageList(ImMessageListReqVO listReqVO) {
54 - 53 + // TODO @dylan:userId 从 controller 传递,service 保持无状态
55 // 1. 获得会话编号 54 // 1. 获得会话编号
56 Long loginUserId = getLoginUserId(); 55 Long loginUserId = getLoginUserId();
  56 + // TODO @dylan:修复下 generateConversationNo 方法,fromUserId、receiverId 需要小的放前面,大的放后面。这样,可以保证一定只生成唯一的。
57 String no1 = generateConversationNo(loginUserId, listReqVO.getReceiverId(), listReqVO.getConversationType()); 57 String no1 = generateConversationNo(loginUserId, listReqVO.getReceiverId(), listReqVO.getConversationType());
58 String no2 = generateConversationNo(listReqVO.getReceiverId(),loginUserId, listReqVO.getConversationType()); 58 String no2 = generateConversationNo(listReqVO.getReceiverId(),loginUserId, listReqVO.getConversationType());
59 59
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.java
@@ -101,6 +101,7 @@ public class UserController { @@ -101,6 +101,7 @@ public class UserController {
101 pageResult.getTotal())); 101 pageResult.getTotal()));
102 } 102 }
103 103
  104 + // TODO @dylan:可以服用 getSimpleUserList 呀。
104 @GetMapping("/all") 105 @GetMapping("/all")
105 @Operation(summary = "获得所有用户列表") 106 @Operation(summary = "获得所有用户列表")
106 @PreAuthorize("@ss.hasPermission('system:user:list')") 107 @PreAuthorize("@ss.hasPermission('system:user:list')")
@@ -115,6 +116,7 @@ public class UserController { @@ -115,6 +116,7 @@ public class UserController {
115 return success(UserConvert.INSTANCE.convertList(result, deptMap)); 116 return success(UserConvert.INSTANCE.convertList(result, deptMap));
116 } 117 }
117 118
  119 + // TODO @dylan:融合到 getSimpleUserList 接口,允许传递 deptId 筛选
118 @GetMapping("/listByDept") 120 @GetMapping("/listByDept")
119 @Operation(summary = "获得部门用户列表") 121 @Operation(summary = "获得部门用户列表")
120 @PreAuthorize("@ss.hasPermission('system:user:list')") 122 @PreAuthorize("@ss.hasPermission('system:user:list')")