Commit 782314f17f2aaa68f95d1209f0c6ce3b1e0da84b
1 parent
a4901a84
✨ feat(im): 增加群聊消息的管理
Showing
5 changed files
with
49 additions
and
6 deletions
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/ImGroupMessageManagerController.java
| ... | ... | @@ -26,9 +26,15 @@ import org.springframework.web.bind.annotation.RequestParam; |
| 26 | 26 | import org.springframework.web.bind.annotation.RestController; |
| 27 | 27 | |
| 28 | 28 | import java.util.Map; |
| 29 | +import java.util.Objects; | |
| 30 | +import java.util.Set; | |
| 31 | +import java.util.stream.Stream; | |
| 29 | 32 | |
| 30 | 33 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 34 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | |
| 31 | 35 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| 36 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSetByFlatMap; | |
| 37 | +import static cn.iocoder.yudao.module.im.enums.ImCommonConstants.AT_USER_ID_ALL; | |
| 32 | 38 | |
| 33 | 39 | @Tag(name = "管理后台 - IM 群聊消息") |
| 34 | 40 | @RestController |
| ... | ... | @@ -53,15 +59,24 @@ public class ImGroupMessageManagerController { |
| 53 | 59 | if (CollUtil.isEmpty(pageResult.getList())) { |
| 54 | 60 | return success(PageResult.empty(pageResult.getTotal())); |
| 55 | 61 | } |
| 56 | - // 2.1 批量查询群名称、发送人昵称 | |
| 62 | + // 2.1 批量查询群名称、发送人昵称、@ 用户昵称(-1 表示 @所有人,跳过查询,由前端判断渲染) | |
| 57 | 63 | Map<Long, ImGroupDO> groupMap = groupService.getGroupMap( |
| 58 | 64 | convertSet(pageResult.getList(), ImGroupMessageDO::getGroupId)); |
| 59 | - Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( | |
| 60 | - convertSet(pageResult.getList(), ImGroupMessageDO::getSenderId)); | |
| 61 | - // 2.2 转换为 VO,填充群名 / 发送人昵称 | |
| 65 | + Set<Long> userIds = convertSetByFlatMap(pageResult.getList(), m -> Stream.concat( | |
| 66 | + Stream.of(m.getSenderId()), | |
| 67 | + CollUtil.emptyIfNull(m.getAtUserIds()).stream() | |
| 68 | + .filter(id -> !Objects.equals(id, AT_USER_ID_ALL)))); | |
| 69 | + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds); | |
| 70 | + // 2.2 转换为 VO,填充群名 / 发送人昵称 / @ 用户昵称(-1 位置留 null,由前端展示「@所有人」) | |
| 62 | 71 | return success(BeanUtils.toBean(pageResult, ImGroupMessageManagerRespVO.class, vo -> { |
| 63 | 72 | MapUtils.findAndThen(groupMap, vo.getGroupId(), group -> vo.setGroupName(group.getName())); |
| 64 | 73 | MapUtils.findAndThen(userMap, vo.getSenderId(), user -> vo.setSenderNickname(user.getNickname())); |
| 74 | + if (CollUtil.isNotEmpty(vo.getAtUserIds())) { | |
| 75 | + vo.setAtUserNicknames(convertList(vo.getAtUserIds(), id -> { | |
| 76 | + AdminUserRespDTO user = userMap.get(id); | |
| 77 | + return user != null ? user.getNickname() : null; | |
| 78 | + })); | |
| 79 | + } | |
| 65 | 80 | })); |
| 66 | 81 | } |
| 67 | 82 | ... | ... |
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/vo/group/ImGroupMessageManagerRespVO.java
| ... | ... | @@ -37,8 +37,10 @@ public class ImGroupMessageManagerRespVO { |
| 37 | 37 | @Schema(description = "消息状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") |
| 38 | 38 | private Integer status; // 参见 ImMessageStatusEnum 枚举类 |
| 39 | 39 | |
| 40 | - @Schema(description = "@ 目标用户编号列表") | |
| 40 | + @Schema(description = "@ 目标用户编号列表(-1 表示 @所有人)") | |
| 41 | 41 | private List<Long> atUserIds; |
| 42 | + @Schema(description = "@ 目标用户昵称列表(-1 位置为 null,前端根据 atUserIds 自行展示「@所有人」)") | |
| 43 | + private List<String> atUserNicknames; | |
| 42 | 44 | |
| 43 | 45 | @Schema(description = "回执状态", example = "0") |
| 44 | 46 | private Integer receiptStatus; // 参见 ImGroupMessageReceiptStatusEnum 枚举类 | ... | ... |
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/sensitiveword/ImSensitiveWordManagerController.java
| 1 | 1 | package cn.iocoder.yudao.module.im.controller.admin.manager.sensitiveword; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.collection.CollUtil; | |
| 3 | 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | |
| 7 | +import cn.iocoder.yudao.framework.common.util.number.NumberUtils; | |
| 5 | 8 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 6 | 9 | import cn.iocoder.yudao.module.im.controller.admin.manager.sensitiveword.vo.ImSensitiveWordPageReqVO; |
| 7 | 10 | import cn.iocoder.yudao.module.im.controller.admin.manager.sensitiveword.vo.ImSensitiveWordRespVO; |
| 8 | 11 | import cn.iocoder.yudao.module.im.controller.admin.manager.sensitiveword.vo.ImSensitiveWordSaveReqVO; |
| 9 | 12 | import cn.iocoder.yudao.module.im.dal.dataobject.sensitiveword.ImSensitiveWordDO; |
| 10 | 13 | import cn.iocoder.yudao.module.im.service.sensitiveword.ImSensitiveWordService; |
| 14 | +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | |
| 15 | +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | |
| 11 | 16 | import io.swagger.v3.oas.annotations.Operation; |
| 12 | 17 | import io.swagger.v3.oas.annotations.Parameter; |
| 13 | 18 | import io.swagger.v3.oas.annotations.tags.Tag; |
| ... | ... | @@ -18,8 +23,10 @@ import org.springframework.validation.annotation.Validated; |
| 18 | 23 | import org.springframework.web.bind.annotation.*; |
| 19 | 24 | |
| 20 | 25 | import java.util.List; |
| 26 | +import java.util.Map; | |
| 21 | 27 | |
| 22 | 28 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 29 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | |
| 23 | 30 | |
| 24 | 31 | @Tag(name = "管理后台 - IM 敏感词") |
| 25 | 32 | @RestController |
| ... | ... | @@ -29,6 +36,8 @@ public class ImSensitiveWordManagerController { |
| 29 | 36 | |
| 30 | 37 | @Resource |
| 31 | 38 | private ImSensitiveWordService sensitiveWordService; |
| 39 | + @Resource | |
| 40 | + private AdminUserApi adminUserApi; | |
| 32 | 41 | |
| 33 | 42 | @PostMapping("/create") |
| 34 | 43 | @Operation(summary = "新增敏感词") |
| ... | ... | @@ -68,8 +77,18 @@ public class ImSensitiveWordManagerController { |
| 68 | 77 | @PreAuthorize("@ss.hasPermission('im:manager:sensitive-word:query')") |
| 69 | 78 | public CommonResult<PageResult<ImSensitiveWordRespVO>> getSensitiveWordPage( |
| 70 | 79 | @Valid ImSensitiveWordPageReqVO pageReqVO) { |
| 80 | + // 1. 分页查询 | |
| 71 | 81 | PageResult<ImSensitiveWordDO> pageResult = sensitiveWordService.getSensitiveWordPage(pageReqVO); |
| 72 | - return success(BeanUtils.toBean(pageResult, ImSensitiveWordRespVO.class)); | |
| 82 | + if (CollUtil.isEmpty(pageResult.getList())) { | |
| 83 | + return success(PageResult.empty(pageResult.getTotal())); | |
| 84 | + } | |
| 85 | + // 2.1 批量查询创建人昵称 | |
| 86 | + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertSet(pageResult.getList(), | |
| 87 | + word -> NumberUtils.parseLong(word.getCreator()))); | |
| 88 | + // 2.2 转换为 VO,填充创建人昵称 | |
| 89 | + return success(BeanUtils.toBean(pageResult, ImSensitiveWordRespVO.class, vo -> | |
| 90 | + MapUtils.findAndThen(userMap, NumberUtils.parseLong(vo.getCreator()), | |
| 91 | + user -> vo.setCreatorName(user.getNickname())))); | |
| 73 | 92 | } |
| 74 | 93 | |
| 75 | 94 | @GetMapping("/get") | ... | ... |
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/sensitiveword/vo/ImSensitiveWordRespVO.java
| ... | ... | @@ -20,6 +20,8 @@ public class ImSensitiveWordRespVO { |
| 20 | 20 | |
| 21 | 21 | @Schema(description = "创建人") |
| 22 | 22 | private String creator; |
| 23 | + @Schema(description = "创建人昵称", example = "张三") | |
| 24 | + private String creatorName; | |
| 23 | 25 | |
| 24 | 26 | @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) |
| 25 | 27 | private LocalDateTime createTime; | ... | ... |
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/enums/ImCommonConstants.java