From bada82f8cc5b28492d20a7e76d04e7b73d10f6f6 Mon Sep 17 00:00:00 2001 From: 安浩浩 <1036606149@qq.com> Date: Sun, 2 Jun 2024 17:01:28 +0800 Subject: [PATCH] 修改:代码优化 --- script/idea/http-client.env.json | 2 +- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/conversation/ImConversationController.java | 10 +++++----- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/ImGroupController.java | 23 +++++++---------------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/groupmember/ImGroupMemberController.java | 16 ++++++++-------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImMessageController.http | 18 ++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImMessageController.java | 10 +++++----- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/conversation/ConversationMapper.java | 18 ------------------ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/conversation/ImConversationMapper.java | 18 ++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/group/GroupMapper.java | 31 ------------------------------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/group/ImGroupMapper.java | 31 +++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/groupmember/GroupMemberMapper.java | 35 ----------------------------------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/groupmember/ImGroupMemberMapper.java | 35 +++++++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/inbox/ImInboxMapper.java | 26 ++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/inbox/InboxMapper.java | 27 --------------------------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImMessageMapper.java | 25 +++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/MessageMapper.java | 25 ------------------------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ConversationService.java | 40 ---------------------------------------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ConversationServiceImpl.java | 74 -------------------------------------------------------------------------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationService.java | 40 ++++++++++++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationServiceImpl.java | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/GroupService.java | 54 ------------------------------------------------------ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/GroupServiceImpl.java | 72 ------------------------------------------------------------------------ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupService.java | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/GroupMemberService.java | 63 --------------------------------------------------------------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/GroupMemberServiceImpl.java | 78 ------------------------------------------------------------------------------ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/ImGroupMemberService.java | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/ImGroupMemberServiceImpl.java | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxService.java | 32 ++++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxServiceImpl.java | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/InboxService.java | 32 -------------------------------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/InboxServiceImpl.java | 93 --------------------------------------------------------------------------------------------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java | 44 ++++++++++++++++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/MessageService.java | 44 -------------------------------------------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/MessageServiceImpl.java | 106 ---------------------------------------------------------------------------------------------------------- 36 files changed, 835 insertions(+), 827 deletions(-) create mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImMessageController.http delete mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/conversation/ConversationMapper.java create mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/conversation/ImConversationMapper.java delete mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/group/GroupMapper.java create mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/group/ImGroupMapper.java delete mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/groupmember/GroupMemberMapper.java create mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/groupmember/ImGroupMemberMapper.java create mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/inbox/ImInboxMapper.java delete mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/inbox/InboxMapper.java create mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImMessageMapper.java delete mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/MessageMapper.java delete mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ConversationService.java delete mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ConversationServiceImpl.java create mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationService.java create mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationServiceImpl.java delete mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/GroupService.java delete mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/GroupServiceImpl.java create mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupService.java create mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java delete mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/GroupMemberService.java delete mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/GroupMemberServiceImpl.java create mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/ImGroupMemberService.java create mode 100644 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/ImGroupMemberServiceImpl.java create mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxService.java create mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxServiceImpl.java delete mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/InboxService.java delete mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/InboxServiceImpl.java create mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java create mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java delete mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/MessageService.java delete mode 100755 yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/MessageServiceImpl.java diff --git a/script/idea/http-client.env.json b/script/idea/http-client.env.json index 4a4cb52..307ca11 100644 --- a/script/idea/http-client.env.json +++ b/script/idea/http-client.env.json @@ -1,7 +1,7 @@ { "local": { "baseUrl": "http://127.0.0.1:48080/admin-api", - "token": "test1", + "token": "test100", "adminTenentId": "1", "appApi": "http://127.0.0.1:48080/app-api", 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 ea83761..112866e 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 @@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversatio 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.dal.dataobject.conversation.ImConversationDO; -import cn.iocoder.yudao.module.im.service.conversation.ConversationService; +import cn.iocoder.yudao.module.im.service.conversation.ImConversationService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; @@ -26,26 +26,26 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti public class ImConversationController { @Resource - private ConversationService conversationService; + private ImConversationService imConversationService; @GetMapping("/list") @Operation(summary = "获得用户的会话列表") public CommonResult> getConversationList() { - List conversationList = conversationService.getConversationList(); + List conversationList = imConversationService.getConversationList(); return success(BeanUtils.toBean(conversationList, ImConversationRespVO.class)); } @PostMapping("/update-pinned") @Operation(summary = "置顶会话") public CommonResult updatePinned(@Valid @RequestBody ImConversationUpdatePinnedReqVO updateReqVO) { - conversationService.updatePinned(getLoginUserId(),updateReqVO); + imConversationService.updatePinned(getLoginUserId(),updateReqVO); return success(true); } @PostMapping("/update-last-read-time") @Operation(summary = "更新最后已读时间") public CommonResult updateLastReadTime(@Valid @RequestBody ImConversationUpdateLastReadTimeReqVO updateReqVO) { - conversationService.updateLastReadTime(getLoginUserId(),updateReqVO); + imConversationService.updateLastReadTime(getLoginUserId(),updateReqVO); return success(true); } diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/ImGroupController.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/ImGroupController.java index 807093a..166812c 100644 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/ImGroupController.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/ImGroupController.java @@ -9,24 +9,15 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.*; -import jakarta.servlet.http.*; -import java.util.*; -import java.io.IOException; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; - -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; - import cn.iocoder.yudao.module.im.controller.admin.group.vo.*; import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO; -import cn.iocoder.yudao.module.im.service.group.GroupService; +import cn.iocoder.yudao.module.im.service.group.ImGroupService; // TODO @芋艿:得看看 create、update、delete、get、page 这几个接口,要保留哪些 @Tag(name = "管理后台 - 群") @@ -36,20 +27,20 @@ import cn.iocoder.yudao.module.im.service.group.GroupService; public class ImGroupController { @Resource - private GroupService groupService; + private ImGroupService imGroupService; @PostMapping("/create") @Operation(summary = "创建群") @PreAuthorize("@ss.hasPermission('im:group:create')") public CommonResult createGroup(@Valid @RequestBody ImGroupSaveReqVO createReqVO) { - return success(groupService.createGroup(createReqVO)); + return success(imGroupService.createGroup(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新群") @PreAuthorize("@ss.hasPermission('im:group:update')") public CommonResult updateGroup(@Valid @RequestBody ImGroupSaveReqVO updateReqVO) { - groupService.updateGroup(updateReqVO); + imGroupService.updateGroup(updateReqVO); return success(true); } @@ -58,7 +49,7 @@ public class ImGroupController { @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('im:group:delete')") public CommonResult deleteGroup(@RequestParam("id") Long id) { - groupService.deleteGroup(id); + imGroupService.deleteGroup(id); return success(true); } @@ -67,7 +58,7 @@ public class ImGroupController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('im:group:query')") public CommonResult getGroup(@RequestParam("id") Long id) { - ImGroupDO group = groupService.getGroup(id); + ImGroupDO group = imGroupService.getGroup(id); return success(BeanUtils.toBean(group, ImGroupRespVO.class)); } @@ -75,7 +66,7 @@ public class ImGroupController { @Operation(summary = "获得群分页") @PreAuthorize("@ss.hasPermission('im:group:query')") public CommonResult> getGroupPage(@Valid ImGroupPageReqVO pageReqVO) { - PageResult pageResult = groupService.getGroupPage(pageReqVO); + PageResult pageResult = imGroupService.getGroupPage(pageReqVO); return success(BeanUtils.toBean(pageResult, ImGroupRespVO.class)); } diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/groupmember/ImGroupMemberController.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/groupmember/ImGroupMemberController.java index 319031e..e260de0 100644 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/groupmember/ImGroupMemberController.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/groupmember/ImGroupMemberController.java @@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.im.controller.admin.groupmember.vo.ImGroupMemberP import cn.iocoder.yudao.module.im.controller.admin.groupmember.vo.ImGroupMemberRespVO; import cn.iocoder.yudao.module.im.controller.admin.groupmember.vo.ImGroupMemberSaveReqVO; import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; -import cn.iocoder.yudao.module.im.service.groupmember.GroupMemberService; +import cn.iocoder.yudao.module.im.service.groupmember.ImGroupMemberService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -35,20 +35,20 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E public class ImGroupMemberController { @Resource - private GroupMemberService groupMemberService; + private ImGroupMemberService imGroupMemberService; @PostMapping("/create") @Operation(summary = "创建群成员") @PreAuthorize("@ss.hasPermission('im:group-member:create')") public CommonResult createGroupMember(@Valid @RequestBody ImGroupMemberSaveReqVO createReqVO) { - return success(groupMemberService.createGroupMember(createReqVO)); + return success(imGroupMemberService.createGroupMember(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新群成员") @PreAuthorize("@ss.hasPermission('im:group-member:update')") public CommonResult updateGroupMember(@Valid @RequestBody ImGroupMemberSaveReqVO updateReqVO) { - groupMemberService.updateGroupMember(updateReqVO); + imGroupMemberService.updateGroupMember(updateReqVO); return success(true); } @@ -57,7 +57,7 @@ public class ImGroupMemberController { @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('im:group-member:delete')") public CommonResult deleteGroupMember(@RequestParam("id") Long id) { - groupMemberService.deleteGroupMember(id); + imGroupMemberService.deleteGroupMember(id); return success(true); } @@ -66,7 +66,7 @@ public class ImGroupMemberController { @Parameter(name = "id", description = "编号", required = true, example = "1024") @PreAuthorize("@ss.hasPermission('im:group-member:query')") public CommonResult getGroupMember(@RequestParam("id") Long id) { - ImGroupMemberDO groupMember = groupMemberService.getGroupMember(id); + ImGroupMemberDO groupMember = imGroupMemberService.getGroupMember(id); return success(BeanUtils.toBean(groupMember, ImGroupMemberRespVO.class)); } @@ -74,7 +74,7 @@ public class ImGroupMemberController { @Operation(summary = "获得群成员分页") @PreAuthorize("@ss.hasPermission('im:group-member:query')") public CommonResult> getGroupMemberPage(@Valid ImGroupMemberPageReqVO pageReqVO) { - PageResult pageResult = groupMemberService.getGroupMemberPage(pageReqVO); + PageResult pageResult = imGroupMemberService.getGroupMemberPage(pageReqVO); return success(BeanUtils.toBean(pageResult, ImGroupMemberRespVO.class)); } @@ -85,7 +85,7 @@ public class ImGroupMemberController { public void exportGroupMemberExcel(@Valid ImGroupMemberPageReqVO pageReqVO, HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List list = groupMemberService.getGroupMemberPage(pageReqVO).getList(); + List list = imGroupMemberService.getGroupMemberPage(pageReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "群成员.xls", "数据", ImGroupMemberRespVO.class, BeanUtils.toBean(list, ImGroupMemberRespVO.class)); diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImMessageController.http b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImMessageController.http new file mode 100644 index 0000000..83d1773 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/message/ImMessageController.http @@ -0,0 +1,18 @@ +### 请求 /send 接口 => 成功 +POST {{baseUrl}}/im/message/send +Authorization: Bearer {{token}} +Content-Type: application/json +tenant-id: {{adminTenentId}} + +{ + "clientMessageId": "123", + "receiverId": 1, + "conversationType": 1, + "contentType": 101, + "content": "你好1" +} + +### 请求 /pull 接口 => 成功 +GET {{baseUrl}}/im/message/pull?sequence=0&size=2 +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} \ 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 b246df0..96451bf 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 @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageRespVO; import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSendReqVO; import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSendRespVO; import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; -import cn.iocoder.yudao.module.im.service.message.MessageService; +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; @@ -28,12 +28,12 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti public class ImMessageController { @Resource - private MessageService messageService; + private ImMessageService imMessageService; @PostMapping("/send") @Operation(summary = "发送消息") public CommonResult sendMessage(@Valid @RequestBody ImMessageSendReqVO imMessageSendReqVO) { - ImMessageDO message = messageService.sendMessage(getLoginUserId(), imMessageSendReqVO); + ImMessageDO message = imMessageService.sendMessage(getLoginUserId(), imMessageSendReqVO); return success(BeanUtils.toBean(message, ImMessageSendRespVO.class)); } @@ -43,14 +43,14 @@ public class ImMessageController { @Parameter(name = "size", description = "条数", required = true, example = "10") public CommonResult> pullMessageList(@RequestParam("sequence") Long sequence, @RequestParam("size") Integer size) { - List messages = messageService.pullMessageList(getLoginUserId(), sequence, size); + List messages = imMessageService.pullMessageList(getLoginUserId(), sequence, size); return success(BeanUtils.toBean(messages, ImMessageRespVO.class)); } @GetMapping("/list") @Operation(summary = "消息列表-根据接收人和发送时间进行分页查询") public CommonResult> getMessageList(@Valid ImMessageListReqVO listReqVO) { - List messagePage = messageService.getMessageList(getLoginUserId(), listReqVO); + List messagePage = imMessageService.getMessageList(getLoginUserId(), listReqVO); return success(BeanUtils.toBean(messagePage, ImMessageRespVO.class)); } diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/conversation/ConversationMapper.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/conversation/ConversationMapper.java deleted file mode 100755 index ed6fe15..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/conversation/ConversationMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.im.dal.mysql.conversation; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO; -import org.apache.ibatis.annotations.Mapper; - -/** - * IM 会话 Mapper - * - * @author 芋道源码 - */ -@Mapper -public interface ConversationMapper extends BaseMapperX { - - default ImConversationDO selectByNo(String no){ - return selectOne(ImConversationDO::getNo, no); - } -} \ 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/conversation/ImConversationMapper.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/conversation/ImConversationMapper.java new file mode 100755 index 0000000..f19a556 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/conversation/ImConversationMapper.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.im.dal.mysql.conversation; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * IM 会话 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ImConversationMapper extends BaseMapperX { + + default ImConversationDO selectByNo(String no){ + return selectOne(ImConversationDO::getNo, no); + } +} \ 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/group/GroupMapper.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/group/GroupMapper.java deleted file mode 100644 index ed5cafb..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/group/GroupMapper.java +++ /dev/null @@ -1,31 +0,0 @@ -package cn.iocoder.yudao.module.im.dal.mysql.group; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.im.controller.admin.group.vo.*; - -// TODO @hao:这个也要有 Im 前缀 -/** - * 群 Mapper - * - * @author 芋道源码 - */ -@Mapper -public interface GroupMapper extends BaseMapperX { - - default PageResult selectPage(ImGroupPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(ImGroupDO::getGroupName, reqVO.getGroupName()) - .eqIfPresent(ImGroupDO::getOwnerId, reqVO.getOwnerId()) - .eqIfPresent(ImGroupDO::getHeadImage, reqVO.getHeadImage()) - .eqIfPresent(ImGroupDO::getHeadImageThumb, reqVO.getHeadImageThumb()) - .eqIfPresent(ImGroupDO::getNotice, reqVO.getNotice()) - .eqIfPresent(ImGroupDO::getRemark, reqVO.getRemark()) - .betweenIfPresent(ImGroupDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(ImGroupDO::getId)); - } - -} \ 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/group/ImGroupMapper.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/group/ImGroupMapper.java new file mode 100644 index 0000000..e9eb282 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/group/ImGroupMapper.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.im.dal.mysql.group; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.im.controller.admin.group.vo.*; + +// TODO @hao:这个也要有 Im 前缀 +/** + * 群 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ImGroupMapper extends BaseMapperX { + + default PageResult selectPage(ImGroupPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(ImGroupDO::getGroupName, reqVO.getGroupName()) + .eqIfPresent(ImGroupDO::getOwnerId, reqVO.getOwnerId()) + .eqIfPresent(ImGroupDO::getHeadImage, reqVO.getHeadImage()) + .eqIfPresent(ImGroupDO::getHeadImageThumb, reqVO.getHeadImageThumb()) + .eqIfPresent(ImGroupDO::getNotice, reqVO.getNotice()) + .eqIfPresent(ImGroupDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(ImGroupDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ImGroupDO::getId)); + } + +} \ 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/groupmember/GroupMemberMapper.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/groupmember/GroupMemberMapper.java deleted file mode 100644 index 1ebf494..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/groupmember/GroupMemberMapper.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.im.dal.mysql.groupmember; - -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.groupmember.vo.ImGroupMemberPageReqVO; -import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -/** - * 群成员 Mapper - * - * @author 芋道源码 - */ -@Mapper -public interface GroupMemberMapper extends BaseMapperX { - - default PageResult selectPage(ImGroupMemberPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(ImGroupMemberDO::getGroupId, reqVO.getGroupId()) - .eqIfPresent(ImGroupMemberDO::getUserId, reqVO.getUserId()) - .likeIfPresent(ImGroupMemberDO::getNickname, reqVO.getNickname()) - .eqIfPresent(ImGroupMemberDO::getAvatar, reqVO.getAvatar()) - .likeIfPresent(ImGroupMemberDO::getAliasName, reqVO.getAliasName()) - .eqIfPresent(ImGroupMemberDO::getRemark, reqVO.getRemark()) - .betweenIfPresent(ImGroupMemberDO::getCreateTime, reqVO.getCreateTime()) - .orderByDesc(ImGroupMemberDO::getId)); - } - - default List selectListByGroupId(Long groupId) { - return selectList(new LambdaQueryWrapperX().eq(ImGroupMemberDO::getGroupId, groupId)); - } -} \ 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/groupmember/ImGroupMemberMapper.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/groupmember/ImGroupMemberMapper.java new file mode 100644 index 0000000..5b4a410 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/groupmember/ImGroupMemberMapper.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.im.dal.mysql.groupmember; + +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.groupmember.vo.ImGroupMemberPageReqVO; +import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 群成员 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ImGroupMemberMapper extends BaseMapperX { + + default PageResult selectPage(ImGroupMemberPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ImGroupMemberDO::getGroupId, reqVO.getGroupId()) + .eqIfPresent(ImGroupMemberDO::getUserId, reqVO.getUserId()) + .likeIfPresent(ImGroupMemberDO::getNickname, reqVO.getNickname()) + .eqIfPresent(ImGroupMemberDO::getAvatar, reqVO.getAvatar()) + .likeIfPresent(ImGroupMemberDO::getAliasName, reqVO.getAliasName()) + .eqIfPresent(ImGroupMemberDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(ImGroupMemberDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ImGroupMemberDO::getId)); + } + + default List selectListByGroupId(Long groupId) { + return selectList(new LambdaQueryWrapperX().eq(ImGroupMemberDO::getGroupId, groupId)); + } +} \ 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/inbox/ImInboxMapper.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/inbox/ImInboxMapper.java new file mode 100755 index 0000000..0d11194 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/inbox/ImInboxMapper.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.im.dal.mysql.inbox; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.im.dal.dataobject.inbox.ImInboxDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * IM 收件箱 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ImInboxMapper extends BaseMapperX { + + default List selectListByUserIdAndSequence(Long userId, Long sequence, Integer size) { + return selectList(new LambdaQueryWrapperX() + .eq(ImInboxDO::getUserId, userId) + .gt(sequence != null, ImInboxDO::getSequence, sequence) + .orderByDesc(ImInboxDO::getSequence) + .last("LIMIT " + 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/dal/mysql/inbox/InboxMapper.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/inbox/InboxMapper.java deleted file mode 100755 index cea1e75..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/inbox/InboxMapper.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.module.im.dal.mysql.inbox; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.im.dal.dataobject.inbox.ImInboxDO; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -// TODO @hao:IM 前缀 -/** - * IM 收件箱 Mapper - * - * @author 芋道源码 - */ -@Mapper -public interface InboxMapper extends BaseMapperX { - - default List selectListByUserIdAndSequence(Long userId, Long sequence, Integer size) { - return selectList(new LambdaQueryWrapperX() - .gt(ImInboxDO::getUserId, userId) - .gt(ImInboxDO::getSequence, sequence) - .orderByAsc(ImInboxDO::getSequence) - .last("LIMIT " + 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/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 new file mode 100755 index 0000000..efd50f6 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImMessageMapper.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.im.dal.mysql.message; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +// TODO @hao:IM 前缀 +/** + * 消息 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ImMessageMapper extends BaseMapperX { + + default List selectMessageList(ImMessageDO message) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(ImMessageDO::getConversationNo, message.getConversationNo()) + .eqIfPresent(ImMessageDO::getSendTime, message.getSendTime()) + .orderByAsc(ImMessageDO::getSendTime)); + } +} \ 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/MessageMapper.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/MessageMapper.java deleted file mode 100755 index 5a84c3b..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/MessageMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.module.im.dal.mysql.message; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -// TODO @hao:IM 前缀 -/** - * 消息 Mapper - * - * @author 芋道源码 - */ -@Mapper -public interface MessageMapper extends BaseMapperX { - - default List selectMessageList(ImMessageDO message) { - return selectList(new LambdaQueryWrapperX() - .eqIfPresent(ImMessageDO::getConversationNo, message.getConversationNo()) - .eqIfPresent(ImMessageDO::getSendTime, message.getSendTime()) - .orderByAsc(ImMessageDO::getSendTime)); - } -} \ 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/ConversationService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ConversationService.java deleted file mode 100755 index 4d1a486..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ConversationService.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.iocoder.yudao.module.im.service.conversation; - -import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdateLastReadTimeReqVO; -import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdatePinnedReqVO; -import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO; - -import java.util.List; - -// TODO @hao:前缀 IM -/** - * IM 会话 Service 接口 - * - * @author 芋道源码 - */ -public interface ConversationService { - - /** - * 获得用户的会话列表 - * - * @return 会话列表 - */ - List getConversationList(); - - /** - * 置顶会话 - * - * @param loginUserId 登录用户编号 - * @param updateReqVO 更新信息 - */ - void updatePinned(Long loginUserId, ImConversationUpdatePinnedReqVO updateReqVO); - - /** - * 更新最后已读时间 - * - * @param loginUserId 登录用户编号 - * @param updateReqVO 更新信息 - */ - void updateLastReadTime(Long loginUserId, ImConversationUpdateLastReadTimeReqVO 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/ConversationServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ConversationServiceImpl.java deleted file mode 100755 index f6bc6d3..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ConversationServiceImpl.java +++ /dev/null @@ -1,74 +0,0 @@ -package cn.iocoder.yudao.module.im.service.conversation; - -import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdateLastReadTimeReqVO; -import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdatePinnedReqVO; -import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO; -import cn.iocoder.yudao.module.im.dal.mysql.conversation.ConversationMapper; -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.List; - -// TODO @hao:前缀 IM -/** - * IM 会话 Service 实现类 - * - * @author 芋道源码 - */ -@Service -@Validated -public class ConversationServiceImpl implements ConversationService { - - @Resource - private ConversationMapper conversationMapper; - - @Override - public List getConversationList() { - return conversationMapper.selectList(); - } - - @Override - public void updatePinned(Long loginUserId, ImConversationUpdatePinnedReqVO updateReqVO) { - // 1. 获得会话编号 - String no = ImConversationTypeEnum.generateConversationNo(loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); - // 2. 查询会话 - ImConversationDO conversation = conversationMapper.selectByNo(no); - if (conversation == null) { - // 2.1. 不存在,则插入 - conversation = insertConversation(no, loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); - } - // 3. 更新会话 - conversation.setPinned(updateReqVO.getPinned()); - conversationMapper.updateById(conversation); - // 4. 做对应更新的 notify 推送 - } - - private ImConversationDO insertConversation(String no, Long userId, Long targetId, Integer type) { - ImConversationDO imConversationDO = new ImConversationDO(); - imConversationDO.setNo(no); - imConversationDO.setUserId(userId); - imConversationDO.setTargetId(targetId); - imConversationDO.setType(type); - conversationMapper.insert(imConversationDO); - return imConversationDO; - } - - @Override - public void updateLastReadTime(Long loginUserId, ImConversationUpdateLastReadTimeReqVO updateReqVO) { - // 1. 获得会话编号 - String no = ImConversationTypeEnum.generateConversationNo(loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); - // 2. 查询会话 - ImConversationDO conversation = conversationMapper.selectByNo(no); - if (conversation == null) { - // 2.1. 不存在,则插入 - conversation = insertConversation(no, loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); - } - // 3. 更新会话 - conversation.setLastReadTime(updateReqVO.getLastReadTime()); - conversationMapper.updateById(conversation); - // 4. 做对应更新的 notify 推送 - } - -} \ 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 new file mode 100755 index 0000000..216e04a --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationService.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.im.service.conversation; + +import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdateLastReadTimeReqVO; +import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdatePinnedReqVO; +import cn.iocoder.yudao.module.im.dal.dataobject.conversation.ImConversationDO; + +import java.util.List; + +// TODO @hao:前缀 IM +/** + * IM 会话 Service 接口 + * + * @author 芋道源码 + */ +public interface ImConversationService { + + /** + * 获得用户的会话列表 + * + * @return 会话列表 + */ + List getConversationList(); + + /** + * 置顶会话 + * + * @param loginUserId 登录用户编号 + * @param updateReqVO 更新信息 + */ + void updatePinned(Long loginUserId, ImConversationUpdatePinnedReqVO updateReqVO); + + /** + * 更新最后已读时间 + * + * @param loginUserId 登录用户编号 + * @param updateReqVO 更新信息 + */ + void updateLastReadTime(Long loginUserId, ImConversationUpdateLastReadTimeReqVO 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 new file mode 100755 index 0000000..20d9f52 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationServiceImpl.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.im.service.conversation; + +import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdateLastReadTimeReqVO; +import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdatePinnedReqVO; +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.List; + +// TODO @hao:前缀 IM +/** + * IM 会话 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ImConversationServiceImpl implements ImConversationService { + + @Resource + private ImConversationMapper imConversationMapper; + + @Override + public List getConversationList() { + return imConversationMapper.selectList(); + } + + @Override + public void updatePinned(Long loginUserId, ImConversationUpdatePinnedReqVO updateReqVO) { + // 1. 获得会话编号 + String no = ImConversationTypeEnum.generateConversationNo(loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); + // 2. 查询会话 + ImConversationDO conversation = imConversationMapper.selectByNo(no); + if (conversation == null) { + // 2.1. 不存在,则插入 + conversation = insertConversation(no, loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); + } + // 3. 更新会话 + conversation.setPinned(updateReqVO.getPinned()); + imConversationMapper.updateById(conversation); + // 4. 做对应更新的 notify 推送 + } + + private ImConversationDO insertConversation(String no, Long userId, Long targetId, Integer type) { + ImConversationDO imConversationDO = new ImConversationDO(); + imConversationDO.setNo(no); + imConversationDO.setUserId(userId); + imConversationDO.setTargetId(targetId); + imConversationDO.setType(type); + imConversationMapper.insert(imConversationDO); + return imConversationDO; + } + + @Override + public void updateLastReadTime(Long loginUserId, ImConversationUpdateLastReadTimeReqVO updateReqVO) { + // 1. 获得会话编号 + String no = ImConversationTypeEnum.generateConversationNo(loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); + // 2. 查询会话 + ImConversationDO conversation = imConversationMapper.selectByNo(no); + if (conversation == null) { + // 2.1. 不存在,则插入 + conversation = insertConversation(no, loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); + } + // 3. 更新会话 + conversation.setLastReadTime(updateReqVO.getLastReadTime()); + imConversationMapper.updateById(conversation); + // 4. 做对应更新的 notify 推送 + } + +} \ 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/group/GroupService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/GroupService.java deleted file mode 100644 index 98624c6..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/GroupService.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.iocoder.yudao.module.im.service.group; - -import jakarta.validation.*; -import cn.iocoder.yudao.module.im.controller.admin.group.vo.*; -import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -// TODO @hao:前缀 IM -/** - * 群 Service 接口 - * - * @author 芋道源码 - */ -public interface GroupService { - - /** - * 创建群 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createGroup(@Valid ImGroupSaveReqVO createReqVO); - - /** - * 更新群 - * - * @param updateReqVO 更新信息 - */ - void updateGroup(@Valid ImGroupSaveReqVO updateReqVO); - - /** - * 删除群 - * - * @param id 编号 - */ - void deleteGroup(Long id); - - /** - * 获得群 - * - * @param id 编号 - * @return 群 - */ - ImGroupDO getGroup(Long id); - - /** - * 获得群分页 - * - * @param pageReqVO 分页查询 - * @return 群分页 - */ - PageResult getGroupPage(ImGroupPageReqVO pageReqVO); - -} \ 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/group/GroupServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/GroupServiceImpl.java deleted file mode 100644 index 4c1efde..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/GroupServiceImpl.java +++ /dev/null @@ -1,72 +0,0 @@ -package cn.iocoder.yudao.module.im.service.group; - -import org.springframework.stereotype.Service; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; - -import cn.iocoder.yudao.module.im.controller.admin.group.vo.*; -import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.im.dal.mysql.group.GroupMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*; - -// TODO @hao:前缀 IM -/** - * 群 Service 实现类 - * - * @author 芋道源码 - */ -@Service -@Validated -public class GroupServiceImpl implements GroupService { - - @Resource - private GroupMapper groupMapper; - - @Override - public Long createGroup(ImGroupSaveReqVO createReqVO) { - // 插入 - ImGroupDO group = BeanUtils.toBean(createReqVO, ImGroupDO.class); - groupMapper.insert(group); - // 返回 - return group.getId(); - } - - @Override - public void updateGroup(ImGroupSaveReqVO updateReqVO) { - // 校验存在 - validateGroupExists(updateReqVO.getId()); - // 更新 - ImGroupDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupDO.class); - groupMapper.updateById(updateObj); - } - - @Override - public void deleteGroup(Long id) { - // 校验存在 - validateGroupExists(id); - // 删除 - groupMapper.deleteById(id); - } - - private void validateGroupExists(Long id) { - if (groupMapper.selectById(id) == null) { - throw exception(GROUP_NOT_EXISTS); - } - } - - @Override - public ImGroupDO getGroup(Long id) { - return groupMapper.selectById(id); - } - - @Override - public PageResult getGroupPage(ImGroupPageReqVO pageReqVO) { - return groupMapper.selectPage(pageReqVO); - } - -} \ 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/group/ImGroupService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupService.java new file mode 100644 index 0000000..db10e88 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupService.java @@ -0,0 +1,54 @@ +package cn.iocoder.yudao.module.im.service.group; + +import jakarta.validation.*; +import cn.iocoder.yudao.module.im.controller.admin.group.vo.*; +import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +// TODO @hao:前缀 IM +/** + * 群 Service 接口 + * + * @author 芋道源码 + */ +public interface ImGroupService { + + /** + * 创建群 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createGroup(@Valid ImGroupSaveReqVO createReqVO); + + /** + * 更新群 + * + * @param updateReqVO 更新信息 + */ + void updateGroup(@Valid ImGroupSaveReqVO updateReqVO); + + /** + * 删除群 + * + * @param id 编号 + */ + void deleteGroup(Long id); + + /** + * 获得群 + * + * @param id 编号 + * @return 群 + */ + ImGroupDO getGroup(Long id); + + /** + * 获得群分页 + * + * @param pageReqVO 分页查询 + * @return 群分页 + */ + PageResult getGroupPage(ImGroupPageReqVO pageReqVO); + +} \ 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/group/ImGroupServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java new file mode 100644 index 0000000..118858a --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java @@ -0,0 +1,72 @@ +package cn.iocoder.yudao.module.im.service.group; + +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import cn.iocoder.yudao.module.im.controller.admin.group.vo.*; +import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.im.dal.mysql.group.ImGroupMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*; + +// TODO @hao:前缀 IM +/** + * 群 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ImGroupServiceImpl implements ImGroupService { + + @Resource + private ImGroupMapper imGroupMapper; + + @Override + public Long createGroup(ImGroupSaveReqVO createReqVO) { + // 插入 + ImGroupDO group = BeanUtils.toBean(createReqVO, ImGroupDO.class); + imGroupMapper.insert(group); + // 返回 + return group.getId(); + } + + @Override + public void updateGroup(ImGroupSaveReqVO updateReqVO) { + // 校验存在 + validateGroupExists(updateReqVO.getId()); + // 更新 + ImGroupDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupDO.class); + imGroupMapper.updateById(updateObj); + } + + @Override + public void deleteGroup(Long id) { + // 校验存在 + validateGroupExists(id); + // 删除 + imGroupMapper.deleteById(id); + } + + private void validateGroupExists(Long id) { + if (imGroupMapper.selectById(id) == null) { + throw exception(GROUP_NOT_EXISTS); + } + } + + @Override + public ImGroupDO getGroup(Long id) { + return imGroupMapper.selectById(id); + } + + @Override + public PageResult getGroupPage(ImGroupPageReqVO pageReqVO) { + return imGroupMapper.selectPage(pageReqVO); + } + +} \ 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/groupmember/GroupMemberService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/GroupMemberService.java deleted file mode 100644 index 3188c2e..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/GroupMemberService.java +++ /dev/null @@ -1,63 +0,0 @@ -package cn.iocoder.yudao.module.im.service.groupmember; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.im.controller.admin.groupmember.vo.ImGroupMemberPageReqVO; -import cn.iocoder.yudao.module.im.controller.admin.groupmember.vo.ImGroupMemberSaveReqVO; -import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; -import jakarta.validation.Valid; - -import java.util.List; - -/** - * 群成员 Service 接口 - * - * @author 芋道源码 - */ -public interface GroupMemberService { - - /** - * 创建群成员 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createGroupMember(@Valid ImGroupMemberSaveReqVO createReqVO); - - /** - * 更新群成员 - * - * @param updateReqVO 更新信息 - */ - void updateGroupMember(@Valid ImGroupMemberSaveReqVO updateReqVO); - - /** - * 删除群成员 - * - * @param id 编号 - */ - void deleteGroupMember(Long id); - - /** - * 获得群成员 - * - * @param id 编号 - * @return 群成员 - */ - ImGroupMemberDO getGroupMember(Long id); - - /** - * 获得群成员分页 - * - * @param pageReqVO 分页查询 - * @return 群成员分页 - */ - PageResult getGroupMemberPage(ImGroupMemberPageReqVO pageReqVO); - - /** - * 根据群组id查询群成员 - * - * @param groupId 群组id - * @return 群成员列表 - */ - List selectByGroupId(Long groupId); -} \ 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/groupmember/GroupMemberServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/GroupMemberServiceImpl.java deleted file mode 100644 index 43df1b9..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/GroupMemberServiceImpl.java +++ /dev/null @@ -1,78 +0,0 @@ -package cn.iocoder.yudao.module.im.service.groupmember; - -import org.springframework.stereotype.Service; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; - -import cn.iocoder.yudao.module.im.controller.admin.groupmember.vo.*; -import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; - -import cn.iocoder.yudao.module.im.dal.mysql.groupmember.GroupMemberMapper; - -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*; - -/** - * 群成员 Service 实现类 - * - * @author 芋道源码 - */ -@Service -@Validated -public class GroupMemberServiceImpl implements GroupMemberService { - - @Resource - private GroupMemberMapper groupMemberMapper; - - @Override - public Long createGroupMember(ImGroupMemberSaveReqVO createReqVO) { - // 插入 - ImGroupMemberDO groupMember = BeanUtils.toBean(createReqVO, ImGroupMemberDO.class); - groupMemberMapper.insert(groupMember); - // 返回 - return groupMember.getId(); - } - - @Override - public void updateGroupMember(ImGroupMemberSaveReqVO updateReqVO) { - // 校验存在 - validateGroupMemberExists(updateReqVO.getId()); - // 更新 - ImGroupMemberDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupMemberDO.class); - groupMemberMapper.updateById(updateObj); - } - - @Override - public void deleteGroupMember(Long id) { - // 校验存在 - validateGroupMemberExists(id); - // 删除 - groupMemberMapper.deleteById(id); - } - - private void validateGroupMemberExists(Long id) { - if (groupMemberMapper.selectById(id) == null) { - throw exception(GROUP_MEMBER_NOT_EXISTS); - } - } - - @Override - public ImGroupMemberDO getGroupMember(Long id) { - return groupMemberMapper.selectById(id); - } - - @Override - public PageResult getGroupMemberPage(ImGroupMemberPageReqVO pageReqVO) { - return groupMemberMapper.selectPage(pageReqVO); - } - - @Override - public List selectByGroupId(Long groupId) { - return groupMemberMapper.selectListByGroupId(groupId); - } - -} \ 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/groupmember/ImGroupMemberService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/ImGroupMemberService.java new file mode 100644 index 0000000..44f4f70 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/ImGroupMemberService.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.im.service.groupmember; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.im.controller.admin.groupmember.vo.ImGroupMemberPageReqVO; +import cn.iocoder.yudao.module.im.controller.admin.groupmember.vo.ImGroupMemberSaveReqVO; +import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; +import jakarta.validation.Valid; + +import java.util.List; + +/** + * 群成员 Service 接口 + * + * @author 芋道源码 + */ +public interface ImGroupMemberService { + + /** + * 创建群成员 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createGroupMember(@Valid ImGroupMemberSaveReqVO createReqVO); + + /** + * 更新群成员 + * + * @param updateReqVO 更新信息 + */ + void updateGroupMember(@Valid ImGroupMemberSaveReqVO updateReqVO); + + /** + * 删除群成员 + * + * @param id 编号 + */ + void deleteGroupMember(Long id); + + /** + * 获得群成员 + * + * @param id 编号 + * @return 群成员 + */ + ImGroupMemberDO getGroupMember(Long id); + + /** + * 获得群成员分页 + * + * @param pageReqVO 分页查询 + * @return 群成员分页 + */ + PageResult getGroupMemberPage(ImGroupMemberPageReqVO pageReqVO); + + /** + * 根据群组id查询群成员 + * + * @param groupId 群组id + * @return 群成员列表 + */ + List selectByGroupId(Long groupId); +} \ 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/groupmember/ImGroupMemberServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/ImGroupMemberServiceImpl.java new file mode 100644 index 0000000..1d5ac42 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/groupmember/ImGroupMemberServiceImpl.java @@ -0,0 +1,78 @@ +package cn.iocoder.yudao.module.im.service.groupmember; + +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import cn.iocoder.yudao.module.im.controller.admin.groupmember.vo.*; +import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.im.dal.mysql.groupmember.ImGroupMemberMapper; + +import java.util.List; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*; + +/** + * 群成员 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ImGroupMemberServiceImpl implements ImGroupMemberService { + + @Resource + private ImGroupMemberMapper imGroupMemberMapper; + + @Override + public Long createGroupMember(ImGroupMemberSaveReqVO createReqVO) { + // 插入 + ImGroupMemberDO groupMember = BeanUtils.toBean(createReqVO, ImGroupMemberDO.class); + imGroupMemberMapper.insert(groupMember); + // 返回 + return groupMember.getId(); + } + + @Override + public void updateGroupMember(ImGroupMemberSaveReqVO updateReqVO) { + // 校验存在 + validateGroupMemberExists(updateReqVO.getId()); + // 更新 + ImGroupMemberDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupMemberDO.class); + imGroupMemberMapper.updateById(updateObj); + } + + @Override + public void deleteGroupMember(Long id) { + // 校验存在 + validateGroupMemberExists(id); + // 删除 + imGroupMemberMapper.deleteById(id); + } + + private void validateGroupMemberExists(Long id) { + if (imGroupMemberMapper.selectById(id) == null) { + throw exception(GROUP_MEMBER_NOT_EXISTS); + } + } + + @Override + public ImGroupMemberDO getGroupMember(Long id) { + return imGroupMemberMapper.selectById(id); + } + + @Override + public PageResult getGroupMemberPage(ImGroupMemberPageReqVO pageReqVO) { + return imGroupMemberMapper.selectPage(pageReqVO); + } + + @Override + public List selectByGroupId(Long groupId) { + return imGroupMemberMapper.selectListByGroupId(groupId); + } + +} \ 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/inbox/ImInboxService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxService.java new file mode 100755 index 0000000..ee44c54 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxService.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.im.service.inbox; + +import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; + +import java.util.List; + +// TODO @hao:前缀 IM +/** + * IM 收件箱 Service 接口 + * + * @author 芋道源码 + */ +public interface ImInboxService { + + /** + * 保存收件箱和发送消息 + * + * @param imMessageDO 收件箱保存消息 Request VO + */ + void saveInboxAndSendMessage(ImMessageDO imMessageDO); + + /** + * 获得大于 sequence 的消息ids + * + * @param userId 用户编号 + * @param sequence 序列号 + * @param size 数量 + * @return 消息编号列表 + */ + List selectMessageIdsByUserIdAndSequence(Long userId, Long sequence, 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/inbox/ImInboxServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxServiceImpl.java new file mode 100755 index 0000000..afadec7 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxServiceImpl.java @@ -0,0 +1,93 @@ +package cn.iocoder.yudao.module.im.service.inbox; + +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageRespVO; +import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; +import cn.iocoder.yudao.module.im.dal.dataobject.inbox.ImInboxDO; +import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; +import cn.iocoder.yudao.module.im.dal.mysql.inbox.ImInboxMapper; +import cn.iocoder.yudao.module.im.dal.redis.inbox.InboxLockRedisDAO; +import cn.iocoder.yudao.module.im.dal.redis.inbox.SequenceRedisDAO; +import cn.iocoder.yudao.module.im.enums.conversation.ImConversationTypeEnum; +import cn.iocoder.yudao.module.im.service.groupmember.ImGroupMemberService; +import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi; +import jakarta.annotation.Resource; +import org.dromara.hutool.core.date.DateUnit; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import java.util.List; + +/** + * 收件箱 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ImInboxServiceImpl implements ImInboxService { + + private static final Long INBOX_LOCK_TIMEOUT = 120 * DateUnit.SECOND.getMillis(); + private static final String IM_MESSAGE_RECEIVE = "im-message-receive"; + + @Resource + private ImInboxMapper imInboxMapper; + + @Resource + private SequenceRedisDAO sequenceRedisDAO; + @Resource + private InboxLockRedisDAO inboxLockRedisDAO; + + @Resource + private WebSocketSenderApi webSocketSenderApi; + @Resource + private ImGroupMemberService imGroupMemberService; + + @Override + public void saveInboxAndSendMessage(ImMessageDO message) { + // 1. 保存收件箱 + 发送消息给发送人 + saveInboxAndSendMessageForUser(message.getSenderId(), message); + // 2. 保存收件箱 + 发送消息给接收人 + if (message.getConversationType().equals(ImConversationTypeEnum.SINGLE.getType())) { + // 2.1 如果是单聊,直接发送给接收人 + saveInboxAndSendMessageForUser(message.getReceiverId(), message); + } else if (message.getConversationType().equals(ImConversationTypeEnum.GROUP.getType())) { + // 2.2 如果是群聊,发送给群聊的所有人 + List groupMembers = imGroupMemberService.selectByGroupId(message.getReceiverId()); + groupMembers.forEach(groupMemberDO -> saveInboxAndSendMessageForUser(groupMemberDO.getUserId(), message)); + } + } + + @Override + public List selectMessageIdsByUserIdAndSequence(Long userId, Long sequence, Integer size) { + List imInboxDOS = imInboxMapper.selectListByUserIdAndSequence(userId, sequence, size); + return imInboxDOS.stream().map(ImInboxDO::getMessageId).toList(); + } + + + //TODO 多线程处理 + public void saveInboxAndSendMessageForUser(Long userId, ImMessageDO message) { + inboxLockRedisDAO.lock(userId, INBOX_LOCK_TIMEOUT, () -> { + // 1. 生成序列号 + Long userSequence = sequenceRedisDAO.generateSequence(userId); + // 2. 保存收件箱 + ImInboxDO inbox = new ImInboxDO() + .setUserId(userId) + .setMessageId(message.getId()) + .setSequence(userSequence); + imInboxMapper.insert(inbox); + // 3. 发送消息 + sendAsyncMessage(userId, message, userSequence); + }); + } + + @Async + public void sendAsyncMessage(Long userId, ImMessageDO message, Long userSequence) { + ImMessageRespVO messageRespVO = BeanUtils.toBean(message, ImMessageRespVO.class); + messageRespVO.setSequence(userSequence); + webSocketSenderApi.sendObject(UserTypeEnum.ADMIN.getValue(), userId, IM_MESSAGE_RECEIVE, messageRespVO); + } + +} \ 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/inbox/InboxService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/InboxService.java deleted file mode 100755 index 85e4a63..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/InboxService.java +++ /dev/null @@ -1,32 +0,0 @@ -package cn.iocoder.yudao.module.im.service.inbox; - -import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; - -import java.util.List; - -// TODO @hao:前缀 IM -/** - * IM 收件箱 Service 接口 - * - * @author 芋道源码 - */ -public interface InboxService { - - /** - * 保存收件箱和发送消息 - * - * @param imMessageDO 收件箱保存消息 Request VO - */ - void saveInboxAndSendMessage(ImMessageDO imMessageDO); - - /** - * 获得大于 sequence 的消息ids - * - * @param userId 用户编号 - * @param sequence 序列号 - * @param size 数量 - * @return 消息编号列表 - */ - List selectMessageIdsByUserIdAndSequence(Long userId, Long sequence, 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/inbox/InboxServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/InboxServiceImpl.java deleted file mode 100755 index 537e427..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/InboxServiceImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -package cn.iocoder.yudao.module.im.service.inbox; - -import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; -import cn.iocoder.yudao.framework.common.util.object.BeanUtils; -import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageRespVO; -import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; -import cn.iocoder.yudao.module.im.dal.dataobject.inbox.ImInboxDO; -import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; -import cn.iocoder.yudao.module.im.dal.mysql.inbox.InboxMapper; -import cn.iocoder.yudao.module.im.dal.redis.inbox.InboxLockRedisDAO; -import cn.iocoder.yudao.module.im.dal.redis.inbox.SequenceRedisDAO; -import cn.iocoder.yudao.module.im.enums.conversation.ImConversationTypeEnum; -import cn.iocoder.yudao.module.im.service.groupmember.GroupMemberService; -import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi; -import jakarta.annotation.Resource; -import org.dromara.hutool.core.date.DateUnit; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; -import org.springframework.validation.annotation.Validated; - -import java.util.List; - -/** - * 收件箱 Service 实现类 - * - * @author 芋道源码 - */ -@Service -@Validated -public class InboxServiceImpl implements InboxService { - - private static final Long INBOX_LOCK_TIMEOUT = 120 * DateUnit.SECOND.getMillis(); - private static final String IM_MESSAGE_RECEIVE = "im-message-receive"; - - @Resource - private InboxMapper inboxMapper; - - @Resource - private SequenceRedisDAO sequenceRedisDAO; - @Resource - private InboxLockRedisDAO inboxLockRedisDAO; - - @Resource - private WebSocketSenderApi webSocketSenderApi; - @Resource - private GroupMemberService groupMemberService; - - @Override - public void saveInboxAndSendMessage(ImMessageDO message) { - // 1. 保存收件箱 + 发送消息给发送人 - saveInboxAndSendMessageForUser(message.getSenderId(), message); - // 2. 保存收件箱 + 发送消息给接收人 - if (message.getConversationType().equals(ImConversationTypeEnum.SINGLE.getType())) { - // 2.1 如果是单聊,直接发送给接收人 - saveInboxAndSendMessageForUser(message.getReceiverId(), message); - } else if (message.getConversationType().equals(ImConversationTypeEnum.GROUP.getType())) { - // 2.2 如果是群聊,发送给群聊的所有人 - List groupMembers = groupMemberService.selectByGroupId(message.getReceiverId()); - groupMembers.forEach(groupMemberDO -> saveInboxAndSendMessageForUser(groupMemberDO.getUserId(), message)); - } - } - - @Override - public List selectMessageIdsByUserIdAndSequence(Long userId, Long sequence, Integer size) { - List imInboxDOS = inboxMapper.selectListByUserIdAndSequence(userId, sequence, size); - return imInboxDOS.stream().map(ImInboxDO::getMessageId).toList(); - } - - - //TODO 多线程处理 - public void saveInboxAndSendMessageForUser(Long userId, ImMessageDO message) { - inboxLockRedisDAO.lock(userId, INBOX_LOCK_TIMEOUT, () -> { - // 1. 生成序列号 - Long userSequence = sequenceRedisDAO.generateSequence(userId); - // 2. 保存收件箱 - ImInboxDO inbox = new ImInboxDO() - .setUserId(userId) - .setMessageId(message.getId()) - .setSequence(userSequence); - inboxMapper.insert(inbox); - // 3. 发送消息 - sendAsyncMessage(userId, message, userSequence); - }); - } - - @Async - public void sendAsyncMessage(Long userId, ImMessageDO message, Long userSequence) { - ImMessageRespVO messageRespVO = BeanUtils.toBean(message, ImMessageRespVO.class); - messageRespVO.setSequence(userSequence); - webSocketSenderApi.sendObject(UserTypeEnum.ADMIN.getValue(), userId, IM_MESSAGE_RECEIVE, messageRespVO); - } - -} \ 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/ImMessageService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java new file mode 100755 index 0000000..30701db --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.im.service.message; + +import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageListReqVO; +import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSendReqVO; +import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; + +import java.util.List; + +// TODO @hao:前缀 IM +/** + * 消息 Service 接口 + * + * @author 芋道源码 + */ +public interface ImMessageService { + + /** + * 获得历史消息 + * + * @param loginUserId 登录用户编号 + * @param listReqVO 分页查询 + * @return 消息分页 + */ + List getMessageList(Long loginUserId, ImMessageListReqVO listReqVO); + + /** + * 拉取消息-大于 seq 的消息 + * + * @param loginUserId 登录用户编号 + * @param sequence 序列号 + * @param size 数量 + * @return 消息列表 + */ + List pullMessageList(Long loginUserId, Long sequence, Integer size); + + /** + * 发送消息 + * + * @param loginUserId 登录用户编号 + * @param message 消息 + * @return 消息编号 + */ + ImMessageDO sendMessage(Long loginUserId, ImMessageSendReqVO message); +} \ 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 new file mode 100755 index 0000000..e6adbe1 --- /dev/null +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java @@ -0,0 +1,106 @@ +package cn.iocoder.yudao.module.im.service.message; + +import cn.hutool.core.bean.BeanUtil; +import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageListReqVO; +import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSendReqVO; +import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; +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.ImMessageSourceEnum; +import cn.iocoder.yudao.module.im.enums.message.ImMessageStatusEnum; +import cn.iocoder.yudao.module.im.service.groupmember.ImGroupMemberService; +import cn.iocoder.yudao.module.im.service.inbox.ImInboxService; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +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_RECEIVER_NOT_EXISTS; + +// TODO @hao:前缀 IM +/** + * 消息 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +@Slf4j +public class ImMessageServiceImpl implements ImMessageService { + + @Resource + private ImMessageMapper imMessageMapper; + @Resource + private AdminUserApi adminUserApi; + @Resource + private ImInboxService imInboxService; + @Resource + private ImGroupMemberService imGroupMemberService; + + @Override + public List getMessageList(Long loginUserId, ImMessageListReqVO listReqVO) { + // 1. 获得会话编号 + String no = ImConversationTypeEnum.generateConversationNo(loginUserId, listReqVO.getReceiverId(), listReqVO.getConversationType()); + // 2. 查询历史消息 + ImMessageDO message = new ImMessageDO() + .setSendTime(listReqVO.getSendTime()) + .setConversationNo(no); + return imMessageMapper.selectMessageList(message); + } + + @Override + public List pullMessageList(Long userId, Long sequence, Integer size) { + List messageIds = imInboxService.selectMessageIdsByUserIdAndSequence(userId, sequence, size); + return imMessageMapper.selectBatchIds(messageIds); + } + + @Override + public ImMessageDO sendMessage(Long fromUserId, ImMessageSendReqVO imMessageSendReqVO) { + // 1. 保存消息 + ImMessageDO message = saveMessage(fromUserId, imMessageSendReqVO); + // 2. 保存到收件箱,并发送消息 + imInboxService.saveInboxAndSendMessage(message); + return message; + } + + private ImMessageDO saveMessage(Long fromUserId, ImMessageSendReqVO message) { + // 1. 校验接收人是否存在 + validateReceiverIdExists(message); + // 2. 查询发送人信息 + AdminUserRespDTO fromUser = adminUserApi.getUser(fromUserId); + // 3. 保存消息 + ImMessageDO imMessageDO = BeanUtil.copyProperties(message, ImMessageDO.class) + .setSenderNickname(fromUser.getNickname()).setSenderAvatar(fromUser.getAvatar()) + .setSenderId(fromUserId) + .setConversationNo(ImConversationTypeEnum.generateConversationNo(fromUserId, message.getReceiverId(), message.getConversationType())) + .setSendFrom(ImMessageSourceEnum.USER_SEND.getSource()) + .setMessageStatus(ImMessageStatusEnum.SENDING.getStatus()) + .setSendTime(TimeUtil.now()); + imMessageMapper.insert(imMessageDO); + return imMessageDO; + } + + private void validateReceiverIdExists(ImMessageSendReqVO message) { + if (message.getConversationType().equals(ImConversationTypeEnum.SINGLE.getType())) { + // 校验用户是否存在 + AdminUserRespDTO receiverUser = adminUserApi.getUser(message.getReceiverId()); + if (receiverUser == null) { + throw exception(MESSAGE_RECEIVER_NOT_EXISTS); + } + } else if (message.getConversationType().equals(ImConversationTypeEnum.GROUP.getType())) { + // 校验群聊是否存在 + List imGroupMemberDOS = imGroupMemberService.selectByGroupId(message.getReceiverId()); + if (imGroupMemberDOS.isEmpty()) { + throw exception(MESSAGE_RECEIVER_NOT_EXISTS); + } + } + } + +} \ 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/MessageService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/MessageService.java deleted file mode 100755 index ae1c5dc..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/MessageService.java +++ /dev/null @@ -1,44 +0,0 @@ -package cn.iocoder.yudao.module.im.service.message; - -import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageListReqVO; -import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSendReqVO; -import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; - -import java.util.List; - -// TODO @hao:前缀 IM -/** - * 消息 Service 接口 - * - * @author 芋道源码 - */ -public interface MessageService { - - /** - * 获得历史消息 - * - * @param loginUserId 登录用户编号 - * @param listReqVO 分页查询 - * @return 消息分页 - */ - List getMessageList(Long loginUserId, ImMessageListReqVO listReqVO); - - /** - * 拉取消息-大于 seq 的消息 - * - * @param loginUserId 登录用户编号 - * @param sequence 序列号 - * @param size 数量 - * @return 消息列表 - */ - List pullMessageList(Long loginUserId, Long sequence, Integer size); - - /** - * 发送消息 - * - * @param loginUserId 登录用户编号 - * @param message 消息 - * @return 消息编号 - */ - ImMessageDO sendMessage(Long loginUserId, ImMessageSendReqVO message); -} \ 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/MessageServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/MessageServiceImpl.java deleted file mode 100755 index eb1d41c..0000000 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/MessageServiceImpl.java +++ /dev/null @@ -1,106 +0,0 @@ -package cn.iocoder.yudao.module.im.service.message; - -import cn.hutool.core.bean.BeanUtil; -import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageListReqVO; -import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSendReqVO; -import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; -import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO; -import cn.iocoder.yudao.module.im.dal.mysql.message.MessageMapper; -import cn.iocoder.yudao.module.im.enums.conversation.ImConversationTypeEnum; -import cn.iocoder.yudao.module.im.enums.message.ImMessageSourceEnum; -import cn.iocoder.yudao.module.im.enums.message.ImMessageStatusEnum; -import cn.iocoder.yudao.module.im.service.groupmember.GroupMemberService; -import cn.iocoder.yudao.module.im.service.inbox.InboxService; -import cn.iocoder.yudao.module.system.api.user.AdminUserApi; -import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -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_RECEIVER_NOT_EXISTS; - -// TODO @hao:前缀 IM -/** - * 消息 Service 实现类 - * - * @author 芋道源码 - */ -@Service -@Validated -@Slf4j -public class MessageServiceImpl implements MessageService { - - @Resource - private MessageMapper messageMapper; - @Resource - private AdminUserApi adminUserApi; - @Resource - private InboxService inboxService; - @Resource - private GroupMemberService groupMemberService; - - @Override - public List getMessageList(Long loginUserId, ImMessageListReqVO listReqVO) { - // 1. 获得会话编号 - String no = ImConversationTypeEnum.generateConversationNo(loginUserId, listReqVO.getReceiverId(), listReqVO.getConversationType()); - // 2. 查询历史消息 - ImMessageDO message = new ImMessageDO() - .setSendTime(listReqVO.getSendTime()) - .setConversationNo(no); - return messageMapper.selectMessageList(message); - } - - @Override - public List pullMessageList(Long userId, Long sequence, Integer size) { - List messageIds = inboxService.selectMessageIdsByUserIdAndSequence(userId, sequence, size); - return messageMapper.selectBatchIds(messageIds); - } - - @Override - public ImMessageDO sendMessage(Long fromUserId, ImMessageSendReqVO imMessageSendReqVO) { - // 1. 保存消息 - ImMessageDO message = saveMessage(fromUserId, imMessageSendReqVO); - // 2. 保存到收件箱,并发送消息 - inboxService.saveInboxAndSendMessage(message); - return message; - } - - private ImMessageDO saveMessage(Long fromUserId, ImMessageSendReqVO message) { - // 1. 校验接收人是否存在 - validateReceiverIdExists(message); - // 2. 查询发送人信息 - AdminUserRespDTO fromUser = adminUserApi.getUser(fromUserId); - // 3. 保存消息 - ImMessageDO imMessageDO = BeanUtil.copyProperties(message, ImMessageDO.class) - .setSenderNickname(fromUser.getNickname()).setSenderAvatar(fromUser.getAvatar()) - .setSenderId(fromUserId) - .setConversationNo(ImConversationTypeEnum.generateConversationNo(fromUserId, message.getReceiverId(), message.getConversationType())) - .setSendFrom(ImMessageSourceEnum.USER_SEND.getSource()) - .setMessageStatus(ImMessageStatusEnum.SENDING.getStatus()) - .setSendTime(TimeUtil.now()); - messageMapper.insert(imMessageDO); - return imMessageDO; - } - - private void validateReceiverIdExists(ImMessageSendReqVO message) { - if (message.getConversationType().equals(ImConversationTypeEnum.SINGLE.getType())) { - // 校验用户是否存在 - AdminUserRespDTO receiverUser = adminUserApi.getUser(message.getReceiverId()); - if (receiverUser == null) { - throw exception(MESSAGE_RECEIVER_NOT_EXISTS); - } - } else if (message.getConversationType().equals(ImConversationTypeEnum.GROUP.getType())) { - // 校验群聊是否存在 - List imGroupMemberDOS = groupMemberService.selectByGroupId(message.getReceiverId()); - if (imGroupMemberDOS.isEmpty()) { - throw exception(MESSAGE_RECEIVER_NOT_EXISTS); - } - } - } - -} \ No newline at end of file -- libgit2 0.21.4