Commit 910da5db by Future

Merge branch 'xiaohudou_20220427' into feature-cluster

parents 25532764 4aefa1a1
...@@ -20,7 +20,7 @@ spring: ...@@ -20,7 +20,7 @@ spring:
# password: 123456 # password: 123456
# 测试外网 # 测试外网
url: jdbc:mysql://121.37.22.224:3306/wecloud_im_feature_cluster?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true url: jdbc:mysql://124.71.83.11:3306/wecloud_im?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username: root username: root
password: temple123456 password: temple123456
......
...@@ -63,3 +63,12 @@ rocketmq: ...@@ -63,3 +63,12 @@ rocketmq:
namesrvAddr: 124.71.83.11:9876 namesrvAddr: 124.71.83.11:9876
# 生产者的组名 # 生产者的组名
producerId: im-server producerId: im-server
sms:
huawei:
url: https://rtcsms.cn-north-1.myhuaweicloud.com:10743/sms/batchSendSms/v1
sender: 8820122113125
appKey: FKFPgk3X6VRYAMJ9r9CIJWG2709W
appSecret: gvS2S8nD01vKCA1v45qi379gu1T5
verifyCode: 666666
...@@ -2,10 +2,13 @@ package com.wecloud.im.action; ...@@ -2,10 +2,13 @@ package com.wecloud.im.action;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.wecloud.dispatch.annotation.ActionMapping; import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.ChatRoomMemberPageParam;
import com.wecloud.im.param.DisbandConversationParam; import com.wecloud.im.param.DisbandConversationParam;
import com.wecloud.im.param.ExitChatRoomParam; import com.wecloud.im.param.ExitChatRoomParam;
import com.wecloud.im.param.GroupChatSettingParam;
import com.wecloud.im.param.ImConversationQueryParam; import com.wecloud.im.param.ImConversationQueryParam;
import com.wecloud.im.param.IntoChatRoomParam; import com.wecloud.im.param.IntoChatRoomParam;
import com.wecloud.im.param.ListConversationParam;
import com.wecloud.im.param.MutedGroupMemberParam; import com.wecloud.im.param.MutedGroupMemberParam;
import com.wecloud.im.param.MutedGroupParam; import com.wecloud.im.param.MutedGroupParam;
import com.wecloud.im.param.SetAdminsParam; import com.wecloud.im.param.SetAdminsParam;
...@@ -17,10 +20,12 @@ import com.wecloud.im.param.add.ImConversationCreate; ...@@ -17,10 +20,12 @@ import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate; import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate; import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.service.ImConversationService; import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.vo.ChatRoomMemberVo;
import com.wecloud.im.vo.ConversationVo; import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo; import com.wecloud.im.vo.ImConversationCreateVo;
import com.wecloud.im.ws.model.WsResponse; import com.wecloud.im.ws.model.WsResponse;
import io.geekidea.springbootplus.framework.common.api.ApiCode; 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.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -28,6 +33,7 @@ import org.apache.commons.collections4.CollectionUtils; ...@@ -28,6 +33,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import java.util.HashMap; import java.util.HashMap;
...@@ -231,6 +237,19 @@ public class ConversationAction { ...@@ -231,6 +237,19 @@ public class ConversationAction {
} }
/** /**
* 群聊设置
*/
@ActionMapping("/groupChatSetting")
@ApiOperation(value = "群聊设置", notes = "权限:群主和管理员有权限操作")
public WsResponse<Map<String, Boolean>> groupChatSetting(@Validated GroupChatSettingParam data) {
log.info("群聊设置入参 {}", JSON.toJSONString(data));
Boolean r = imConversationService.groupChatSetting(data);
Map<String, Boolean> result = new HashMap<>();
result.put("result", r);
return WsResponse.ok(result);
}
/**
* 用户进入聊天室 * 用户进入聊天室
*/ */
@ActionMapping("/intoChatRoom") @ActionMapping("/intoChatRoom")
...@@ -258,4 +277,26 @@ public class ConversationAction { ...@@ -258,4 +277,26 @@ public class ConversationAction {
} }
/**
* 全量获取聊天室成员
*/
@PostMapping("/listChatRoomMember")
@ApiOperation(value = "全量获取聊天室成员", notes = "全量获取聊天室成员")
public WsResponse<List<ChatRoomMemberVo>> listChatRoomMember(ChatRoomMemberPageParam data) {
log.info("全量获取聊天室成员入参 {}", JSON.toJSONString(data));
List<ChatRoomMemberVo> r = imConversationService.listChatRoomMember(data);
return WsResponse.ok(r);
}
/**
* 查找会话信息
* @return
*/
@ActionMapping("/listConversation")
@ApiOperation(value = "批量查找会话信息", notes = "会话")
public WsResponse<List<ConversationVo>> listConversation(ListConversationParam data) {
List<ConversationVo> conversationList = imConversationService.listConversation(data);
return WsResponse.ok(conversationList);
}
} }
...@@ -11,8 +11,10 @@ import java.util.Map; ...@@ -11,8 +11,10 @@ import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import com.wecloud.dispatch.annotation.ActionMapping; import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.im.param.ChatSettingParam;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam; import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ListConversationMembersParam; import com.wecloud.im.param.ListConversationMembersParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate; import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
...@@ -67,10 +69,23 @@ public class ConversationMembersAction { ...@@ -67,10 +69,23 @@ public class ConversationMembersAction {
@ActionMapping("/getList") @ActionMapping("/getList")
@ApiOperation(value = "获取会话中成员表列表") @ApiOperation(value = "获取会话中成员表列表")
public WsResponse<Map<String, List<ConversationMemberVo>>> getImConversationMembersList(@Validated ListConversationMembersParam data) throws Exception { public WsResponse<Map<String, List<ConversationMemberVo>>> getImConversationMembersList(@Validated ListConversationMembersParam data) throws Exception {
List<ConversationMemberVo> conversationMemberVoList = List<ConversationMemberVo> conversationMemberVoList = imConversationMembersService.getImConversationMembersList(data);
imConversationMembersService.getImConversationMembersList(data);
Map<String, List<ConversationMemberVo>> result = new HashMap<>(); Map<String, List<ConversationMemberVo>> result = new HashMap<>();
result.put("result", conversationMemberVoList); result.put("result", conversationMemberVoList);
return WsResponse.ok(result); return WsResponse.ok(result);
} }
/**
* 聊天设置
* @Author luozh
* @Date 2022年04月26日 11:48:59
* @param
* @Return
*/
@ApiOperation(value = "聊天设置")
@ActionMapping("/chatSetting")
public WsResponse<Map<String, Boolean>> chatSetting(@RequestBody ChatSettingParam param) {
imConversationMembersService.chatSetting(param);
return WsResponse.ok();
}
} }
...@@ -12,6 +12,8 @@ import java.util.Date; ...@@ -12,6 +12,8 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
...@@ -140,6 +142,11 @@ public class NormalChatAction { ...@@ -140,6 +142,11 @@ public class NormalChatAction {
if (muted(conversation, reqId, imClientSender, membersList, request.getSenderChannel())) { if (muted(conversation, reqId, imClientSender, membersList, request.getSenderChannel())) {
return; return;
} }
// 消息内容校验
if (checkMsg(conversation, reqId, data.getText(), request.getSenderChannel())) {
return;
}
ImMessageOnlineSend imMessageOnlineSend = assembleImMessageOnlineSend(data, imClientSender, imApplication.getId()); ImMessageOnlineSend imMessageOnlineSend = assembleImMessageOnlineSend(data, imClientSender, imApplication.getId());
// 再给所有人发 todo 需要改成批量 // 再给所有人发 todo 需要改成批量
...@@ -378,9 +385,47 @@ public class NormalChatAction { ...@@ -378,9 +385,47 @@ public class NormalChatAction {
responseModel.setCode(apiResult.getCode()); responseModel.setCode(apiResult.getCode());
responseModel.setMsg(apiResult.getMessage()); responseModel.setMsg(apiResult.getMessage());
responseModel.setReqId(reqId); responseModel.setReqId(reqId);
channelSender.sendMsgLocal((NioSocketChannel)channel, responseModel); channelSender.sendMsgLocal((NioSocketChannel) channel, responseModel);
} }
return result; return result;
} }
/**
* 是否禁止发送链接
* @Author luozh
* @Date 2022年04月27日 04:39:04
* @Return
*/
private boolean checkMsg(ImConversationQueryVo conversation, String reqId,
String msgContent, Channel channel) {
boolean result = false;
// 判断是否开启禁止发送链接
if (conversation.getForbidSendLink()) {
String regex = "((ht|f)tp(s?)\\:\\/\\/)?[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*." +
"(html|htm|shtml|jsp|asp|php|com|cn|net|com.cn|org|vip)+(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\," +
"\\'\\/\\\\&%\\+\\$#_=]*)?";
Pattern pat = Pattern.compile(regex);
Matcher mat = pat.matcher(msgContent.trim());
result = mat.find();
}
if (result) {
log.info("群: {}, 已被禁止发送链接", conversation.getName());
// 响应发送方
WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>();
ApiResult<Boolean> apiResult = ApiResult.result(ApiCode.IS_BE_FORBID_SEND_LINK);
responseModel.setCmd(WsResponseCmdEnum.RES.getCmdCode());
responseModel.setCode(apiResult.getCode());
responseModel.setMsg(apiResult.getMessage());
responseModel.setReqId(reqId);
channelSender.sendMsgLocal((NioSocketChannel) channel, responseModel);
}
return result;
}
} }
package com.wecloud.im.chatroom.action; package com.wecloud.im.chatroom.action;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.Channel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.Component;
import com.wecloud.dispatch.annotation.ActionMapping; import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.dispatch.common.BaseRequest; import com.wecloud.dispatch.common.BaseRequest;
import com.wecloud.dispatch.extend.ActionRequest; import com.wecloud.dispatch.extend.ActionRequest;
...@@ -18,19 +33,6 @@ import com.wecloud.im.ws.model.WsResponse; ...@@ -18,19 +33,6 @@ import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender; import com.wecloud.im.ws.sender.ChannelSender;
import com.wecloud.utils.JsonUtils; import com.wecloud.utils.JsonUtils;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.Channel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/** /**
* @Author wenzhida * @Author wenzhida
......
...@@ -70,5 +70,17 @@ public class ImClientBlacklistController extends BaseController { ...@@ -70,5 +70,17 @@ public class ImClientBlacklistController extends BaseController {
return ApiResult.ok(blacklist); return ApiResult.ok(blacklist);
} }
/**
* 黑名单分页列表sdk用
*/
@PostMapping("/sdk/pageBlacklist")
@OperationLog(name = "黑名单分页列表", type = OperationLogType.PAGE)
@ApiOperation(value = "黑名单分页列表")
public ApiResult<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageListSdk(@RequestBody ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception {
Paging<ImClientBlacklistQueryVo> blacklist =
imClientBlacklistService.getImClientBlacklistPageListSdk(imClientBlacklistPageParam);
return ApiResult.ok(blacklist);
}
} }
package com.wecloud.im.controller; package com.wecloud.im.controller;
import com.alibaba.fastjson.JSON;
import com.wecloud.im.param.ChatRoomMemberPageParam; import com.wecloud.im.param.ChatRoomMemberPageParam;
import com.wecloud.im.param.DisbandConversationParam;
import com.wecloud.im.param.ExitChatRoomParam; import com.wecloud.im.param.ExitChatRoomParam;
import com.wecloud.im.param.GroupChatSettingParam;
import com.wecloud.im.param.ImConversationQueryParam;
import com.wecloud.im.param.IntoChatRoomParam; import com.wecloud.im.param.IntoChatRoomParam;
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.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
import com.wecloud.im.param.add.ImClientToConversation;
import com.wecloud.im.param.add.ImConversationAttrUpdate;
import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.vo.ChatRoomMemberVo; import com.wecloud.im.vo.ChatRoomMemberVo;
import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -22,22 +36,7 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -22,22 +36,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON; import java.util.List;
import com.wecloud.im.param.DisbandConversationParam;
import com.wecloud.im.param.ImConversationQueryParam;
import com.wecloud.im.param.MutedGroupMemberParam;
import com.wecloud.im.param.MutedGroupParam;
import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.TransferOwnerParam;
import com.wecloud.im.param.add.ImClientLeaveConversation;
import com.wecloud.im.param.add.ImClientToConversation;
import com.wecloud.im.param.add.ImConversationAttrUpdate;
import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo;
/** /**
* 会话表 控制器 * 会话表 控制器
...@@ -211,6 +210,17 @@ public class ImConversationController extends BaseController { ...@@ -211,6 +210,17 @@ public class ImConversationController extends BaseController {
return ApiResult.result(true); return ApiResult.result(true);
} }
/**
* 群聊设置
*/
@PostMapping("/groupChatSetting")
@ApiOperation(value = "群聊设置", notes = "权限:群主和管理员有权限操作")
public ApiResult<Boolean> groupChatSetting(@RequestBody @Validated GroupChatSettingParam param) {
log.info("群聊设置入参 {}", JSON.toJSONString(param));
Boolean result = imConversationService.groupChatSetting(param);
return ApiResult.ok(result);
}
/** /**
* 用户进入聊天室 * 用户进入聊天室
...@@ -243,6 +253,16 @@ public class ImConversationController extends BaseController { ...@@ -243,6 +253,16 @@ public class ImConversationController extends BaseController {
return ApiResult.ok(imConversationService.listChatRoomMember(param)); return ApiResult.ok(imConversationService.listChatRoomMember(param));
} }
/**
* 查找会话信息
* @return
*/
@PostMapping("/listConversation")
@ApiOperation(value = "批量查找会话信息", notes = "会话")
public ApiResult<List<ConversationVo>> listConversation(@RequestBody ListConversationParam param) {
List<ConversationVo> conversationList = imConversationService.listConversation(param);
return ApiResult.ok(conversationList);
}
} }
package com.wecloud.im.controller; package com.wecloud.im.controller;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController; import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils; import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.List; import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -16,10 +18,10 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -16,10 +18,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.wecloud.im.friend.param.ImFriendApplyParam;
import com.wecloud.im.param.ChatSettingParam;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam; import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ListConversationMembersParam; 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.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.vo.ConversationMemberVo; import com.wecloud.im.vo.ConversationMemberVo;
...@@ -77,39 +79,56 @@ public class ImConversationMembersController extends BaseController { ...@@ -77,39 +79,56 @@ public class ImConversationMembersController extends BaseController {
} }
/** /**
* 会话置顶 * 聊天设置
* @Author luozh * @Author luozh
* @Date 2022年04月26日 11:48:59 * @Date 2022年04月26日 11:48:59
* @param * @param
* @Return * @Return
*/ */
@ApiOperation(value = "会话置顶") @ApiOperation(value = "聊天设置")
@PostMapping("/sdk/setTop") @PostMapping("/chatSetting")
public ApiResult<Boolean> setTop(@RequestBody SetConversationTopParam param) { public ApiResult<Boolean> chatSetting(@RequestBody ChatSettingParam param) {
Long appId = SecurityUtils.getCurrentAppId(); return ApiResult.ok(imConversationMembersService.chatSetting(param));
String clientId = param.getClientId();
Long conversationId = param.getConversationId();
Boolean top = param.getTop();
imConversationMembersService.setTop(appId, clientId, conversationId, top);
return ApiResult.ok();
} }
/** /**
* 设置免打扰 * 群成员添加好友
* @Author luozh * @Author luozh
* @Date 2022年04月26日 11:49:55 * @Date 2022年04月28日 11:40:44
* @param * @param
* @Return * @Return
*/ */
@ApiOperation(value = "会话免打扰") @ApiOperation(value = "群成员添加好友")
@PostMapping("/sdk/setDoNotDisturb") @PostMapping("/addUser")
public ApiResult<Boolean> setDoNotDisturb(@RequestBody SetConversationDoNotDisturbParam param) { public ApiResult<Boolean> addUser(@RequestBody ImFriendApplyParam param) {
Long appId = SecurityUtils.getCurrentAppId(); if (param.getConversationId() == null) {
String clientId = param.getClientId(); throw new BusinessException(ApiCode.PARAMETER_EXCEPTION.getCode(), "参数: conversationId 不能为空");
Long conversationId = param.getConversationId(); }
Boolean doNotDisturb = param.getDoNotDisturb(); if (StringUtils.isBlank(param.getFriendName())) {
imConversationMembersService.setDoNotDisturb(appId, clientId, conversationId, doNotDisturb); throw new BusinessException(ApiCode.PARAMETER_EXCEPTION.getCode(), "参数: friendName 不能为空");
return ApiResult.ok(); }
if (StringUtils.isBlank(param.getClientId())) {
throw new BusinessException(ApiCode.PARAMETER_EXCEPTION.getCode(), "参数: clientId 不能为空");
}
if (StringUtils.isBlank(param.getFriendClientId())) {
throw new BusinessException(ApiCode.PARAMETER_EXCEPTION.getCode(), "参数: friendClientId 不能为空");
}
return ApiResult.ok(imConversationMembersService.addUser(param));
}
/**
*
* @Author luozh
* @Date 2022年04月29日 03:59:54
* @param
* @Return
*/
@ApiOperation(value = "消息发布")
@PostMapping("/publish")
public ApiResult<Boolean> publish() {
return null;
} }
} }
......
...@@ -21,8 +21,12 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -21,8 +21,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.wecloud.im.param.GetReadersParam; import com.wecloud.im.param.GetReadersParam;
import com.wecloud.im.param.GroupChatMessageParam;
import com.wecloud.im.param.GroupChatStatusMessageParam;
import com.wecloud.im.param.ImHistoryMessagePageParam; import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.MsgDeleteParam; import com.wecloud.im.param.MsgDeleteParam;
import com.wecloud.im.param.PrivateChatMessageParam;
import com.wecloud.im.param.PrivateChatStatusMessageParam;
import com.wecloud.im.param.add.ImMsgRecall; import com.wecloud.im.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgUpdate; import com.wecloud.im.param.add.ImMsgUpdate;
import com.wecloud.im.service.ImMessageService; import com.wecloud.im.service.ImMessageService;
...@@ -60,7 +64,7 @@ public class ImMessageController extends BaseController { ...@@ -60,7 +64,7 @@ public class ImMessageController extends BaseController {
@PostMapping("/delete") @PostMapping("/delete")
@ApiOperation(value = "删除消息", notes = "单条消息与批量消息删除共用") @ApiOperation(value = "删除消息", notes = "单条消息与批量消息删除共用")
public ApiResult<Boolean> deleteMsg(@RequestBody MsgDeleteParam param) { public ApiResult<Boolean> deleteMsg(@RequestBody MsgDeleteParam param) {
if(param == null) { if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
} }
if (CollectionUtils.isEmpty(param.getMsgIds())) { if (CollectionUtils.isEmpty(param.getMsgIds())) {
...@@ -109,5 +113,30 @@ public class ImMessageController extends BaseController { ...@@ -109,5 +113,30 @@ public class ImMessageController extends BaseController {
return ApiResult.ok(readerList); return ApiResult.ok(readerList);
} }
@ApiOperation("发布群聊消息")
@PostMapping("/group/publish")
public ApiResult<Boolean> groupMessagePublish(@RequestBody @Validated GroupChatMessageParam param) {
// 参数校验
return ApiResult.ok(imMessageService.groupMessagePublish(param));
}
@ApiOperation("发布群聊状态消息")
@PostMapping("/group/status/publish")
public ApiResult<Boolean> groupStatusMessagePublish(@RequestBody @Validated GroupChatStatusMessageParam param) {
return ApiResult.ok(imMessageService.groupStatusMessagePublish(param));
}
@ApiOperation("发布单聊消息")
@PostMapping("/private/publish")
public ApiResult<Boolean> privateMessagePublish(@RequestBody @Validated PrivateChatMessageParam param) {
return ApiResult.ok(imMessageService.privateMessagePublish(param));
}
@ApiOperation("发布单聊状态消息")
@PostMapping("/private/status/publish")
public ApiResult<Boolean> privateStatusMessagePublish(@RequestBody @Validated PrivateChatStatusMessageParam param) {
return ApiResult.ok(imMessageService.privateStatusMessagePublish(param));
}
} }
package com.wecloud.im.entity; package com.wecloud.im.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity; import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -9,9 +7,13 @@ import lombok.Data; ...@@ -9,9 +7,13 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
import javax.validation.constraints.NotNull;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
/** /**
* 消息存储表 * 消息存储表
* *
......
...@@ -7,9 +7,9 @@ import lombok.Data; ...@@ -7,9 +7,9 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
import java.util.Map;
import javax.validation.constraints.NotNull;
/** /**
* 消息在线推送 * 消息在线推送
...@@ -45,7 +45,7 @@ public class ImMessageOnlineSend extends BaseEntity { ...@@ -45,7 +45,7 @@ public class ImMessageOnlineSend extends BaseEntity {
private String sender; private String sender;
@ApiModelProperty("内容") @ApiModelProperty("内容")
private Map content; private Object content;
@ApiModelProperty("0未撤回; 1已撤回") @ApiModelProperty("0未撤回; 1已撤回")
private Boolean withdraw; private Boolean withdraw;
......
...@@ -94,10 +94,36 @@ public class ImFriendController extends BaseController { ...@@ -94,10 +94,36 @@ public class ImFriendController extends BaseController {
return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null); return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null);
} }
ImClient friendClient = imClientService.getCacheImClient(currentClient.getFkAppid(), param.getFriendClientId()); ImClient friendClient = imClientService.getCacheImClient(currentClient.getFkAppid(), param.getFriendClientId());
if(friendClient == null) { if (friendClient == null) {
return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null);
}
if (currentClient.getId().equals(friendClient.getId())) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
imFriendService.applyFriend(currentClient, friendClient, param.getFriendName(), param.getRequestRemark());
log.info("申请添加好友逻辑完成");
return ApiResult.ok();
}
/**
* 申请添加好友
*/
@PostMapping("/sdk/apply")
@ApiOperation(value = "申请添加好友 sdk用")
public ApiResult<Boolean> applyFriendSdk(@RequestBody ImFriendApplyParam param) {
log.info("申请添加好友入参 {}", JSON.toJSONString(param));
if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
ImClient currentClient = imClientService.getCacheImClient(SecurityUtils.getCurrentAppId(), param.getClientId());
if (currentClient == null) {
return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null);
}
ImClient friendClient = imClientService.getCacheImClient(SecurityUtils.getCurrentAppId(), param.getFriendClientId());
if (friendClient == null) {
return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null); return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null);
} }
if(currentClient.getId().equals(friendClient.getId())) { if (currentClient.getId().equals(friendClient.getId())) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
} }
imFriendService.applyFriend(currentClient, friendClient, param.getFriendName(), param.getRequestRemark()); imFriendService.applyFriend(currentClient, friendClient, param.getFriendName(), param.getRequestRemark());
......
...@@ -3,8 +3,6 @@ package com.wecloud.im.friend.param; ...@@ -3,8 +3,6 @@ package com.wecloud.im.friend.param;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
/** /**
* @Description 申请好友入参 * @Description 申请好友入参
* @Author lixiaozhong * @Author lixiaozhong
...@@ -14,6 +12,9 @@ import java.io.Serializable; ...@@ -14,6 +12,9 @@ import java.io.Serializable;
public class ImFriendApplyParam extends ImFriendBaseParam { public class ImFriendApplyParam extends ImFriendBaseParam {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty("会话id,群成员添加好友时传参")
private Long conversationId;
@ApiModelProperty("备注好友名称") @ApiModelProperty("备注好友名称")
private String friendName; private String friendName;
......
package com.wecloud.im.mapper; package com.wecloud.im.mapper;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...@@ -7,11 +14,6 @@ import com.wecloud.im.entity.ImConversation; ...@@ -7,11 +14,6 @@ import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.param.ImConversationPageParam; import com.wecloud.im.param.ImConversationPageParam;
import com.wecloud.im.param.ImConversationQueryVo; import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.vo.ConversationVo; import com.wecloud.im.vo.ConversationVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.io.Serializable;
import java.util.List;
/** /**
* 会话表 Mapper 接口 * 会话表 Mapper 接口
...@@ -46,7 +48,7 @@ public interface ImConversationMapper extends BaseMapper<ImConversation> { ...@@ -46,7 +48,7 @@ public interface ImConversationMapper extends BaseMapper<ImConversation> {
* @param currentClientId * @param currentClientId
* @return * @return
*/ */
List<ConversationVo> getMyImConversationListAndMsgCount(@Param("currentClientId") Long currentClientId,@Param("clientId") String clientId, @Param("conversationId") Long conversationId); List<ConversationVo> getMyImConversationListAndMsgCount(@Param("currentClientId") Long currentClientId, @Param("clientId") String clientId, @Param("conversationId") Long conversationId);
/** /**
* 查询用户加入的所有会话 * 查询用户加入的所有会话
...@@ -91,4 +93,15 @@ public interface ImConversationMapper extends BaseMapper<ImConversation> { ...@@ -91,4 +93,15 @@ public interface ImConversationMapper extends BaseMapper<ImConversation> {
* @return 成功则返回true * @return 成功则返回true
*/ */
boolean upgradeToThousandChat(@Param("appId") Long appId, @Param("conversationId") Long conversationId); boolean upgradeToThousandChat(@Param("appId") Long appId, @Param("conversationId") Long conversationId);
/**
* 获取发件人和收件人会话列表
* @Author luozh
* @Date 2022年05月06日 07:15:05
* @param senderClientId 发件人im client id
* @param receiverClientIds 收件人 im client ids
* @Return
*/
List<ImConversation> getConversationBySenderAndReceivers(@Param("senderImClientId") Long senderImClientId, @Param(
"receiverImClientIds") Collection<Long> receiverImClientIds);
} }
...@@ -4,14 +4,14 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -4,14 +4,14 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
/** /**
* 设置会话置顶入参 * 聊天设置入参
* @Author luozh * @Author luozh
* @Date 2022年04月26日 11:52 * @Date 2022年04月26日 11:52
* @Version 1.0 * @Version 1.0
*/ */
@Data @Data
public class SetConversationTopParam { public class ChatSettingParam {
@ApiModelProperty("客户端id") @ApiModelProperty("客户端id")
String clientId; String clientId;
...@@ -19,7 +19,10 @@ public class SetConversationTopParam { ...@@ -19,7 +19,10 @@ public class SetConversationTopParam {
@ApiModelProperty("会话id") @ApiModelProperty("会话id")
Long conversationId; Long conversationId;
@ApiModelProperty("设置类型")
ChatSettingTypeEnum type;
@ApiModelProperty("是否免打扰") @ApiModelProperty("是否免打扰")
private Boolean top; private Boolean on;
} }
package com.wecloud.im.param;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
/**
*
* @Author luozh
* @Date 2022年04月27日 17:26
* @Version 1.0
*/
public enum ChatSettingTypeEnum implements BaseEnum {
/**
* 1-置顶
*/
TOP(1, "置顶"),
/**
* 2-消息免打扰
*/
DO_NOT_DISTURB(2, "消息免打扰"),
;
ChatSettingTypeEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
@JsonValue
@EnumValue
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return null;
}
@Override
public String getDesc() {
return null;
}
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
* 发送群聊消息入参
* @Author luozh
* @Date 2022年04月29日 16:00
* @Version 1.0
*/
@Data
public class GroupChatMessageParam {
@NotEmpty(message = "发送人id不能为空")
@ApiModelProperty("发送人id")
private String fromUserId;
@NotEmpty(message = "接收群id不能为空")
@ApiModelProperty("接收群id")
private String toGroupIds;
@ApiModelProperty("指定一个或多个用户")
private String toUserIds;
@NotEmpty(message = "消息类型不能为空")
@ApiModelProperty("消息类型")
private String messageType;
@NotEmpty(message = "消息不能为空")
@ApiModelProperty("消息")
private String content;
@ApiModelProperty("指定离线推送通知中的推送内容")
private String pushContent;
@ApiModelProperty("是否包含发送用户")
private Boolean includeSender;
@ApiModelProperty("是否为@消息")
private Boolean mentioned;
@ApiModelProperty("是否为静默消息")
private Boolean silent;
@ApiModelProperty("推送配置")
private PushExtParam pushExt;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import com.wecloud.im.sdk.enums.GroupChatSettingTypeEnum;
/**
* 群聊设置入参
* @Author luozh
* @Date 2022年04月27日 11:20
* @Version 1.0
*/
@Data
public class GroupChatSettingParam {
@ApiModelProperty("设置类型FORBID_ADD_FRIEND 禁止群成员互加好友 FORBID_SEND_RED_PACKETS 禁止群成员发红包 FORBID_SEND_PIC 禁止群成员发图片 " +
"FORBID_SEND_LINK 禁止群成员发链接")
private GroupChatSettingTypeEnum type;
@NotNull
@ApiModelProperty("会话id")
private Long conversationId;
@ApiModelProperty("开启 true是 false否")
private Boolean on;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public class GroupChatStatusMessageParam {
/**
* 发送人客户端id
*/
@NotEmpty(message = "发送人id不能为空")
@ApiModelProperty("发送人id")
private String fromUserId;
/**
* 接收群id
*/
@NotEmpty(message = "接收群id不能为空")
@ApiModelProperty("接收群id")
private String toGroupIds;
/**
* 消息类型
*/
@NotEmpty(message = "消息类型不能为空")
@ApiModelProperty("消息类型")
private String messageType;
/**
* 消息
*/
@NotEmpty(message = "消息不能为空")
@ApiModelProperty("消息")
private String content;
/**
* 是否过滤黑名单
*/
@ApiModelProperty("是否过滤黑名单")
private Boolean includeBlacklist;
/**
* 发送用户是否接收
*/
@ApiModelProperty("发送用户是否接收")
private Boolean includeSender;
}
...@@ -19,5 +19,8 @@ import lombok.experimental.Accessors; ...@@ -19,5 +19,8 @@ import lombok.experimental.Accessors;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ApiModel(value = "黑名单分页参数") @ApiModel(value = "黑名单分页参数")
public class ImClientBlacklistPageParam extends BasePageOrderParam { public class ImClientBlacklistPageParam extends BasePageOrderParam {
private String clientId;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }
...@@ -61,4 +61,16 @@ public class ImConversationQueryVo implements Serializable { ...@@ -61,4 +61,16 @@ public class ImConversationQueryVo implements Serializable {
*/ */
@ApiModelProperty("禁言开关 1-未禁言 2-禁言") @ApiModelProperty("禁言开关 1-未禁言 2-禁言")
private Integer muted; private Integer muted;
@ApiModelProperty("禁止互加好友")
private Boolean forbidAddFriend;
@ApiModelProperty("禁止发红包")
private Boolean forbidSendRedPackets;
@ApiModelProperty("禁止发图片")
private Boolean forbidSendPic;
@ApiModelProperty("禁止发链接")
private Boolean forbidSendLink;
} }
package com.wecloud.im.param;
import io.geekidea.springbootplus.framework.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.List;
/**
* @Author wenzhida
* @Date 2022/5/1 9:35
* @Description 查找聊天室入参
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "查找聊天室入参")
public class ListConversationParam extends BaseEntity {
private static final long serialVersionUID = -3602523207000275557L;
@ApiModelProperty("会话属性,1:单聊,2:普通群,3:万人群,4:聊天室")
private Integer chatType;
@ApiModelProperty("会话id列表")
private String conversationIds;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
* 单聊消息
* @Author luozh
* @Date 2022年05月05日 11:49
* @Version 1.0
*/
@Data
public class PrivateChatMessageParam {
/**
* 发送人id
*/
@NotEmpty(message = "发送人id不能为空")
@ApiModelProperty("发送人id")
private String fromUserId;
/**
* 指定一个或多个用户
*/
@NotEmpty(message = "接收用户id不能为空")
@ApiModelProperty("接收用户id")
private String toUserIds;
/**
* 消息类型
*/
@NotEmpty(message = "消息类型不能为空")
@ApiModelProperty("消息类型")
private String messageType;
/**
* 消息
*/
@NotEmpty(message = "消息不能为空")
@ApiModelProperty("消息")
private String content;
/**
* 指定离线推送通知中的推送内容
*/
@ApiModelProperty("指定离线推送通知中的推送内容")
private String pushContent;
/**
* 是否包含发送用户
*/
@ApiModelProperty("是否包含发送用户")
private Boolean includeSender;
/**
* 是否过滤黑名单
*/
@ApiModelProperty("是否过滤黑名单")
private Boolean includeBlacklist;
/**
* 是否存储此条消息
*/
@ApiModelProperty("是否存储此条消息")
private Boolean persisted;
/**
* 是否为静默消息
*/
@ApiModelProperty("是否为静默消息")
private Boolean silent;
/**
* 推送拓展配置
*/
@ApiModelProperty("推送拓展配置")
private PushExtParam pushExt;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public class PrivateChatStatusMessageParam {
/**
* 发送人客户端id
*/
@NotEmpty(message = "发送人id不能为空")
@ApiModelProperty("发送人id")
private String fromUserId;
/**
* 接收群id
*/
@NotEmpty(message = "接收用户id不能为空")
@ApiModelProperty("接收用户id")
private String toUserIds;
/**
* 消息类型
*/
@NotEmpty(message = "消息类型不能为空")
@ApiModelProperty("消息类型")
private String messageType;
/**
* 消息
*/
@NotEmpty(message = "消息不能为空")
@ApiModelProperty("消息")
private String content;
/**
* 是否过滤黑名单
*/
@ApiModelProperty("是否过滤黑名单")
private Boolean includeBlacklist;
/**
* 发送用户是否接收
*/
@ApiModelProperty("发送用户是否接收")
private Boolean includeSender;
}
package com.wecloud.im.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 推送拓展参数
* @Author luozh
* @Date 2022年04月29日 17:07
* @Version 1.0
*/
@Data
public class PushExtParam {
@ApiModelProperty("通知栏显示主题")
private String title;
@ApiModelProperty("按厂商设置不同推送属性。支持的推送通道值为 `MI`(小米)、`HW`(华为)、`OPPO`、`VIVO`")
private String pushChannel;
@ApiModelProperty("通知渠道的 ID")
private String channelId;
@ApiModelProperty("华为通知栏消息优先级,取值 NORMAL、LOW,默认为 NORMAL 重要消息")
private String hwPriority;
@ApiModelProperty("华为推送自定义的通知栏消息右侧大图标 URL,如果不设置,则不展示通知栏右侧图标")
private String hwImage;
@ApiModelProperty("小米推送自定义的通知栏消息右侧图标 URL")
private String miLargeIconUri;
@ApiModelProperty("vivo 推送通道类型。0 为运营消息、1 为系统消息")
private String vivoChannelType;
@ApiModelProperty("iOS 平台通知栏分组 ID")
private String iosGroupId;
@ApiModelProperty("iOS 平台")
private String iosApnsCollapseId;
}
...@@ -7,10 +7,10 @@ import lombok.Data; ...@@ -7,10 +7,10 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.List; import java.util.List;
import javax.validation.constraints.NotNull;
/** /**
* 会话表 * 会话表
* *
......
package com.wecloud.im.param.add;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.sdk.enums.ChatTypeEnum;
import com.wecloud.imserver.client.model.enums.DeviceTypeEnum;
/**
*
* @Author luozh
* @Date 2022年05月07日 10:13
* @Version 1.0
*/
@Data
@Accessors(chain = true)
@ApiModel(value = "ImConversationCreate")
public class ServerImConversationCreate implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 可选 对话的名字,可为群组命名。")
*/
private String name;
/**
* tring格式,可选 自定义属性,供开发者扩展使用。")
*/
private String attributes;
/**
* 应用, 前端")
*/
private ImApplication application;
/**
* 创建者 前端请求不传")
*/
private ImClient creator;
/**
* 可选 成员列表
*/
private List<ImClient> members;
/**
* @see com.wecloud.im.sdk.enums.ChatTypeEnum
*/
/**
* 会话属性,1:单聊,2:普通群,3:万人群, 4:聊天室")
*/
private ChatTypeEnum chatType;
/**
* 客户端平台: 1 web, 2 安卓, 3 ios, 4 pc-win, 5 pc-macOs, 需与生成sign时的值一致")
*/
private DeviceTypeEnum platform;
}
package com.wecloud.im.sdk.enums;
import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
/**
* 群聊设置类型枚举
* @Author luozh
* @Date 2022年04月27日 11:23
* @Version 1.0
*/
public enum GroupChatSettingTypeEnum implements BaseEnum {
/**
* 1-禁止群成员互加好友
*/
FORBID_ADD_FRIEND(1, "禁止群成员互加好友"),
/**
* 2-禁止群成员发红包
*/
FORBID_SEND_RED_PACKETS(2, "禁止群成员发红包"),
/**
* 3-禁止群成员发图片
*/
FORBID_SEND_PIC(3, "禁止群成员发图片"),
/**
* 4-禁止群成员发链接
*/
FORBID_SEND_LINK(4, "禁止群成员发链接");
GroupChatSettingTypeEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
@JsonValue
@EnumValue
private final Integer code;
private final String desc;
@Override
public Integer getCode() {
return null;
}
@Override
public String getDesc() {
return null;
}
}
...@@ -3,7 +3,6 @@ package com.wecloud.im.service; ...@@ -3,7 +3,6 @@ package com.wecloud.im.service;
import io.geekidea.springbootplus.framework.common.service.BaseService; import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
import com.wecloud.dispatch.extend.ActionRequest;
import com.wecloud.im.entity.ImClientBlacklist; import com.wecloud.im.entity.ImClientBlacklist;
import com.wecloud.im.param.ImClientBlacklistPageParam; import com.wecloud.im.param.ImClientBlacklistPageParam;
import com.wecloud.im.param.ImClientBlacklistQueryVo; import com.wecloud.im.param.ImClientBlacklistQueryVo;
...@@ -53,4 +52,12 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist> ...@@ -53,4 +52,12 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
*/ */
Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam); Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam);
/**
* 获取分页对象
*
* @return
* @throws Exception
*/
Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageListSdk(ImClientBlacklistPageParam imClientBlacklistPageParam);
} }
...@@ -6,10 +6,14 @@ import io.geekidea.springbootplus.framework.core.pagination.Paging; ...@@ -6,10 +6,14 @@ import io.geekidea.springbootplus.framework.core.pagination.Paging;
import java.util.List; import java.util.List;
import org.springframework.web.bind.annotation.RequestBody;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImConversationMembers; import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.friend.param.ImFriendApplyParam;
import com.wecloud.im.param.ApiImConversationMembersPageParam; import com.wecloud.im.param.ApiImConversationMembersPageParam;
import com.wecloud.im.param.ApiImConversationMembersQueryVo; import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.param.ChatSettingParam;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam; import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ImConversationMembersPageParam; import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo; import com.wecloud.im.param.ImConversationMembersQueryVo;
...@@ -129,14 +133,14 @@ public interface ImConversationMembersService extends BaseService<ImConversation ...@@ -129,14 +133,14 @@ public interface ImConversationMembersService extends BaseService<ImConversation
* @param * @param
* @Return * @Return
*/ */
Boolean setTop(Long appId, String clientId, Long conversationId, Boolean top); Boolean chatSetting(ChatSettingParam param);
/** /**
* 设置免打扰 * 群成员添加好友
* @Author luozh * @Author luozh
* @Date 2022年04月25日 06:24:43 * @Date 2022年04月28日 11:48:42
* @param * @param param
* @Return * @Return
*/ */
Boolean setDoNotDisturb(Long appId, String clientId, Long conversationId, Boolean doNotDisturb); Boolean addUser(@RequestBody ImFriendApplyParam param);
} }
package com.wecloud.im.service; package com.wecloud.im.service;
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.Collection;
import java.util.List;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.wecloud.im.entity.ImConversation; import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.param.ChatRoomMemberPageParam; import com.wecloud.im.param.ChatRoomMemberPageParam;
import com.wecloud.im.param.DisbandConversationParam; import com.wecloud.im.param.DisbandConversationParam;
import com.wecloud.im.param.ExitChatRoomParam; import com.wecloud.im.param.ExitChatRoomParam;
import com.wecloud.im.param.GroupChatSettingParam;
import com.wecloud.im.param.ImConversationPageParam; import com.wecloud.im.param.ImConversationPageParam;
import com.wecloud.im.param.ImConversationQueryParam; import com.wecloud.im.param.ImConversationQueryParam;
import com.wecloud.im.param.ImConversationQueryVo; import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.param.IntoChatRoomParam; import com.wecloud.im.param.IntoChatRoomParam;
import com.wecloud.im.param.ListConversationParam;
import com.wecloud.im.param.MutedGroupMemberParam; import com.wecloud.im.param.MutedGroupMemberParam;
import com.wecloud.im.param.MutedGroupParam; import com.wecloud.im.param.MutedGroupParam;
import com.wecloud.im.param.SetAdminsParam; import com.wecloud.im.param.SetAdminsParam;
...@@ -19,14 +28,10 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate; ...@@ -19,14 +28,10 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate;
import com.wecloud.im.param.add.ImConversationCreate; import com.wecloud.im.param.add.ImConversationCreate;
import com.wecloud.im.param.add.ImConversationDisplayUpdate; import com.wecloud.im.param.add.ImConversationDisplayUpdate;
import com.wecloud.im.param.add.ImConversationNameUpdate; import com.wecloud.im.param.add.ImConversationNameUpdate;
import com.wecloud.im.param.add.ServerImConversationCreate;
import com.wecloud.im.vo.ChatRoomMemberVo; import com.wecloud.im.vo.ChatRoomMemberVo;
import com.wecloud.im.vo.ConversationVo; import com.wecloud.im.vo.ConversationVo;
import com.wecloud.im.vo.ImConversationCreateVo; import com.wecloud.im.vo.ImConversationCreateVo;
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;
/** /**
* 会话表 服务类 * 会话表 服务类
...@@ -54,6 +59,14 @@ public interface ImConversationService extends BaseService<ImConversation> { ...@@ -54,6 +59,14 @@ public interface ImConversationService extends BaseService<ImConversation> {
*/ */
ImConversationCreateVo createImConversation(ImConversationCreate imConversationCreate); ImConversationCreateVo createImConversation(ImConversationCreate imConversationCreate);
/**
* 创建会话 sdk用
*
* @param imConversationCreate
* @return
*/
ImConversation serverCreateImConversation(ServerImConversationCreate imConversationCreate);
/** /**
* 将用户添加进会话 * 将用户添加进会话
...@@ -209,6 +222,13 @@ public interface ImConversationService extends BaseService<ImConversation> { ...@@ -209,6 +222,13 @@ public interface ImConversationService extends BaseService<ImConversation> {
Long getRepetitionConversationAttributes(Long clientId1, Long clientId2, String attributes); Long getRepetitionConversationAttributes(Long clientId1, Long clientId2, String attributes);
/** /**
* 群禁言
* @param param
* @return
*/
Boolean groupChatSetting(GroupChatSettingParam param);
/**
* 用户主动进入聊天室 * 用户主动进入聊天室
* @param param * @param param
* @return * @return
...@@ -223,11 +243,27 @@ public interface ImConversationService extends BaseService<ImConversation> { ...@@ -223,11 +243,27 @@ public interface ImConversationService extends BaseService<ImConversation> {
Boolean exitChatRoom(ExitChatRoomParam param); Boolean exitChatRoom(ExitChatRoomParam param);
/** /**
* 分页获取聊天室成员入参 * 获取聊天室成员入参
* @param param * @param param
* @return * @return
*/ */
List<ChatRoomMemberVo> listChatRoomMember(ChatRoomMemberPageParam param); List<ChatRoomMemberVo> listChatRoomMember(ChatRoomMemberPageParam param);
/**
* 获取会话信息
* @param param
* @return
*/
List<ConversationVo> listConversation(ListConversationParam param);
/**
* @param senderClientId
* @param receiverClientIds
* @Author luozh
* @Date 2022年05月06日 07:18:34
* @Return
*/
List<ImConversation> getConversationBySenderAndReceivers(Long senderImClientId, Collection<Long> receiverImClientIds);
} }
...@@ -13,9 +13,13 @@ import com.wecloud.im.entity.ImClient; ...@@ -13,9 +13,13 @@ import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.param.ChatContentVo; import com.wecloud.im.param.ChatContentVo;
import com.wecloud.im.param.GetReadersParam; import com.wecloud.im.param.GetReadersParam;
import com.wecloud.im.param.GroupChatMessageParam;
import com.wecloud.im.param.GroupChatStatusMessageParam;
import com.wecloud.im.param.ImClientSimpleDto; import com.wecloud.im.param.ImClientSimpleDto;
import com.wecloud.im.param.ImHistoryMessagePageParam; import com.wecloud.im.param.ImHistoryMessagePageParam;
import com.wecloud.im.param.MsgDeleteParam; import com.wecloud.im.param.MsgDeleteParam;
import com.wecloud.im.param.PrivateChatMessageParam;
import com.wecloud.im.param.PrivateChatStatusMessageParam;
import com.wecloud.im.param.add.ImMsgRecall; import com.wecloud.im.param.add.ImMsgRecall;
import com.wecloud.im.param.add.ImMsgSendToOnlineClient; import com.wecloud.im.param.add.ImMsgSendToOnlineClient;
import com.wecloud.im.param.add.ImMsgUpdate; import com.wecloud.im.param.add.ImMsgUpdate;
...@@ -132,4 +136,38 @@ public interface ImMessageService extends BaseService<ImMessage> { ...@@ -132,4 +136,38 @@ public interface ImMessageService extends BaseService<ImMessage> {
*/ */
ReaderList getReaders(GetReadersParam param); ReaderList getReaders(GetReadersParam param);
/**
* 发送群聊消息
* @param param
* @return
*/
Boolean groupMessagePublish(GroupChatMessageParam param);
/**
* 发送群聊状态消息
* @Author luozh
* @Date 2022年05月05日 02:32:58
* @param param
* @Return
*/
Boolean groupStatusMessagePublish(GroupChatStatusMessageParam param);
/**
* 发送单聊消息
* @Author luozh
* @Date 2022年05月05日 02:33:26
* @param param
* @Return
*/
Boolean privateMessagePublish(PrivateChatMessageParam param);
/**
* 发送单聊状态消息
* @Author luozh
* @Date 2022年05月05日 02:33:56
* @param param
* @Return
*/
Boolean privateStatusMessagePublish(PrivateChatStatusMessageParam param);
} }
...@@ -4,12 +4,11 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException; ...@@ -4,12 +4,11 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl; import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo; import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.Date; import java.util.Date;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -101,11 +100,26 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl ...@@ -101,11 +100,26 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
@Override @Override
public Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam) { public Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam) {
Page<ImClientBlacklistQueryVo> page = new PageInfo<>(imClientBlacklistPageParam);
ImClient currentClient = contextService.getImClientIfNotNullOrThrow(); ImClient currentClient = contextService.getImClientIfNotNullOrThrow();
IPage<ImClientBlacklistQueryVo> imClientBlacklistPageList = imClientBlacklistMapper.getImClientBlacklistPageList(page, currentClient.getClientId()); return getImClientBlacklistPageList(currentClient, imClientBlacklistPageParam);
}
@Override
public Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageListSdk(ImClientBlacklistPageParam imClientBlacklistPageParam) {
Long appId = SecurityUtils.getCurrentAppId();
ImClient client = imClientService.getCacheImClient(appId, imClientBlacklistPageParam.getClientId());
if (client == null) {
throw new BusinessException("客户端不存在");
}
return getImClientBlacklistPageList(client, imClientBlacklistPageParam);
}
private Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClient client,
ImClientBlacklistPageParam imClientBlacklistPageParam) {
Page<ImClientBlacklistQueryVo> page = new PageInfo<>(imClientBlacklistPageParam);
IPage<ImClientBlacklistQueryVo> imClientBlacklistPageList = imClientBlacklistMapper.getImClientBlacklistPageList(page, client.getClientId());
Paging<ImClientBlacklistQueryVo> imClientBlacklistQueryVoPaging = new Paging<>(imClientBlacklistPageList); Paging<ImClientBlacklistQueryVo> imClientBlacklistQueryVoPaging = new Paging<>(imClientBlacklistPageList);
return imClientBlacklistQueryVoPaging; return imClientBlacklistQueryVoPaging;
} }
} }
...@@ -6,8 +6,10 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException; ...@@ -6,8 +6,10 @@ import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl; import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.PageInfo; import io.geekidea.springbootplus.framework.core.pagination.PageInfo;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -25,12 +27,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -25,12 +27,17 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.entity.ImConversationMembers; import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImMessageOnlineSend; import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.friend.param.ImFriendApplyParam;
import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.mapper.ImConversationMapper; import com.wecloud.im.mapper.ImConversationMapper;
import com.wecloud.im.mapper.ImConversationMembersMapper; import com.wecloud.im.mapper.ImConversationMembersMapper;
import com.wecloud.im.param.ApiImConversationMembersPageParam; import com.wecloud.im.param.ApiImConversationMembersPageParam;
import com.wecloud.im.param.ApiImConversationMembersQueryVo; import com.wecloud.im.param.ApiImConversationMembersQueryVo;
import com.wecloud.im.param.ChatSettingParam;
import com.wecloud.im.param.ChatSettingTypeEnum;
import com.wecloud.im.param.ImConvMemeClientRemarkNameParam; import com.wecloud.im.param.ImConvMemeClientRemarkNameParam;
import com.wecloud.im.param.ImConversationMembersPageParam; import com.wecloud.im.param.ImConversationMembersPageParam;
import com.wecloud.im.param.ImConversationMembersQueryVo; import com.wecloud.im.param.ImConversationMembersQueryVo;
...@@ -38,11 +45,9 @@ import com.wecloud.im.param.ListConversationMembersParam; ...@@ -38,11 +45,9 @@ import com.wecloud.im.param.ListConversationMembersParam;
import com.wecloud.im.param.SetAdminsParam; import com.wecloud.im.param.SetAdminsParam;
import com.wecloud.im.param.add.ImConversationMemAttrUpdate; import com.wecloud.im.param.add.ImConversationMemAttrUpdate;
import com.wecloud.im.service.ContextService; import com.wecloud.im.service.ContextService;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImClientService; import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService; import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImConversationService; import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.vo.ConversationMemberVo; import com.wecloud.im.vo.ConversationMemberVo;
import com.wecloud.im.ws.enums.MsgTypeEnum; import com.wecloud.im.ws.enums.MsgTypeEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum; import com.wecloud.im.ws.enums.WsResponseCmdEnum;
...@@ -76,17 +81,14 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa ...@@ -76,17 +81,14 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
private ImClientService imClientService; private ImClientService imClientService;
@Autowired @Autowired
private ImApplicationService imApplicationService;
@Autowired
private ImMessageService imMessageService;
@Autowired
private ImConversationMembersMapper imConversationMembersMapper; private ImConversationMembersMapper imConversationMembersMapper;
@Autowired @Autowired
private ContextService contextService; private ContextService contextService;
@Autowired
private ImFriendService imFriendService;
@Override @Override
public ApiResult<List<ApiImConversationMembersQueryVo>> getRestApiImConversationMembersList(ApiImConversationMembersPageParam apiImConversationMembersPageParam, ImApplication imApplication) { public ApiResult<List<ApiImConversationMembersQueryVo>> getRestApiImConversationMembersList(ApiImConversationMembersPageParam apiImConversationMembersPageParam, ImApplication imApplication) {
...@@ -259,7 +261,13 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa ...@@ -259,7 +261,13 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
} }
@Override @Override
public Boolean setTop(Long appId, String clientId, Long conversationId, Boolean top) { public Boolean chatSetting(ChatSettingParam param) {
Long appId = SecurityUtils.getCurrentAppId();
String clientId = param.getClientId();
Long conversationId = param.getConversationId();
ChatSettingTypeEnum type = param.getType();
Boolean on = param.getOn();
// 找到对应的会话 // 找到对应的会话
ImConversationMembers conversation = ImConversationMembers conversation =
baseMapper.selectOne(Wrappers.<ImConversationMembers>lambdaQuery() baseMapper.selectOne(Wrappers.<ImConversationMembers>lambdaQuery()
...@@ -269,22 +277,49 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa ...@@ -269,22 +277,49 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
if (conversation == null) { if (conversation == null) {
throw new BusinessException("会话不存在"); throw new BusinessException("会话不存在");
} }
return update(Wrappers.<ImConversationMembers>lambdaUpdate().eq(ImConversationMembers::getId, conversation.getId()).set(ImConversationMembers::getTop, top)); boolean result = false;
if (ChatSettingTypeEnum.TOP.equals(type)) {
result = update(Wrappers.<ImConversationMembers>lambdaUpdate().eq(ImConversationMembers::getId,
conversation.getId()).set(ImConversationMembers::getTop, on));
} else if (ChatSettingTypeEnum.DO_NOT_DISTURB.equals(type)) {
result = update(Wrappers.<ImConversationMembers>lambdaUpdate().eq(ImConversationMembers::getId,
conversation.getId()).set(ImConversationMembers::getDoNotDisturb, on));
}
return result;
} }
@Override @Override
public Boolean setDoNotDisturb(Long appId, String clientId, Long conversationId, Boolean doNotDisturb) { public Boolean addUser(ImFriendApplyParam param) {
// 找到对应的会话 Long appId = SecurityUtils.getCurrentAppId();
ImConversationMembers conversation = Long conversationId = param.getConversationId();
baseMapper.selectOne(Wrappers.<ImConversationMembers>lambdaQuery() // 判断会话是否存在
.eq(ImConversationMembers::getClientId, clientId) ImConversation conversation = imConversationService.getById(conversationId);
.eq(ImConversationMembers::getFkConversationId, conversationId)
.eq(ImConversationMembers::getFkAppid, appId));
if (conversation == null) { if (conversation == null) {
throw new BusinessException("会话不存在"); throw new BusinessException("会话不存在");
} }
return update(Wrappers.<ImConversationMembers>lambdaUpdate().eq(ImConversationMembers::getId, // 判断会话是否开启禁止群成员互加好友
conversation.getId()).set(ImConversationMembers::getDoNotDisturb, doNotDisturb)); boolean forbidAddFriend = conversation.getForbidAddFriend();
} if (forbidAddFriend) {
throw new BusinessException("群主/管理员开启了禁止群成员互加好友");
}
// 判断是否同一个会话成员
List<String> memberClientIds = new ArrayList<>();
memberClientIds.add(param.getClientId());
memberClientIds.add(param.getFriendClientId());
List<ImConversationMembers> members =
list(Wrappers.<ImConversationMembers>lambdaQuery()
.eq(ImConversationMembers::getFkAppid, appId)
.eq(ImConversationMembers::getFkConversationId, conversationId)
.in(ImConversationMembers::getClientId, memberClientIds));
if (members.size() != 2) {
throw new BusinessException("好友不属于同一个群");
}
// 校验通过,调用imFriendService apply方法
ImClient initiator = imClientService.getCacheImClient(appId, param.getClientId());
ImClient recipient = imClientService.getCacheImClient(appId, param.getFriendClientId());
return imFriendService.applyFriend(initiator, recipient, param.getFriendName(),
param.getRequestRemark());
}
} }
package com.wecloud.im.thousandchat.action; package com.wecloud.im.thousandchat.action;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.Channel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.wecloud.dispatch.annotation.ActionMapping; import com.wecloud.dispatch.annotation.ActionMapping;
import com.wecloud.dispatch.common.BaseRequest; import com.wecloud.dispatch.common.BaseRequest;
...@@ -29,23 +45,6 @@ import com.wecloud.pushserver.client.model.constant.MqConstant; ...@@ -29,23 +45,6 @@ import com.wecloud.pushserver.client.model.constant.MqConstant;
import com.wecloud.pushserver.client.model.dto.PushDTO; import com.wecloud.pushserver.client.model.dto.PushDTO;
import com.wecloud.utils.JsonUtils; import com.wecloud.utils.JsonUtils;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.Channel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/** /**
* @Description 处理Cmd请求 * @Description 处理Cmd请求
......
package com.wecloud.im.thousandchat.service; package com.wecloud.im.thousandchat.service;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImConversation; import com.wecloud.im.entity.ImConversation;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
...@@ -18,22 +35,7 @@ import com.wecloud.im.ws.enums.MsgTypeEnum; ...@@ -18,22 +35,7 @@ import com.wecloud.im.ws.enums.MsgTypeEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum; import com.wecloud.im.ws.enums.WsResponseCmdEnum;
import com.wecloud.im.ws.model.WsResponse; import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.sender.ChannelSender; import com.wecloud.im.ws.sender.ChannelSender;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import com.wecloud.utils.SnowflakeUtil; import com.wecloud.utils.SnowflakeUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* 消息收件箱表 服务实现类 * 消息收件箱表 服务实现类
......
...@@ -76,4 +76,16 @@ public class ConversationVo implements Serializable { ...@@ -76,4 +76,16 @@ public class ConversationVo implements Serializable {
@ApiModelProperty("禁言开关 1-未禁言 2-禁言") @ApiModelProperty("禁言开关 1-未禁言 2-禁言")
private Integer beAtCount; private Integer beAtCount;
@ApiModelProperty("禁止互加好友")
private Boolean forbidAddFriend;
@ApiModelProperty("禁止发红包")
private Boolean forbidSendRedPackets;
@ApiModelProperty("禁止发图片")
private Boolean forbidSendPic;
@ApiModelProperty("禁止发链接")
private Boolean forbidSendLink;
} }
package com.wecloud.im.ws.cache; package com.wecloud.im.ws.cache;
import com.wecloud.utils.GetIpUtils;
import com.wecloud.im.ws.model.redis.ClientChannelInfo;
import com.wecloud.im.ws.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.wecloud.im.ws.model.redis.ClientChannelInfo;
import com.wecloud.im.ws.utils.RedisUtils;
import com.wecloud.utils.GetIpUtils;
/** /**
* @author hewei123@163.com * @author hewei123@163.com
* @Description 用户与redis绑定 * @Description 用户与redis绑定
...@@ -48,8 +50,10 @@ public class UserStateCacheManager extends UserStateListener { ...@@ -48,8 +50,10 @@ public class UserStateCacheManager extends UserStateListener {
@Override @Override
public void offlineEvent(Long clientId, Integer platform, String longChannelId) { public void offlineEvent(Long clientId, Integer platform, String longChannelId) {
log.info("ws用户离线删除redis key,uid: {}, clientId: {}", longChannelId, clientId); String key = getUserStateCacheKey(clientId);
redisUtils.removeForSet(getUserStateCacheKey(clientId), platform + RedisUtils.SPLIT + GetIpUtils.getlanIp()); String value = platform + RedisUtils.SPLIT + GetIpUtils.getlanIp();
log.info("ws用户离线删除redis key: {}, value: {}, uid: {}, clientId: {}", key, value, longChannelId, clientId);
redisUtils.removeForSet(key, value);
} }
/** /**
......
...@@ -7,6 +7,18 @@ package com.wecloud.im.ws.enums; ...@@ -7,6 +7,18 @@ package com.wecloud.im.ws.enums;
*/ */
public enum MsgTypeEnum { public enum MsgTypeEnum {
// 位置
MEDIA_TYPE_NONE(0),
// 文本消息
MEDIA_TYPE_TEXT(-1),
// 图像消息
MEDIA_TYPE_IMAGE(-2),
// 音频消息
MEDIA_TYPE_AUDIO(-3),
// 视频消息
MEDIA_TYPE_VIDEO(-4),
// 文件消息
MEDIA_TYPE_FILE(-5),
// xx邀请xx加入会话 -1007 // xx邀请xx加入会话 -1007
INVITE_CLIENT_JOIN_CONVERSATION(-1007), INVITE_CLIENT_JOIN_CONVERSATION(-1007),
...@@ -54,6 +66,29 @@ public enum MsgTypeEnum { ...@@ -54,6 +66,29 @@ public enum MsgTypeEnum {
// 群成员备注修改 -1021 // 群成员备注修改 -1021
CONVERSATION_MEMBER_NAME_MODIFY(-1021), CONVERSATION_MEMBER_NAME_MODIFY(-1021),
// 禁止群成员互加好友
CONVERSATION_FORBID_ADD_FRIEND(-1022),
// 取消禁止群成员互加好友
CONVERSATION_FORBID_ADD_FRIEND_CANCEL(-1023),
// 禁止群成员发红包
CONVERSATION_FORBID_SEND_RED_PACKETS(-1024),
// 取消禁止群成员发红包
CONVERSATION_FORBID_SEND_RED_PACKETS_CANCEL(-1025),
// 禁止群成员发图片
CONVERSATION_FORBID_SEND_PIC_CANCEL(-1026),
// 取消禁止群成员发图片
CONVERSATION_FORBID_SEND_PIC(-1027),
// 禁止群成员发链接
CONVERSATION_FORBID_SEND_LINK(-1028),
// 取消禁止群成员发链接
CONVERSATION_FORBID_SEND_LINK_CANCEL(-1029),
; ;
private final int uriCode; private final int uriCode;
......
package com.wecloud.im.ws.sender; package com.wecloud.im.ws.sender;
import com.alibaba.fastjson.JSON;
import com.wecloud.im.executor.SendMsgThreadPool;
import com.wecloud.im.router.RouterSendService;
import com.wecloud.im.ws.cache.UserStateCacheManager;
import com.wecloud.im.ws.manager.ChannelManager;
import com.wecloud.im.ws.model.ClientInfo;
import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.model.redis.ClientChannelInfo;
import com.wecloud.im.ws.model.request.ReceiveVO;
import com.wecloud.utils.GetIpUtils;
import com.wecloud.utils.JsonUtils;
import io.geekidea.springbootplus.framework.common.api.ApiCode; import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult; import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.rpc.RpcContext; import org.apache.dubbo.rpc.RpcContext;
import org.apache.dubbo.rpc.cluster.router.address.Address; import org.apache.dubbo.rpc.cluster.router.address.Address;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.HashMap; import com.alibaba.fastjson.JSON;
import java.util.List; import com.wecloud.im.executor.SendMsgThreadPool;
import java.util.Map; import com.wecloud.im.router.RouterSendService;
import java.util.stream.Collectors; import com.wecloud.im.ws.cache.UserStateCacheManager;
import com.wecloud.im.ws.manager.ChannelManager;
import com.wecloud.im.ws.model.ClientInfo;
import com.wecloud.im.ws.model.WsResponse;
import com.wecloud.im.ws.model.redis.ClientChannelInfo;
import com.wecloud.im.ws.model.request.ReceiveVO;
import com.wecloud.utils.GetIpUtils;
import com.wecloud.utils.JsonUtils;
/** /**
* @Description 下发数据 * @Description 下发数据
...@@ -144,6 +146,7 @@ public class ChannelSender { ...@@ -144,6 +146,7 @@ public class ChannelSender {
// 调用本地下发 // 调用本地下发
log.info("在线用户入参 {}, 具体ip结果 {}", toClientId, JSON.toJSONString(channelInfoEntry)); log.info("在线用户入参 {}, 具体ip结果 {}", toClientId, JSON.toJSONString(channelInfoEntry));
for(ClientChannelInfo clientChannelInfo : channelInfoEntry.getValue()) { for(ClientChannelInfo clientChannelInfo : channelInfoEntry.getValue()) {
log.info("客户端 {}, 推送消息内容 {}", toClientId, msgJson);
this.sendMsgLocal(toClientId, clientChannelInfo.getPlatform(), msgJson); this.sendMsgLocal(toClientId, clientChannelInfo.getPlatform(), msgJson);
} }
continue; continue;
......
...@@ -5,7 +5,9 @@ ...@@ -5,7 +5,9 @@
<!-- 通用查询结果列 --> <!-- 通用查询结果列 -->
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id id
, create_time, update_time, last_message, member_count, chat_type, fk_appid, creator, name, attributes, system_flag,muted , create_time, update_time, last_message, member_count, chat_type, fk_appid, creator, name, attributes,
system_flag,muted, is_forbid_add_friend as forbid_add_friend, is_forbid_send_red_packets as forbid_send_red_packets,
is_forbid_send_pic as forbid_send_pic, is_forbid_send_link as forbid_send_link
</sql> </sql>
<select id="getImConversationById" resultType="com.wecloud.im.param.ImConversationQueryVo"> <select id="getImConversationById" resultType="com.wecloud.im.param.ImConversationQueryVo">
...@@ -23,37 +25,41 @@ ...@@ -23,37 +25,41 @@
<select id="getMyImConversationListAndMsgCount" resultType="com.wecloud.im.vo.ConversationVo"> <select id="getMyImConversationListAndMsgCount" resultType="com.wecloud.im.vo.ConversationVo">
SELECT imConversation.id as id, SELECT imConversation.id as id,
imConversation.create_time, imConversation.create_time,
imConversation.`name`, imConversation.`name`,
imConversation.chat_type, imConversation.chat_type,
imConversation.member_count, imConversation.member_count,
imConversation.attributes as attribute, imConversation.attributes as attribute,
imConversation.system_flag, imConversation.system_flag,
imConversation.muted as muted, imConversation.muted as muted,
im_client.client_id AS creator, imConversation.is_forbid_add_friend as forbid_add_friend,
(SELECT COUNT(im_inbox.id) imConversation.is_forbid_send_red_packets as forbid_send_red_packets,
FROM im_inbox imConversation.is_forbid_send_pic as forbid_send_pic,
WHERE im_inbox.fk_conversation_id = imConversation.id imConversation.is_forbid_send_link as forbid_send_link,
AND im_inbox.receiver = #{currentClientId} im_client.client_id AS creator,
AND im_inbox.read_msg_status = 0) AS msg_not_read_count, (SELECT COUNT(im_inbox.id)
(SELECT COUNT(*) FROM im_inbox
FROM im_inbox INNER JOIN im_message ON im_inbox.fk_msg_id = im_message.id WHERE im_inbox.fk_conversation_id = imConversation.id
WHERE im_inbox.fk_conversation_id = imConversation.id AND im_inbox.receiver = #{currentClientId}
AND im_inbox.receiver = #{currentClientId} AND im_inbox.read_msg_status = 0) AS msg_not_read_count,
AND im_inbox.read_msg_status = 0 (SELECT COUNT(*)
AND (FIND_IN_SET(#{clientId},im_message.`at`) > 0 or FIND_IN_SET('-1',im_message.`at`) > 0)) AS beAtCount, FROM im_inbox INNER JOIN im_message ON im_inbox.fk_msg_id = im_message.id
( WHERE im_inbox.fk_conversation_id = imConversation.id
SELECT GROUP_CONCAT(im_client.client_id) AND im_inbox.receiver = #{currentClientId}
FROM im_conversation_members AS im_conversation_members AND im_inbox.read_msg_status = 0
INNER JOIN im_client AS im_client ON im_client.id = im_conversation_members.fk_client_id AND (FIND_IN_SET(#{clientId},im_message.`at`) > 0 or FIND_IN_SET('-1',im_message.`at`) > 0)) AS beAtCount,
WHERE im_conversation_members.fk_conversation_id = imConversation.id (
) AS members SELECT GROUP_CONCAT(im_client.client_id)
FROM im_conversation_members AS im_conversation_members
INNER JOIN im_client AS im_client ON im_client.id = im_conversation_members.fk_client_id
WHERE im_conversation_members.fk_conversation_id = imConversation.id
) AS members
FROM im_conversation_members AS imConversationMembers FROM im_conversation_members AS imConversationMembers
INNER JOIN im_conversation AS imConversation INNER JOIN im_conversation AS imConversation
ON imConversation.id = imConversationMembers.fk_conversation_id ON imConversation.id = imConversationMembers.fk_conversation_id
INNER JOIN im_client AS im_client ON im_client.id = imConversation.creator INNER JOIN im_client AS im_client ON im_client.id = imConversation.creator
WHERE imConversationMembers.fk_client_id = #{currentClientId} WHERE imConversationMembers.fk_client_id = #{currentClientId}
AND imConversationMembers.display_status = 1 AND imConversationMembers.display_status = 1
<if test="conversationId != null"> <if test="conversationId != null">
AND imConversation.id = #{conversationId} AND imConversation.id = #{conversationId}
</if> </if>
...@@ -70,12 +76,16 @@ ...@@ -70,12 +76,16 @@
<select id="getRepetitionConversationSingle" resultType="com.wecloud.im.entity.ImConversation"> <select id="getRepetitionConversationSingle" resultType="com.wecloud.im.entity.ImConversation">
-- 查询重复的单聊会话第一条 -- 查询重复的单聊会话第一条
select con.* from im_conversation con select con.*
inner join im_conversation_members mem1 from im_conversation con
on con.id = mem1.fk_conversation_id and mem1.fk_client_id = #{clientId1} inner join im_conversation_members mem1
inner join im_conversation_members mem2 on con.id = mem1.fk_conversation_id and mem1.fk_client_id = #{clientId1}
on con.id = mem2.fk_conversation_id and mem2.fk_client_id = #{clientId2} inner join im_conversation_members mem2
where con.chat_type = 1 and con.member_count = 2 order by con.id asc LIMIT 1 on con.id = mem2.fk_conversation_id and mem2.fk_client_id = #{clientId2}
where con.chat_type = 1
and con.member_count = 2
order by con.id asc
LIMIT 1
</select> </select>
<select id="getRepetitionConversationAttributes" resultType="java.lang.Long"> <select id="getRepetitionConversationAttributes" resultType="java.lang.Long">
...@@ -91,15 +101,65 @@ ...@@ -91,15 +101,65 @@
im_conversation_members2.fk_conversation_id im_conversation_members2.fk_conversation_id
WHERE im_conversation_members.fk_client_id = #{clientId1} WHERE im_conversation_members.fk_client_id = #{clientId1}
) )
AND attributes = CAST(#{attributes} AS json) LIMIT 1 AND attributes = CAST(#{attributes} AS json)
LIMIT 1
</select> </select>
<update id="addMemberCount"> <update id="addMemberCount">
update im_conversation set member_count = member_count + #{addCount} where fk_appid = #{appId} and id = #{conversationId} update im_conversation
set member_count = member_count + #{addCount}
where fk_appid = #{appId}
and id = #{conversationId}
</update> </update>
<update id="updateMemberCount"> <update id="updateMemberCount">
update im_conversation set chat_type = 3 where fk_appid = #{appId} and id = #{conversationId} update im_conversation
set chat_type = 3
where fk_appid = #{appId}
and id = #{conversationId}
</update> </update>
<select id="getConversationBySenderAndReceivers" resultType="com.wecloud.im.entity.ImConversation">
SELECT
c.id,
c.create_time,
c.update_time,
c.last_message,
c.member_count,
c.chat_type,
c.fk_appid,
c.creator,
c.name,
c.attributes,
c.system_flag,
c.muted,
c.is_forbid_add_friend as forbid_add_friend,
c.is_forbid_send_red_packets as forbid_send_red_packets,
c.is_forbid_send_pic as forbid_send_pic,
c.is_forbid_send_link as forbid_send_link
FROM
im_conversation c
LEFT JOIN im_conversation_members cm ON c.id = cm.fk_conversation_id
WHERE
c.chat_type = 1
AND (
(
c.creator = #{senderImClientId} AND cm.fk_client_id IN
<foreach collection="receiverImClientIds" item="id" index="index" open="(" close=")"
separator=",">
#{id}
</foreach>
)
OR (
c.creator IN
<foreach collection="receiverImClientIds" item="id" index="index" open="(" close=")"
separator=",">
#{id}
</foreach>
AND cm.fk_client_id = #{senderImClientId}
)
)
</select>
</mapper> </mapper>
...@@ -142,6 +142,11 @@ public enum ApiCode { ...@@ -142,6 +142,11 @@ public enum ApiCode {
*/ */
IS_BE_DISBAND(6016, "api.response.code.IS_BE_DISBAND"), IS_BE_DISBAND(6016, "api.response.code.IS_BE_DISBAND"),
/**
* 群已禁止发链接
*/
IS_BE_FORBID_SEND_LINK(6017, "api.response.code.IS_BE_FORBID_SEND_LINK"),
; ;
private final int code; private final int code;
......
...@@ -37,14 +37,54 @@ public class ResourcePathConstants { ...@@ -37,14 +37,54 @@ public class ResourcePathConstants {
public static final String GET_FRIENDS = "/api/friend/sdk/getFriends"; 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 CHAT_SETTING = "/api/imConversationMembers/chatSetting";
/** /**
* 设置会话免打扰 * 好友请求
*/ */
public static final String SET_CONVERSATION_DO_NOT_DISTURB = "/api/imConversationMembers/sdk/setDoNotDisturb"; public static final String FRIEND_REQUEST = "/api/friend/sdk/apply";
/**
* 好友请求
*/
public static final String PAGE_BLACKLIST_REQUEST = "/api/ClientBlacklist/sdk/pageBlacklist";
/**
* 群成员互加好友
*/
public static final String GROUP_MEMBERS_FRIEND_REQUEST = "/api/imConversationMembers/addUser";
/**
* 获取聊天室成员
*/
public static final String LIST_CHAT_ROOM_MEMBER_REQUEST = "/api/conversation/listChatRoomMember";
/**
* 批量获取会话信息
*/
public static final String LIST_CONVERSATION_REQUEST = "/api/conversation/listConversation";
/**
* 发布群消息
*/
public static final String PUBLISH_GROUP_CHAT_MESSAGE_REQUEST = "/api/imMessage/group/publish";
/**
* 发布群状态消息
*/
public static final String PUBLISH_GROUP_CHAT_STATUS_MESSAGE_REQUEST = "/api/imMessage/group/status/publish";
/**
* 发布群消息
*/
public static final String PUBLISH_PRIVATE_CHAT_MESSAGE_REQUEST = "/api/imMessage/private/publish";
/**
* 发布群状态消息
*/
public static final String PUBLISH_PRIVATE_CHAT_STATUS_MESSAGE_REQUEST = "/api/imMessage/private/status/publish";
} }
...@@ -2,8 +2,16 @@ package com.wecloud.im.sdk; ...@@ -2,8 +2,16 @@ package com.wecloud.im.sdk;
import java.util.List; import java.util.List;
import com.wecloud.im.sdk.model.Blacklist;
import com.wecloud.im.sdk.model.ChatRoomMember;
import com.wecloud.im.sdk.model.Conversation;
import com.wecloud.im.sdk.model.Friend; import com.wecloud.im.sdk.model.Friend;
import com.wecloud.im.sdk.model.GroupChatMessage;
import com.wecloud.im.sdk.model.GroupChatStatusMessage;
import com.wecloud.im.sdk.model.ImClient; import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.PageResult;
import com.wecloud.im.sdk.model.PrivateChatMessage;
import com.wecloud.im.sdk.model.PrivateChatStatusMessage;
import com.wecloud.im.sdk.model.Token; import com.wecloud.im.sdk.model.Token;
import com.wecloud.im.sdk.model.UnsureFriend; import com.wecloud.im.sdk.model.UnsureFriend;
...@@ -69,6 +77,16 @@ public interface WecloudIm { ...@@ -69,6 +77,16 @@ public interface WecloudIm {
List<Friend> getFriends(String userId); List<Friend> getFriends(String userId);
/** /**
* 获取黑名单列表
* @Author luozh
* @Date 2022年05月07日 05:23:40
* @param userId
* @Return
* @return
*/
PageResult<Blacklist> pageBlacklist(Integer pageIndex, Integer pageSize, String userId);
/**
* 设置会话置顶 * 设置会话置顶
* @Author luozh * @Author luozh
* @Date 2022年04月26日 03:33:44 * @Date 2022年04月26日 03:33:44
...@@ -89,4 +107,79 @@ public interface WecloudIm { ...@@ -89,4 +107,79 @@ public interface WecloudIm {
* @Return * @Return
*/ */
Boolean setConversationDoNotDisturb(String userId, Long conversationId, Boolean doNotDisturb); Boolean setConversationDoNotDisturb(String userId, Long conversationId, Boolean doNotDisturb);
/**
* 好友申请
* @Author luozh
* @Date 2022年04月28日 02:05:11
* @param userId 用户id
* @param friendId 好友id
* @param friendName 备注好友名称
* @param requestRemark 请求备注
* @Return
*/
Boolean friendRequest(String userId, String friendId, String friendName, String requestRemark);
/**
* 群成员好友申请
* @Author luozh
* @Date 2022年04月28日 02:06:01
* @param
* @Return
*/
Boolean groupMembersFriendRequest(Long conversationId, String userId, String friendId, String friendName,
String requestRemark);
/**
* 全量获取聊天室成员
* @param chatRoomId 聊天室id
* @return
*/
List<ChatRoomMember> listChatRoomMember(Long chatRoomId);
/**
* 批量获取会话信息
* @param chatType 会话属性,1:单聊,2:普通群,3:万人群,4:聊天室
* @param conversationIds
* @return
*/
List<Conversation> listConversation(Integer chatType, List<Long> conversationIds);
/**
* 发布群聊消息
* @Author luozh
* @Date 2022年05月05日 09:38:34
* @param groupChatMessage 发布群聊消息参数
* @Return
*/
Boolean publishGroupChatMessage(GroupChatMessage groupChatMessage);
/**
* 发布群聊状态消息
* @Author luozh
* @Date 2022年05月05日 09:38:34
* @param groupChatStatusMessage 发布群聊消息参数
* @Return
*/
Boolean publishGroupChatStatusMessage(GroupChatStatusMessage groupChatStatusMessage);
/**
* 发布单聊消息
* @Author luozh
* @Date 2022年05月05日 09:38:34
* @param privateChatMessage 发布单聊消息参数
* @Return
*/
Boolean publishPrivateMessage(PrivateChatMessage privateChatMessage);
/**
* 发布群聊状态消息
* @Author luozh
* @Date 2022年05月05日 09:38:34
* @param privateChatStatusMessage 发布群聊消息参数
* @Return
*/
Boolean publishPrivateStatusMessage(PrivateChatStatusMessage privateChatStatusMessage);
} }
...@@ -3,14 +3,35 @@ package com.wecloud.im.sdk; ...@@ -3,14 +3,35 @@ package com.wecloud.im.sdk;
import java.net.URL; import java.net.URL;
import java.util.List; import java.util.List;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert;
import com.wecloud.im.sdk.internal.WecloudImClientOperation; import com.wecloud.im.sdk.internal.WecloudImClientOperation;
import com.wecloud.im.sdk.internal.WecloudImConversationOperation; import com.wecloud.im.sdk.internal.WecloudImConversationOperation;
import com.wecloud.im.sdk.internal.WecloudImMessageOperation;
import com.wecloud.im.sdk.model.Blacklist;
import com.wecloud.im.sdk.model.ChatRoomMember;
import com.wecloud.im.sdk.model.ClientLoginRequest; import com.wecloud.im.sdk.model.ClientLoginRequest;
import com.wecloud.im.sdk.model.Conversation;
import com.wecloud.im.sdk.model.Friend; import com.wecloud.im.sdk.model.Friend;
import com.wecloud.im.sdk.model.FriendRequestRequest;
import com.wecloud.im.sdk.model.GetFriendsRequest; import com.wecloud.im.sdk.model.GetFriendsRequest;
import com.wecloud.im.sdk.model.GetUnsureFriendsRequest; import com.wecloud.im.sdk.model.GetUnsureFriendsRequest;
import com.wecloud.im.sdk.model.GroupChatMessage;
import com.wecloud.im.sdk.model.GroupChatStatusMessage;
import com.wecloud.im.sdk.model.GroupMembersFriendRequestRequest;
import com.wecloud.im.sdk.model.ImClient; import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.ListChatRoomMemberRequest;
import com.wecloud.im.sdk.model.ListConversationRequest;
import com.wecloud.im.sdk.model.ModifyUserRequest; import com.wecloud.im.sdk.model.ModifyUserRequest;
import com.wecloud.im.sdk.model.PageBlacklistRequest;
import com.wecloud.im.sdk.model.PageResult;
import com.wecloud.im.sdk.model.PrivateChatMessage;
import com.wecloud.im.sdk.model.PrivateChatStatusMessage;
import com.wecloud.im.sdk.model.PublishGroupChatMessageRequest;
import com.wecloud.im.sdk.model.PublishGroupChatStatusMessageRequest;
import com.wecloud.im.sdk.model.PublishPrivateChatMessageRequest;
import com.wecloud.im.sdk.model.PublishPrivateChatStatusMessageRequest;
import com.wecloud.im.sdk.model.RegisterClientRequest; import com.wecloud.im.sdk.model.RegisterClientRequest;
import com.wecloud.im.sdk.model.SetConversationDoNotDisturbRequest; import com.wecloud.im.sdk.model.SetConversationDoNotDisturbRequest;
import com.wecloud.im.sdk.model.SetConversationTopRequest; import com.wecloud.im.sdk.model.SetConversationTopRequest;
...@@ -45,6 +66,8 @@ public class WecloudImClient implements WecloudIm { ...@@ -45,6 +66,8 @@ public class WecloudImClient implements WecloudIm {
private WecloudImConversationOperation imConversationOperation; private WecloudImConversationOperation imConversationOperation;
private WecloudImMessageOperation wecloudImMessageOperation;
public WecloudImClient(URL apiDomain, String appKey, String appSecret) { public WecloudImClient(URL apiDomain, String appKey, String appSecret) {
this.apiDomain = apiDomain; this.apiDomain = apiDomain;
this.appKey = appKey; this.appKey = appKey;
...@@ -92,6 +115,44 @@ public class WecloudImClient implements WecloudIm { ...@@ -92,6 +115,44 @@ public class WecloudImClient implements WecloudIm {
} }
@Override @Override
public PageResult<Blacklist> pageBlacklist(Integer pageIndex, Integer pageSize, String userId) {
PageBlacklistRequest pageBlacklistRequest =
PageBlacklistRequest.builder().pageSize(pageSize).pageIndex(pageIndex).userId(userId).build();
return imClientOperation.pageBlacklist(pageBlacklistRequest);
}
@Override
public Boolean friendRequest(String userId, String friendId, String friendName, String requestRemark) {
FriendRequestRequest friendRequestRequest =
FriendRequestRequest.builder().userId(userId).friendId(friendId).friendName(friendName).requestRemark(requestRemark).build();
return imClientOperation.friendRequest(friendRequestRequest);
}
@Override
public Boolean groupMembersFriendRequest(Long conversationId, String userId, String friendId, String friendName, String requestRemark) {
GroupMembersFriendRequestRequest groupMembersFriendRequestRequest =
GroupMembersFriendRequestRequest.builder().conversationId(conversationId)
.userId(userId).friendId(friendId)
.friendName(friendName)
.requestRemark(requestRemark)
.build();
return imConversationOperation.groupMembersFriendRequest(groupMembersFriendRequestRequest);
}
@Override
public List<ChatRoomMember> listChatRoomMember(Long chatRoomId) {
ListChatRoomMemberRequest request = ListChatRoomMemberRequest.builder().chatRoomId(chatRoomId).build();
return imClientOperation.listChatRoomMember(request);
}
@Override
public List<Conversation> listConversation(Integer chatType, List<Long> conversationIds) {
ListConversationRequest request = ListConversationRequest.builder().chatType(chatType)
.conversationIds(conversationIds).build();
return imClientOperation.listConversation(request);
}
@Override
public Boolean setConversationTop(String userId, Long conversationId, Boolean top) { public Boolean setConversationTop(String userId, Long conversationId, Boolean top) {
SetConversationTopRequest setConversationTopRequest = SetConversationTopRequest setConversationTopRequest =
SetConversationTopRequest.builder().userId(userId).conversationId(conversationId).top(top).build(); SetConversationTopRequest.builder().userId(userId).conversationId(conversationId).top(top).build();
...@@ -105,9 +166,42 @@ public class WecloudImClient implements WecloudIm { ...@@ -105,9 +166,42 @@ public class WecloudImClient implements WecloudIm {
return imConversationOperation.setConversationDoNotDisturb(setConversationDoNotDisturbRequest); return imConversationOperation.setConversationDoNotDisturb(setConversationDoNotDisturbRequest);
} }
@Override
public Boolean publishGroupChatMessage(GroupChatMessage groupChatMessage) {
Assert.notNull(groupChatMessage);
PublishGroupChatMessageRequest request = BeanUtil.toBean(groupChatMessage,
PublishGroupChatMessageRequest.class);
return wecloudImMessageOperation.publishGroupChatMessage(request);
}
@Override
public Boolean publishGroupChatStatusMessage(GroupChatStatusMessage groupChatstatusMessage) {
Assert.notNull(groupChatstatusMessage);
PublishGroupChatStatusMessageRequest request = BeanUtil.toBean(groupChatstatusMessage,
PublishGroupChatStatusMessageRequest.class);
return wecloudImMessageOperation.publishGroupChatStatusMessage(request);
}
@Override
public Boolean publishPrivateMessage(PrivateChatMessage privateChatMessage) {
Assert.notNull(privateChatMessage);
PublishPrivateChatMessageRequest request = BeanUtil.toBean(privateChatMessage,
PublishPrivateChatMessageRequest.class);
return wecloudImMessageOperation.publishPrivateMessage(request);
}
@Override
public Boolean publishPrivateStatusMessage(PrivateChatStatusMessage privateChatStatusMessage) {
Assert.notNull(privateChatStatusMessage);
PublishPrivateChatStatusMessageRequest request = BeanUtil.toBean(privateChatStatusMessage,
PublishPrivateChatStatusMessageRequest.class);
return wecloudImMessageOperation.publishPrivateStatusMessage(request);
}
private void initOperations() { private void initOperations() {
this.imClientOperation = new WecloudImClientOperation(apiDomain, appKey, appSecret); this.imClientOperation = new WecloudImClientOperation(apiDomain, appKey, appSecret);
this.imConversationOperation = new WecloudImConversationOperation(apiDomain, appKey, appSecret); this.imConversationOperation = new WecloudImConversationOperation(apiDomain, appKey, appSecret);
this.wecloudImMessageOperation = new WecloudImMessageOperation(apiDomain, appKey, appSecret);
} }
......
package com.wecloud.im.sdk.enums;
import lombok.Getter;
/**
*
* @Author luozh
* @Date 2022年05月07日 13:44
* @Version 1.0
*/
public enum MessageTypeEnum {
// 位置
POSITION(0),
// 文本消息
TEXT(-1),
// 图像消息
IMAGE(-2),
// 音频消息
AUDIO(-3),
// 视频消息
VIDEO(-4),
// 文件消息
FILE(-5),
;
@Getter
private final int code;
MessageTypeEnum(int code) {
this.code = code;
}
/**
* 根据code获取
*
* @param code
* @return
*/
public static MessageTypeEnum getByCode(int code) {
for (MessageTypeEnum messageTypeEnum : values()) {
if (messageTypeEnum.getCode() == code) {
return messageTypeEnum;
}
}
return null;
}
}
...@@ -10,20 +10,32 @@ import com.alibaba.fastjson.JSON; ...@@ -10,20 +10,32 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.wecloud.im.sdk.common.HttpMethod; import com.wecloud.im.sdk.common.HttpMethod;
import com.wecloud.im.sdk.common.RequestMessage; import com.wecloud.im.sdk.common.RequestMessage;
import com.wecloud.im.sdk.model.Blacklist;
import com.wecloud.im.sdk.model.ChatRoomMember;
import com.wecloud.im.sdk.model.ClientLoginRequest; import com.wecloud.im.sdk.model.ClientLoginRequest;
import com.wecloud.im.sdk.model.Conversation;
import com.wecloud.im.sdk.model.Friend; import com.wecloud.im.sdk.model.Friend;
import com.wecloud.im.sdk.model.FriendRequestRequest;
import com.wecloud.im.sdk.model.GetFriendsRequest; import com.wecloud.im.sdk.model.GetFriendsRequest;
import com.wecloud.im.sdk.model.GetUnsureFriendsRequest; import com.wecloud.im.sdk.model.GetUnsureFriendsRequest;
import com.wecloud.im.sdk.model.ImClient; import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.ListChatRoomMemberRequest;
import com.wecloud.im.sdk.model.ListConversationRequest;
import com.wecloud.im.sdk.model.ModifyUserRequest; import com.wecloud.im.sdk.model.ModifyUserRequest;
import com.wecloud.im.sdk.model.PageBlacklistRequest;
import com.wecloud.im.sdk.model.PageResult;
import com.wecloud.im.sdk.model.RegisterClientRequest; import com.wecloud.im.sdk.model.RegisterClientRequest;
import com.wecloud.im.sdk.model.Token; import com.wecloud.im.sdk.model.Token;
import com.wecloud.im.sdk.model.UnsureFriend; import com.wecloud.im.sdk.model.UnsureFriend;
import static com.wecloud.im.sdk.ResourcePathConstants.FRIEND_REQUEST;
import static com.wecloud.im.sdk.ResourcePathConstants.GET_FRIENDS; import static com.wecloud.im.sdk.ResourcePathConstants.GET_FRIENDS;
import static com.wecloud.im.sdk.ResourcePathConstants.GET_TOKEN_URL; import static com.wecloud.im.sdk.ResourcePathConstants.GET_TOKEN_URL;
import static com.wecloud.im.sdk.ResourcePathConstants.GET_UNSURE_FRIENDS; import static com.wecloud.im.sdk.ResourcePathConstants.GET_UNSURE_FRIENDS;
import static com.wecloud.im.sdk.ResourcePathConstants.LIST_CHAT_ROOM_MEMBER_REQUEST;
import static com.wecloud.im.sdk.ResourcePathConstants.LIST_CONVERSATION_REQUEST;
import static com.wecloud.im.sdk.ResourcePathConstants.MODIFY_USER_URL; import static com.wecloud.im.sdk.ResourcePathConstants.MODIFY_USER_URL;
import static com.wecloud.im.sdk.ResourcePathConstants.PAGE_BLACKLIST_REQUEST;
import static com.wecloud.im.sdk.ResourcePathConstants.REGISTER_CLIENT_URL; import static com.wecloud.im.sdk.ResourcePathConstants.REGISTER_CLIENT_URL;
import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotBlank; import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotBlank;
import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotNull; import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotNull;
...@@ -151,6 +163,13 @@ public class WecloudImClientOperation extends WecloudImOperation { ...@@ -151,6 +163,13 @@ public class WecloudImClientOperation extends WecloudImOperation {
return unsureFriends; return unsureFriends;
} }
/**
* 获取好友列表(全量)
* @Author luozh
* @Date 2022年04月28日 03:01:21
* @param getFriendsRequest
* @Return
*/
public List<Friend> getFriends(GetFriendsRequest getFriendsRequest) { public List<Friend> getFriends(GetFriendsRequest getFriendsRequest) {
String userId = getFriendsRequest.getUserId(); String userId = getFriendsRequest.getUserId();
// 参数校验 // 参数校验
...@@ -169,4 +188,96 @@ public class WecloudImClientOperation extends WecloudImOperation { ...@@ -169,4 +188,96 @@ public class WecloudImClientOperation extends WecloudImOperation {
List<Friend> unsureFriends = JSON.parseObject(JSON.toJSONString(result), typeReference); List<Friend> unsureFriends = JSON.parseObject(JSON.toJSONString(result), typeReference);
return unsureFriends; return unsureFriends;
} }
/**
* 好友请求
* @Author luozh
* @Date 2022年04月28日 03:01:47
* @param friendRequestRequest
*/
public Boolean friendRequest(FriendRequestRequest friendRequestRequest) {
String userId = friendRequestRequest.getUserId();
String friendId = friendRequestRequest.getFriendId();
// 参数校验
assertParameterNotNull(userId, "userId");
assertParameterNotNull(friendId, "friendId");
// 校验通过 构建参数
Map<String, String> param = new HashMap<>();
param.put("clientId", userId + "");
param.put("friendClientId", friendId + "");
param.put("friendName", Optional.ofNullable(friendRequestRequest.getFriendName()).orElse(""));
param.put("requestRemark", Optional.ofNullable(friendRequestRequest.getRequestRemark()).orElse(""));
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(FRIEND_REQUEST)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(friendRequestRequest).build();
Object result = doOperation(request);
Boolean flag = JSON.parseObject(JSON.toJSONString(result), Boolean.class);
return flag;
}
public List<ChatRoomMember> listChatRoomMember(ListChatRoomMemberRequest listChatRoomMemberRequest) {
// 参数校验
assertParameterNotNull(listChatRoomMemberRequest.getChatRoomId(), "chatRoomId");
// 校验通过 构建参数
Map<String, String> param = new HashMap<>();
param.put("chatRoomId", listChatRoomMemberRequest.getChatRoomId() + "");
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(LIST_CHAT_ROOM_MEMBER_REQUEST)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(listChatRoomMemberRequest).build();
Object result = doOperation(request);
TypeReference<List<ChatRoomMember>> typeReference = new TypeReference<List<ChatRoomMember>>() {
};
List<ChatRoomMember> chatRoomMembers = JSON.parseObject(JSON.toJSONString(result), typeReference);
return chatRoomMembers;
}
public List<Conversation> listConversation(ListConversationRequest listConversationRequest) {
// 参数校验
assertParameterNotNull(listConversationRequest.getConversationIds(), "conversationIds");
// 校验通过 构建参数
Map<String, String> param = new HashMap<>();
param.put("chatType", listConversationRequest.getChatType() + "");
param.put("conversationIds", JSON.toJSONString(listConversationRequest.getConversationIds()));
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(LIST_CONVERSATION_REQUEST)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(listConversationRequest).build();
Object result = doOperation(request);
TypeReference<List<Conversation>> typeReference = new TypeReference<List<Conversation>>() {
};
List<Conversation> conversations = JSON.parseObject(JSON.toJSONString(result), typeReference);
return conversations;
}
public PageResult<Blacklist> pageBlacklist(PageBlacklistRequest pageBlacklistRequest) {
// 参数校验
assertParameterNotNull(pageBlacklistRequest.getUserId(), "userId");
// 校验通过 构建参数
if (pageBlacklistRequest.getPageIndex() == null) {
pageBlacklistRequest.setPageIndex(1);
}
if (pageBlacklistRequest.getPageSize() == null) {
pageBlacklistRequest.setPageSize(10);
}
Map<String, String> param = new HashMap<>();
param.put("clientId", pageBlacklistRequest.getUserId());
param.put("pageIndex", pageBlacklistRequest.getPageIndex() + "");
param.put("pageSize", pageBlacklistRequest.getPageSize() + "");
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(PAGE_BLACKLIST_REQUEST)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(pageBlacklistRequest).build();
Object result = doOperation(request);
TypeReference<PageResult<Blacklist>> typeReference = new TypeReference<PageResult<Blacklist>>() {
};
PageResult<Blacklist> blacklistPage = JSON.parseObject(JSON.toJSONString(result), typeReference);
return blacklistPage;
}
} }
...@@ -3,13 +3,17 @@ package com.wecloud.im.sdk.internal; ...@@ -3,13 +3,17 @@ package com.wecloud.im.sdk.internal;
import java.net.URL; import java.net.URL;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import com.alibaba.fastjson.JSON;
import com.wecloud.im.sdk.common.HttpMethod; import com.wecloud.im.sdk.common.HttpMethod;
import com.wecloud.im.sdk.common.RequestMessage; import com.wecloud.im.sdk.common.RequestMessage;
import com.wecloud.im.sdk.model.GroupMembersFriendRequestRequest;
import com.wecloud.im.sdk.model.SetConversationDoNotDisturbRequest; import com.wecloud.im.sdk.model.SetConversationDoNotDisturbRequest;
import com.wecloud.im.sdk.model.SetConversationTopRequest; import com.wecloud.im.sdk.model.SetConversationTopRequest;
import static com.wecloud.im.sdk.ResourcePathConstants.REGISTER_CLIENT_URL; import static com.wecloud.im.sdk.ResourcePathConstants.CHAT_SETTING;
import static com.wecloud.im.sdk.ResourcePathConstants.GROUP_MEMBERS_FRIEND_REQUEST;
import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotNull; import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotNull;
/** /**
...@@ -43,9 +47,10 @@ public class WecloudImConversationOperation extends WecloudImOperation { ...@@ -43,9 +47,10 @@ public class WecloudImConversationOperation extends WecloudImOperation {
Map<String, String> param = new HashMap<>(); Map<String, String> param = new HashMap<>();
param.put("clientId", userId); param.put("clientId", userId);
param.put("conversationId", conversationId.toString()); param.put("conversationId", conversationId.toString());
param.put("top", top.toString()); param.put("type", "TOP");
param.put("on", top.toString());
// 发送请求 // 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(REGISTER_CLIENT_URL) RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(CHAT_SETTING)
.setMethod(HttpMethod.POST).setParameters(param) .setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(setConversationTopRequest).build(); .setOriginalRequest(setConversationTopRequest).build();
...@@ -72,13 +77,38 @@ public class WecloudImConversationOperation extends WecloudImOperation { ...@@ -72,13 +77,38 @@ public class WecloudImConversationOperation extends WecloudImOperation {
Map<String, String> param = new HashMap<>(); Map<String, String> param = new HashMap<>();
param.put("clientId", userId); param.put("clientId", userId);
param.put("conversationId", conversationId.toString()); param.put("conversationId", conversationId.toString());
param.put("doNotDisturb", doNotDisturb.toString()); param.put("type", "DO_NOT_DISTURB");
param.put("on", doNotDisturb.toString());
// 发送请求 // 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(REGISTER_CLIENT_URL) RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(CHAT_SETTING)
.setMethod(HttpMethod.POST).setParameters(param) .setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(setConversationDoNotDisturbRequest).build(); .setOriginalRequest(setConversationDoNotDisturbRequest).build();
doOperation(request); doOperation(request);
return true; return true;
} }
public Boolean groupMembersFriendRequest(GroupMembersFriendRequestRequest groupMembersFriendRequestRequest) {
Long conversationId = groupMembersFriendRequestRequest.getConversationId();
String userId = groupMembersFriendRequestRequest.getUserId();
String friendId = groupMembersFriendRequestRequest.getFriendId();
// 参数校验
assertParameterNotNull(conversationId, "conversationId");
assertParameterNotNull(userId, "userId");
assertParameterNotNull(friendId, "friendId");
// 校验通过 构建参数
Map<String, String> param = new HashMap<>();
param.put("conversationId", conversationId + "");
param.put("clientId", userId + "");
param.put("friendClientId", friendId + "");
param.put("friendName", Optional.ofNullable(groupMembersFriendRequestRequest.getFriendName()).orElse(""));
param.put("requestRemark", Optional.ofNullable(groupMembersFriendRequestRequest.getRequestRemark()).orElse(""));
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(GROUP_MEMBERS_FRIEND_REQUEST)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(groupMembersFriendRequestRequest).build();
Object result = doOperation(request);
Boolean flag = JSON.parseObject(JSON.toJSONString(result), Boolean.class);
return flag;
}
} }
package com.wecloud.im.sdk.internal;
import java.net.URL;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.wecloud.im.sdk.common.HttpMethod;
import com.wecloud.im.sdk.common.RequestMessage;
import com.wecloud.im.sdk.model.PublishGroupChatMessageRequest;
import com.wecloud.im.sdk.model.PublishGroupChatStatusMessageRequest;
import com.wecloud.im.sdk.model.PublishPrivateChatMessageRequest;
import com.wecloud.im.sdk.model.PublishPrivateChatStatusMessageRequest;
import static com.wecloud.im.sdk.ResourcePathConstants.PUBLISH_GROUP_CHAT_MESSAGE_REQUEST;
import static com.wecloud.im.sdk.ResourcePathConstants.PUBLISH_GROUP_CHAT_STATUS_MESSAGE_REQUEST;
import static com.wecloud.im.sdk.ResourcePathConstants.PUBLISH_PRIVATE_CHAT_MESSAGE_REQUEST;
import static com.wecloud.im.sdk.ResourcePathConstants.PUBLISH_PRIVATE_CHAT_STATUS_MESSAGE_REQUEST;
import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotNull;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:11
* @Version 1.0
*/
public class WecloudImMessageOperation extends WecloudImOperation {
public WecloudImMessageOperation(URL apiDomain, String appKey, String appSecret) {
super(apiDomain, appKey, appSecret);
}
/**
* 发布群消息
* @Author luozh
* @Date 2022年05月05日 10:49:47
* @param publishGroupChatMessageRequest
* @Return
*/
public Boolean publishGroupChatMessage(PublishGroupChatMessageRequest publishGroupChatMessageRequest) {
String fromUserId = publishGroupChatMessageRequest.getFromUserId();
String toGroupIds = publishGroupChatMessageRequest.getToGroupIds();
String messageType = publishGroupChatMessageRequest.getMessageType();
String content = publishGroupChatMessageRequest.getContent();
// 必填参数校验
assertParameterNotNull(fromUserId, "fromUserId");
assertParameterNotNull(toGroupIds, "toGroupIds");
assertParameterNotNull(messageType, "messageType");
assertParameterNotNull(content, "content");
// 校验通过 构建参数
TypeReference<Map<String, String>> typeReference = new TypeReference<Map<String, String>>() {
};
Map<String, String> param = JSONObject.parseObject(JSON.toJSONString(publishGroupChatMessageRequest), typeReference);
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(PUBLISH_GROUP_CHAT_MESSAGE_REQUEST)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(publishGroupChatMessageRequest).build();
doOperation(request);
return true;
}
/**
* 状态消息发送
* @Author luozh
* @Date 2022年05月05日 11:07:05
* @param publishGroupChatStatusMessageRequest
* @Return
*/
public Boolean publishGroupChatStatusMessage(PublishGroupChatStatusMessageRequest publishGroupChatStatusMessageRequest) {
String fromUserId = publishGroupChatStatusMessageRequest.getFromUserId();
String toGroupIds = publishGroupChatStatusMessageRequest.getToGroupIds();
String messageType = publishGroupChatStatusMessageRequest.getMessageType();
String content = publishGroupChatStatusMessageRequest.getContent();
// 必填参数校验
assertParameterNotNull(fromUserId, "fromUserId");
assertParameterNotNull(toGroupIds, "toGroupIds");
assertParameterNotNull(messageType, "messageType");
assertParameterNotNull(content, "content");
// 校验通过 构建参数
TypeReference<Map<String, String>> typeReference = new TypeReference<Map<String, String>>() {
};
Map<String, String> param = JSONObject.parseObject(JSON.toJSONString(publishGroupChatStatusMessageRequest), typeReference);
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(PUBLISH_GROUP_CHAT_STATUS_MESSAGE_REQUEST)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(publishGroupChatStatusMessageRequest).build();
doOperation(request);
return true;
}
public Boolean publishPrivateMessage(PublishPrivateChatMessageRequest publishPrivateChatMessageRequest) {
String fromUserId = publishPrivateChatMessageRequest.getFromUserId();
String toUserIds = publishPrivateChatMessageRequest.getToUserIds();
String messageType = publishPrivateChatMessageRequest.getMessageType();
String content = publishPrivateChatMessageRequest.getContent();
// 必填参数校验
assertParameterNotNull(fromUserId, "fromUserId");
assertParameterNotNull(toUserIds, "toUserIds");
assertParameterNotNull(messageType, "messageType");
assertParameterNotNull(content, "content");
// 校验通过 构建参数
TypeReference<Map<String, String>> typeReference = new TypeReference<Map<String, String>>() {
};
Map<String, String> param = JSONObject.parseObject(JSON.toJSONString(publishPrivateChatMessageRequest), typeReference);
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(PUBLISH_PRIVATE_CHAT_MESSAGE_REQUEST)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(publishPrivateChatMessageRequest).build();
doOperation(request);
return true;
}
public Boolean publishPrivateStatusMessage(PublishPrivateChatStatusMessageRequest publishPrivateChatStatusMessageRequest) {
String fromUserId = publishPrivateChatStatusMessageRequest.getFromUserId();
String toUserIds = publishPrivateChatStatusMessageRequest.getToUserIds();
String messageType = publishPrivateChatStatusMessageRequest.getMessageType();
String content = publishPrivateChatStatusMessageRequest.getContent();
// 必填参数校验
assertParameterNotNull(fromUserId, "fromUserId");
assertParameterNotNull(toUserIds, "toUserIds");
assertParameterNotNull(messageType, "messageType");
assertParameterNotNull(content, "content");
// 校验通过 构建参数
TypeReference<Map<String, String>> typeReference = new TypeReference<Map<String, String>>() {
};
Map<String, String> param = JSONObject.parseObject(JSON.toJSONString(publishPrivateChatStatusMessageRequest), typeReference);
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(PUBLISH_PRIVATE_CHAT_STATUS_MESSAGE_REQUEST)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(publishPrivateChatStatusMessageRequest).build();
doOperation(request);
return true;
}
}
package com.wecloud.im.sdk.model;
import lombok.Data;
import java.io.Serializable;
/**
*
* @Author luozh
* @Date 2022年05月07日 17:22
* @Version 1.0
*/
@Data
public class Blacklist implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 被拉黑者id
*/
private String clientIdBePrevent;
}
package com.wecloud.im.sdk.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @Author wenzhida
* @Date 2022/4/27 16:47
* @Description 聊天室成员VO
*/
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class ChatRoomMember implements Serializable {
private static final long serialVersionUID = -7063567868963011339L;
/**
* 聊天室房间id
*/
private Long chatRoomId;
/**
* 客户端id
*/
private String clientId;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
/**
* <pre>
* 会话表 查询结果对象
* </pre>
*
* @author wei
* @date 2021-05-07
*/
@Data
@Accessors(chain = true)
public class Conversation implements Serializable {
private static final long serialVersionUID = 8120459168840854991L;
/**
* "会话id"
*/
private Long id;
/**
* "创建时间"
*/
private Date createTime;
/**
* "创建者客户端id"
*/
private String creator;
/**
* "可选 对话的名字,可为群组命名。"
*/
private String name;
/**
* value = "可选 自定义属性,供开发者扩展使用。", hidden = true
*/
private String attribute;
/**
* "可选 自定义属性,供开发者扩展使用。"
*/
private HashMap attributes;
/**
* "可选 对话类型标志,是否是系统对话,后面会说明。"
*/
private Boolean systemFlag;
/**
* "未读消息条数"
*/
private Long msgNotReadCount;
/**
* "成员"
*/
private String members;
/**
* "会话属性,1:单聊,2:普通群,3:万人群"
*/
private Integer chatType;
/**
* "群成员数"
*/
private Integer memberCount;
/**
* "是否被@ true-是 false-否"
*/
private Boolean isBeAt;
/**
* 禁言开关
* @see com.wecloud.im.sdk.enums.MutedEnum
*/
/**
* "禁言开关 1-未禁言 2-禁言"
*/
private Integer muted;
/**
* "禁言开关 1-未禁言 2-禁言"
*/
private Integer beAtCount;
/**
* "禁止互加好友"
*/
private Boolean forbidAddFriend;
/**
* "禁止发红包"
*/
private Boolean forbidSendRedPackets;
/**
* "禁止发图片"
*/
private Boolean forbidSendPic;
/**
* "禁止发链接"
*/
private Boolean forbidSendLink;
}
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* @Author luozh
* @Date 2022年04月28日 14:09
* @Version 1.0
*/
@Builder
@EqualsAndHashCode(callSuper = true)
@Data
public class FriendRequestRequest extends WebServiceRequest {
/**
* 用户id
*/
private String userId;
/**
* 好友id
*/
private String friendId;
/**
* 好友备注
*/
private String friendName;
/**
* 请求备注
*/
private String requestRemark;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public class GroupChatMessage {
/**
* 发送人客户端id
*/
private String fromUserId;
/**
* 接收群id
*/
private String toGroupIds;
/**
* 指定一个或多个用户
*/
private String toUserIds;
/**
* 消息类型
*/
private String messageType;
/**
* 消息
*/
private String content;
/**
* 指定离线推送通知中的推送内容
*/
private String pushContent;
/**
* 是否包含发送用户
*/
private Boolean includeSender;
/**
* 是否存储此条消息
*/
private Boolean persisted;
/**
* 是否为@消息
*/
private Boolean mentioned;
/**
* 是否为静默消息
*/
private Boolean silent;
/**
* 推送拓展配置
*/
private PushExtParam pushExt;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public class GroupChatStatusMessage {
/**
* 发送人客户端id
*/
private String fromUserId;
/**
* 接收群id
*/
private String toGroupIds;
/**
* 消息类型
*/
private String messageType;
/**
* 消息
*/
private String content;
/**
* 是否过滤黑名单
*/
private Boolean includeBlacklist;
/**
* 发送用户是否接收
*/
private Boolean includeSender;
}
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* @Author luozh
* @Date 2022年04月28日 14:11
* @Version 1.0
*/
@Builder
@EqualsAndHashCode(callSuper = true)
@Data
public class GroupMembersFriendRequestRequest extends WebServiceRequest {
/**
* 会话id
*/
private Long conversationId;
/**
* 用户id
*/
private String userId;
/**
* 好友id
*/
private String friendId;
/**
* 好友备注
*/
private String friendName;
/**
* 请求备注
*/
private String requestRemark;
}
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @Author wenzhida
* @Date 2022/5/1 9:35
* @Description 查找聊天室成员入参
*/
@EqualsAndHashCode(callSuper = true)
@Builder
@Data
public class ListChatRoomMemberRequest extends WebServiceRequest {
private static final long serialVersionUID = -3602523207000275557L;
/**
* 聊天室房间id
*/
private Long chatRoomId;
}
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* @Author wenzhida
* @Date 2022/5/1 9:35
* @Description 查找聊天室入参
*/
@EqualsAndHashCode(callSuper = true)
@Builder
@Data
public class ListConversationRequest extends WebServiceRequest {
private static final long serialVersionUID = -3602523207000275557L;
/**
* 会话属性,1:单聊,2:普通群,3:万人群
*/
private Integer chatType;
/**
* 会话id列表
*/
private List<Long> conversationIds;
}
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* @Author luozh
* @Date 2022年05月07日 17:25
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Builder
@Data
public class PageBlacklistRequest extends WebServiceRequest {
private Integer pageIndex;
private Integer pageSize;
private String userId;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
import java.util.List;
/**
*
* @Author luozh
* @Date 2022年05月09日 10:07
* @Version 1.0
*/
@Data
public class PageResult<T> {
private Integer total;
private Integer pageIndex;
private Integer pageSize;
private List<T> records;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
/**
* 单聊消息
* @Author luozh
* @Date 2022年05月05日 11:49
* @Version 1.0
*/
@Data
public class PrivateChatMessage {
/**
* 发送人客户端id
*/
private String fromUserId;
/**
* 指定一个或多个用户
*/
private String toUserIds;
/**
* 消息类型
*/
private String messageType;
/**
* 消息
*/
private String content;
/**
* 指定离线推送通知中的推送内容
*/
private String pushContent;
/**
* 是否包含发送用户
*/
private Boolean includeSender;
/**
* 是否过滤黑名单
*/
private Boolean includeBlacklist;
/**
* 是否存储此条消息
*/
private Boolean persisted;
/**
* 是否为静默消息
*/
private Boolean silent;
/**
* 推送拓展配置
*/
private PushExtParam pushExt;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@Data
public class PrivateChatStatusMessage {
/**
* 发送人客户端id
*/
private String fromUserId;
/**
* 接收群id
*/
private String toUserIds;
/**
* 消息类型
*/
private String messageType;
/**
* 消息
*/
private String content;
/**
* 是否过滤黑名单
*/
private Boolean includeBlacklist;
/**
* 发送用户是否接收
*/
private Boolean includeSender;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 发布群聊消息请求
* @Author luozh
* @Date 2022年05月05日 09:39
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PublishGroupChatMessageRequest extends WebServiceRequest {
/**
* 发送人客户端id
*/
private String fromUserId;
/**
* 接收群id
*/
private String toGroupIds;
/**
* 指定一个或多个用户
*/
private String toUserIds;
/**
* 消息类型
*/
private String messageType;
/**
* 消息
*/
private String content;
/**
* 指定离线推送通知中的推送内容
*/
private String pushContent;
/**
* 是否包含发送用户
*/
private Boolean includeSender;
/**
* 是否存储此条消息
*/
private Boolean persisted;
/**
* 是否为@消息
*/
private Boolean mentioned;
/**
* 是否为静默消息
*/
private Boolean silent;
/**
* 推送拓展配置
*/
private PushExtParam pushExt;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 发布群聊消息请求
* @Author luozh
* @Date 2022年05月05日 09:39
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PublishGroupChatStatusMessageRequest extends WebServiceRequest {
/**
* 发送人客户端id
*/
private String fromUserId;
/**
* 接收群id
*/
private String toGroupIds;
/**
* 消息类型
*/
private String messageType;
/**
* 消息
*/
private String content;
/**
* 是否过滤黑名单
*/
private Boolean includeBlacklist;
/**
* 发送用户是否接收
*/
private Boolean includeSender;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 单聊消息
* @Author luozh
* @Date 2022年05月05日 11:49
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PublishPrivateChatMessageRequest extends WebServiceRequest {
/**
* 发送人客户端id
*/
private String fromUserId;
/**
* 指定一个或多个用户
*/
private String toUserIds;
/**
* 消息类型
*/
private String messageType;
/**
* 消息
*/
private String content;
/**
* 指定离线推送通知中的推送内容
*/
private String pushContent;
/**
* 是否包含发送用户
*/
private Boolean includeSender;
/**
* 是否过滤黑名单
*/
private Boolean includeBlacklist;
/**
* 是否存储此条消息
*/
private Boolean persisted;
/**
* 是否为静默消息
*/
private Boolean silent;
/**
* 推送拓展配置
*/
private PushExtParam pushExt;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* @Author luozh
* @Date 2022年05月05日 10:08
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PublishPrivateChatStatusMessageRequest extends WebServiceRequest {
/**
* 发送人客户端id
*/
private String fromUserId;
/**
* 接收群id
*/
private String toUserIds;
/**
* 消息类型
*/
private String messageType;
/**
* 消息
*/
private String content;
/**
* 是否过滤黑名单
*/
private Boolean includeBlacklist;
/**
* 发送用户是否接收
*/
private Boolean includeSender;
}
package com.wecloud.im.sdk.model;
import lombok.Data;
/**
*
* @Author luozh
* @Date 2022年05月05日 09:55
* @Version 1.0
*/
@Data
public class PushExtParam {
/**
* 通知栏显示主题
*/
private String title;
/**
* 按厂商设置不同推送属性。支持的推送通道值为 `MI`(小米)、`HW`(华为)、`OPPO`、`VIVO`
*/
private String pushChannel;
/**
* 通知渠道的 ID
*/
private String channelId;
/**
* 华为通知栏消息优先级,取值 NORMAL、LOW,默认为 NORMAL 重要消息
*/
private String hwPriority;
/**
* 华为推送自定义的通知栏消息右侧大图标 URL,如果不设置,则不展示通知栏右侧图标
*/
private String hwImage;
/**
* 小米推送自定义的通知栏消息右侧图标 URL
*/
private String miLargeIconUri;
/**
* vivo 推送通道类型。0 为运营消息、1 为系统消息
*/
private String vivoChannelType;
/**
* iOS 平台通知栏分组 ID
*/
private String iosGroupId;
/**
* iOS 平台
*/
private String iosApnsCollapseId;
}
package com.wecloud.im.sdk.model.message;
import lombok.Getter;
import lombok.Setter;
import com.wecloud.im.sdk.enums.MessageTypeEnum;
/**
*
* @Author luozh
* @Date 2022年05月07日 13:51
* @Version 1.0
*/
@Getter
public class BaseMessage {
/**
* 类型
*/
private Integer type;
/**
* 用来给开发者存储拓展的自定义属性字段
*/
@Setter
private Object attrs;
public BaseMessage(MessageTypeEnum type) {
this.setType(type);
}
/**
* 设置类型
* @Author luozh
* @Date 2022年05月07日 01:55:06
* @param type
* @Return
*/
protected void setType(MessageTypeEnum type) {
this.type = type.getCode();
}
}
package com.wecloud.im.sdk.model.message;
import lombok.Getter;
import lombok.Setter;
import com.wecloud.im.sdk.enums.MessageTypeEnum;
/**
* 图片类型消息
* @Author luozh
* @Date 2022年05月07日 13:59
* @Version 1.0
*/
@Getter
@Setter
public class FileMessage extends BaseMessage {
public FileMessage() {
super(MessageTypeEnum.FILE);
}
private MessageFile file;
}
package com.wecloud.im.sdk.model.message;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
/**
* 消息图片文件
* @Author luozh
* @Date 2022年05月07日 14:00
* @Version 1.0
*/
@Data
public class MessageFile {
/**
* 文件地址
*/
private String url;
/**
* 元数据
*/
private MetaData metaData;
@Setter
@Getter
public static class MetaData {
/**
* 文件
*/
private String name;
/**
* 文件的格式
*/
private String format;
/**
* 大小 单位b
*/
private Integer size;
}
}
package com.wecloud.im.sdk.model.message;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
/**
* 消息图片文件
* @Author luozh
* @Date 2022年05月07日 14:00
* @Version 1.0
*/
@Data
public class MessageImageFile {
/**
* 图片地址
*/
private String url;
/**
* 元数据
*/
private MetaData metaData;
@Setter
@Getter
public static class MetaData {
/**
* 图像的名称
*/
private String name;
/**
* 图像的格式
*/
private String format;
/**
* 高度(单位 像素)
*/
private Integer height;
/**
* 宽度(单位 像素)
*/
private Integer width;
/**
* 大小 单位b
*/
private Integer size;
}
}
package com.wecloud.im.sdk.model.message;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
/**
* 音频消息
* @Author luozh
* @Date 2022年05月07日 14:05
* @Version 1.0
*/
@Data
public class MessageVideoFile {
/**
* 地址
*/
private String url;
/**
* 元数据
*/
private MetaData metaData;
@Setter
@Getter
public static class MetaData {
/**
* 文件的名称
*/
private String name;
/**
* 视频的格式
*/
private String format;
/**
* 时长 单位秒 精确小数点后1位
*/
private Double duration;
/**
* 高度(单位 像素)
*/
private Integer height;
/**
* 宽度(单位 像素)
*/
private Integer width;
/**
* 大小 单位b
*/
private Integer size;
}
}
package com.wecloud.im.sdk.model.message;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
/**
* 音频消息
* @Author luozh
* @Date 2022年05月07日 14:05
* @Version 1.0
*/
@Data
public class MessageVoiceFile {
/**
* 地址
*/
private String url;
/**
* 元数据
*/
private MessageImageFile.MetaData metaData;
@Setter
@Getter
public static class MetaData {
/**
* 文件的名称
*/
private String name;
/**
* 时长 单位秒 精确小数点后1位
*/
private Double duration;
/**
* 大小 单位b
*/
private Integer size;
}
}
package com.wecloud.im.sdk.model.message;
import lombok.Getter;
import lombok.Setter;
import com.wecloud.im.sdk.enums.MessageTypeEnum;
/**
* 图片类型消息
* @Author luozh
* @Date 2022年05月07日 13:59
* @Version 1.0
*/
@Getter
@Setter
public class PicMessage extends BaseMessage {
public PicMessage() {
super(MessageTypeEnum.IMAGE);
}
private MessageImageFile file;
}
package com.wecloud.im.sdk.model.message;
import lombok.Getter;
import lombok.Setter;
import com.wecloud.im.sdk.enums.MessageTypeEnum;
/**
* 图片类型消息
* @Author luozh
* @Date 2022年05月07日 13:59
* @Version 1.0
*/
@Getter
@Setter
public class PositionMessage extends BaseMessage {
public PositionMessage() {
super(MessageTypeEnum.POSITION);
}
private MetaData metaData;
@Setter
@Getter
public static class MetaData {
/**
* 经度
*/
private Double longitude;
/**
* 纬度
*/
private Double latitude;
}
}
package com.wecloud.im.sdk.model.message;
import lombok.Getter;
import lombok.Setter;
import com.wecloud.im.sdk.enums.MessageTypeEnum;
/**
*
* @Author luozh
* @Date 2022年05月07日 13:56
* @Version 1.0
*/
@Getter
@Setter
public class TextMessage extends BaseMessage {
public TextMessage() {
super(MessageTypeEnum.TEXT);
}
private String text;
}
package com.wecloud.im.sdk.model.message;
import lombok.Getter;
import lombok.Setter;
import com.wecloud.im.sdk.enums.MessageTypeEnum;
/**
* 图片类型消息
* @Author luozh
* @Date 2022年05月07日 13:59
* @Version 1.0
*/
@Getter
@Setter
public class VideoMessage extends BaseMessage {
public VideoMessage() {
super(MessageTypeEnum.VIDEO);
}
private MessageVideoFile file;
}
package com.wecloud.im.sdk.model.message;
import lombok.Getter;
import lombok.Setter;
import com.wecloud.im.sdk.enums.MessageTypeEnum;
/**
* 图片类型消息
* @Author luozh
* @Date 2022年05月07日 13:59
* @Version 1.0
*/
@Getter
@Setter
public class VoiceMessage extends BaseMessage {
public VoiceMessage() {
super(MessageTypeEnum.AUDIO);
}
private MessageVoiceFile file;
}
package com.wecloud.im.sdk.sample;
import java.util.Date;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.wecloud.im.sdk.WecloudIm;
import com.wecloud.im.sdk.WecloudImClientBuilder;
import com.wecloud.im.sdk.model.GroupChatMessage;
import com.wecloud.im.sdk.model.message.MessageImageFile;
import com.wecloud.im.sdk.model.message.PicMessage;
import com.wecloud.im.sdk.model.message.TextMessage;
/**
* 发布群消息
* @Author luozh
* @Date 2022年05月06日 01:37:29
* @Version 1.0
*/
public class PublishGroupChatMessageSample {
public static void main(String[] args) {
WecloudIm im = new WecloudImClientBuilder().build("http://139.159.136.86:8082",
"QizKVHcILRWp6Td2",
"287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737");
String senderId = "1519984635566845952";
String toGroupIds = "1519985463165931520";
String messageType = "-1";
boolean silent = true;
GroupChatMessage groupChatMessage = new GroupChatMessage();
groupChatMessage.setFromUserId(senderId);
groupChatMessage.setToGroupIds(toGroupIds);
groupChatMessage.setPushContent("");
groupChatMessage.setIncludeSender(false);
groupChatMessage.setPersisted(true);
groupChatMessage.setMentioned(false);
groupChatMessage.setSilent(silent);
groupChatMessage.setMessageType("-1");
groupChatMessage.setContent(JSONUtil.toJsonStr(buildTextMessage()));
Boolean textMessageResult = im.publishGroupChatMessage(groupChatMessage);
groupChatMessage.setMessageType("-2");
groupChatMessage.setContent(JSONUtil.toJsonStr(buildPicMessage()));
Boolean picMessageResult = im.publishGroupChatMessage(groupChatMessage);
}
private static TextMessage buildTextMessage() {
TextMessage textMessage = new TextMessage();
textMessage.setText("这是text消息测试: " + DateUtil.formatDateTime(new Date()));
return textMessage;
}
private static PicMessage buildPicMessage() {
PicMessage picMessage = new PicMessage();
MessageImageFile imageFile = new MessageImageFile();
imageFile.setUrl("http://ac-p2bpmgci.clouddn.com/246b8acc-2e12-4a9d-a255-8d17a3059d25");
MessageImageFile.MetaData metaData = new MessageImageFile.MetaData();
metaData.setName("IMG_20141223.jpeg");
metaData.setFormat("png");
metaData.setHeight(768);
metaData.setWidth(1024);
metaData.setSize(18);
imageFile.setMetaData(metaData);
picMessage.setFile(imageFile);
return picMessage;
}
}
package com.wecloud.im.sdk.sample;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.wecloud.im.sdk.WecloudIm;
import com.wecloud.im.sdk.WecloudImClientBuilder;
import com.wecloud.im.sdk.model.PrivateChatMessage;
/**
* 发布单聊消息
* @Author luozh
* @Date 2022年05月06日 01:37:29
* @Version 1.0
*/
public class PublishPrivateChatMessageSample {
public static void main(String[] args) {
WecloudIm im = new WecloudImClientBuilder().build("http://139.159.136.86:8082",
"QizKVHcILRWp6Td2",
"287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737");
// WecloudIm im = new WecloudImClientBuilder().build("http://127.0.0.1:8082",
// "QizKVHcILRWp6Td2",
// "287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737");
String senderId = "1519984635566845952";
String toGroupIds = "1513691265777217536";
String messageType = "-1";
Map<String, Object> content = new HashMap<>();
content.put("toConversation", "1519985463165931520");
content.put("type", -1);
content.put("text", "这是测试消息: " + DateUtil.formatDateTime(new Date()));
content.put("attrs", new HashMap<String, String>() {
{
put("test1", "");
}
});
boolean silent = true;
PrivateChatMessage privateChatMessage = new PrivateChatMessage();
privateChatMessage.setFromUserId(senderId);
privateChatMessage.setToUserIds(toGroupIds);
privateChatMessage.setMessageType(messageType);
privateChatMessage.setContent(JSONUtil.toJsonStr(content));
privateChatMessage.setPushContent("");
privateChatMessage.setIncludeSender(false);
privateChatMessage.setPersisted(true);
privateChatMessage.setSilent(silent);
// groupChatMessage.setPushExt(new PushExtParam());
Boolean result = im.publishPrivateMessage(privateChatMessage);
}
}
package com.wecloud.im.sdk.sample;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import com.wecloud.im.sdk.WecloudIm;
import com.wecloud.im.sdk.WecloudImClientBuilder;
import com.wecloud.im.sdk.model.PrivateChatStatusMessage;
/**
* 发布单聊消息
* @Author luozh
* @Date 2022年05月06日 01:37:29
* @Version 1.0
*/
public class PublishPrivateChatMessageStatusSample {
public static void main(String[] args) {
// WecloudIm im = new WecloudImClientBuilder().build("http://139.159.136.86:8082",
// "QizKVHcILRWp6Td2",
// "287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737");
WecloudIm im = new WecloudImClientBuilder().build("http://127.0.0.1:8082",
"QizKVHcILRWp6Td2",
"287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737");
String senderId = "1519984635566845952";
String toGroupIds = "1513691265777217536";
String messageType = "-1";
Map<String, Object> content = new HashMap<>();
content.put("toConversation", "1519985463165931520");
content.put("type", -1);
content.put("text", "这是测试消息: " + DateUtil.formatDateTime(new Date()));
content.put("attrs", new HashMap<String, String>() {
{
put("test1", "");
}
});
PrivateChatStatusMessage privateChatMessage = new PrivateChatStatusMessage();
privateChatMessage.setFromUserId(senderId);
privateChatMessage.setToUserIds(toGroupIds);
privateChatMessage.setMessageType(messageType);
privateChatMessage.setContent(JSONUtil.toJsonStr(content));
privateChatMessage.setIncludeBlacklist(false);
privateChatMessage.setIncludeSender(false);
Boolean result = im.publishPrivateStatusMessage(privateChatMessage);
}
}
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