diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/ImChannelMessageManagerController.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/ImChannelMessageManagerController.java index 36a3b60..9eeff67 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/ImChannelMessageManagerController.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/ImChannelMessageManagerController.java @@ -23,6 +23,8 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.Collections; +import java.util.List; import java.util.Map; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -62,19 +64,42 @@ public class ImChannelMessageManagerController { @PreAuthorize("@ss.hasPermission('im:manager:channel-message:query')") public CommonResult> getMessagePage(@Valid ImChannelMessagePageReqVO pageReqVO) { PageResult pageResult = channelMessageService.getMessagePage(pageReqVO); - if (CollUtil.isEmpty(pageResult.getList())) { - return success(PageResult.empty(pageResult.getTotal())); + return success(new PageResult<>(buildMessageRespVOList(pageResult.getList()), pageResult.getTotal())); + } + + @GetMapping("/get") + @Operation(summary = "获得频道消息详情") + @Parameter(name = "id", description = "消息编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('im:manager:channel-message:query')") + public CommonResult getMessage(@RequestParam("id") Long id) { + ImChannelMessageDO message = channelMessageService.getMessage(id); + return success(buildMessageRespVO(message)); + } + + // ==================== 拼接 VO ==================== + + private ImChannelMessageRespVO buildMessageRespVO(ImChannelMessageDO message) { + if (message == null) { + return null; + } + return CollUtil.getFirst(buildMessageRespVOList(Collections.singletonList(message))); + } + + private List buildMessageRespVOList(List messages) { + if (CollUtil.isEmpty(messages)) { + return Collections.emptyList(); } - // 批量查询频道和素材,并回填频道名 / 素材标题 + // 1. 查询关联数据 Map channelMap = channelService.getChannelMap( - convertSet(pageResult.getList(), ImChannelMessageDO::getChannelId)); + convertSet(messages, ImChannelMessageDO::getChannelId)); Map materialMap = channelMaterialService.getMaterialMap( - convertSet(pageResult.getList(), ImChannelMessageDO::getMaterialId)); - return success(BeanUtils.toBean(pageResult, ImChannelMessageRespVO.class, vo -> { - MapUtils.findAndThen(channelMap, vo.getChannelId(), c -> vo.setChannelName(c.getName())); + convertSet(messages, ImChannelMessageDO::getMaterialId)); + // 2. 拼接 VO + return BeanUtils.toBean(messages, ImChannelMessageRespVO.class, vo -> { + MapUtils.findAndThen(channelMap, vo.getChannelId(), channel -> vo.setChannelName(channel.getName())); MapUtils.findAndThen(materialMap, vo.getMaterialId(), material -> vo.setMaterialTitle(material.getTitle()).setMaterialCoverUrl(material.getCoverUrl())); - })); + }); } } diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImChannelMessageService.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImChannelMessageService.java index b1e00ee..8b2d474 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImChannelMessageService.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImChannelMessageService.java @@ -66,6 +66,14 @@ public interface ImChannelMessageService { PageResult getMessagePage(ImChannelMessagePageReqVO reqVO); /** + * 获得频道消息 + * + * @param id 消息编号 + * @return 频道消息 + */ + ImChannelMessageDO getMessage(Long id); + + /** * 删除消息 * * @param id 消息编号 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 fc9ad8e..84ed22a 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 @@ -138,6 +138,11 @@ public class ImChannelMessageServiceImpl implements ImChannelMessageService { } @Override + public ImChannelMessageDO getMessage(Long id) { + return channelMessageMapper.selectById(id); + } + + @Override public void deleteMessage(Long id) { if (channelMessageMapper.selectById(id) == null) { throw exception(IM_CHANNEL_MESSAGE_NOT_EXISTS);