diff --git a/yudao-module-im/yudao-module-im-biz/pom.xml b/yudao-module-im/yudao-module-im-biz/pom.xml
index 76c1a8b95e..9c6eba3d16 100644
--- a/yudao-module-im/yudao-module-im-biz/pom.xml
+++ b/yudao-module-im/yudao-module-im-biz/pom.xml
@@ -60,6 +60,11 @@
cn.iocoder.boot
yudao-spring-boot-starter-websocket
+
+
+ org.redisson
+ redisson-spring-boot-starter
+
\ 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/inbox/InboxController.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/ImInboxController.java
similarity index 65%
rename from yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/InboxController.java
rename to yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/ImInboxController.java
index 63a62f1869..4912f72c46 100755
--- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/InboxController.java
+++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/ImInboxController.java
@@ -6,11 +6,11 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
-import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.InboxPageReqVO;
-import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.InboxRespVO;
-import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.InboxSaveReqVO;
+import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.ImInboxPageReqVO;
+import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.ImInboxRespVO;
+import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.ImInboxSaveReqVO;
import cn.iocoder.yudao.module.im.dal.dataobject.inbox.ImInboxDO;
-import cn.iocoder.yudao.module.im.service.inbox.InboxService;
+import cn.iocoder.yudao.module.im.service.inbox.ImInboxService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -31,23 +31,23 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E
@RestController
@RequestMapping("/im/inbox")
@Validated
-public class InboxController {
+public class ImInboxController {
@Resource
- private InboxService inboxService;
+ private ImInboxService imInboxService;
@PostMapping("/create")
@Operation(summary = "创建收件箱")
@PreAuthorize("@ss.hasPermission('im:inbox:create')")
- public CommonResult createInbox(@Valid @RequestBody InboxSaveReqVO createReqVO) {
- return success(inboxService.createInbox(createReqVO));
+ public CommonResult createInbox(@Valid @RequestBody ImInboxSaveReqVO createReqVO) {
+ return success(imInboxService.createInbox(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新收件箱")
@PreAuthorize("@ss.hasPermission('im:inbox:update')")
- public CommonResult updateInbox(@Valid @RequestBody InboxSaveReqVO updateReqVO) {
- inboxService.updateInbox(updateReqVO);
+ public CommonResult updateInbox(@Valid @RequestBody ImInboxSaveReqVO updateReqVO) {
+ imInboxService.updateInbox(updateReqVO);
return success(true);
}
@@ -56,7 +56,7 @@ public class InboxController {
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('im:inbox:delete')")
public CommonResult deleteInbox(@RequestParam("id") Long id) {
- inboxService.deleteInbox(id);
+ imInboxService.deleteInbox(id);
return success(true);
}
@@ -64,30 +64,30 @@ public class InboxController {
@Operation(summary = "获得收件箱")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('im:inbox:query')")
- public CommonResult getInbox(@RequestParam("id") Long id) {
- ImInboxDO inbox = inboxService.getInbox(id);
- return success(BeanUtils.toBean(inbox, InboxRespVO.class));
+ public CommonResult getInbox(@RequestParam("id") Long id) {
+ ImInboxDO inbox = imInboxService.getInbox(id);
+ return success(BeanUtils.toBean(inbox, ImInboxRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得收件箱分页")
@PreAuthorize("@ss.hasPermission('im:inbox:query')")
- public CommonResult> getInboxPage(@Valid InboxPageReqVO pageReqVO) {
- PageResult pageResult = inboxService.getInboxPage(pageReqVO);
- return success(BeanUtils.toBean(pageResult, InboxRespVO.class));
+ public CommonResult> getInboxPage(@Valid ImInboxPageReqVO pageReqVO) {
+ PageResult pageResult = imInboxService.getInboxPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ImInboxRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出收件箱 Excel")
@PreAuthorize("@ss.hasPermission('im:inbox:export')")
@OperateLog(type = EXPORT)
- public void exportInboxExcel(@Valid InboxPageReqVO pageReqVO,
+ public void exportInboxExcel(@Valid ImInboxPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
- List list = inboxService.getInboxPage(pageReqVO).getList();
+ List list = imInboxService.getInboxPage(pageReqVO).getList();
// 导出 Excel
- ExcelUtils.write(response, "收件箱.xls", "数据", InboxRespVO.class,
- BeanUtils.toBean(list, InboxRespVO.class));
+ ExcelUtils.write(response, "收件箱.xls", "数据", ImInboxRespVO.class,
+ BeanUtils.toBean(list, ImInboxRespVO.class));
}
}
\ No newline at end of file
diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/InboxPageReqVO.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/ImInboxPageReqVO.java
similarity index 95%
rename from yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/InboxPageReqVO.java
rename to yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/ImInboxPageReqVO.java
index 7eba083fa0..edd77c9384 100755
--- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/InboxPageReqVO.java
+++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/ImInboxPageReqVO.java
@@ -15,7 +15,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
-public class InboxPageReqVO extends PageParam {
+public class ImInboxPageReqVO extends PageParam {
@Schema(description = "用户编号", example = "3979")
private Long userId;
diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/InboxRespVO.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/ImInboxRespVO.java
similarity index 97%
rename from yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/InboxRespVO.java
rename to yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/ImInboxRespVO.java
index b098ce5a00..e2a4243325 100755
--- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/InboxRespVO.java
+++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/ImInboxRespVO.java
@@ -10,7 +10,7 @@ import java.time.LocalDateTime;
@Schema(description = "管理后台 - 收件箱 Response VO")
@Data
@ExcelIgnoreUnannotated
-public class InboxRespVO {
+public class ImInboxRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18389")
@ExcelProperty("编号")
diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/InboxSaveReqVO.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/ImInboxSaveReqVO.java
similarity index 74%
rename from yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/InboxSaveReqVO.java
rename to yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/ImInboxSaveReqVO.java
index cb6e38a874..37504919ee 100755
--- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/InboxSaveReqVO.java
+++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/inbox/vo/ImInboxSaveReqVO.java
@@ -2,11 +2,15 @@ package cn.iocoder.yudao.module.im.controller.admin.inbox.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.NoArgsConstructor;
@Schema(description = "管理后台 - 收件箱新增/修改 Request VO")
@Data
-public class InboxSaveReqVO {
+@AllArgsConstructor
+@NoArgsConstructor
+public class ImInboxSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18389")
private Long id;
@@ -23,4 +27,10 @@ public class InboxSaveReqVO {
@NotNull(message = "序号,按照 user 递增不能为空")
private Long sequence;
+ public ImInboxSaveReqVO(Long userId, Long messageId, Long sequence) {
+ this.userId = userId;
+ this.messageId = messageId;
+ this.sequence = sequence;
+ }
+
}
\ 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 f0ca03d17b..eabe62b93a 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
@@ -90,10 +90,4 @@ public class ImMessageController {
BeanUtils.toBean(list, ImMessageRespVO.class));
}
- @PostMapping("/send")
- @Operation(summary = "发送私聊消息")
- public CommonResult sendMessage(@Valid @RequestBody ImMessageSaveReqVO imMessageSaveReqVO) {
- return success(imMessageService.sendPrivateMessage(imMessageSaveReqVO));
- }
-
}
\ 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
index fe861c5532..90426d09ad 100755
--- 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
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.im.dal.mysql.inbox;
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.inbox.vo.InboxPageReqVO;
+import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.ImInboxPageReqVO;
import cn.iocoder.yudao.module.im.dal.dataobject.inbox.ImInboxDO;
import org.apache.ibatis.annotations.Mapper;
@@ -15,7 +15,7 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface InboxMapper extends BaseMapperX {
- default PageResult selectPage(InboxPageReqVO reqVO) {
+ default PageResult selectPage(ImInboxPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX()
.eqIfPresent(ImInboxDO::getUserId, reqVO.getUserId())
.eqIfPresent(ImInboxDO::getMessageId, reqVO.getMessageId())
diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/redis/RedisKeyConstants.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/redis/RedisKeyConstants.java
new file mode 100644
index 0000000000..906c892968
--- /dev/null
+++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/redis/RedisKeyConstants.java
@@ -0,0 +1,17 @@
+package cn.iocoder.yudao.module.im.dal.redis;
+
+
+/**
+ * im Redis Key 枚举类
+ *
+ * @author 芋道源码
+ */
+public interface RedisKeyConstants {
+
+ /**
+ * 收件箱序号生成器
+ * KEY 格式: im:inbox:sequence:{userId}
+ * VALUE 数据类型: String
+ */
+ String INBOX_SEQUENCE = "im_inbox_sequence:%s";
+}
diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/redis/inbox/SequenceGeneratorRedisDao.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/redis/inbox/SequenceGeneratorRedisDao.java
new file mode 100644
index 0000000000..ff6dd71ba8
--- /dev/null
+++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/dal/redis/inbox/SequenceGeneratorRedisDao.java
@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.module.im.dal.redis.inbox;
+
+import jakarta.annotation.Resource;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Repository;
+
+import static cn.iocoder.yudao.module.im.dal.redis.RedisKeyConstants.INBOX_SEQUENCE;
+
+/**
+ * 序号生成器 Redis DAO
+ *
+ * @author anhaohao
+ */
+@Repository
+public class SequenceGeneratorRedisDao {
+
+ @Resource
+ private RedisTemplate redisTemplate;
+
+ private static String formatKey(Long userId) {
+ return String.format(INBOX_SEQUENCE, userId);
+ }
+
+ public Long generateSequence(Long userId) {
+ return redisTemplate.opsForValue().increment(formatKey(userId), 1);
+ }
+
+}
diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationService.java
index 0980a92e50..504591d95e 100755
--- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationService.java
+++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/conversation/ImConversationService.java
@@ -51,4 +51,5 @@ public interface ImConversationService {
*/
PageResult getConversationPage(ImConversationPageReqVO 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/inbox/InboxService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxService.java
similarity index 68%
rename from yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/InboxService.java
rename to yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxService.java
index ba28404d39..45fc80dd05 100755
--- 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/ImInboxService.java
@@ -1,8 +1,8 @@
package cn.iocoder.yudao.module.im.service.inbox;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.InboxPageReqVO;
-import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.InboxSaveReqVO;
+import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.ImInboxPageReqVO;
+import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.ImInboxSaveReqVO;
import cn.iocoder.yudao.module.im.dal.dataobject.inbox.ImInboxDO;
import jakarta.validation.Valid;
@@ -11,7 +11,7 @@ import jakarta.validation.Valid;
*
* @author 芋道源码
*/
-public interface InboxService {
+public interface ImInboxService {
/**
* 创建收件箱
@@ -19,14 +19,14 @@ public interface InboxService {
* @param createReqVO 创建信息
* @return 编号
*/
- Long createInbox(@Valid InboxSaveReqVO createReqVO);
+ Long createInbox(@Valid ImInboxSaveReqVO createReqVO);
/**
* 更新收件箱
*
* @param updateReqVO 更新信息
*/
- void updateInbox(@Valid InboxSaveReqVO updateReqVO);
+ void updateInbox(@Valid ImInboxSaveReqVO updateReqVO);
/**
* 删除收件箱
@@ -49,6 +49,6 @@ public interface InboxService {
* @param pageReqVO 分页查询
* @return 收件箱分页
*/
- PageResult getInboxPage(InboxPageReqVO pageReqVO);
+ PageResult getInboxPage(ImInboxPageReqVO 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/inbox/InboxServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxServiceImpl.java
similarity index 80%
rename from yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/InboxServiceImpl.java
rename to yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/inbox/ImInboxServiceImpl.java
index 350cde3624..eabaaa9d62 100755
--- 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/ImInboxServiceImpl.java
@@ -2,8 +2,8 @@ package cn.iocoder.yudao.module.im.service.inbox;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.InboxPageReqVO;
-import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.InboxSaveReqVO;
+import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.ImInboxPageReqVO;
+import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.ImInboxSaveReqVO;
import cn.iocoder.yudao.module.im.dal.dataobject.inbox.ImInboxDO;
import cn.iocoder.yudao.module.im.dal.mysql.inbox.InboxMapper;
import jakarta.annotation.Resource;
@@ -20,13 +20,13 @@ import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.INBOX_NOT_EXIS
*/
@Service
@Validated
-public class InboxServiceImpl implements InboxService {
+public class ImInboxServiceImpl implements ImInboxService {
@Resource
private InboxMapper inboxMapper;
@Override
- public Long createInbox(InboxSaveReqVO createReqVO) {
+ public Long createInbox(ImInboxSaveReqVO createReqVO) {
// 插入
ImInboxDO inbox = BeanUtils.toBean(createReqVO, ImInboxDO.class);
inboxMapper.insert(inbox);
@@ -35,7 +35,7 @@ public class InboxServiceImpl implements InboxService {
}
@Override
- public void updateInbox(InboxSaveReqVO updateReqVO) {
+ public void updateInbox(ImInboxSaveReqVO updateReqVO) {
// 校验存在
validateInboxExists(updateReqVO.getId());
// 更新
@@ -63,7 +63,7 @@ public class InboxServiceImpl implements InboxService {
}
@Override
- public PageResult getInboxPage(InboxPageReqVO pageReqVO) {
+ public PageResult getInboxPage(ImInboxPageReqVO pageReqVO) {
return inboxMapper.selectPage(pageReqVO);
}
diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java
index 37af3a10da..6a53f613be 100755
--- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java
+++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageService.java
@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessagePageReqVO;
import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSaveReqVO;
import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO;
+import cn.iocoder.yudao.module.im.websocket.message.ImSendMessage;
import jakarta.validation.Valid;
/**
@@ -51,10 +52,13 @@ public interface ImMessageService {
*/
PageResult getMessagePage(ImMessagePageReqVO pageReqVO);
+
/**
- * 发送私聊消息
- * @param imMessageSaveReqVO 消息信息
- * @return 消息编号
+ * 保存私聊消息
+ *
+ * @param imSendMessage 消息信息
+ * @param fromUserId 发送人编号
+ * @return id
*/
- Long sendPrivateMessage(ImMessageSaveReqVO imMessageSaveReqVO);
+ Long savePrivateMessage(ImSendMessage imSendMessage, Long fromUserId);
}
\ No newline at end of file
diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java
index 81ab53819f..2110503516 100755
--- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java
+++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/message/ImMessageServiceImpl.java
@@ -6,6 +6,9 @@ import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessagePageReqVO
import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSaveReqVO;
import cn.iocoder.yudao.module.im.dal.dataobject.message.ImMessageDO;
import cn.iocoder.yudao.module.im.dal.mysql.message.ImMessageMapper;
+import cn.iocoder.yudao.module.im.websocket.message.ImSendMessage;
+import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
+import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@@ -24,6 +27,8 @@ public class ImMessageServiceImpl implements ImMessageService {
@Resource
private ImMessageMapper imMessageMapper;
+ @Resource
+ private AdminUserApi adminUserApi;
@Override
public Long createMessage(ImMessageSaveReqVO createReqVO) {
@@ -67,9 +72,24 @@ public class ImMessageServiceImpl implements ImMessageService {
return imMessageMapper.selectPage(pageReqVO);
}
+
@Override
- public Long sendPrivateMessage(ImMessageSaveReqVO imMessageSaveReqVO) {
- return 0L;
+ public Long savePrivateMessage(ImSendMessage message, Long fromUserId) {
+ ImMessageSaveReqVO imMessageSaveReqVO = new ImMessageSaveReqVO();
+ imMessageSaveReqVO.setClientMessageId(message.getClientMessageId());
+ imMessageSaveReqVO.setSenderId(fromUserId);
+ imMessageSaveReqVO.setReceiverId(message.getReceiverId());
+ //查询发送人昵称和发送人头像
+ AdminUserRespDTO user = adminUserApi.getUser(fromUserId);
+ imMessageSaveReqVO.setSenderNickname(user.getNickname());
+ imMessageSaveReqVO.setSenderAvatar(user.getAvatar());
+ imMessageSaveReqVO.setConversationType(message.getConversationType());
+ imMessageSaveReqVO.setContentType(message.getContentType());
+ imMessageSaveReqVO.setConversationNo("1");
+ imMessageSaveReqVO.setContent(message.getContent());
+ //消息来源 100-用户发送;200-系统发送(一般是通知);不能为空
+ imMessageSaveReqVO.setSendFrom(100);
+ return createMessage(imMessageSaveReqVO);
}
}
\ No newline at end of file
diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/websocket/ImWebSocketMessageListener.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/websocket/ImWebSocketMessageListener.java
index b03588453a..17bf9e66a6 100644
--- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/websocket/ImWebSocketMessageListener.java
+++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/websocket/ImWebSocketMessageListener.java
@@ -4,15 +4,14 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.websocket.core.listener.WebSocketMessageListener;
import cn.iocoder.yudao.framework.websocket.core.sender.WebSocketMessageSender;
import cn.iocoder.yudao.framework.websocket.core.util.WebSocketFrameworkUtils;
-import cn.iocoder.yudao.module.im.controller.admin.conversation.vo.ImConversationSaveReqVO;
-import cn.iocoder.yudao.module.im.controller.admin.message.vo.ImMessageSaveReqVO;
+import cn.iocoder.yudao.module.im.controller.admin.inbox.vo.ImInboxSaveReqVO;
+import cn.iocoder.yudao.module.im.dal.redis.inbox.SequenceGeneratorRedisDao;
import cn.iocoder.yudao.module.im.enums.conversation.ImConversationTypeEnum;
import cn.iocoder.yudao.module.im.service.conversation.ImConversationService;
+import cn.iocoder.yudao.module.im.service.inbox.ImInboxService;
import cn.iocoder.yudao.module.im.service.message.ImMessageService;
import cn.iocoder.yudao.module.im.websocket.message.ImReceiveMessage;
import cn.iocoder.yudao.module.im.websocket.message.ImSendMessage;
-import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
-import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;
@@ -30,54 +29,23 @@ public class ImWebSocketMessageListener implements WebSocketMessageListener {
+ ImInboxSaveReqVO updateReqVO = randomPojo(ImInboxSaveReqVO.class, o -> {
o.setId(dbInbox.getId()); // 设置更新的 ID
});
@@ -69,7 +69,7 @@ public class InboxServiceImplTest extends BaseDbUnitTest {
@Test
public void testUpdateInbox_notExists() {
// 准备参数
- InboxSaveReqVO updateReqVO = randomPojo(InboxSaveReqVO.class);
+ ImInboxSaveReqVO updateReqVO = randomPojo(ImInboxSaveReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> inboxService.updateInbox(updateReqVO), INBOX_NOT_EXISTS);
@@ -118,7 +118,7 @@ public class InboxServiceImplTest extends BaseDbUnitTest {
// 测试 createTime 不匹配
inboxMapper.insert(cloneIgnoreId(dbInbox, o -> o.setCreateTime(null)));
// 准备参数
- InboxPageReqVO reqVO = new InboxPageReqVO();
+ ImInboxPageReqVO reqVO = new ImInboxPageReqVO();
reqVO.setUserId(null);
reqVO.setMessageId(null);
reqVO.setSequence(null);