Commit 9e886eab by 罗长华

1、sdk增加查找/修改用户拓展参数接口

2、陌生人条数判断逻辑修改
3、增加条数限制返回编码
parent ba59ec94
......@@ -379,13 +379,13 @@ public class NormalChatAction {
}
int sendCount =
imMessageService.count(Wrappers.<ImMessage>lambdaQuery().eq(ImMessage::getFkConversationId,
conversationId));
conversationId).eq(ImMessage::getSender, imClientSender.getId()));
if (!isVip) {
// 判断消息发送数量
if (sendCount >= 3) {
WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.RES.getCmdCode());
responseModel.setCode(500);
responseModel.setCode(ApiCode.MSG_EXCEED_QUANTITY_LIMIT.getCode());
responseModel.setMsg("和对方还不是好友,只能发送三条消息");
responseModel.setReqId(reqId);
channelSender.sendMsgLocal((NioSocketChannel) channel, responseModel);
......@@ -396,7 +396,7 @@ public class NormalChatAction {
if (sendCount >= 30) {
WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.RES.getCmdCode());
responseModel.setCode(500);
responseModel.setCode(ApiCode.EXCEED_VIP_QUANTITY_LIMIT.getCode());
responseModel.setMsg("和对方还不是好友,只能发送三十条消息");
responseModel.setReqId(reqId);
channelSender.sendMsgLocal((NioSocketChannel) channel, responseModel);
......
......@@ -12,15 +12,19 @@ import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.param.ClientInfoParam;
......@@ -29,6 +33,7 @@ import com.wecloud.im.param.GetClientInfoParam;
import com.wecloud.im.param.GetClientRelationParam;
import com.wecloud.im.param.GetOnlineStatusParam;
import com.wecloud.im.param.LogoutParam;
import com.wecloud.im.param.ModifyUserAttributesParam;
import com.wecloud.im.param.RegisterClientParam;
import com.wecloud.im.param.add.ClientDeviceUpdateParam;
import com.wecloud.im.param.add.ImClientHeadPortraitAdd;
......@@ -195,5 +200,20 @@ public class ImClientController extends BaseController {
return ApiResult.ok(imClientService.getClientRelation(param));
}
@PostMapping("/getUserAttributes")
@ApiOperation(value = "查询两个客户端之间的关系")
public ApiResult<Map<String, String>> getUserAttributes(@RequestParam("userId") String userId) {
return ApiResult.ok(imClientService.getUserAttributes(userId));
}
@PostMapping("/modifyUserAttributes")
@ApiOperation(value = "查询两个客户端之间的关系")
public ApiResult<Boolean> modifyUserAttributes(@Validated @RequestBody ModifyUserAttributesParam param) {
TypeReference<Map<String, Object>> typeReference = new TypeReference<Map<String, Object>>() {
};
Map<String, Object> attributes = JSONObject.parseObject(param.getAttributes(), typeReference);
return ApiResult.ok(imClientService.modifyUserAttributes(param.getUserId(), attributes));
}
}
package com.wecloud.im.param;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
*
* @Author luozh
* @Date 2022年05月19日 17:09
* @Version 1.0
*/
@Data
public class ModifyUserAttributesParam {
@NotBlank(message = "userId 不能为空")
private String userId;
@NotNull(message = "attributes 不能为空")
private String attributes;
}
......@@ -4,6 +4,7 @@ import io.geekidea.springbootplus.framework.common.service.BaseService;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import java.util.List;
import java.util.Map;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.param.ClientInfoParam;
......@@ -181,4 +182,8 @@ public interface ImClientService extends BaseService<ImClient> {
* @Return
*/
ClientRelationVo getClientRelation(GetClientRelationParam param);
Map<String, String> getUserAttributes(String userId);
Boolean modifyUserAttributes(String userId, Map<String, Object> attributes);
}
......@@ -11,6 +11,7 @@ import lombok.extern.slf4j.Slf4j;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
......@@ -21,6 +22,8 @@ import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
......@@ -366,4 +369,33 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
return relationVo;
}
@Override
public Map<String, String> getUserAttributes(String userId) {
Long appId = SecurityUtils.getCurrentAppId();
ImClient targetClient =
getOne(Wrappers.<ImClient>lambdaQuery().eq(ImClient::getClientId, userId).eq(ImClient::getFkAppid,
appId));
if (targetClient == null) {
throw new BusinessException("用户不存在");
}
TypeReference<Map<String, String>> typeReference = new TypeReference<Map<String, String>>() {
};
return JSONObject.parseObject(targetClient.getAttributes(), typeReference);
}
@Override
public Boolean modifyUserAttributes(String userId, Map<String, Object> attributes) {
Long appId = SecurityUtils.getCurrentAppId();
ImClient targetClient =
getOne(Wrappers.<ImClient>lambdaQuery().eq(ImClient::getClientId, userId).eq(ImClient::getFkAppid,
appId));
if (targetClient == null) {
throw new BusinessException("用户不存在");
}
targetClient.setAttributes(JSONObject.toJSONString(attributes));
return this.updateById(targetClient);
}
}
......@@ -16,6 +16,7 @@ import org.apache.dubbo.rpc.RpcContext;
import org.apache.dubbo.rpc.RpcException;
import org.apache.dubbo.rpc.cluster.router.address.Address;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
......@@ -42,6 +43,9 @@ public class ChannelSender {
@Autowired
private UserStateCacheManager userStateCacheManager;
@Autowired
private DiscoveryClient discoveryClient;
/*
* 指定ip调用,router=address;
* injvm = false要设置成false,否则会调用到本地提供者
......
......@@ -152,6 +152,16 @@ public enum ApiCode {
*/
IS_BE_FORBID_SEND_PIC(6018, "api.response.code.IS_BE_FORBID_SEND_PIC"),
/**
* 消息超出数量限制
*/
MSG_EXCEED_QUANTITY_LIMIT(6019, "api.response.code.IS_BE_FORBID_SEND_PIC"),
/**
* 消息超出VIP数量限制
*/
EXCEED_VIP_QUANTITY_LIMIT(6020, "api.response.code.IS_BE_FORBID_SEND_PIC"),
;
private final int code;
......
......@@ -27,6 +27,16 @@ public class ResourcePathConstants {
public static final String MODIFY_USER_URL = "/api/imClient/updateHeadAndNickname";
/**
* 获取用户拓展参数
*/
public static final String GET_USER_ATTRIBUTES_REQUEST = "/api/imClient/getUserAttributes";
/**
* 更新用户拓展参数
*/
public static final String MODIFY_USER_ATTRIBUTES_REQUEST = "/api/imClient/modifyUserAttributes";
/**
* 获取好友申请列表
*/
public static final String GET_UNSURE_FRIENDS = "/api/friend/sdk/unsureFriends";
......@@ -156,5 +166,4 @@ public class ResourcePathConstants {
*/
public static final String REMOVE_GROUP_ADMIN_REQUEST = "/api/group/removeGroupAdmin";
}
......@@ -16,6 +16,7 @@ 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.UnsureFriend;
import com.wecloud.im.sdk.model.UserAttributes;
/**
*
......@@ -60,6 +61,25 @@ public interface WecloudIm {
Boolean modifyUser(String userId, String nickname, String headPortrait);
/**
* 获取用户拓展信息
* @Author luozh
* @Date 2022年04月18日 03:29:52
* @param userId 用户id
* @Return
*/
UserAttributes getUserAttributes(String userId);
/**
* 更新用户拓展信息
* @Author luozh
* @Date 2022年04月18日 03:29:52
* @param userId 用户id
* @param attributes 用户拓展字段
* @Return
*/
Boolean modifyUserAttributes(String userId, UserAttributes attributes);
/**
* 封禁用户
* @Author luozh
* @Date 2022年05月16日 02:57:55
......
......@@ -24,6 +24,7 @@ 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.GetUnsureFriendsRequest;
import com.wecloud.im.sdk.model.GetUserAttributesRequest;
import com.wecloud.im.sdk.model.GroupChatMessage;
import com.wecloud.im.sdk.model.GroupChatStatusMessage;
import com.wecloud.im.sdk.model.GroupMembersFriendRequestRequest;
......@@ -36,6 +37,7 @@ import com.wecloud.im.sdk.model.LeaveGroupRequest;
import com.wecloud.im.sdk.model.ListChatRoomMemberRequest;
import com.wecloud.im.sdk.model.ListConversationRequest;
import com.wecloud.im.sdk.model.ListGroupMembersRequest;
import com.wecloud.im.sdk.model.ModifyUserAttributesRequest;
import com.wecloud.im.sdk.model.ModifyUserRequest;
import com.wecloud.im.sdk.model.MutedGroupMemberRequest;
import com.wecloud.im.sdk.model.PageBlacklistRequest;
......@@ -54,6 +56,7 @@ import com.wecloud.im.sdk.model.SetConversationTopRequest;
import com.wecloud.im.sdk.model.Token;
import com.wecloud.im.sdk.model.UnfriendRequest;
import com.wecloud.im.sdk.model.UnsureFriend;
import com.wecloud.im.sdk.model.UserAttributes;
import com.wecloud.im.sdk.model.UserRelationRequest;
import com.wecloud.im.sdk.model.UsersRelationRequest;
......@@ -124,6 +127,20 @@ public class WecloudImClient implements WecloudIm {
}
@Override
public UserAttributes getUserAttributes(String userId) {
GetUserAttributesRequest getUserAttributesRequest = GetUserAttributesRequest.builder().userId(userId).build();
return imUserOperation.getUserAttributes(getUserAttributesRequest);
}
@Override
public Boolean modifyUserAttributes(String userId, UserAttributes attributes) {
ModifyUserAttributesRequest modifyUserAttributesRequest =
ModifyUserAttributesRequest.builder().userId(userId).attributes(attributes).build();
;
return imUserOperation.modifyUserAttributes(modifyUserAttributesRequest);
}
@Override
public Boolean bannedUser(String userId, Integer minute) {
BannedUserRequest bannedUserRequest = BannedUserRequest.builder().userId(userId).minute(minute).build();
return imUserOperation.bannedUser(bannedUserRequest);
......
......@@ -7,6 +7,7 @@ import java.util.Map;
import java.util.Optional;
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;
......@@ -14,17 +15,22 @@ import com.wecloud.im.sdk.model.BannedUserRequest;
import com.wecloud.im.sdk.model.ChatRoomMember;
import com.wecloud.im.sdk.model.ClientLoginRequest;
import com.wecloud.im.sdk.model.ClientRelation;
import com.wecloud.im.sdk.model.GetUserAttributesRequest;
import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.ListChatRoomMemberRequest;
import com.wecloud.im.sdk.model.ModifyUserAttributesRequest;
import com.wecloud.im.sdk.model.ModifyUserRequest;
import com.wecloud.im.sdk.model.RegisterClientRequest;
import com.wecloud.im.sdk.model.Token;
import com.wecloud.im.sdk.model.UserAttributes;
import com.wecloud.im.sdk.model.UserRelationRequest;
import com.wecloud.im.sdk.model.UsersRelationRequest;
import static com.wecloud.im.sdk.ResourcePathConstants.BANNED_USER_REQUEST;
import static com.wecloud.im.sdk.ResourcePathConstants.GET_TOKEN_URL;
import static com.wecloud.im.sdk.ResourcePathConstants.GET_USER_ATTRIBUTES_REQUEST;
import static com.wecloud.im.sdk.ResourcePathConstants.LIST_CHAT_ROOM_MEMBER_REQUEST;
import static com.wecloud.im.sdk.ResourcePathConstants.MODIFY_USER_ATTRIBUTES_REQUEST;
import static com.wecloud.im.sdk.ResourcePathConstants.MODIFY_USER_URL;
import static com.wecloud.im.sdk.ResourcePathConstants.REGISTER_CLIENT_URL;
import static com.wecloud.im.sdk.ResourcePathConstants.USER_RELATION_REQUEST;
......@@ -200,4 +206,40 @@ public class WecloudImUserOperation extends WecloudImOperation {
Boolean flag = JSON.parseObject(JSON.toJSONString(result), Boolean.class);
return flag;
}
public UserAttributes getUserAttributes(GetUserAttributesRequest getUserAttributesRequest) {
String userId = getUserAttributesRequest.getUserId();
assertParameterNotBlank(userId, "userId");
Map<String, String> param = new HashMap<>();
param.put("userId", userId);
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(GET_USER_ATTRIBUTES_REQUEST)
.setMethod(HttpMethod.GET).setParameters(param)
.setOriginalRequest(getUserAttributesRequest).build();
Object result = doOperation(request);
UserAttributes userAttributes = JSON.parseObject(JSON.toJSONString(result), UserAttributes.class);
return userAttributes;
}
public Boolean modifyUserAttributes(ModifyUserAttributesRequest modifyUserAttributesRequest) {
String userId = modifyUserAttributesRequest.getUserId();
UserAttributes attributes = modifyUserAttributesRequest.getAttributes();
assertParameterNotBlank(userId, "userId");
assertParameterNotNull(attributes, "attributes");
// 校验通过 构建参数
TypeReference<Map<String, String>> typeReference = new TypeReference<Map<String, String>>() {
};
Map<String, String> param = JSONObject.parseObject(JSON.toJSONString(modifyUserAttributesRequest), typeReference);
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(MODIFY_USER_ATTRIBUTES_REQUEST)
.setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(modifyUserAttributesRequest).build();
Object result = doOperation(request);
Boolean flag = JSON.parseObject(JSON.toJSONString(result), Boolean.class);
return flag;
}
}
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* @Author luozh
* @Date 2022年05月19日 16:50
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Builder
@Data
public class GetUserAttributesRequest extends WebServiceRequest {
/**
* 用户id
*/
private String userId;
}
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* @Author luozh
* @Date 2022年05月19日 16:50
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Builder
@Data
public class ModifyUserAttributesRequest extends WebServiceRequest {
/**
* 用户id
*/
private String userId;
/**
* 参数
*/
private UserAttributes attributes;
}
package com.wecloud.im.sdk.model;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import cn.hutool.core.lang.Assert;
/**
*
* @Author luozh
* @Date 2022年05月19日 16:30
* @Version 1.0
*/
public class UserAttributes extends HashMap<String, Object> {
final Map<String, Object> attributes;
public UserAttributes() {
attributes = new HashMap<>(8);
}
public UserAttributes(Map<String, Object> attributes) {
Assert.notNull(attributes, "MultiValueMap must not be null");
this.attributes = attributes;
}
public void add(String key, Object value) {
this.attributes.put(key, value);
}
// Map implementation
@Override
public int size() {
return this.attributes.size();
}
@Override
public boolean isEmpty() {
return this.attributes.isEmpty();
}
@Override
public boolean containsKey(Object key) {
return this.attributes.containsKey(key);
}
@Override
public boolean containsValue(Object value) {
return this.attributes.containsValue(value);
}
@Override
public Object get(Object key) {
return this.attributes.get(key);
}
@Override
public Object put(String key, Object value) {
return this.attributes.put(key, value);
}
@Override
public Object remove(Object key) {
return this.attributes.remove(key);
}
@Override
public void putAll(Map<? extends String, ? extends Object> map) {
this.attributes.putAll(map);
}
@Override
public void clear() {
this.attributes.clear();
}
@Override
public Set<String> keySet() {
return this.attributes.keySet();
}
@Override
public Collection<Object> values() {
return this.attributes.values();
}
@Override
public Set<Entry<String, Object>> entrySet() {
return this.attributes.entrySet();
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (!(other instanceof UserAttributes)) {
return false;
}
UserAttributes otherUserAttributes = (UserAttributes) other;
return this.attributes.equals(otherUserAttributes.attributes);
}
@Override
public int hashCode() {
return this.attributes.hashCode();
}
}
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