diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/dataobject/message/ImChannelMessageDO.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/dataobject/message/ImChannelMessageDO.java index c7f4171..2572828 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/dataobject/message/ImChannelMessageDO.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/dataobject/message/ImChannelMessageDO.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.im.dal.dataobject.message; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler; +import cn.iocoder.yudao.module.im.dal.dataobject.channel.ImChannelDO; +import cn.iocoder.yudao.module.im.dal.dataobject.channel.ImChannelMaterialDO; import cn.iocoder.yudao.module.im.enums.message.ImMessageTypeEnum; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImChannelMessageServiceImpl.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImChannelMessageServiceImpl.java index f8e3e51..0ef7ff2 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImChannelMessageServiceImpl.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImChannelMessageServiceImpl.java @@ -56,8 +56,9 @@ public class ImChannelMessageServiceImpl implements ImChannelMessageService { // 1. 校验素材存在 ImChannelMaterialDO material = channelMaterialService.validateMaterialExists(reqVO.getMaterialId()); - // 2.1 组装 payload(不带富文本正文);字段同名直接 BeanUtils 拷贝 - String payloadJson = JsonUtils.toJsonString(BeanUtils.toBean(material, MaterialMessage.class)); + // 2.1 组装 payload(不带富文本正文);字段同名直接 BeanUtils 拷贝,materialId 单独 set 以兼容转发场景 + MaterialMessage payload = BeanUtils.toBean(material, MaterialMessage.class).setMaterialId(material.getId()); + String payloadJson = JsonUtils.toJsonString(payload); // 2.2 落库 1 行 message;reqVO 同名字段(materialId / receiverUserIds)自动拷贝,剩余字段补 set ImChannelMessageDO message = BeanUtils.toBean(reqVO, ImChannelMessageDO.class).setChannelId(material.getChannelId()) .setType(ImMessageTypeEnum.MATERIAL.getType()).setContent(payloadJson).setSendTime(LocalDateTime.now()); diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/websocket/dto/message/MaterialMessage.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/websocket/dto/message/MaterialMessage.java index 42af051..9ef4308 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/websocket/dto/message/MaterialMessage.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/websocket/dto/message/MaterialMessage.java @@ -15,13 +15,22 @@ import lombok.experimental.Accessors; public class MaterialMessage { /** + * 素材编号 + */ + private Long materialId; + /** + * 频道编号 + *

+ * 冗余到 payload 内;转发到私聊 / 群聊后客户端用本字段定位频道,渲染卡片底部的频道头像 + 名称 + */ + private Long channelId; + /** * 素材内容类型 *

* 枚举 {@link cn.iocoder.yudao.module.im.enums.channel.ImChannelMaterialTypeEnum} * 客户端按本字段判定点击行为:CONTENT 走站内详情页拉富文本;LINK 跳 url */ private Integer type; - /** * 标题 */