Commit e7a06957 by 罗长华

Merge remote-tracking branch 'origin/xiaohudou_20220427' into xiaohudou_20220427

# Conflicts:
#	core/src/main/java/com/wecloud/im/service/ImConversationService.java
parents bdf13426 73928327
......@@ -12,6 +12,7 @@ import com.wecloud.im.param.ListConversationParam;
import com.wecloud.im.param.MutedGroupMemberParam;
import com.wecloud.im.param.MutedGroupParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.SetGroupPortraitParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
import com.wecloud.im.param.add.ImClientToConversation;
......@@ -25,7 +26,6 @@ import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.ws.model.WsResponse;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -33,8 +33,6 @@ import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.HashMap;
import java.util.List;
......@@ -250,6 +248,19 @@ public class ConversationAction {
}
/**
* 群头像设置
*/
@ActionMapping("/setGroupPortrait")
@ApiOperation(value = "群头像设置", notes = "权限:群主和管理员有权限操作")
public WsResponse<Map<String, Boolean>> setGroupPortrait(@Validated SetGroupPortraitParam data) {
log.info("群头像设置入参 {}", JSON.toJSONString(data));
Boolean r = imConversationService.setGroupPortrait(data);
Map<String, Boolean> result = new HashMap<>();
result.put("result", r);
return WsResponse.ok(result);
}
/**
* 用户进入聊天室
*/
@ActionMapping("/intoChatRoom")
......
......@@ -11,6 +11,7 @@ import com.wecloud.im.param.ListConversationParam;
import com.wecloud.im.param.MutedGroupMemberParam;
import com.wecloud.im.param.MutedGroupParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.SetGroupPortraitParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
import com.wecloud.im.param.add.ImClientToConversation;
......@@ -221,6 +222,17 @@ public class ImConversationController extends BaseController {
return ApiResult.ok(result);
}
/**
* 群头像设置
*/
@PostMapping("/setGroupPortrait")
@ApiOperation(value = "群头像设置", notes = "权限:群主和管理员有权限操作")
public ApiResult<Boolean> setGroupPortrait(@RequestBody @Validated SetGroupPortraitParam param) {
log.info("群头像设置入参 {}", JSON.toJSONString(param));
Boolean result = imConversationService.setGroupPortrait(param);
return ApiResult.ok(result);
}
/**
* 用户进入聊天室
......
......@@ -63,6 +63,9 @@ public class ImConversation extends BaseEntity {
@ApiModelProperty("可选 对话的名字,可为群组命名。")
private String name;
@ApiModelProperty("群头像")
private String groupPortrait;
@ApiModelProperty("可选 自定义属性,供开发者扩展使用。")
private String attributes;
......
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @Author Future
* @Date 2022/5/11 19:19
* @Description 设置群头像入参
*/
@Data
public class SetGroupPortraitParam {
@NotNull
@ApiModelProperty("会话id")
private Long conversationId;
@ApiModelProperty("群头像图片地址")
private String groupPortrait;
}
package com.wecloud.im.service;
import com.wecloud.im.param.SetGroupPortraitParam;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
......@@ -225,13 +226,20 @@ public interface ImConversationService extends BaseService<ImConversation> {
Long getRepetitionConversationAttributes(Long clientId1, Long clientId2, String attributes);
/**
* 群设置
* 群设置
* @param param
* @return
*/
Boolean groupChatSetting(GroupChatSettingParam param);
/**
* 群头像设置
* @param param
* @return
*/
Boolean setGroupPortrait(SetGroupPortraitParam param);
/**
* 用户主动进入聊天室
* @param param
* @return
......
......@@ -58,6 +58,7 @@ import com.wecloud.im.param.ListConversationParam;
import com.wecloud.im.param.MutedGroupMemberParam;
import com.wecloud.im.param.MutedGroupParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.SetGroupPortraitParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
import com.wecloud.im.param.add.ImClientToConversation;
......@@ -1097,9 +1098,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
// 保存事件消息
ImMessage imMessage = new ImMessage();
HashMap<String, String> content = Maps.newHashMap();
content.put("attributes", imConversation.getAttributes());
imMessage.setContent(JsonUtils.encodeJson(content));
HashMap<String, Object> contentMap = Maps.newHashMap();
contentMap.put("attributes", imConversation.getAttributes());
imMessage.setContent(JsonUtils.encodeJson(contentMap));
imMessage.setId(SnowflakeUtil.getId());
imMessage.setMsgType(MsgTypeEnum.CONVERSATION_EXPAND_FIELD_CHANGE.getUriCode());
imMessage.setCreateTime(new Date());
......@@ -1114,7 +1115,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
for (String key : chatRoomMembers.keySet()) {
Long fkClientId = Long.valueOf(key.split(RedisUtils.SPLIT)[0]);
sendEventMsgToMember(imConversation.getId(), currentClient.getFkAppid(), currentClient.getClientId(),
fkClientId, null, imMessage);
fkClientId, contentMap, imMessage);
}
}
......@@ -1282,6 +1283,39 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
@Override
public Boolean setGroupPortrait(SetGroupPortraitParam param) {
// 获取当前client
ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
if (!imConversationService.isBelongToRole(currentClient.getClientId(), param.getConversationId(),
Lists.newArrayList(GroupRoleEnum.OWNER.getCode(), GroupRoleEnum.ADMIN.getCode()))) {
// 当前操作人不属于群主或管理人员
throw new BusinessException("操作人既不是群主也不是群管理员,无权限操作");
}
ImConversation imConversation = imConversationService.getById(param.getConversationId());
imConversation.setGroupPortrait(param.getGroupPortrait());
boolean success = imConversationService.updateById(imConversation);
if (success) {
// 删除redis中该会话的缓存
deleteCacheImConversationById(param.getConversationId());
// 查询该会话所有成员
List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkAppid, currentClient.getFkAppid())
.eq(ImConversationMembers::getFkConversationId, param.getConversationId())
.ne(ImConversationMembers::getFkClientId, currentClient.getId())
);
ImMessage message = new ImMessage();
message.setWithdraw(Boolean.FALSE);
message.setEvent(Boolean.TRUE);
message.setMsgType(MsgTypeEnum.CONVERSATION_SET_GROUP_PORTRAIT.getUriCode());
sendMsgToMembers(param.getConversationId(), membersList, currentClient.getFkAppid(), currentClient.getClientId(), null, message);
} else {
throw new BusinessException("修改错误");
}
return true;
}
@Override
public Boolean intoChatRoom(IntoChatRoomParam param) {
if (param.getPlatform() == null) {
throw new BusinessException("平台入参不可为空");
......
......@@ -83,6 +83,9 @@ public enum MsgTypeEnum {
// 取消禁止群成员发链接
CONVERSATION_FORBID_SEND_LINK_CANCEL(-1029),
// 修改群头像
CONVERSATION_SET_GROUP_PORTRAIT(-1031),
;
private final int uriCode;
......
-- 在feature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
-- 在feature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
......@@ -155,6 +155,8 @@ CREATE TABLE `im_multi_rtc_room_member`
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='多人音视频房间成员表';
ALTER TABLE im_conversation ADD COLUMN group_portrait varchar(1000) DEFAULT NULL COMMENT '群头像';
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment