Commit 2558d8c8745f6e18b30957a6829d171d486df88d

Authored by YunaiV
1 parent 34d273a2

feat(im):增加渠道消息的 get 接口

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;
23 23 import org.springframework.validation.annotation.Validated;
24 24 import org.springframework.web.bind.annotation.*;
25 25  
  26 +import java.util.Collections;
  27 +import java.util.List;
26 28 import java.util.Map;
27 29  
28 30 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
... ... @@ -62,19 +64,42 @@ public class ImChannelMessageManagerController {
62 64 @PreAuthorize("@ss.hasPermission('im:manager:channel-message:query')")
63 65 public CommonResult<PageResult<ImChannelMessageRespVO>> getMessagePage(@Valid ImChannelMessagePageReqVO pageReqVO) {
64 66 PageResult<ImChannelMessageDO> pageResult = channelMessageService.getMessagePage(pageReqVO);
65   - if (CollUtil.isEmpty(pageResult.getList())) {
66   - return success(PageResult.empty(pageResult.getTotal()));
  67 + return success(new PageResult<>(buildMessageRespVOList(pageResult.getList()), pageResult.getTotal()));
  68 + }
  69 +
  70 + @GetMapping("/get")
  71 + @Operation(summary = "获得频道消息详情")
  72 + @Parameter(name = "id", description = "消息编号", required = true, example = "1024")
  73 + @PreAuthorize("@ss.hasPermission('im:manager:channel-message:query')")
  74 + public CommonResult<ImChannelMessageRespVO> getMessage(@RequestParam("id") Long id) {
  75 + ImChannelMessageDO message = channelMessageService.getMessage(id);
  76 + return success(buildMessageRespVO(message));
  77 + }
  78 +
  79 + // ==================== 拼接 VO ====================
  80 +
  81 + private ImChannelMessageRespVO buildMessageRespVO(ImChannelMessageDO message) {
  82 + if (message == null) {
  83 + return null;
  84 + }
  85 + return CollUtil.getFirst(buildMessageRespVOList(Collections.singletonList(message)));
  86 + }
  87 +
  88 + private List<ImChannelMessageRespVO> buildMessageRespVOList(List<ImChannelMessageDO> messages) {
  89 + if (CollUtil.isEmpty(messages)) {
  90 + return Collections.emptyList();
67 91 }
68   - // 批量查询频道和素材,并回填频道名 / 素材标题
  92 + // 1. 查询关联数据
69 93 Map<Long, ImChannelDO> channelMap = channelService.getChannelMap(
70   - convertSet(pageResult.getList(), ImChannelMessageDO::getChannelId));
  94 + convertSet(messages, ImChannelMessageDO::getChannelId));
71 95 Map<Long, ImChannelMaterialDO> materialMap = channelMaterialService.getMaterialMap(
72   - convertSet(pageResult.getList(), ImChannelMessageDO::getMaterialId));
73   - return success(BeanUtils.toBean(pageResult, ImChannelMessageRespVO.class, vo -> {
74   - MapUtils.findAndThen(channelMap, vo.getChannelId(), c -> vo.setChannelName(c.getName()));
  96 + convertSet(messages, ImChannelMessageDO::getMaterialId));
  97 + // 2. 拼接 VO
  98 + return BeanUtils.toBean(messages, ImChannelMessageRespVO.class, vo -> {
  99 + MapUtils.findAndThen(channelMap, vo.getChannelId(), channel -> vo.setChannelName(channel.getName()));
75 100 MapUtils.findAndThen(materialMap, vo.getMaterialId(),
76 101 material -> vo.setMaterialTitle(material.getTitle()).setMaterialCoverUrl(material.getCoverUrl()));
77   - }));
  102 + });
78 103 }
79 104  
80 105 }
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImChannelMessageService.java
... ... @@ -66,6 +66,14 @@ public interface ImChannelMessageService {
66 66 PageResult<ImChannelMessageDO> getMessagePage(ImChannelMessagePageReqVO reqVO);
67 67  
68 68 /**
  69 + * 获得频道消息
  70 + *
  71 + * @param id 消息编号
  72 + * @return 频道消息
  73 + */
  74 + ImChannelMessageDO getMessage(Long id);
  75 +
  76 + /**
69 77 * 删除消息
70 78 *
71 79 * @param id 消息编号
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/ImChannelMessageServiceImpl.java
... ... @@ -138,6 +138,11 @@ public class ImChannelMessageServiceImpl implements ImChannelMessageService {
138 138 }
139 139  
140 140 @Override
  141 + public ImChannelMessageDO getMessage(Long id) {
  142 + return channelMessageMapper.selectById(id);
  143 + }
  144 +
  145 + @Override
141 146 public void deleteMessage(Long id) {
142 147 if (channelMessageMapper.selectById(id) == null) {
143 148 throw exception(IM_CHANNEL_MESSAGE_NOT_EXISTS);
... ...