From 04123e5987b9f873301e48c1a9e649a3fb445b2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E6=B5=A9=E6=B5=A9?= <1036606149@qq.com> Date: Mon, 18 Mar 2024 20:59:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E4=BC=9A=E8=AF=9D=E5=88=97=E8=A1=A8=EF=BC=8C=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImConversationController.java | 73 +++++------------ .../admin/message/ImMessageController.java | 79 +++++++------------ .../im/dal/mysql/message/ImMessageMapper.java | 24 ++++++ .../conversation/ImConversationService.java | 23 +++++- .../ImConversationServiceImpl.java | 48 +++++++---- .../im/service/message/ImMessageService.java | 24 +++++- .../service/message/ImMessageServiceImpl.java | 20 ++++- 7 files changed, 161 insertions(+), 130 deletions(-) diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/conversation/ImConversationController.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/conversation/ImConversationController.java index c704cbcce2..7564ac23f2 100755 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/conversation/ImConversationController.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/conversation/ImConversationController.java @@ -1,31 +1,22 @@ package cn.iocoder.yudao.module.im.controller.admin.conversation; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationPageReqVO; import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationRespVO; import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationSaveReqVO; import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO; import cn.iocoder.yudao.module.im.service.conversation.ImConversationService; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.io.IOException; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 会话") @RestController @@ -36,58 +27,30 @@ public class ImConversationController { @Resource private ImConversationService imConversationService; - @PostMapping("/create") - @Operation(summary = "创建会话") - @PreAuthorize("@ss.hasPermission('im:conversation:create')") - public CommonResult createConversation(@Valid @RequestBody ImConversationSaveReqVO createReqVO) { - return success(imConversationService.createConversation(createReqVO)); + @GetMapping("/get-conversation") + @Operation(summary = "获得用户的会话列表") + @PreAuthorize("hasAuthority('im:conversation:query')") + public CommonResult> getConversationList() { + List conversationList = imConversationService.getConversationList(); + return success(BeanUtils.toBean(conversationList, ImConversationRespVO.class)); } - @PutMapping("/update") - @Operation(summary = "更新会话") - @PreAuthorize("@ss.hasPermission('im:conversation:update')") - public CommonResult updateConversation(@Valid @RequestBody ImConversationSaveReqVO updateReqVO) { - imConversationService.updateConversation(updateReqVO); + + @PostMapping("/update-top") + @Operation(summary = "置顶会话") + @PreAuthorize("hasAuthority('im:conversation:update')") + public CommonResult updateTop(@Valid @RequestBody ImConversationSaveReqVO updateReqVO) { + imConversationService.updateTop(updateReqVO); return success(true); } - @DeleteMapping("/delete") - @Operation(summary = "删除会话") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('im:conversation:delete')") - public CommonResult deleteConversation(@RequestParam("id") Long id) { - imConversationService.deleteConversation(id); + + @PostMapping("/update-last-read-time") + @Operation(summary = "更新最后已读时间") + @PreAuthorize("hasAuthority('im:conversation:update')") + public CommonResult updateLastReadTime(@Valid @RequestBody ImConversationSaveReqVO updateReqVO) { + imConversationService.updateLastReadTime(updateReqVO); return success(true); } - @GetMapping("/get") - @Operation(summary = "获得会话") - @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('im:conversation:query')") - public CommonResult getConversation(@RequestParam("id") Long id) { - ImConversationDO conversation = imConversationService.getConversation(id); - return success(BeanUtils.toBean(conversation, ImConversationRespVO.class)); - } - - @GetMapping("/page") - @Operation(summary = "获得会话分页") - @PreAuthorize("@ss.hasPermission('im:conversation:query')") - public CommonResult> getConversationPage(@Valid ImConversationPageReqVO pageReqVO) { - PageResult pageResult = imConversationService.getConversationPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, ImConversationRespVO.class)); - } - - @GetMapping("/export-excel") - @Operation(summary = "导出会话 Excel") - @PreAuthorize("@ss.hasPermission('im:conversation:export')") - @OperateLog(type = EXPORT) - public void exportConversationExcel(@Valid ImConversationPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = imConversationService.getConversationPage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "会话.xls", "数据", ImConversationRespVO.class, - BeanUtils.toBean(list, ImConversationRespVO.class)); - } - } \ No newline at end of file diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImMessageController.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImMessageController.java index eabe62b93a..b23c238a4c 100755 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImMessageController.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImMessageController.java @@ -1,31 +1,28 @@ package cn.iocoder.yudao.module.im.controller.admin.message; import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessagePageReqVO; import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageRespVO; -import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSaveReqVO; import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; import cn.iocoder.yudao.module.im.service.message.ImMessageService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; -import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; -import java.io.IOException; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @Tag(name = "管理后台 - 消息") @RestController @@ -36,58 +33,36 @@ public class ImMessageController { @Resource private ImMessageService imMessageService; - @PostMapping("/create") - @Operation(summary = "创建消息") - @PreAuthorize("@ss.hasPermission('im:message:create')") - public CommonResult createMessage(@Valid @RequestBody ImMessageSaveReqVO createReqVO) { - return success(imMessageService.createMessage(createReqVO)); - } - - @PutMapping("/update") - @Operation(summary = "更新消息") - @PreAuthorize("@ss.hasPermission('im:message:update')") - public CommonResult updateMessage(@Valid @RequestBody ImMessageSaveReqVO updateReqVO) { - imMessageService.updateMessage(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @Operation(summary = "删除消息") - @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('im:message:delete')") - public CommonResult deleteMessage(@RequestParam("id") Long id) { - imMessageService.deleteMessage(id); - return success(true); - } - - @GetMapping("/get") - @Operation(summary = "获得消息") - @Parameter(name = "id", description = "编号", required = true, example = "1024") + @GetMapping("/get-message-by-sequence") + @Operation(summary = "拉取消息-增量拉取大于 seq 的消息") + @Parameter(name = "sequence", description = "序号", required = true, example = "1") + @Parameter(name = "size", description = "条数", required = true, example = "10") @PreAuthorize("@ss.hasPermission('im:message:query')") - public CommonResult getMessage(@RequestParam("id") Long id) { - ImMessageDO message = imMessageService.getMessage(id); + public CommonResult> loadMessage( + @RequestParam("sequence") Long sequence, + @RequestParam("size") Integer size) { + List message = imMessageService.loadMessage(getLoginUserId(), sequence, size); return success(BeanUtils.toBean(message, ImMessageRespVO.class)); } + + @GetMapping("/get-all-message") + @Operation(summary = "拉取全部消息") + @Parameter(name = "size", description = "条数", required = true, example = "10") + @PreAuthorize("@ss.hasPermission('im:message:query')") + public CommonResult> loadAllMessage(@RequestParam("size") Integer size) { + List message = imMessageService.loadAllMessage(getLoginUserId(), size); + return success(BeanUtils.toBean(message, ImMessageRespVO.class)); + } + + @GetMapping("/page") - @Operation(summary = "获得消息分页") + @Operation(summary = "查询聊天记录-分页") @PreAuthorize("@ss.hasPermission('im:message:query')") public CommonResult> getMessagePage(@Valid ImMessagePageReqVO pageReqVO) { - PageResult pageResult = imMessageService.getMessagePage(pageReqVO); - return success(BeanUtils.toBean(pageResult, ImMessageRespVO.class)); + PageResult messagePage = imMessageService.getMessagePage(pageReqVO); + return success(BeanUtils.toBean(messagePage, ImMessageRespVO.class)); } - @GetMapping("/export-excel") - @Operation(summary = "导出消息 Excel") - @PreAuthorize("@ss.hasPermission('im:message:export')") - @OperateLog(type = EXPORT) - public void exportMessageExcel(@Valid ImMessagePageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = imMessageService.getMessagePage(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "消息.xls", "数据", ImMessageRespVO.class, - BeanUtils.toBean(list, ImMessageRespVO.class)); - } } \ No newline at end of file diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImMessageMapper.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImMessageMapper.java index 6fee3642d3..712b12d12d 100755 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImMessageMapper.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImMessageMapper.java @@ -4,9 +4,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessagePageReqVO; +import cn.iocoder.yudao.module.im.dal.dataobject.inbox.ImInboxDO; import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; +import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.ibatis.annotations.Mapper; +import java.util.List; + /** * 消息 Mapper * @@ -32,4 +36,24 @@ public interface ImMessageMapper extends BaseMapperX { .orderByDesc(ImMessageDO::getId)); } + default List getGreaterThanSequenceMessage(Long userId, Long sequence, Integer size) { + //查询 inbox 表中,大于 sequence 的消息,关联 message 表,按照 inbox 表 sequence 升序 + return selectJoinList(ImMessageDO.class, new MPJLambdaWrapper() + .selectAll(ImMessageDO.class) + .innerJoin(ImInboxDO.class, ImInboxDO::getMessageId, ImMessageDO::getId) + .eq(ImInboxDO::getUserId, userId) + .gt(ImInboxDO::getSequence, sequence) + .orderByAsc(ImInboxDO::getSequence) + .last("limit 0," + size)); + } + + default List getAllMessage(Long userId, Integer size) { + //查询 inbox 表中,100条消息,关联 message 表,按照 inbox 表 sequence 降序 + return selectJoinList(ImMessageDO.class, new MPJLambdaWrapper() + .selectAll(ImMessageDO.class) + .innerJoin(ImInboxDO.class, ImInboxDO::getMessageId, ImMessageDO::getId) + .eq(ImInboxDO::getUserId, userId) + .orderByDesc(ImInboxDO::getSequence) + .last("limit 0," + size)); + } } \ No newline at end of file diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationService.java index 676fe60821..a95ca6f10a 100755 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationService.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationService.java @@ -6,6 +6,8 @@ import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversatio import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO; import jakarta.validation.Valid; +import java.util.List; + /** * 会话 Service 接口 * @@ -53,10 +55,23 @@ public interface ImConversationService { /** - * 保存私聊会话 + * 获得用户的会话列表 * - * @param fromUserId 发送者 - * @param receiverId 接收者 + * @return 会话列表 */ - void savePrivateConversation(Long fromUserId, Long receiverId); + List getConversationList(); + + /** + * 置顶会话 + * + * @param updateReqVO 更新信息 + */ + void updateTop(ImConversationSaveReqVO updateReqVO); + + /** + * 更新最后已读时间 + * + * @param updateReqVO 更新信息 + */ + void updateLastReadTime(ImConversationSaveReqVO updateReqVO); } \ No newline at end of file diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationServiceImpl.java index 5c35ac29a9..f1d4d7250d 100755 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationServiceImpl.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationServiceImpl.java @@ -1,16 +1,19 @@ package cn.iocoder.yudao.module.im.service.conversation; +import cn.hutool.core.date.DateUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationPageReqVO; import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationSaveReqVO; 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 jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.Date; +import java.util.List; + import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.CONVERSATION_NOT_EXISTS; @@ -69,25 +72,36 @@ public class ImConversationServiceImpl implements ImConversationService { } @Override - public void savePrivateConversation(Long fromUserId, Long receiverId) { - // 创建并保存会话 - createAndSaveConversation(fromUserId, receiverId); - createAndSaveConversation(receiverId, fromUserId); + public List getConversationList() { + return imConversationMapper.selectList(); } - private void createAndSaveConversation(Long userId, Long targetId) { - // 创建会话 - ImConversationDO conversation = new ImConversationDO(); - conversation.setUserId(userId); - conversation.setConversationType(ImConversationTypeEnum.PRIVATE.getType()); - conversation.setTargetId(targetId); - conversation.setNo("s_" + userId + "_" + targetId); - conversation.setPinned(false); + @Override + public void updateTop(ImConversationSaveReqVO updateReqVO) { + createOrUpdateConversation(updateReqVO); + } - // 根据 no 查询是否存在,不存在则新增 - ImConversationDO imConversationDO = imConversationMapper.selectByNo(conversation.getNo()); - if (imConversationDO == null) { - imConversationMapper.insert(conversation); + @Override + public void updateLastReadTime(ImConversationSaveReqVO updateReqVO) { + createOrUpdateConversation(updateReqVO); + } + + private void createOrUpdateConversation(ImConversationSaveReqVO updateReqVO) { + // 操作会话(已读、置顶)时,才会延迟创建,要先判断是否存在,根据 no 查询是否存在,不存在则新增 + ImConversationDO conversation = imConversationMapper.selectByNo(updateReqVO.getNo()); + if (conversation == null) { + ImConversationDO conversationDO = new ImConversationDO(); + conversationDO.setNo(updateReqVO.getNo()); + conversationDO.setUserId(updateReqVO.getUserId()); + conversationDO.setTargetId(updateReqVO.getTargetId()); + conversationDO.setConversationType(updateReqVO.getConversationType()); + conversationDO.setPinned(updateReqVO.getPinned()); + conversationDO.setLastReadTime(DateUtil.toLocalDateTime(new Date())); + imConversationMapper.insert(conversationDO); + } else { + // 更新 + ImConversationDO updateObj = BeanUtils.toBean(updateReqVO, ImConversationDO.class); + imConversationMapper.updateById(updateObj); } } diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java index 3b211d7874..1e9781ac37 100755 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java @@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; import cn.iocoder.yudao.module.im.websocket.message.ImSendMessage; import jakarta.validation.Valid; +import java.util.List; + /** * 消息 Service 接口 * @@ -72,9 +74,29 @@ public interface ImMessageService { /** * 保存群聊消息 - * @param message 消息 + * + * @param message 消息 * @param fromUserId 发送者用户ID * @return id */ ImMessageDO saveGroupMessage(ImSendMessage message, Long fromUserId); + + /** + * 拉取消息-大于 seq 的消息 + * + * @param userId 用户id + * @param sequence 序列号 + * @param size 数量 + * @return 消息列表 + */ + List loadMessage(Long userId, Long sequence, Integer size); + + /** + * 拉取全部消息 + * + * @param userId 登录用户编号 + * @param size 数量 + * @return 消息列表 + */ + List loadAllMessage(Long userId, Integer size); } \ No newline at end of file diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java index c3a33ec089..b7af4a704e 100755 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessagePageReqVO import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSaveReqVO; import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; import cn.iocoder.yudao.module.im.dal.mysql.message.ImMessageMapper; +import cn.iocoder.yudao.module.im.enums.conversation.ImConversationTypeEnum; import cn.iocoder.yudao.module.im.enums.message.ImMessageStatusEnum; import cn.iocoder.yudao.module.im.websocket.message.ImSendMessage; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; @@ -15,6 +16,8 @@ import org.dromara.hutool.core.date.TimeUtil; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.List; + import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.MESSAGE_NOT_EXISTS; @@ -91,7 +94,12 @@ public class ImMessageServiceImpl implements ImMessageService { imMessageDO.setSenderAvatar(user.getAvatar()); imMessageDO.setConversationType(message.getConversationType()); imMessageDO.setContentType(message.getContentType()); - imMessageDO.setConversationNo(fromUserId + "_" + message.getReceiverId()); + //单聊:s_{userId}_{targetId} 群聊:群聊:g_{groupId} + if (message.getConversationType().equals(ImConversationTypeEnum.PRIVATE.getType())) { + imMessageDO.setConversationNo("s_" + fromUserId + "_" + message.getReceiverId()); + } else if (message.getConversationType().equals(ImConversationTypeEnum.GROUP.getType())) { + imMessageDO.setConversationNo("g_" + message.getReceiverId()); + } imMessageDO.setContent(message.getContent()); //消息来源 100-用户发送;200-系统发送(一般是通知);不能为空 imMessageDO.setSendFrom(100); @@ -117,4 +125,14 @@ public class ImMessageServiceImpl implements ImMessageService { return saveImMessageDO(message, fromUserId); } + @Override + public List loadMessage(Long userId, Long sequence, Integer size) { + return imMessageMapper.getGreaterThanSequenceMessage(userId, sequence, size); + } + + @Override + public List loadAllMessage(Long userId, Integer size) { + return imMessageMapper.getAllMessage(userId, size); + } + } \ No newline at end of file