Commit ac05257ec000f04359483a1acad6f82a1c8d2aa8
1 parent
6da5846b
♻️ refactor(im): 修改消息相关字段类型为 Long,优化数据处理
Showing
5 changed files
with
13 additions
and
51 deletions
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImGroupMessageController.java
| ... | ... | @@ -51,8 +51,8 @@ public class ImGroupMessageController { |
| 51 | 51 | List<ImGroupMessageDO> messages = imGroupMessageService.pullMessages(getLoginUserId(), minId, size); |
| 52 | 52 | ImMessagePullRespVO<ImGroupMessageRespVO> resp = new ImMessagePullRespVO<>(); |
| 53 | 53 | resp.setList(messages.stream().map(this::toRespVO).collect(Collectors.toList())); |
| 54 | - resp.setNextMinId(messages.isEmpty() ? minId.toString() | |
| 55 | - : messages.get(messages.size() - 1).getId().toString()); | |
| 54 | + resp.setNextMinId(messages.isEmpty() ? minId | |
| 55 | + : messages.get(messages.size() - 1).getId()); | |
| 56 | 56 | return success(resp); |
| 57 | 57 | } |
| 58 | 58 | ... | ... |
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImPrivateMessageController.java
| 1 | 1 | package cn.iocoder.yudao.module.im.controller.admin.message; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | |
| 4 | 5 | import cn.iocoder.yudao.module.im.controller.admin.message.vo.*; |
| 5 | -import cn.iocoder.yudao.module.im.controller.admin.message.vo.privates.ImPrivateMessageReadReqVO; | |
| 6 | 6 | import cn.iocoder.yudao.module.im.controller.admin.message.vo.privates.ImPrivateMessageRespVO; |
| 7 | 7 | import cn.iocoder.yudao.module.im.controller.admin.message.vo.privates.ImPrivateMessageSendReqVO; |
| 8 | 8 | import cn.iocoder.yudao.module.im.dal.dataobject.message.ImPrivateMessageDO; |
| ... | ... | @@ -16,7 +16,6 @@ import org.springframework.validation.annotation.Validated; |
| 16 | 16 | import org.springframework.web.bind.annotation.*; |
| 17 | 17 | |
| 18 | 18 | import java.util.List; |
| 19 | -import java.util.stream.Collectors; | |
| 20 | 19 | |
| 21 | 20 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 22 | 21 | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| ... | ... | @@ -37,10 +36,9 @@ public class ImPrivateMessageController { |
| 37 | 36 | @Operation(summary = "发送私聊消息") |
| 38 | 37 | public CommonResult<ImPrivateMessageRespVO> sendMessage(@Valid @RequestBody ImPrivateMessageSendReqVO reqVO) { |
| 39 | 38 | ImPrivateMessageDO message = imPrivateMessageService.sendMessage(getLoginUserId(), reqVO); |
| 40 | - return success(toRespVO(message)); | |
| 39 | + return success(BeanUtils.toBean(message, ImPrivateMessageRespVO.class)); | |
| 41 | 40 | } |
| 42 | 41 | |
| 43 | - // DONE @AI:需要在评估下,是否需要 nextMinId。结论:需要,前端用 nextMinId 做增量拉取游标 | |
| 44 | 42 | @GetMapping("/pull") |
| 45 | 43 | @Operation(summary = "拉取私聊消息(增量)") |
| 46 | 44 | @Parameter(name = "minId", description = "最小消息 id", required = true, example = "0") |
| ... | ... | @@ -50,21 +48,20 @@ public class ImPrivateMessageController { |
| 50 | 48 | @RequestParam("size") Integer size) { |
| 51 | 49 | List<ImPrivateMessageDO> messages = imPrivateMessageService.pullMessages(getLoginUserId(), minId, size); |
| 52 | 50 | ImMessagePullRespVO<ImPrivateMessageRespVO> resp = new ImMessagePullRespVO<>(); |
| 53 | - resp.setList(messages.stream().map(this::toRespVO).collect(Collectors.toList())); | |
| 54 | - resp.setNextMinId(messages.isEmpty() ? minId.toString() | |
| 55 | - : messages.get(messages.size() - 1).getId().toString()); | |
| 51 | + resp.setList(BeanUtils.toBean(messages, ImPrivateMessageRespVO.class)); | |
| 52 | + resp.setNextMinId(messages.isEmpty() ? minId | |
| 53 | + : messages.get(messages.size() - 1).getId()); | |
| 56 | 54 | return success(resp); |
| 57 | 55 | } |
| 58 | 56 | |
| 59 | - // DONE @AI:它是不是不用 VO。结论:需要用 ReqVO,承载 friendId 字段并做参数校验 | |
| 60 | 57 | @PutMapping("/read") |
| 61 | 58 | @Operation(summary = "标记私聊消息已读") |
| 62 | - public CommonResult<Boolean> readMessages(@Valid @RequestBody ImPrivateMessageReadReqVO reqVO) { | |
| 63 | - imPrivateMessageService.readMessages(getLoginUserId(), reqVO.getFriendId()); | |
| 59 | + @Parameter(name = "friendId", description = "好友用户编号", required = true, example = "2") | |
| 60 | + public CommonResult<Boolean> readMessages(@RequestParam("friendId") Long friendId) { | |
| 61 | + imPrivateMessageService.readMessages(getLoginUserId(), friendId); | |
| 64 | 62 | return success(true); |
| 65 | 63 | } |
| 66 | 64 | |
| 67 | - // DONE @AI:不使用 path variable,改为 query param | |
| 68 | 65 | @DeleteMapping("/recall") |
| 69 | 66 | @Operation(summary = "撤回私聊消息") |
| 70 | 67 | @Parameter(name = "id", description = "消息编号", required = true, example = "1") |
| ... | ... | @@ -73,21 +70,4 @@ public class ImPrivateMessageController { |
| 73 | 70 | return success(true); |
| 74 | 71 | } |
| 75 | 72 | |
| 76 | - // DONE @AI:beanutils。结论:因 id/senderId/receiverId 需 Long→String 手动转换,不适合用 BeanUtils | |
| 77 | - /** | |
| 78 | - * DO 转换为 RespVO(Long id 统一转 String) | |
| 79 | - */ | |
| 80 | - private ImPrivateMessageRespVO toRespVO(ImPrivateMessageDO message) { | |
| 81 | - ImPrivateMessageRespVO vo = new ImPrivateMessageRespVO(); | |
| 82 | - vo.setId(message.getId().toString()); | |
| 83 | - vo.setClientMessageId(message.getClientMessageId()); | |
| 84 | - vo.setSenderId(message.getSenderId().toString()); | |
| 85 | - vo.setReceiverId(message.getReceiverId().toString()); | |
| 86 | - vo.setType(message.getType()); | |
| 87 | - vo.setContent(message.getContent()); | |
| 88 | - vo.setStatus(message.getStatus()); | |
| 89 | - vo.setSendTime(message.getSendTime()); | |
| 90 | - return vo; | |
| 91 | - } | |
| 92 | - | |
| 93 | 73 | } | ... | ... |
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/ImMessagePullRespVO.java
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/privates/ImPrivateMessageReadReqVO.java deleted
| 1 | -package cn.iocoder.yudao.module.im.controller.admin.message.vo.privates; | |
| 2 | - | |
| 3 | -import io.swagger.v3.oas.annotations.media.Schema; | |
| 4 | -import jakarta.validation.constraints.NotNull; | |
| 5 | -import lombok.Data; | |
| 6 | - | |
| 7 | -/** | |
| 8 | - * 私聊已读 Request VO | |
| 9 | - */ | |
| 10 | -@Schema(description = "管理后台 - 私聊已读 Request VO") | |
| 11 | -@Data | |
| 12 | -public class ImPrivateMessageReadReqVO { | |
| 13 | - | |
| 14 | - @Schema(description = "好友用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | |
| 15 | - @NotNull(message = "好友用户编号不能为空") | |
| 16 | - private Long friendId; | |
| 17 | - | |
| 18 | -} |
yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/privates/ImPrivateMessageRespVO.java
| ... | ... | @@ -19,10 +19,10 @@ public class ImPrivateMessageRespVO { |
| 19 | 19 | private String clientMessageId; |
| 20 | 20 | |
| 21 | 21 | @Schema(description = "发送人编号", example = "1") |
| 22 | - private String senderId; | |
| 22 | + private Long senderId; | |
| 23 | 23 | |
| 24 | 24 | @Schema(description = "接收人编号", example = "2") |
| 25 | - private String receiverId; | |
| 25 | + private Long receiverId; | |
| 26 | 26 | |
| 27 | 27 | @Schema(description = "消息类型", example = "0") |
| 28 | 28 | private Integer type; | ... | ... |