Commit a48fd21b by 罗长华

添加设置会话置顶 设置会话免打扰接口

parent 47b8b698
package com.wecloud.im.controller;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ListConversationMembersParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.vo.ConversationMemberVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -17,7 +16,13 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ListConversationMembersParam;
import com.wecloud.im.param.SetConversationDoNotDisturbParam;
import com.wecloud.im.param.SetConversationTopParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.vo.ConversationMemberVo;
/**
* 会话成员表 控制器
......@@ -71,5 +76,41 @@ public class ImConversationMembersController extends BaseController {
return ApiResult.ok(imConversationMembersService.getImConversationMembersList(listConversationMembersParam));
}
/**
* 会话置顶
* @Author luozh
* @Date 2022年04月26日 11:48:59
* @param
* @Return
*/
@ApiOperation(value = "会话置顶")
@PostMapping("/sdk/setTop")
public ApiResult<Boolean> setTop(@RequestBody SetConversationTopParam param) {
Long appId = SecurityUtils.getCurrentAppId();
String clientId = param.getClientId();
Long conversationId = param.getConversationId();
Boolean top = param.getTop();
imConversationMembersService.setTop(appId, clientId, conversationId, top);
return ApiResult.ok();
}
/**
* 设置免打扰
* @Author luozh
* @Date 2022年04月26日 11:49:55
* @param
* @Return
*/
@ApiOperation(value = "会话免打扰")
@PostMapping("/sdk/setDoNotDisturb")
public ApiResult<Boolean> setDoNotDisturb(@RequestBody SetConversationDoNotDisturbParam param) {
Long appId = SecurityUtils.getCurrentAppId();
String clientId = param.getClientId();
Long conversationId = param.getConversationId();
Boolean doNotDisturb = param.getDoNotDisturb();
imConversationMembersService.setDoNotDisturb(appId, clientId, conversationId, doNotDisturb);
return ApiResult.ok();
}
}
......@@ -12,6 +12,7 @@ import java.util.Date;
import javax.validation.constraints.NotNull;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
/**
......@@ -80,4 +81,12 @@ public class ImConversationMembers extends BaseEntity {
@ApiModelProperty("客户方提供的唯一id")
private String clientId;
@ApiModelProperty("免打扰开关 0-关闭 1开启")
@TableField("is_do_not_disturb")
private Boolean doNotDisturb;
@ApiModelProperty("置顶开关 0-关闭 1开启")
@TableField("is_top")
private Boolean top;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 设置会话免打扰入参
* @Author luozh
* @Date 2022年04月26日 11:54
* @Version 1.0
*/
@Data
@ApiModel("设置会话免打扰入参")
public class SetConversationDoNotDisturbParam {
@ApiModelProperty("客户端id")
String clientId;
@ApiModelProperty("会话id")
Long conversationId;
@ApiModelProperty("是否免打扰")
Boolean doNotDisturb;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 设置会话置顶入参
* @Author luozh
* @Date 2022年04月26日 11:52
* @Version 1.0
*/
@Data
public class SetConversationTopParam {
@ApiModelProperty("客户端id")
String clientId;
@ApiModelProperty("会话id")
Long conversationId;
@ApiModelProperty("是否免打扰")
private Boolean top;
}
package com.wecloud.im.service;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.param.*;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.vo.ConversationMemberVo;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import java.util.List;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.param.ApiImConversationMembersPageParam;
import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo;
import com.wecloud.im.param.ListConversationMembersParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.vo.ConversationMemberVo;
/**
* 会话成员表 服务类
*
......@@ -115,4 +122,21 @@ public interface ImConversationMembersService extends BaseService<ImConversation
*/
void setAdminsForConversation(SetAdminsParam param, List<Long> fkClientIds);
/**
* 置顶
* @Author luozh
* @Date 2022年04月25日 06:24:43
* @param
* @Return
*/
Boolean setTop(Long appId, String clientId, Long conversationId, Boolean top);
/**
* 设置免打扰
* @Author luozh
* @Date 2022年04月25日 06:24:43
* @param
* @Return
*/
Boolean setDoNotDisturb(Long appId, String clientId, Long conversationId, Boolean doNotDisturb);
}
package com.wecloud.im.service.impl;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import lombok.extern.slf4j.Slf4j;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Maps;
import com.wecloud.im.entity.ImApplication;
......@@ -12,29 +29,26 @@ import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.mapper.ImConversationMapper;
import com.wecloud.im.mapper.ImConversationMembersMapper;
import com.wecloud.im.param.*;
import com.wecloud.im.param.ApiImConversationMembersPageParam;
import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo;
import com.wecloud.im.param.ListConversationMembersParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.service.*;
import com.wecloud.im.service.ContextService;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.vo.ConversationMemberVo;
import com.wecloud.im.ws.enums.MsgTypeEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum;
import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender;
import com.wecloud.utils.JsonUtils;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 会话成员表 服务实现类
......@@ -244,4 +258,33 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
imConversationMembersMapper.setAdminsForConversation(param.getConversationId(), fkClientIds, role);
}
@Override
public Boolean setTop(Long appId, String clientId, Long conversationId, Boolean top) {
// 找到对应的会话
ImConversationMembers conversation =
baseMapper.selectOne(Wrappers.<ImConversationMembers>lambdaQuery()
.eq(ImConversationMembers::getClientId, clientId)
.eq(ImConversationMembers::getFkConversationId, conversationId)
.eq(ImConversationMembers::getFkAppid, appId));
if (conversation == null) {
throw new BusinessException("会话不存在");
}
return update(Wrappers.<ImConversationMembers>lambdaUpdate().eq(ImConversationMembers::getId, conversation.getId()).set(ImConversationMembers::getTop, top));
}
@Override
public Boolean setDoNotDisturb(Long appId, String clientId, Long conversationId, Boolean doNotDisturb) {
// 找到对应的会话
ImConversationMembers conversation =
baseMapper.selectOne(Wrappers.<ImConversationMembers>lambdaQuery()
.eq(ImConversationMembers::getClientId, clientId)
.eq(ImConversationMembers::getFkConversationId, conversationId)
.eq(ImConversationMembers::getFkAppid, appId));
if (conversation == null) {
throw new BusinessException("会话不存在");
}
return update(Wrappers.<ImConversationMembers>lambdaUpdate().eq(ImConversationMembers::getId,
conversation.getId()).set(ImConversationMembers::getDoNotDisturb, doNotDisturb));
}
}
......@@ -208,8 +208,17 @@ CREATE TABLE `im_rtc_log`
`event_type` int(1) DEFAULT NULL COMMENT '事件类型 1成为房主, 2加入频道,3退出频道,4拒绝邀请 ,5上传sdp, 6上传candidate',
`remark` text COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='RTC日志记录表';
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='RTC日志记录表';
SET
FOREIGN_KEY_CHECKS = 1;
FOREIGN_KEY_CHECKS = 1;
alter table im_application
add COLUMN `online_status_subscribe_url` varchar(512) DEFAULT '' COMMENT '在线状态订阅地址';
alter table im_application
add COLUMN `full_message_subscribe_url` varchar(512) DEFAULT '' COMMENT '全量消息订阅地址';
alter table `im_conversation_members`
add column `is_do_not_disturb` tinyint(1) unsigned default 0 comment '免打扰开关 0-关闭 1开启';
alter table `im_conversation_members`
add column `is_top` tinyint(1) unsigned default 0 comment '置顶开关 0-关闭 1开启';
......@@ -36,5 +36,15 @@ public class ResourcePathConstants {
*/
public static final String GET_FRIENDS = "/api/friend/sdk/getFriends";
/**
* 设置会话置顶
*/
public static final String SET_CONVERSATION_TOP = "/api/imConversationMembers/sdk/setTop";
/**
* 设置会话免打扰
*/
public static final String SET_CONVERSATION_DO_NOT_DISTURB = "/api/imConversationMembers/sdk/setDoNotDisturb";
}
......@@ -67,4 +67,26 @@ public interface WecloudIm {
* @Return
*/
List<Friend> getFriends(String userId);
/**
* 设置会话置顶
* @Author luozh
* @Date 2022年04月26日 03:33:44
* @param userId 用户id
* @param conversationId 会话id
* @param top 是否置
* @Return
*/
Boolean setConversationTop(String userId, Long conversationId, Boolean top);
/**
* 设置会话免打扰
* @Author luozh
* @Date 2022年04月26日 03:33:44
* @param userId 用户id
* @param conversationId 会话id
* @param doNotDisturb 是否免打扰
* @Return
*/
Boolean setConversationDoNotDisturb(String userId, Long conversationId, Boolean doNotDisturb);
}
......@@ -4,6 +4,7 @@ import java.net.URL;
import java.util.List;
import com.wecloud.im.sdk.internal.WecloudImClientOperation;
import com.wecloud.im.sdk.internal.WecloudImConversationOperation;
import com.wecloud.im.sdk.model.ClientLoginRequest;
import com.wecloud.im.sdk.model.Friend;
import com.wecloud.im.sdk.model.GetFriendsRequest;
......@@ -11,6 +12,8 @@ import com.wecloud.im.sdk.model.GetUnsureFriendsRequest;
import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.ModifyUserRequest;
import com.wecloud.im.sdk.model.RegisterClientRequest;
import com.wecloud.im.sdk.model.SetConversationDoNotDisturbRequest;
import com.wecloud.im.sdk.model.SetConversationTopRequest;
import com.wecloud.im.sdk.model.Token;
import com.wecloud.im.sdk.model.UnsureFriend;
......@@ -37,9 +40,11 @@ public class WecloudImClient implements WecloudIm {
*/
private String appSecret;
/* The miscellaneous OSS operations */
/* The miscellaneous IM operations */
private WecloudImClientOperation imClientOperation;
private WecloudImConversationOperation imConversationOperation;
public WecloudImClient(URL apiDomain, String appKey, String appSecret) {
this.apiDomain = apiDomain;
this.appKey = appKey;
......@@ -86,7 +91,24 @@ public class WecloudImClient implements WecloudIm {
return imClientOperation.getFriends(getFriendsRequest);
}
@Override
public Boolean setConversationTop(String userId, Long conversationId, Boolean top) {
SetConversationTopRequest setConversationTopRequest =
SetConversationTopRequest.builder().userId(userId).conversationId(conversationId).top(top).build();
return imConversationOperation.setConversationTop(setConversationTopRequest);
}
@Override
public Boolean setConversationDoNotDisturb(String userId, Long conversationId, Boolean doNotDisturb) {
SetConversationDoNotDisturbRequest setConversationDoNotDisturbRequest =
SetConversationDoNotDisturbRequest.builder().userId(userId).conversationId(conversationId).doNotDisturb(doNotDisturb).build();
return imConversationOperation.setConversationDoNotDisturb(setConversationDoNotDisturbRequest);
}
private void initOperations() {
this.imClientOperation = new WecloudImClientOperation(apiDomain, appKey, appSecret);
this.imConversationOperation = new WecloudImConversationOperation(apiDomain, appKey, appSecret);
}
}
package com.wecloud.im.sdk.internal;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import com.wecloud.im.sdk.common.HttpMethod;
import com.wecloud.im.sdk.common.RequestMessage;
import com.wecloud.im.sdk.model.SetConversationDoNotDisturbRequest;
import com.wecloud.im.sdk.model.SetConversationTopRequest;
import static com.wecloud.im.sdk.ResourcePathConstants.REGISTER_CLIENT_URL;
import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotNull;
/**
* client
* @Author luozh
* @Date 2022年04月13日 15:26
* @Version 1.0
*/
public class WecloudImConversationOperation extends WecloudImOperation {
public WecloudImConversationOperation(URL apiDomain, String appKey, String appSecret) {
super(apiDomain, appKey, appSecret);
}
/**
* 设置会话置顶
* @Author luozh
* @Date 2022年04月26日 03:57:51
* @param setConversationTopRequest
* @Return
*/
public Boolean setConversationTop(SetConversationTopRequest setConversationTopRequest) {
String userId = setConversationTopRequest.getUserId();
Long conversationId = setConversationTopRequest.getConversationId();
Boolean top = setConversationTopRequest.getTop();
// 参数校验
assertParameterNotNull(userId, "userId");
assertParameterNotNull(conversationId, "conversationId");
assertParameterNotNull(top, "top");
// 校验通过 构建参数
Map<String, String> param = new HashMap<>();
param.put("clientId", userId);
param.put("conversationId", conversationId.toString());
param.put("top", top.toString());
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(REGISTER_CLIENT_URL)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(setConversationTopRequest).build();
doOperation(request);
return true;
}
/**
* 设置会话免打扰
* @Author luozh
* @Date 2022年04月26日 03:58:10
* @param setConversationDoNotDisturbRequest 设置会话免打扰
* @Return
*/
public Boolean setConversationDoNotDisturb(SetConversationDoNotDisturbRequest setConversationDoNotDisturbRequest) {
String userId = setConversationDoNotDisturbRequest.getUserId();
Long conversationId = setConversationDoNotDisturbRequest.getConversationId();
Boolean doNotDisturb = setConversationDoNotDisturbRequest.getDoNotDisturb();
// 参数校验
assertParameterNotNull(userId, "userId");
assertParameterNotNull(conversationId, "conversationId");
assertParameterNotNull(doNotDisturb, "doNotDisturb");
// 校验通过 构建参数
Map<String, String> param = new HashMap<>();
param.put("clientId", userId);
param.put("conversationId", conversationId.toString());
param.put("doNotDisturb", doNotDisturb.toString());
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(REGISTER_CLIENT_URL)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(setConversationDoNotDisturbRequest).build();
doOperation(request);
return true;
}
}
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 设置会话免打扰入参
* @Author luozh
* @Date 2022年04月26日 11:54
* @Version 1.0
*/
@Builder
@EqualsAndHashCode(callSuper = true)
@Data
public class SetConversationDoNotDisturbRequest extends WebServiceRequest {
/**
* 客户端id
*/
String userId;
/**
* 会话id
*/
Long conversationId;
/**
* 是否免打扰
*/
Boolean doNotDisturb;
}
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 设置会话置顶入参
* @Author luozh
* @Date 2022年04月26日 11:52
* @Version 1.0
*/
@Builder
@EqualsAndHashCode(callSuper = true)
@Data
public class SetConversationTopRequest extends WebServiceRequest {
/**
* 客户端id
*/
String userId;
/**
* 会话id
*/
Long conversationId;
/**
* 是否免打扰
*/
private Boolean top;
}
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