diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImGroupMessageController.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImGroupMessageController.java index 5c586f6..d36728e 100644 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImGroupMessageController.java +++ b/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 { List messages = imGroupMessageService.pullMessages(getLoginUserId(), minId, size); ImMessagePullRespVO resp = new ImMessagePullRespVO<>(); resp.setList(messages.stream().map(this::toRespVO).collect(Collectors.toList())); - resp.setNextMinId(messages.isEmpty() ? minId.toString() - : messages.get(messages.size() - 1).getId().toString()); + resp.setNextMinId(messages.isEmpty() ? minId + : messages.get(messages.size() - 1).getId()); return success(resp); } diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImPrivateMessageController.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImPrivateMessageController.java index 982c4fc..b5a5e90 100644 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImPrivateMessageController.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImPrivateMessageController.java @@ -1,8 +1,8 @@ package cn.iocoder.yudao.module.im.controller.admin.message; import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.im.controller.admin.message.vo.*; -import cn.iocoder.yudao.module.im.controller.admin.message.vo.privates.ImPrivateMessageReadReqVO; import cn.iocoder.yudao.module.im.controller.admin.message.vo.privates.ImPrivateMessageRespVO; import cn.iocoder.yudao.module.im.controller.admin.message.vo.privates.ImPrivateMessageSendReqVO; import cn.iocoder.yudao.module.im.dal.dataobject.message.ImPrivateMessageDO; @@ -16,7 +16,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @@ -37,10 +36,9 @@ public class ImPrivateMessageController { @Operation(summary = "发送私聊消息") public CommonResult sendMessage(@Valid @RequestBody ImPrivateMessageSendReqVO reqVO) { ImPrivateMessageDO message = imPrivateMessageService.sendMessage(getLoginUserId(), reqVO); - return success(toRespVO(message)); + return success(BeanUtils.toBean(message, ImPrivateMessageRespVO.class)); } - // DONE @AI:需要在评估下,是否需要 nextMinId。结论:需要,前端用 nextMinId 做增量拉取游标 @GetMapping("/pull") @Operation(summary = "拉取私聊消息(增量)") @Parameter(name = "minId", description = "最小消息 id", required = true, example = "0") @@ -50,21 +48,20 @@ public class ImPrivateMessageController { @RequestParam("size") Integer size) { List messages = imPrivateMessageService.pullMessages(getLoginUserId(), minId, size); ImMessagePullRespVO resp = new ImMessagePullRespVO<>(); - resp.setList(messages.stream().map(this::toRespVO).collect(Collectors.toList())); - resp.setNextMinId(messages.isEmpty() ? minId.toString() - : messages.get(messages.size() - 1).getId().toString()); + resp.setList(BeanUtils.toBean(messages, ImPrivateMessageRespVO.class)); + resp.setNextMinId(messages.isEmpty() ? minId + : messages.get(messages.size() - 1).getId()); return success(resp); } - // DONE @AI:它是不是不用 VO。结论:需要用 ReqVO,承载 friendId 字段并做参数校验 @PutMapping("/read") @Operation(summary = "标记私聊消息已读") - public CommonResult readMessages(@Valid @RequestBody ImPrivateMessageReadReqVO reqVO) { - imPrivateMessageService.readMessages(getLoginUserId(), reqVO.getFriendId()); + @Parameter(name = "friendId", description = "好友用户编号", required = true, example = "2") + public CommonResult readMessages(@RequestParam("friendId") Long friendId) { + imPrivateMessageService.readMessages(getLoginUserId(), friendId); return success(true); } - // DONE @AI:不使用 path variable,改为 query param @DeleteMapping("/recall") @Operation(summary = "撤回私聊消息") @Parameter(name = "id", description = "消息编号", required = true, example = "1") @@ -73,21 +70,4 @@ public class ImPrivateMessageController { return success(true); } - // DONE @AI:beanutils。结论:因 id/senderId/receiverId 需 Long→String 手动转换,不适合用 BeanUtils - /** - * DO 转换为 RespVO(Long id 统一转 String) - */ - private ImPrivateMessageRespVO toRespVO(ImPrivateMessageDO message) { - ImPrivateMessageRespVO vo = new ImPrivateMessageRespVO(); - vo.setId(message.getId().toString()); - vo.setClientMessageId(message.getClientMessageId()); - vo.setSenderId(message.getSenderId().toString()); - vo.setReceiverId(message.getReceiverId().toString()); - vo.setType(message.getType()); - vo.setContent(message.getContent()); - vo.setStatus(message.getStatus()); - vo.setSendTime(message.getSendTime()); - return vo; - } - } diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/ImMessagePullRespVO.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/ImMessagePullRespVO.java index 0550aa4..ec03f56 100644 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/ImMessagePullRespVO.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/ImMessagePullRespVO.java @@ -16,6 +16,6 @@ public class ImMessagePullRespVO { private List list; @Schema(description = "下次拉取的最小 id", example = "100") - private String nextMinId; + private Long nextMinId; } diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/privates/ImPrivateMessageReadReqVO.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/privates/ImPrivateMessageReadReqVO.java deleted file mode 100644 index 5a68e87..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/privates/ImPrivateMessageReadReqVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.im.controller.admin.message.vo.privates; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotNull; -import lombok.Data; - -/** - * 私聊已读 Request VO - */ -@Schema(description = "管理后台 - 私聊已读 Request VO") -@Data -public class ImPrivateMessageReadReqVO { - - @Schema(description = "好友用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - @NotNull(message = "好友用户编号不能为空") - private Long friendId; - -} diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/privates/ImPrivateMessageRespVO.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/privates/ImPrivateMessageRespVO.java index 13bc23a..3484b12 100644 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/vo/privates/ImPrivateMessageRespVO.java +++ b/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 { private String clientMessageId; @Schema(description = "发送人编号", example = "1") - private String senderId; + private Long senderId; @Schema(description = "接收人编号", example = "2") - private String receiverId; + private Long receiverId; @Schema(description = "消息类型", example = "0") private Integer type;