Commit 14090be672d2302f9d76b2a01034d3dfc1a134c5

Authored by YunaiV
1 parent 6e1a8dc3

feat(im):将"免打扰"字段从 muted 全量重命名为 silent(DO/VO/Service/Mapper/测试/SQL + 前端 types/st…

…ore/组件/管理后台),为后续 mute 禁言功能腾出词族
Showing 20 changed files with 86 additions and 54 deletions
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/friend/vo/ImFriendRespVO.java
... ... @@ -21,7 +21,7 @@ public class ImFriendRespVO {
21 21 private Long friendUserId;
22 22  
23 23 @Schema(description = "是否免打扰", example = "false")
24   - private Boolean muted;
  24 + private Boolean silent;
25 25  
26 26 @Schema(description = "好友展示备注(仅自己可见)", example = "老张")
27 27 private String displayName;
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/friend/vo/ImFriendUpdateReqVO.java
... ... @@ -14,7 +14,7 @@ public class ImFriendUpdateReqVO {
14 14 private Long friendUserId;
15 15  
16 16 @Schema(description = "是否免打扰;不传表示不修改", example = "true")
17   - private Boolean muted;
  17 + private Boolean silent;
18 18  
19 19 @Schema(description = "好友展示备注(仅自己可见);不传表示不修改,传空串表示清空", example = "老张")
20 20 @Size(max = 16, message = "好友备注最多 16 个字符")
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/member/ImGroupMemberRespVO.java
... ... @@ -25,7 +25,7 @@ public class ImGroupMemberRespVO {
25 25 private String groupRemark;
26 26  
27 27 @Schema(description = "是否免打扰")
28   - private Boolean muted;
  28 + private Boolean silent;
29 29  
30 30 @Schema(description = "成员状态", example = "0")
31 31 private Integer status;
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/member/ImGroupMemberUpdateReqVO.java
... ... @@ -21,6 +21,6 @@ public class ImGroupMemberUpdateReqVO {
21 21 private String groupRemark;
22 22  
23 23 @Schema(description = "是否免打扰")
24   - private Boolean muted;
  24 + private Boolean silent;
25 25  
26 26 }
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/friend/vo/ImFriendManagerPageReqVO.java
... ... @@ -25,7 +25,7 @@ public class ImFriendManagerPageReqVO extends PageParam {
25 25 private Integer status; // 参见 CommonStatusEnum 枚举类
26 26  
27 27 @Schema(description = "是否免打扰", example = "false")
28   - private Boolean muted;
  28 + private Boolean silent;
29 29  
30 30 @Schema(description = "添加好友时间", example = "[2026-04-01 00:00:00, 2026-04-30 23:59:59]")
31 31 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/friend/vo/ImFriendManagerRespVO.java
... ... @@ -28,7 +28,7 @@ public class ImFriendManagerRespVO {
28 28 private String displayName;
29 29  
30 30 @Schema(description = "是否免打扰", requiredMode = Schema.RequiredMode.REQUIRED, example = "false")
31   - private Boolean muted;
  31 + private Boolean silent;
32 32  
33 33 @Schema(description = "好友状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
34 34 private Integer status; // 参见 CommonStatusEnum 枚举类
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/group/vo/member/ImGroupMemberManagerRespVO.java
... ... @@ -25,7 +25,7 @@ public class ImGroupMemberManagerRespVO {
25 25 private String groupRemark;
26 26  
27 27 @Schema(description = "是否免打扰", example = "false")
28   - private Boolean muted;
  28 + private Boolean silent;
29 29  
30 30 @Schema(description = "成员状态", example = "0")
31 31 private Integer status; // 参见 CommonStatusEnum 枚举类
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/dataobject/friend/ImFriendDO.java
... ... @@ -15,7 +15,7 @@ import java.time.LocalDateTime;
15 15 * 业务语义:
16 16 * - 双向关系:A-B 互为好友会存 2 条记录(userId=A, friendUserId=B 和 userId=B, friendUserId=A)
17 17 * - 状态管理:{@link #status} 使用 {@link CommonStatusEnum},ENABLE=正常,DISABLE=已删除
18   - * - 免打扰:{@link #muted} 控制是否屏蔽来自该好友的通知
  18 + * - 免打扰:{@link #silent} 控制是否屏蔽来自该好友的通知
19 19 * - 联系人置顶:{@link #pinned} 单边,影响联系人 / 会话排序
20 20 * - 黑名单:{@link #blocked} 弱关联 friend,单边屏蔽对方消息(必须先是好友)
21 21 *
... ... @@ -51,7 +51,7 @@ public class ImFriendDO extends BaseDO {
51 51 /**
52 52 * 是否免打扰
53 53 */
54   - private Boolean muted;
  54 + private Boolean silent;
55 55 /**
56 56 * 好友展示备注
57 57 */
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/dataobject/group/ImGroupMemberDO.java
... ... @@ -53,7 +53,7 @@ public class ImGroupMemberDO extends BaseDO {
53 53 /**
54 54 * 是否免打扰
55 55 */
56   - private Boolean muted;
  56 + private Boolean silent;
57 57 /**
58 58 * 成员状态
59 59 * <p>
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/friend/ImFriendMapper.java
... ... @@ -50,7 +50,7 @@ public interface ImFriendMapper extends BaseMapperX&lt;ImFriendDO&gt; {
50 50 .eqIfPresent(ImFriendDO::getUserId, reqVO.getUserId())
51 51 .eqIfPresent(ImFriendDO::getFriendUserId, reqVO.getFriendUserId())
52 52 .eqIfPresent(ImFriendDO::getStatus, reqVO.getStatus())
53   - .eqIfPresent(ImFriendDO::getMuted, reqVO.getMuted())
  53 + .eqIfPresent(ImFriendDO::getSilent, reqVO.getSilent())
54 54 .betweenIfPresent(ImFriendDO::getAddTime, reqVO.getAddTime())
55 55 .orderByDesc(ImFriendDO::getId));
56 56 }
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/enums/message/ImMessageTypeEnum.java
... ... @@ -84,9 +84,9 @@ public enum ImMessageTypeEnum implements ArrayValuable&lt;Integer&gt; {
84 84 */
85 85 FRIEND_INFO_UPDATED(1209, "好友资料变更", false, false),
86 86 /**
87   - * 对应 OpenIM:FriendsInfoUpdateNotification 1210(窄化到 muted / pinned 单边属性)
  87 + * 对应 OpenIM:FriendsInfoUpdateNotification 1210(窄化到 silent / pinned 单边属性)
88 88 * 对应自己的类:FriendUpdateNotification
89   - * 场景:A 改了 muted / pinned 等单边属性,推 A 多端
  89 + * 场景:A 改了 silent / pinned 等单边属性,推 A 多端
90 90 */
91 91 FRIEND_UPDATE(1210, "好友信息批量更新", false, false),
92 92  
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/framework/config/ImProperties.java 0 → 100644
  1 +package cn.iocoder.yudao.module.im.framework.config;
  2 +
  3 +import lombok.Data;
  4 +import org.springframework.boot.context.properties.ConfigurationProperties;
  5 +import org.springframework.stereotype.Component;
  6 +
  7 +/**
  8 + * IM 模块全局配置
  9 + * <p>
  10 + * 各子模块用嵌套 inner class 区分(friend / 后续 group / sensitive 等),
  11 + * yaml 路径保持 yudao.im.{module}.{key} 与原有部署保持兼容
  12 + *
  13 + * @author 芋道源码
  14 + */
  15 +@Component
  16 +@ConfigurationProperties(prefix = "yudao.im")
  17 +@Data
  18 +public class ImProperties {
  19 +
  20 + private Friend friend = new Friend();
  21 +
  22 + /**
  23 + * 好友模块配置
  24 + */
  25 + @Data
  26 + public static class Friend {
  27 +
  28 + /**
  29 + * 是否自动通过所有好友申请(全局开关)
  30 + * <p>
  31 + * 默认 false,普通用户必须走申请-审批流程;开启后所有用户的好友申请会立即同意,主要用于全员开放型 IM 部署。
  32 + * 如需细化到「仅特定用户自动通过」(如机器人 / AI 账号),请在 system 用户表加字段,并在 applyFriend 内按用户级开关短路
  33 + */
  34 + private boolean autoAccept = false;
  35 +
  36 + }
  37 +
  38 +}
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/friend/ImFriendServiceImpl.java
... ... @@ -95,7 +95,7 @@ public class ImFriendServiceImpl implements ImFriendService {
95 95 @Override
96 96 public void updateFriend(Long userId, ImFriendUpdateReqVO reqVO) {
97 97 // 1.1 校验:至少改一个字段(无字段变更,直接结束)
98   - if (reqVO.getDisplayName() == null && reqVO.getMuted() == null && reqVO.getPinned() == null) {
  98 + if (reqVO.getDisplayName() == null && reqVO.getSilent() == null && reqVO.getPinned() == null) {
99 99 return;
100 100 }
101 101 // 1.2 校验好友关系存在
... ... @@ -106,13 +106,11 @@ public class ImFriendServiceImpl implements ImFriendService {
106 106  
107 107 // 2. 更新好友属性(备注 / 免打扰 / 联系人置顶)
108 108 friendMapper.updateById(new ImFriendDO().setId(friend.getId())
109   - .setMuted(reqVO.getMuted())
110   - .setDisplayName(reqVO.getDisplayName())
111   - .setPinned(reqVO.getPinned()));
  109 + .setSilent(reqVO.getSilent()).setDisplayName(reqVO.getDisplayName()).setPinned(reqVO.getPinned()));
112 110  
113 111 // 3. 推 FRIEND_UPDATE 给 A 多端:所有单边属性变更合并为单条通知,避免多通知顺序竞争
114 112 FriendUpdateNotification payload = (FriendUpdateNotification) new FriendUpdateNotification()
115   - .setDisplayName(reqVO.getDisplayName()).setMuted(reqVO.getMuted()).setPinned(reqVO.getPinned())
  113 + .setDisplayName(reqVO.getDisplayName()).setSilent(reqVO.getSilent()).setPinned(reqVO.getPinned())
116 114 .setOperatorUserId(userId).setFriendUserId(reqVO.getFriendUserId());
117 115 websocketService.sendPrivateMessageAsync(userId, ImPrivateMessageDTO.ofFriendNotification(
118 116 ImMessageTypeEnum.FRIEND_UPDATE.getType(), userId, userId, payload));
... ... @@ -245,7 +243,7 @@ public class ImFriendServiceImpl implements ImFriendService {
245 243  
246 244 /**
247 245 * 单向绑定好友关系(内部方法,被 {@link #becomeFriends} / {@link #silentReAddFriend} 调用):
248   - * - 情况一:已存在记录(含 ENABLE / DISABLE)→ 复用并恢复 ENABLE,muted / pinned / blocked 一并重置为 false
  246 + * - 情况一:已存在记录(含 ENABLE / DISABLE)→ 复用并恢复 ENABLE,silent / pinned / blocked 一并重置为 false
249 247 * - 情况二:不存在记录 → 直接插入新记录
250 248 * <p>
251 249 * 并发安全:agree 路径由 {@code friend_request.handle_result} 的乐观锁单边推进;
... ... @@ -255,11 +253,11 @@ public class ImFriendServiceImpl implements ImFriendService {
255 253 */
256 254 public void addFriend0(Long userId, Long friendUserId, String displayName, Integer addSource) {
257 255 ImFriendDO exists = friendMapper.selectByUserIdAndFriendUserId(userId, friendUserId);
258   - // 情况一:复用旧记录 → 恢复 ENABLE + 重置 muted / pinned / blocked 与首次新增对齐
  256 + // 情况一:复用旧记录 → 恢复 ENABLE + 重置 silent / pinned / blocked 与首次新增对齐
259 257 if (exists != null) {
260 258 ImFriendDO update = new ImFriendDO().setId(exists.getId())
261 259 .setStatus(CommonStatusEnum.ENABLE.getStatus()).setAddTime(LocalDateTime.now())
262   - .setMuted(false).setPinned(false).setBlocked(false);
  260 + .setSilent(false).setPinned(false).setBlocked(false);
263 261 if (displayName != null) {
264 262 update.setDisplayName(displayName);
265 263 }
... ... @@ -271,7 +269,7 @@ public class ImFriendServiceImpl implements ImFriendService {
271 269 }
272 270 // 情况二:不存在记录 → 直接插入新记录
273 271 ImFriendDO friend = ImFriendDO.builder().userId(userId).friendUserId(friendUserId)
274   - .muted(false).pinned(false).blocked(false)
  272 + .silent(false).pinned(false).blocked(false)
275 273 .displayName(displayName).addSource(addSource)
276 274 .status(CommonStatusEnum.ENABLE.getStatus()).addTime(LocalDateTime.now()).build();
277 275 friendMapper.insert(friend);
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImpl.java
... ... @@ -222,14 +222,14 @@ public class ImGroupMemberServiceImpl implements ImGroupMemberService {
222 222 groupMessageService.sendGroupMessage(userId, ImGroupMessageSendDTO.ofGroupMemberNicknameUpdate(
223 223 groupId, userId, updateReqVO.getDisplayUserName()));
224 224 }
225   - // 3.2 muted / groupRemark 是个人字段,仅推自己做多端同步;与旧值都相同跳过
226   - boolean mutedChanged = updateReqVO.getMuted() != null
227   - && ObjUtil.notEqual(updateReqVO.getMuted(), member.getMuted());
  225 + // 3.2 silent / groupRemark 是个人字段,仅推自己做多端同步;与旧值都相同跳过
  226 + boolean silentChanged = updateReqVO.getSilent() != null
  227 + && ObjUtil.notEqual(updateReqVO.getSilent(), member.getSilent());
228 228 boolean groupRemarkChanged = updateReqVO.getGroupRemark() != null
229 229 && ObjUtil.notEqual(updateReqVO.getGroupRemark(), member.getGroupRemark());
230   - if (mutedChanged || groupRemarkChanged) {
  230 + if (silentChanged || groupRemarkChanged) {
231 231 groupMessageService.sendGroupMessage(userId, List.of(userId), ImGroupMessageSendDTO.ofGroupMemberSettingUpdate(
232   - groupId, userId, updateReqVO.getMuted(), updateReqVO.getGroupRemark()));
  232 + groupId, userId, updateReqVO.getSilent(), updateReqVO.getGroupRemark()));
233 233 }
234 234 }
235 235  
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/message/dto/ImGroupMessageSendDTO.java
... ... @@ -136,8 +136,7 @@ public class ImGroupMessageSendDTO {
136 136 public static ImGroupMessageSendDTO ofGroupNoticeUpdate(Long groupId, Long operatorUserId, String oldNotice, String newNotice) {
137 137 GroupNoticeUpdateNotification notification = new GroupNoticeUpdateNotification();
138 138 notification.setOperatorUserId(operatorUserId);
139   - notification.setOldNotice(oldNotice);
140   - notification.setNewNotice(newNotice);
  139 + notification.setOldNotice(oldNotice).setNewNotice(newNotice);
141 140 return new ImGroupMessageSendDTO().setGroupId(groupId)
142 141 .setType(ImMessageTypeEnum.GROUP_NOTICE_UPDATE.getType()).setContent(notification);
143 142 }
... ... @@ -145,17 +144,15 @@ public class ImGroupMessageSendDTO {
145 144 public static ImGroupMessageSendDTO ofGroupNameUpdate(Long groupId, Long operatorUserId, String oldName, String newName) {
146 145 GroupNameUpdateNotification notification = new GroupNameUpdateNotification();
147 146 notification.setOperatorUserId(operatorUserId);
148   - notification.setOldName(oldName);
149   - notification.setNewName(newName);
  147 + notification.setOldName(oldName).setNewName(newName);
150 148 return new ImGroupMessageSendDTO().setGroupId(groupId)
151 149 .setType(ImMessageTypeEnum.GROUP_NAME_UPDATE.getType()).setContent(notification);
152 150 }
153 151  
154   - public static ImGroupMessageSendDTO ofGroupMemberSettingUpdate(Long groupId, Long operatorUserId, Boolean muted, String groupRemark) {
  152 + public static ImGroupMessageSendDTO ofGroupMemberSettingUpdate(Long groupId, Long operatorUserId, Boolean silent, String groupRemark) {
155 153 GroupMemberSettingUpdateNotification notification = new GroupMemberSettingUpdateNotification();
156 154 notification.setOperatorUserId(operatorUserId);
157   - notification.setMuted(muted);
158   - notification.setGroupRemark(groupRemark);
  155 + notification.setSilent(silent).setGroupRemark(groupRemark);
159 156 return new ImGroupMessageSendDTO().setGroupId(groupId)
160 157 .setType(ImMessageTypeEnum.GROUP_MEMBER_SETTING_UPDATE.getType()).setContent(notification);
161 158 }
... ... @@ -164,8 +161,7 @@ public class ImGroupMessageSendDTO {
164 161 cn.iocoder.yudao.module.im.dal.dataobject.message.ImGroupMessageDO message) {
165 162 GroupMessagePinNotification notification = new GroupMessagePinNotification();
166 163 notification.setOperatorUserId(operatorUserId);
167   - notification.setMessageId(message.getId());
168   - notification.setMessage(message);
  164 + notification.setMessageId(message.getId()).setMessage(message);
169 165 return new ImGroupMessageSendDTO().setGroupId(groupId)
170 166 .setType(ImMessageTypeEnum.GROUP_MESSAGE_PIN.getType()).setContent(notification);
171 167 }
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/websocket/dto/notification/friend/FriendUpdateNotification.java
... ... @@ -18,7 +18,7 @@ public class FriendUpdateNotification extends BaseFriendNotification {
18 18 /**
19 19 * 免打扰;不为空则更新
20 20 */
21   - private Boolean muted;
  21 + private Boolean silent;
22 22 /**
23 23 * 联系人置顶;不为空则更新
24 24 */
... ...
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/websocket/dto/notification/group/GroupMemberSettingUpdateNotification.java
... ... @@ -5,7 +5,7 @@ import lombok.Data;
5 5 /**
6 6 * 群成员个人设置变更事件通知(个人多端同步)
7 7 * <p>
8   - * muted / groupRemark 字段 null 表示本次未变更,前端按非 null 局部更新
  8 + * silent / groupRemark 字段 null 表示本次未变更,前端按非 null 局部更新
9 9 */
10 10 @Data
11 11 public class GroupMemberSettingUpdateNotification extends BaseGroupNotification {
... ... @@ -13,7 +13,7 @@ public class GroupMemberSettingUpdateNotification extends BaseGroupNotification
13 13 /**
14 14 * 群免打扰
15 15 */
16   - private Boolean muted;
  16 + private Boolean silent;
17 17 /**
18 18 * 群备注
19 19 */
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/friend/ImFriendServiceImplTest.java
... ... @@ -81,19 +81,19 @@ public class ImFriendServiceImplTest extends BaseMockitoUnitTest {
81 81 // 准备
82 82 ImFriendUpdateReqVO reqVO = new ImFriendUpdateReqVO();
83 83 reqVO.setFriendUserId(2L);
84   - reqVO.setMuted(true);
  84 + reqVO.setSilent(true);
85 85 ImFriendDO friend = ImFriendDO.builder().id(100L).userId(1L).friendUserId(2L)
86   - .muted(false).status(CommonStatusEnum.ENABLE.getStatus()).build();
  86 + .silent(false).status(CommonStatusEnum.ENABLE.getStatus()).build();
87 87 when(imFriendMapper.selectByUserIdAndFriendUserId(1L, 2L)).thenReturn(friend);
88 88  
89 89 // 调用
90 90 friendService.updateFriend(1L, reqVO);
91 91  
92   - // 断言:更新了 muted 字段
  92 + // 断言:更新了 silent 字段
93 93 ArgumentCaptor<ImFriendDO> captor = ArgumentCaptor.forClass(ImFriendDO.class);
94 94 verify(imFriendMapper).updateById(captor.capture());
95 95 assertEquals(100L, captor.getValue().getId());
96   - assertTrue(captor.getValue().getMuted());
  96 + assertTrue(captor.getValue().getSilent());
97 97 // 断言:推送了好友更新通知
98 98 verify(imWebSocketService).sendPrivateMessageAsync(eq(1L), any(ImPrivateMessageDTO.class));
99 99 }
... ... @@ -103,7 +103,7 @@ public class ImFriendServiceImplTest extends BaseMockitoUnitTest {
103 103 // 准备
104 104 ImFriendUpdateReqVO reqVO = new ImFriendUpdateReqVO();
105 105 reqVO.setFriendUserId(2L);
106   - reqVO.setMuted(true);
  106 + reqVO.setSilent(true);
107 107 when(imFriendMapper.selectByUserIdAndFriendUserId(1L, 2L)).thenReturn(null);
108 108  
109 109 // 调用并断言
... ... @@ -114,34 +114,34 @@ public class ImFriendServiceImplTest extends BaseMockitoUnitTest {
114 114  
115 115 @Test
116 116 public void testUpdateFriend_displayNameOnly() {
117   - // 准备:只传备注、不传 muted —— 走差量更新
  117 + // 准备:只传备注、不传 silent —— 走差量更新
118 118 ImFriendUpdateReqVO reqVO = new ImFriendUpdateReqVO();
119 119 reqVO.setFriendUserId(2L);
120 120 reqVO.setDisplayName("老张");
121 121 ImFriendDO friend = ImFriendDO.builder().id(100L).userId(1L).friendUserId(2L)
122   - .muted(false).status(CommonStatusEnum.ENABLE.getStatus()).build();
  122 + .silent(false).status(CommonStatusEnum.ENABLE.getStatus()).build();
123 123 when(imFriendMapper.selectByUserIdAndFriendUserId(1L, 2L)).thenReturn(friend);
124 124  
125 125 // 调用
126 126 friendService.updateFriend(1L, reqVO);
127 127  
128   - // 断言:updateById 收到 displayName 但没有 muted(MyBatis-Plus 靠 NOT_NULL 跳过)
  128 + // 断言:updateById 收到 displayName 但没有 silent(MyBatis-Plus 靠 NOT_NULL 跳过)
129 129 ArgumentCaptor<ImFriendDO> captor = ArgumentCaptor.forClass(ImFriendDO.class);
130 130 verify(imFriendMapper).updateById(captor.capture());
131 131 assertEquals(100L, captor.getValue().getId());
132 132 assertEquals("老张", captor.getValue().getDisplayName());
133   - assertNull(captor.getValue().getMuted());
  133 + assertNull(captor.getValue().getSilent());
134 134 // 断言:推送好友更新通知
135 135 verify(imWebSocketService).sendPrivateMessageAsync(eq(1L), any(ImPrivateMessageDTO.class));
136 136 }
137 137  
138 138 @Test
139 139 public void testUpdateFriend_emptyRequest() {
140   - // 准备:muted 和 displayName 都不传 —— 直接返回,不打 SQL 也不发推送
  140 + // 准备:silent 和 displayName 都不传 —— 直接返回,不打 SQL 也不发推送
141 141 ImFriendUpdateReqVO reqVO = new ImFriendUpdateReqVO();
142 142 reqVO.setFriendUserId(2L);
143 143 ImFriendDO friend = ImFriendDO.builder().id(100L).userId(1L).friendUserId(2L)
144   - .muted(false).status(CommonStatusEnum.ENABLE.getStatus()).build();
  144 + .silent(false).status(CommonStatusEnum.ENABLE.getStatus()).build();
145 145 when(imFriendMapper.selectByUserIdAndFriendUserId(1L, 2L)).thenReturn(friend);
146 146  
147 147 // 调用
... ...
yudao-module-im/src/test/java/cn/iocoder/yudao/module/im/service/group/ImGroupMemberServiceImplTest.java
... ... @@ -233,14 +233,14 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
233 233 when(groupMemberMapper.selectByGroupIdAndUserId(10L, 1L)).thenReturn(member);
234 234  
235 235 ImGroupMemberUpdateReqVO reqVO = new ImGroupMemberUpdateReqVO()
236   - .setGroupId(10L).setMuted(true).setDisplayUserName("昵称");
  236 + .setGroupId(10L).setSilent(true).setDisplayUserName("昵称");
237 237  
238 238 groupMemberService.updateGroupMember(1L, reqVO);
239 239  
240 240 ArgumentCaptor<ImGroupMemberDO> captor = ArgumentCaptor.forClass(ImGroupMemberDO.class);
241 241 verify(groupMemberMapper).updateById(captor.capture());
242 242 assertEquals(50L, captor.getValue().getId());
243   - assertTrue(captor.getValue().getMuted());
  243 + assertTrue(captor.getValue().getSilent());
244 244 verify(webSocketService).sendGroupMessageAsync(eq(1L), any(ImGroupMessageDTO.class));
245 245 }
246 246  
... ...
yudao-module-im/src/test/resources/sql/create_tables.sql
... ... @@ -64,7 +64,7 @@ CREATE TABLE IF NOT EXISTS &quot;im_group_member&quot; (
64 64 "user_id" bigint NOT NULL COMMENT '用户编号',
65 65 "display_user_name" varchar(64) DEFAULT NULL COMMENT '组内显示名',
66 66 "group_remark" varchar(64) DEFAULT NULL COMMENT '群备注',
67   - "muted" bit DEFAULT FALSE COMMENT '是否免打扰',
  67 + "silent" bit DEFAULT FALSE COMMENT '是否免打扰',
68 68 "status" tinyint NOT NULL COMMENT '成员状态',
69 69 "role" tinyint NOT NULL DEFAULT 3 COMMENT '成员角色:1=群主 2=管理员 3=普通成员',
70 70 "join_time" timestamp DEFAULT NULL COMMENT '入群时间',
... ... @@ -82,7 +82,7 @@ CREATE TABLE IF NOT EXISTS &quot;im_friend&quot; (
82 82 "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '编号',
83 83 "user_id" bigint NOT NULL COMMENT '用户编号',
84 84 "friend_user_id" bigint NOT NULL COMMENT '好友用户编号',
85   - "muted" bit DEFAULT FALSE COMMENT '是否免打扰',
  85 + "silent" bit DEFAULT FALSE COMMENT '是否免打扰',
86 86 "display_name" varchar(64) NOT NULL DEFAULT '' COMMENT '好友展示备注(仅自己可见)',
87 87 "add_source" tinyint DEFAULT NULL COMMENT '添加来源',
88 88 "pinned" bit DEFAULT FALSE COMMENT '是否置顶联系人',
... ...