修改:代码优化

This commit is contained in:
安浩浩 2024-06-02 17:01:28 +08:00
parent 651619d5ef
commit bada82f8cc
21 changed files with 106 additions and 98 deletions

View File

@ -1,7 +1,7 @@
{ {
"local": { "local": {
"baseUrl": "http://127.0.0.1:48080/admin-api", "baseUrl": "http://127.0.0.1:48080/admin-api",
"token": "test1", "token": "test100",
"adminTenentId": "1", "adminTenentId": "1",
"appApi": "http://127.0.0.1:48080/app-api", "appApi": "http://127.0.0.1:48080/app-api",

View File

@ -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.ImConversationRespVO;
import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdatePinnedReqVO; 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.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.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -26,26 +26,26 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti
public class ImConversationController { public class ImConversationController {
@Resource @Resource
private ConversationService conversationService; private ImConversationService imConversationService;
@GetMapping("/list") @GetMapping("/list")
@Operation(summary = "获得用户的会话列表") @Operation(summary = "获得用户的会话列表")
public CommonResult<List<ImConversationRespVO>> getConversationList() { public CommonResult<List<ImConversationRespVO>> getConversationList() {
List<ImConversationDO> conversationList = conversationService.getConversationList(); List<ImConversationDO> conversationList = imConversationService.getConversationList();
return success(BeanUtils.toBean(conversationList, ImConversationRespVO.class)); return success(BeanUtils.toBean(conversationList, ImConversationRespVO.class));
} }
@PostMapping("/update-pinned") @PostMapping("/update-pinned")
@Operation(summary = "置顶会话") @Operation(summary = "置顶会话")
public CommonResult<Boolean> updatePinned(@Valid @RequestBody ImConversationUpdatePinnedReqVO updateReqVO) { public CommonResult<Boolean> updatePinned(@Valid @RequestBody ImConversationUpdatePinnedReqVO updateReqVO) {
conversationService.updatePinned(getLoginUserId(),updateReqVO); imConversationService.updatePinned(getLoginUserId(),updateReqVO);
return success(true); return success(true);
} }
@PostMapping("/update-last-read-time") @PostMapping("/update-last-read-time")
@Operation(summary = "更新最后已读时间") @Operation(summary = "更新最后已读时间")
public CommonResult<Boolean> updateLastReadTime(@Valid @RequestBody ImConversationUpdateLastReadTimeReqVO updateReqVO) { public CommonResult<Boolean> updateLastReadTime(@Valid @RequestBody ImConversationUpdateLastReadTimeReqVO updateReqVO) {
conversationService.updateLastReadTime(getLoginUserId(),updateReqVO); imConversationService.updateLastReadTime(getLoginUserId(),updateReqVO);
return success(true); return success(true);
} }

View File

@ -9,24 +9,15 @@ import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.*; 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.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 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.controller.admin.group.vo.*;
import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO; 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 @芋艿得看看 createupdatedeletegetpage 这几个接口要保留哪些 // TODO @芋艿得看看 createupdatedeletegetpage 这几个接口要保留哪些
@Tag(name = "管理后台 - 群") @Tag(name = "管理后台 - 群")
@ -36,20 +27,20 @@ import cn.iocoder.yudao.module.im.service.group.GroupService;
public class ImGroupController { public class ImGroupController {
@Resource @Resource
private GroupService groupService; private ImGroupService imGroupService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建群") @Operation(summary = "创建群")
@PreAuthorize("@ss.hasPermission('im:group:create')") @PreAuthorize("@ss.hasPermission('im:group:create')")
public CommonResult<Long> createGroup(@Valid @RequestBody ImGroupSaveReqVO createReqVO) { public CommonResult<Long> createGroup(@Valid @RequestBody ImGroupSaveReqVO createReqVO) {
return success(groupService.createGroup(createReqVO)); return success(imGroupService.createGroup(createReqVO));
} }
@PutMapping("/update") @PutMapping("/update")
@Operation(summary = "更新群") @Operation(summary = "更新群")
@PreAuthorize("@ss.hasPermission('im:group:update')") @PreAuthorize("@ss.hasPermission('im:group:update')")
public CommonResult<Boolean> updateGroup(@Valid @RequestBody ImGroupSaveReqVO updateReqVO) { public CommonResult<Boolean> updateGroup(@Valid @RequestBody ImGroupSaveReqVO updateReqVO) {
groupService.updateGroup(updateReqVO); imGroupService.updateGroup(updateReqVO);
return success(true); return success(true);
} }
@ -58,7 +49,7 @@ public class ImGroupController {
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('im:group:delete')") @PreAuthorize("@ss.hasPermission('im:group:delete')")
public CommonResult<Boolean> deleteGroup(@RequestParam("id") Long id) { public CommonResult<Boolean> deleteGroup(@RequestParam("id") Long id) {
groupService.deleteGroup(id); imGroupService.deleteGroup(id);
return success(true); return success(true);
} }
@ -67,7 +58,7 @@ public class ImGroupController {
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('im:group:query')") @PreAuthorize("@ss.hasPermission('im:group:query')")
public CommonResult<ImGroupRespVO> getGroup(@RequestParam("id") Long id) { public CommonResult<ImGroupRespVO> getGroup(@RequestParam("id") Long id) {
ImGroupDO group = groupService.getGroup(id); ImGroupDO group = imGroupService.getGroup(id);
return success(BeanUtils.toBean(group, ImGroupRespVO.class)); return success(BeanUtils.toBean(group, ImGroupRespVO.class));
} }
@ -75,7 +66,7 @@ public class ImGroupController {
@Operation(summary = "获得群分页") @Operation(summary = "获得群分页")
@PreAuthorize("@ss.hasPermission('im:group:query')") @PreAuthorize("@ss.hasPermission('im:group:query')")
public CommonResult<PageResult<ImGroupRespVO>> getGroupPage(@Valid ImGroupPageReqVO pageReqVO) { public CommonResult<PageResult<ImGroupRespVO>> getGroupPage(@Valid ImGroupPageReqVO pageReqVO) {
PageResult<ImGroupDO> pageResult = groupService.getGroupPage(pageReqVO); PageResult<ImGroupDO> pageResult = imGroupService.getGroupPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ImGroupRespVO.class)); return success(BeanUtils.toBean(pageResult, ImGroupRespVO.class));
} }

View File

@ -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.ImGroupMemberRespVO;
import cn.iocoder.yudao.module.im.controller.admin.groupmember.vo.ImGroupMemberSaveReqVO; 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.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.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; 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 { public class ImGroupMemberController {
@Resource @Resource
private GroupMemberService groupMemberService; private ImGroupMemberService imGroupMemberService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建群成员") @Operation(summary = "创建群成员")
@PreAuthorize("@ss.hasPermission('im:group-member:create')") @PreAuthorize("@ss.hasPermission('im:group-member:create')")
public CommonResult<Long> createGroupMember(@Valid @RequestBody ImGroupMemberSaveReqVO createReqVO) { public CommonResult<Long> createGroupMember(@Valid @RequestBody ImGroupMemberSaveReqVO createReqVO) {
return success(groupMemberService.createGroupMember(createReqVO)); return success(imGroupMemberService.createGroupMember(createReqVO));
} }
@PutMapping("/update") @PutMapping("/update")
@Operation(summary = "更新群成员") @Operation(summary = "更新群成员")
@PreAuthorize("@ss.hasPermission('im:group-member:update')") @PreAuthorize("@ss.hasPermission('im:group-member:update')")
public CommonResult<Boolean> updateGroupMember(@Valid @RequestBody ImGroupMemberSaveReqVO updateReqVO) { public CommonResult<Boolean> updateGroupMember(@Valid @RequestBody ImGroupMemberSaveReqVO updateReqVO) {
groupMemberService.updateGroupMember(updateReqVO); imGroupMemberService.updateGroupMember(updateReqVO);
return success(true); return success(true);
} }
@ -57,7 +57,7 @@ public class ImGroupMemberController {
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('im:group-member:delete')") @PreAuthorize("@ss.hasPermission('im:group-member:delete')")
public CommonResult<Boolean> deleteGroupMember(@RequestParam("id") Long id) { public CommonResult<Boolean> deleteGroupMember(@RequestParam("id") Long id) {
groupMemberService.deleteGroupMember(id); imGroupMemberService.deleteGroupMember(id);
return success(true); return success(true);
} }
@ -66,7 +66,7 @@ public class ImGroupMemberController {
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('im:group-member:query')") @PreAuthorize("@ss.hasPermission('im:group-member:query')")
public CommonResult<ImGroupMemberRespVO> getGroupMember(@RequestParam("id") Long id) { public CommonResult<ImGroupMemberRespVO> getGroupMember(@RequestParam("id") Long id) {
ImGroupMemberDO groupMember = groupMemberService.getGroupMember(id); ImGroupMemberDO groupMember = imGroupMemberService.getGroupMember(id);
return success(BeanUtils.toBean(groupMember, ImGroupMemberRespVO.class)); return success(BeanUtils.toBean(groupMember, ImGroupMemberRespVO.class));
} }
@ -74,7 +74,7 @@ public class ImGroupMemberController {
@Operation(summary = "获得群成员分页") @Operation(summary = "获得群成员分页")
@PreAuthorize("@ss.hasPermission('im:group-member:query')") @PreAuthorize("@ss.hasPermission('im:group-member:query')")
public CommonResult<PageResult<ImGroupMemberRespVO>> getGroupMemberPage(@Valid ImGroupMemberPageReqVO pageReqVO) { public CommonResult<PageResult<ImGroupMemberRespVO>> getGroupMemberPage(@Valid ImGroupMemberPageReqVO pageReqVO) {
PageResult<ImGroupMemberDO> pageResult = groupMemberService.getGroupMemberPage(pageReqVO); PageResult<ImGroupMemberDO> pageResult = imGroupMemberService.getGroupMemberPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ImGroupMemberRespVO.class)); return success(BeanUtils.toBean(pageResult, ImGroupMemberRespVO.class));
} }
@ -85,7 +85,7 @@ public class ImGroupMemberController {
public void exportGroupMemberExcel(@Valid ImGroupMemberPageReqVO pageReqVO, public void exportGroupMemberExcel(@Valid ImGroupMemberPageReqVO pageReqVO,
HttpServletResponse response) throws IOException { HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ImGroupMemberDO> list = groupMemberService.getGroupMemberPage(pageReqVO).getList(); List<ImGroupMemberDO> list = imGroupMemberService.getGroupMemberPage(pageReqVO).getList();
// 导出 Excel // 导出 Excel
ExcelUtils.write(response, "群成员.xls", "数据", ImGroupMemberRespVO.class, ExcelUtils.write(response, "群成员.xls", "数据", ImGroupMemberRespVO.class,
BeanUtils.toBean(list, ImGroupMemberRespVO.class)); BeanUtils.toBean(list, ImGroupMemberRespVO.class));

View File

@ -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}}

View File

@ -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.ImMessageSendReqVO;
import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSendRespVO; 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.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.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; 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 { public class ImMessageController {
@Resource @Resource
private MessageService messageService; private ImMessageService imMessageService;
@PostMapping("/send") @PostMapping("/send")
@Operation(summary = "发送消息") @Operation(summary = "发送消息")
public CommonResult<ImMessageSendRespVO> sendMessage(@Valid @RequestBody ImMessageSendReqVO imMessageSendReqVO) { public CommonResult<ImMessageSendRespVO> sendMessage(@Valid @RequestBody ImMessageSendReqVO imMessageSendReqVO) {
ImMessageDO message = messageService.sendMessage(getLoginUserId(), imMessageSendReqVO); ImMessageDO message = imMessageService.sendMessage(getLoginUserId(), imMessageSendReqVO);
return success(BeanUtils.toBean(message, ImMessageSendRespVO.class)); return success(BeanUtils.toBean(message, ImMessageSendRespVO.class));
} }
@ -43,14 +43,14 @@ public class ImMessageController {
@Parameter(name = "size", description = "条数", required = true, example = "10") @Parameter(name = "size", description = "条数", required = true, example = "10")
public CommonResult<List<ImMessageRespVO>> pullMessageList(@RequestParam("sequence") Long sequence, public CommonResult<List<ImMessageRespVO>> pullMessageList(@RequestParam("sequence") Long sequence,
@RequestParam("size") Integer size) { @RequestParam("size") Integer size) {
List<ImMessageDO> messages = messageService.pullMessageList(getLoginUserId(), sequence, size); List<ImMessageDO> messages = imMessageService.pullMessageList(getLoginUserId(), sequence, size);
return success(BeanUtils.toBean(messages, ImMessageRespVO.class)); return success(BeanUtils.toBean(messages, ImMessageRespVO.class));
} }
@GetMapping("/list") @GetMapping("/list")
@Operation(summary = "消息列表-根据接收人和发送时间进行分页查询") @Operation(summary = "消息列表-根据接收人和发送时间进行分页查询")
public CommonResult<List<ImMessageRespVO>> getMessageList(@Valid ImMessageListReqVO listReqVO) { public CommonResult<List<ImMessageRespVO>> getMessageList(@Valid ImMessageListReqVO listReqVO) {
List<ImMessageDO> messagePage = messageService.getMessageList(getLoginUserId(), listReqVO); List<ImMessageDO> messagePage = imMessageService.getMessageList(getLoginUserId(), listReqVO);
return success(BeanUtils.toBean(messagePage, ImMessageRespVO.class)); return success(BeanUtils.toBean(messagePage, ImMessageRespVO.class));
} }

View File

@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
* @author 芋道源码 * @author 芋道源码
*/ */
@Mapper @Mapper
public interface ConversationMapper extends BaseMapperX<ImConversationDO> { public interface ImConversationMapper extends BaseMapperX<ImConversationDO> {
default ImConversationDO selectByNo(String no){ default ImConversationDO selectByNo(String no){
return selectOne(ImConversationDO::getNo, no); return selectOne(ImConversationDO::getNo, no);

View File

@ -14,7 +14,7 @@ import cn.iocoder.yudao.module.im.controller.admin.group.vo.*;
* @author 芋道源码 * @author 芋道源码
*/ */
@Mapper @Mapper
public interface GroupMapper extends BaseMapperX<ImGroupDO> { public interface ImGroupMapper extends BaseMapperX<ImGroupDO> {
default PageResult<ImGroupDO> selectPage(ImGroupPageReqVO reqVO) { default PageResult<ImGroupDO> selectPage(ImGroupPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ImGroupDO>() return selectPage(reqVO, new LambdaQueryWrapperX<ImGroupDO>()

View File

@ -15,7 +15,7 @@ import java.util.List;
* @author 芋道源码 * @author 芋道源码
*/ */
@Mapper @Mapper
public interface GroupMemberMapper extends BaseMapperX<ImGroupMemberDO> { public interface ImGroupMemberMapper extends BaseMapperX<ImGroupMemberDO> {
default PageResult<ImGroupMemberDO> selectPage(ImGroupMemberPageReqVO reqVO) { default PageResult<ImGroupMemberDO> selectPage(ImGroupMemberPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ImGroupMemberDO>() return selectPage(reqVO, new LambdaQueryWrapperX<ImGroupMemberDO>()

View File

@ -7,20 +7,19 @@ import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
// TODO @haoIM 前缀
/** /**
* IM 收件箱 Mapper * IM 收件箱 Mapper
* *
* @author 芋道源码 * @author 芋道源码
*/ */
@Mapper @Mapper
public interface InboxMapper extends BaseMapperX<ImInboxDO> { public interface ImInboxMapper extends BaseMapperX<ImInboxDO> {
default List<ImInboxDO> selectListByUserIdAndSequence(Long userId, Long sequence, Integer size) { default List<ImInboxDO> selectListByUserIdAndSequence(Long userId, Long sequence, Integer size) {
return selectList(new LambdaQueryWrapperX<ImInboxDO>() return selectList(new LambdaQueryWrapperX<ImInboxDO>()
.gt(ImInboxDO::getUserId, userId) .eq(ImInboxDO::getUserId, userId)
.gt(ImInboxDO::getSequence, sequence) .gt(sequence != null, ImInboxDO::getSequence, sequence)
.orderByAsc(ImInboxDO::getSequence) .orderByDesc(ImInboxDO::getSequence)
.last("LIMIT " + size)); .last("LIMIT " + size));
} }

View File

@ -14,7 +14,7 @@ import java.util.List;
* @author 芋道源码 * @author 芋道源码
*/ */
@Mapper @Mapper
public interface MessageMapper extends BaseMapperX<ImMessageDO> { public interface ImMessageMapper extends BaseMapperX<ImMessageDO> {
default List<ImMessageDO> selectMessageList(ImMessageDO message) { default List<ImMessageDO> selectMessageList(ImMessageDO message) {
return selectList(new LambdaQueryWrapperX<ImMessageDO>() return selectList(new LambdaQueryWrapperX<ImMessageDO>()

View File

@ -12,7 +12,7 @@ import java.util.List;
* *
* @author 芋道源码 * @author 芋道源码
*/ */
public interface ConversationService { public interface ImConversationService {
/** /**
* 获得用户的会话列表 * 获得用户的会话列表

View File

@ -3,7 +3,7 @@ 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.ImConversationUpdateLastReadTimeReqVO;
import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationUpdatePinnedReqVO; 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.dataobject.conversation.ImConversationDO;
import cn.iocoder.yudao.module.im.dal.mysql.conversation.ConversationMapper; import cn.iocoder.yudao.module.im.dal.mysql.conversation.ImConversationMapper;
import cn.iocoder.yudao.module.im.enums.conversation.ImConversationTypeEnum; import cn.iocoder.yudao.module.im.enums.conversation.ImConversationTypeEnum;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -19,14 +19,14 @@ import java.util.List;
*/ */
@Service @Service
@Validated @Validated
public class ConversationServiceImpl implements ConversationService { public class ImConversationServiceImpl implements ImConversationService {
@Resource @Resource
private ConversationMapper conversationMapper; private ImConversationMapper imConversationMapper;
@Override @Override
public List<ImConversationDO> getConversationList() { public List<ImConversationDO> getConversationList() {
return conversationMapper.selectList(); return imConversationMapper.selectList();
} }
@Override @Override
@ -34,14 +34,14 @@ public class ConversationServiceImpl implements ConversationService {
// 1. 获得会话编号 // 1. 获得会话编号
String no = ImConversationTypeEnum.generateConversationNo(loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); String no = ImConversationTypeEnum.generateConversationNo(loginUserId, updateReqVO.getTargetId(), updateReqVO.getType());
// 2. 查询会话 // 2. 查询会话
ImConversationDO conversation = conversationMapper.selectByNo(no); ImConversationDO conversation = imConversationMapper.selectByNo(no);
if (conversation == null) { if (conversation == null) {
// 2.1. 不存在则插入 // 2.1. 不存在则插入
conversation = insertConversation(no, loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); conversation = insertConversation(no, loginUserId, updateReqVO.getTargetId(), updateReqVO.getType());
} }
// 3. 更新会话 // 3. 更新会话
conversation.setPinned(updateReqVO.getPinned()); conversation.setPinned(updateReqVO.getPinned());
conversationMapper.updateById(conversation); imConversationMapper.updateById(conversation);
// 4. 做对应更新的 notify 推送 // 4. 做对应更新的 notify 推送
} }
@ -51,7 +51,7 @@ public class ConversationServiceImpl implements ConversationService {
imConversationDO.setUserId(userId); imConversationDO.setUserId(userId);
imConversationDO.setTargetId(targetId); imConversationDO.setTargetId(targetId);
imConversationDO.setType(type); imConversationDO.setType(type);
conversationMapper.insert(imConversationDO); imConversationMapper.insert(imConversationDO);
return imConversationDO; return imConversationDO;
} }
@ -60,14 +60,14 @@ public class ConversationServiceImpl implements ConversationService {
// 1. 获得会话编号 // 1. 获得会话编号
String no = ImConversationTypeEnum.generateConversationNo(loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); String no = ImConversationTypeEnum.generateConversationNo(loginUserId, updateReqVO.getTargetId(), updateReqVO.getType());
// 2. 查询会话 // 2. 查询会话
ImConversationDO conversation = conversationMapper.selectByNo(no); ImConversationDO conversation = imConversationMapper.selectByNo(no);
if (conversation == null) { if (conversation == null) {
// 2.1. 不存在则插入 // 2.1. 不存在则插入
conversation = insertConversation(no, loginUserId, updateReqVO.getTargetId(), updateReqVO.getType()); conversation = insertConversation(no, loginUserId, updateReqVO.getTargetId(), updateReqVO.getType());
} }
// 3. 更新会话 // 3. 更新会话
conversation.setLastReadTime(updateReqVO.getLastReadTime()); conversation.setLastReadTime(updateReqVO.getLastReadTime());
conversationMapper.updateById(conversation); imConversationMapper.updateById(conversation);
// 4. 做对应更新的 notify 推送 // 4. 做对应更新的 notify 推送
} }

View File

@ -11,7 +11,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
* *
* @author 芋道源码 * @author 芋道源码
*/ */
public interface GroupService { public interface ImGroupService {
/** /**
* 创建群 * 创建群

View File

@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.im.dal.mysql.group.GroupMapper; 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.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*;
@ -22,16 +22,16 @@ import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*;
*/ */
@Service @Service
@Validated @Validated
public class GroupServiceImpl implements GroupService { public class ImGroupServiceImpl implements ImGroupService {
@Resource @Resource
private GroupMapper groupMapper; private ImGroupMapper imGroupMapper;
@Override @Override
public Long createGroup(ImGroupSaveReqVO createReqVO) { public Long createGroup(ImGroupSaveReqVO createReqVO) {
// 插入 // 插入
ImGroupDO group = BeanUtils.toBean(createReqVO, ImGroupDO.class); ImGroupDO group = BeanUtils.toBean(createReqVO, ImGroupDO.class);
groupMapper.insert(group); imGroupMapper.insert(group);
// 返回 // 返回
return group.getId(); return group.getId();
} }
@ -42,7 +42,7 @@ public class GroupServiceImpl implements GroupService {
validateGroupExists(updateReqVO.getId()); validateGroupExists(updateReqVO.getId());
// 更新 // 更新
ImGroupDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupDO.class); ImGroupDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupDO.class);
groupMapper.updateById(updateObj); imGroupMapper.updateById(updateObj);
} }
@Override @Override
@ -50,23 +50,23 @@ public class GroupServiceImpl implements GroupService {
// 校验存在 // 校验存在
validateGroupExists(id); validateGroupExists(id);
// 删除 // 删除
groupMapper.deleteById(id); imGroupMapper.deleteById(id);
} }
private void validateGroupExists(Long id) { private void validateGroupExists(Long id) {
if (groupMapper.selectById(id) == null) { if (imGroupMapper.selectById(id) == null) {
throw exception(GROUP_NOT_EXISTS); throw exception(GROUP_NOT_EXISTS);
} }
} }
@Override @Override
public ImGroupDO getGroup(Long id) { public ImGroupDO getGroup(Long id) {
return groupMapper.selectById(id); return imGroupMapper.selectById(id);
} }
@Override @Override
public PageResult<ImGroupDO> getGroupPage(ImGroupPageReqVO pageReqVO) { public PageResult<ImGroupDO> getGroupPage(ImGroupPageReqVO pageReqVO) {
return groupMapper.selectPage(pageReqVO); return imGroupMapper.selectPage(pageReqVO);
} }
} }

View File

@ -13,7 +13,7 @@ import java.util.List;
* *
* @author 芋道源码 * @author 芋道源码
*/ */
public interface GroupMemberService { public interface ImGroupMemberService {
/** /**
* 创建群成员 * 创建群成员

View File

@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.im.dal.mysql.groupmember.GroupMemberMapper; import cn.iocoder.yudao.module.im.dal.mysql.groupmember.ImGroupMemberMapper;
import java.util.List; import java.util.List;
@ -23,16 +23,16 @@ import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*;
*/ */
@Service @Service
@Validated @Validated
public class GroupMemberServiceImpl implements GroupMemberService { public class ImGroupMemberServiceImpl implements ImGroupMemberService {
@Resource @Resource
private GroupMemberMapper groupMemberMapper; private ImGroupMemberMapper imGroupMemberMapper;
@Override @Override
public Long createGroupMember(ImGroupMemberSaveReqVO createReqVO) { public Long createGroupMember(ImGroupMemberSaveReqVO createReqVO) {
// 插入 // 插入
ImGroupMemberDO groupMember = BeanUtils.toBean(createReqVO, ImGroupMemberDO.class); ImGroupMemberDO groupMember = BeanUtils.toBean(createReqVO, ImGroupMemberDO.class);
groupMemberMapper.insert(groupMember); imGroupMemberMapper.insert(groupMember);
// 返回 // 返回
return groupMember.getId(); return groupMember.getId();
} }
@ -43,7 +43,7 @@ public class GroupMemberServiceImpl implements GroupMemberService {
validateGroupMemberExists(updateReqVO.getId()); validateGroupMemberExists(updateReqVO.getId());
// 更新 // 更新
ImGroupMemberDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupMemberDO.class); ImGroupMemberDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupMemberDO.class);
groupMemberMapper.updateById(updateObj); imGroupMemberMapper.updateById(updateObj);
} }
@Override @Override
@ -51,28 +51,28 @@ public class GroupMemberServiceImpl implements GroupMemberService {
// 校验存在 // 校验存在
validateGroupMemberExists(id); validateGroupMemberExists(id);
// 删除 // 删除
groupMemberMapper.deleteById(id); imGroupMemberMapper.deleteById(id);
} }
private void validateGroupMemberExists(Long id) { private void validateGroupMemberExists(Long id) {
if (groupMemberMapper.selectById(id) == null) { if (imGroupMemberMapper.selectById(id) == null) {
throw exception(GROUP_MEMBER_NOT_EXISTS); throw exception(GROUP_MEMBER_NOT_EXISTS);
} }
} }
@Override @Override
public ImGroupMemberDO getGroupMember(Long id) { public ImGroupMemberDO getGroupMember(Long id) {
return groupMemberMapper.selectById(id); return imGroupMemberMapper.selectById(id);
} }
@Override @Override
public PageResult<ImGroupMemberDO> getGroupMemberPage(ImGroupMemberPageReqVO pageReqVO) { public PageResult<ImGroupMemberDO> getGroupMemberPage(ImGroupMemberPageReqVO pageReqVO) {
return groupMemberMapper.selectPage(pageReqVO); return imGroupMemberMapper.selectPage(pageReqVO);
} }
@Override @Override
public List<ImGroupMemberDO> selectByGroupId(Long groupId) { public List<ImGroupMemberDO> selectByGroupId(Long groupId) {
return groupMemberMapper.selectListByGroupId(groupId); return imGroupMemberMapper.selectListByGroupId(groupId);
} }
} }

View File

@ -10,7 +10,7 @@ import java.util.List;
* *
* @author 芋道源码 * @author 芋道源码
*/ */
public interface InboxService { public interface ImInboxService {
/** /**
* 保存收件箱和发送消息 * 保存收件箱和发送消息

View File

@ -6,11 +6,11 @@ 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.group.ImGroupMemberDO;
import cn.iocoder.yudao.module.im.dal.dataobject.inbox.ImInboxDO; 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.dataobject.message.ImMessageDO;
import cn.iocoder.yudao.module.im.dal.mysql.inbox.InboxMapper; 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.InboxLockRedisDAO;
import cn.iocoder.yudao.module.im.dal.redis.inbox.SequenceRedisDAO; 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.enums.conversation.ImConversationTypeEnum;
import cn.iocoder.yudao.module.im.service.groupmember.GroupMemberService; import cn.iocoder.yudao.module.im.service.groupmember.ImGroupMemberService;
import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi; import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.dromara.hutool.core.date.DateUnit; import org.dromara.hutool.core.date.DateUnit;
@ -27,13 +27,13 @@ import java.util.List;
*/ */
@Service @Service
@Validated @Validated
public class InboxServiceImpl implements InboxService { public class ImInboxServiceImpl implements ImInboxService {
private static final Long INBOX_LOCK_TIMEOUT = 120 * DateUnit.SECOND.getMillis(); private static final Long INBOX_LOCK_TIMEOUT = 120 * DateUnit.SECOND.getMillis();
private static final String IM_MESSAGE_RECEIVE = "im-message-receive"; private static final String IM_MESSAGE_RECEIVE = "im-message-receive";
@Resource @Resource
private InboxMapper inboxMapper; private ImInboxMapper imInboxMapper;
@Resource @Resource
private SequenceRedisDAO sequenceRedisDAO; private SequenceRedisDAO sequenceRedisDAO;
@ -43,7 +43,7 @@ public class InboxServiceImpl implements InboxService {
@Resource @Resource
private WebSocketSenderApi webSocketSenderApi; private WebSocketSenderApi webSocketSenderApi;
@Resource @Resource
private GroupMemberService groupMemberService; private ImGroupMemberService imGroupMemberService;
@Override @Override
public void saveInboxAndSendMessage(ImMessageDO message) { public void saveInboxAndSendMessage(ImMessageDO message) {
@ -55,14 +55,14 @@ public class InboxServiceImpl implements InboxService {
saveInboxAndSendMessageForUser(message.getReceiverId(), message); saveInboxAndSendMessageForUser(message.getReceiverId(), message);
} else if (message.getConversationType().equals(ImConversationTypeEnum.GROUP.getType())) { } else if (message.getConversationType().equals(ImConversationTypeEnum.GROUP.getType())) {
// 2.2 如果是群聊发送给群聊的所有人 // 2.2 如果是群聊发送给群聊的所有人
List<ImGroupMemberDO> groupMembers = groupMemberService.selectByGroupId(message.getReceiverId()); List<ImGroupMemberDO> groupMembers = imGroupMemberService.selectByGroupId(message.getReceiverId());
groupMembers.forEach(groupMemberDO -> saveInboxAndSendMessageForUser(groupMemberDO.getUserId(), message)); groupMembers.forEach(groupMemberDO -> saveInboxAndSendMessageForUser(groupMemberDO.getUserId(), message));
} }
} }
@Override @Override
public List<Long> selectMessageIdsByUserIdAndSequence(Long userId, Long sequence, Integer size) { public List<Long> selectMessageIdsByUserIdAndSequence(Long userId, Long sequence, Integer size) {
List<ImInboxDO> imInboxDOS = inboxMapper.selectListByUserIdAndSequence(userId, sequence, size); List<ImInboxDO> imInboxDOS = imInboxMapper.selectListByUserIdAndSequence(userId, sequence, size);
return imInboxDOS.stream().map(ImInboxDO::getMessageId).toList(); return imInboxDOS.stream().map(ImInboxDO::getMessageId).toList();
} }
@ -77,7 +77,7 @@ public class InboxServiceImpl implements InboxService {
.setUserId(userId) .setUserId(userId)
.setMessageId(message.getId()) .setMessageId(message.getId())
.setSequence(userSequence); .setSequence(userSequence);
inboxMapper.insert(inbox); imInboxMapper.insert(inbox);
// 3. 发送消息 // 3. 发送消息
sendAsyncMessage(userId, message, userSequence); sendAsyncMessage(userId, message, userSequence);
}); });

View File

@ -12,7 +12,7 @@ import java.util.List;
* *
* @author 芋道源码 * @author 芋道源码
*/ */
public interface MessageService { public interface ImMessageService {
/** /**
* 获得历史消息 * 获得历史消息

View File

@ -5,12 +5,12 @@ 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.controller.admin.message.vo.ImMessageSendReqVO;
import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; 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.dataobject.message.ImMessageDO;
import cn.iocoder.yudao.module.im.dal.mysql.message.MessageMapper; 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.conversation.ImConversationTypeEnum;
import cn.iocoder.yudao.module.im.enums.message.ImMessageSourceEnum; import cn.iocoder.yudao.module.im.enums.message.ImMessageSourceEnum;
import cn.iocoder.yudao.module.im.enums.message.ImMessageStatusEnum; 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.groupmember.ImGroupMemberService;
import cn.iocoder.yudao.module.im.service.inbox.InboxService; 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.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -33,16 +33,16 @@ import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.MESSAGE_RECEIV
@Service @Service
@Validated @Validated
@Slf4j @Slf4j
public class MessageServiceImpl implements MessageService { public class ImMessageServiceImpl implements ImMessageService {
@Resource @Resource
private MessageMapper messageMapper; private ImMessageMapper imMessageMapper;
@Resource @Resource
private AdminUserApi adminUserApi; private AdminUserApi adminUserApi;
@Resource @Resource
private InboxService inboxService; private ImInboxService imInboxService;
@Resource @Resource
private GroupMemberService groupMemberService; private ImGroupMemberService imGroupMemberService;
@Override @Override
public List<ImMessageDO> getMessageList(Long loginUserId, ImMessageListReqVO listReqVO) { public List<ImMessageDO> getMessageList(Long loginUserId, ImMessageListReqVO listReqVO) {
@ -52,13 +52,13 @@ public class MessageServiceImpl implements MessageService {
ImMessageDO message = new ImMessageDO() ImMessageDO message = new ImMessageDO()
.setSendTime(listReqVO.getSendTime()) .setSendTime(listReqVO.getSendTime())
.setConversationNo(no); .setConversationNo(no);
return messageMapper.selectMessageList(message); return imMessageMapper.selectMessageList(message);
} }
@Override @Override
public List<ImMessageDO> pullMessageList(Long userId, Long sequence, Integer size) { public List<ImMessageDO> pullMessageList(Long userId, Long sequence, Integer size) {
List<Long> messageIds = inboxService.selectMessageIdsByUserIdAndSequence(userId, sequence, size); List<Long> messageIds = imInboxService.selectMessageIdsByUserIdAndSequence(userId, sequence, size);
return messageMapper.selectBatchIds(messageIds); return imMessageMapper.selectBatchIds(messageIds);
} }
@Override @Override
@ -66,7 +66,7 @@ public class MessageServiceImpl implements MessageService {
// 1. 保存消息 // 1. 保存消息
ImMessageDO message = saveMessage(fromUserId, imMessageSendReqVO); ImMessageDO message = saveMessage(fromUserId, imMessageSendReqVO);
// 2. 保存到收件箱并发送消息 // 2. 保存到收件箱并发送消息
inboxService.saveInboxAndSendMessage(message); imInboxService.saveInboxAndSendMessage(message);
return message; return message;
} }
@ -83,7 +83,7 @@ public class MessageServiceImpl implements MessageService {
.setSendFrom(ImMessageSourceEnum.USER_SEND.getSource()) .setSendFrom(ImMessageSourceEnum.USER_SEND.getSource())
.setMessageStatus(ImMessageStatusEnum.SENDING.getStatus()) .setMessageStatus(ImMessageStatusEnum.SENDING.getStatus())
.setSendTime(TimeUtil.now()); .setSendTime(TimeUtil.now());
messageMapper.insert(imMessageDO); imMessageMapper.insert(imMessageDO);
return imMessageDO; return imMessageDO;
} }
@ -96,7 +96,7 @@ public class MessageServiceImpl implements MessageService {
} }
} else if (message.getConversationType().equals(ImConversationTypeEnum.GROUP.getType())) { } else if (message.getConversationType().equals(ImConversationTypeEnum.GROUP.getType())) {
// 校验群聊是否存在 // 校验群聊是否存在
List<ImGroupMemberDO> imGroupMemberDOS = groupMemberService.selectByGroupId(message.getReceiverId()); List<ImGroupMemberDO> imGroupMemberDOS = imGroupMemberService.selectByGroupId(message.getReceiverId());
if (imGroupMemberDOS.isEmpty()) { if (imGroupMemberDOS.isEmpty()) {
throw exception(MESSAGE_RECEIVER_NOT_EXISTS); throw exception(MESSAGE_RECEIVER_NOT_EXISTS);
} }