Commit ae4aa1d6 by 罗长华

sdk新增获取好友列表申请

sdk返回值json处理返回Object
增加/sdk/unsureFriends接口
parent 173a1f0b
...@@ -7,6 +7,7 @@ import io.geekidea.springbootplus.framework.common.enums.BaseEnum; ...@@ -7,6 +7,7 @@ import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import io.geekidea.springbootplus.framework.core.pagination.Paging; import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.log.annotation.OperationLog; import io.geekidea.springbootplus.framework.log.annotation.OperationLog;
import io.geekidea.springbootplus.framework.log.enums.OperationLogType; import io.geekidea.springbootplus.framework.log.enums.OperationLogType;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
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;
...@@ -15,9 +16,11 @@ import java.util.List; ...@@ -15,9 +16,11 @@ 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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; 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.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.wecloud.im.entity.ImClient; import com.wecloud.im.entity.ImClient;
...@@ -103,7 +106,25 @@ public class ImFriendController extends BaseController { ...@@ -103,7 +106,25 @@ public class ImFriendController extends BaseController {
@ApiOperation(value = "待接受的好友请求列表,最多只返回1000个") @ApiOperation(value = "待接受的好友请求列表,最多只返回1000个")
public ApiResult<List<ImFriendApplyDto>> getUnsureFriends() { public ApiResult<List<ImFriendApplyDto>> getUnsureFriends() {
ImClient currentClient = imClientService.getCurrentClient(); ImClient currentClient = imClientService.getCurrentClient();
if(currentClient == null) { if (currentClient == null) {
return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null);
}
List<ImFriendApplyDto> friendInfo = imFriendService.getApplyFriends(currentClient);
return ApiResult.ok(friendInfo);
}
/**
* 待接受的好友请求列表,最多只返回1000个(sdk 调用)
* @Author luozh
* @Date 2022年04月21日 05:07:31
* @param
* @Return
*/
@GetMapping("/sdk/unsureFriends")
@ApiOperation(value = "待接受的好友请求列表,最多只返回1000个")
public ApiResult<List<ImFriendApplyDto>> getUnsureFriendsSdk(@RequestParam("clientId") String clientId) {
ImClient currentClient = imClientService.getCacheImClient(SecurityUtils.getCurrentAppId(), clientId);
if (currentClient == null) {
return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null); return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null);
} }
List<ImFriendApplyDto> friendInfo = imFriendService.getApplyFriends(currentClient); List<ImFriendApplyDto> friendInfo = imFriendService.getApplyFriends(currentClient);
...@@ -116,7 +137,7 @@ public class ImFriendController extends BaseController { ...@@ -116,7 +137,7 @@ public class ImFriendController extends BaseController {
@PostMapping("/approve") @PostMapping("/approve")
@ApiOperation(value = "接受/拒绝好友申请") @ApiOperation(value = "接受/拒绝好友申请")
public ApiResult<Boolean> approveFriend(@RequestBody ImFriendApproveParam param) { public ApiResult<Boolean> approveFriend(@RequestBody ImFriendApproveParam param) {
if(param == null || param.getAgree() == null) { if (param == null || param.getAgree() == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
} }
ImClient currentClient = imClientService.getCurrentClient(); ImClient currentClient = imClientService.getCurrentClient();
......
...@@ -52,10 +52,10 @@ public class SignatureChecker { ...@@ -52,10 +52,10 @@ public class SignatureChecker {
String canonicalString = SignUtils.buildCanonicalString(requestMethod, resourcePath, headers, params); String canonicalString = SignUtils.buildCanonicalString(requestMethod, resourcePath, headers, params);
log.info("服务端api签名字符串: {}", canonicalString); log.info("服务端api签名字符串: {}", canonicalString);
log.info("服务端api appSecret: {}", appSecret);
String serverSignature = new HmacSHA256Signature().computeSignature(appSecret, canonicalString); String serverSignature = new HmacSHA256Signature().computeSignature(appSecret, canonicalString);
log.info("服务端api签名结果: {}", serverSignature); log.info("服务端api签名结果: {}", serverSignature);
log.info("服务端api appSecret: {}", appSecret);
if (!serverSignature.equals(clientSignature)) { if (!serverSignature.equals(clientSignature)) {
// 返回给用户的response中告诉用户正确的用于验证加密的签名字符串 // 返回给用户的response中告诉用户正确的用于验证加密的签名字符串
......
...@@ -26,5 +26,10 @@ public class ResourcePathConstants { ...@@ -26,5 +26,10 @@ public class ResourcePathConstants {
*/ */
public static final String MODIFY_USER_URL = "/api/imClient/updateHeadAndNickname"; public static final String MODIFY_USER_URL = "/api/imClient/updateHeadAndNickname";
/**
* 获取好友申请列表
*/
public static final String GET_UNSURE_FRIENDS = "/api/friend/sdk/unsureFriends";
} }
package com.wecloud.im.sdk; package com.wecloud.im.sdk;
import java.util.List;
import com.wecloud.im.sdk.model.Friend;
import com.wecloud.im.sdk.model.ImClient; import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.Token; import com.wecloud.im.sdk.model.Token;
...@@ -46,4 +49,13 @@ public interface WecloudIm { ...@@ -46,4 +49,13 @@ public interface WecloudIm {
*/ */
Boolean modifyUser(Long userId, String nickname, String headPortrait); Boolean modifyUser(Long userId, String nickname, String headPortrait);
/**
* 获取好友请求列表
* @Author luozh
* @Date 2022年04月21日 04:50:57
* @param userId 用户id
* @Return
*/
List<Friend> getUnsureFriends(Long userId);
} }
package com.wecloud.im.sdk; package com.wecloud.im.sdk;
import java.net.URL; import java.net.URL;
import java.util.List;
import com.wecloud.im.sdk.internal.WecloudImClientOperation; import com.wecloud.im.sdk.internal.WecloudImClientOperation;
import com.wecloud.im.sdk.model.ClientLoginRequest; import com.wecloud.im.sdk.model.ClientLoginRequest;
import com.wecloud.im.sdk.model.Friend;
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.ModifyUserRequest; import com.wecloud.im.sdk.model.ModifyUserRequest;
import com.wecloud.im.sdk.model.RegisterClientRequest; import com.wecloud.im.sdk.model.RegisterClientRequest;
...@@ -67,6 +70,13 @@ public class WecloudImClient implements WecloudIm { ...@@ -67,6 +70,13 @@ public class WecloudImClient implements WecloudIm {
return imClientOperation.modifyUser(modifyUserRequest); return imClientOperation.modifyUser(modifyUserRequest);
} }
@Override
public List<Friend> getUnsureFriends(Long userId) {
GetUnsureFriendsRequest getUnsureFriendsRequest = GetUnsureFriendsRequest.builder().userId(userId).build();
return imClientOperation.getUnsureFriends(getUnsureFriendsRequest);
}
private void initOperations() { private void initOperations() {
this.imClientOperation = new WecloudImClientOperation(apiDomain, appKey, appSecret); this.imClientOperation = new WecloudImClientOperation(apiDomain, appKey, appSecret);
} }
......
package com.wecloud.im.sdk.internal; package com.wecloud.im.sdk.internal;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.wecloud.im.sdk.common.ApiResult; import com.wecloud.im.sdk.common.ApiResult;
...@@ -18,10 +17,10 @@ public class ResponseParser { ...@@ -18,10 +17,10 @@ public class ResponseParser {
* *
* @param jsonResult * @param jsonResult
*/ */
public static JSONObject parse(String jsonResult) { public static Object parse(String jsonResult) {
TypeReference typeRef = new TypeReference<ApiResult<JSONObject>>() { TypeReference<ApiResult<Object>> typeRef = new TypeReference<ApiResult<Object>>() {
}; };
ApiResult<JSONObject> apiResult = (ApiResult<JSONObject>) JSON.parseObject(jsonResult, typeRef); ApiResult<Object> apiResult = (ApiResult<Object>) JSON.parseObject(jsonResult, typeRef);
return apiResult.getData(); return apiResult.getData();
} }
} }
...@@ -2,20 +2,24 @@ package com.wecloud.im.sdk.internal; ...@@ -2,20 +2,24 @@ 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.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import com.alibaba.fastjson.JSON; 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.HttpMethod;
import com.wecloud.im.sdk.common.RequestMessage; import com.wecloud.im.sdk.common.RequestMessage;
import com.wecloud.im.sdk.model.ClientLoginRequest; import com.wecloud.im.sdk.model.ClientLoginRequest;
import com.wecloud.im.sdk.model.Friend;
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.ModifyUserRequest; import com.wecloud.im.sdk.model.ModifyUserRequest;
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 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.MODIFY_USER_URL; 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.REGISTER_CLIENT_URL;
import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotBlank; import static com.wecloud.im.sdk.utils.CodingUtils.assertParameterNotBlank;
...@@ -54,8 +58,8 @@ public class WecloudImClientOperation extends WecloudImOperation { ...@@ -54,8 +58,8 @@ public class WecloudImClientOperation extends WecloudImOperation {
.setMethod(HttpMethod.POST).setParameters(param) .setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(registerClientRequest).build(); .setOriginalRequest(registerClientRequest).build();
JSONObject result = doOperation(request); Object result = doOperation(request);
ImClient imClient = JSON.parseObject(result.toJSONString(), ImClient.class); ImClient imClient = JSON.parseObject(JSON.toJSONString(result), ImClient.class);
return imClient; return imClient;
} }
...@@ -82,8 +86,8 @@ public class WecloudImClientOperation extends WecloudImOperation { ...@@ -82,8 +86,8 @@ public class WecloudImClientOperation extends WecloudImOperation {
.setMethod(HttpMethod.POST).setParameters(param) .setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(clientLoginRequest).build(); .setOriginalRequest(clientLoginRequest).build();
JSONObject result = doOperation(request); Object result = doOperation(request);
Token token = JSON.parseObject(result.toJSONString(), Token.class); Token token = JSON.parseObject(JSON.toJSONString(result), Token.class);
return token; return token;
} }
...@@ -112,8 +116,35 @@ public class WecloudImClientOperation extends WecloudImOperation { ...@@ -112,8 +116,35 @@ public class WecloudImClientOperation extends WecloudImOperation {
.setMethod(HttpMethod.POST).setParameters(param) .setMethod(HttpMethod.POST).setParameters(param)
.setOriginalRequest(modifyUserRequest).build(); .setOriginalRequest(modifyUserRequest).build();
JSONObject result = doOperation(request); Object result = doOperation(request);
Boolean flag = JSON.parseObject(result.toJSONString(), Boolean.class); Boolean flag = JSON.parseObject(JSON.toJSONString(result), Boolean.class);
return flag; return flag;
} }
/**
* 待接受的好友请求列表
* @Author luozh
* @Date 2022年04月21日 05:08:13
* @param getUnsureFriendsRequest
* @Return
*/
public List<Friend> getUnsureFriends(GetUnsureFriendsRequest getUnsureFriendsRequest) {
Long userId = getUnsureFriendsRequest.getUserId();
// 参数校验
assertParameterNotNull(userId, "userId");
// 校验通过 构建参数
Map<String, String> param = new HashMap<>();
param.put("clientId", userId + "");
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(GET_UNSURE_FRIENDS)
.setMethod(HttpMethod.GET).setParameters(param)
.setOriginalRequest(getUnsureFriendsRequest).build();
Object result = doOperation(request);
TypeReference<List<Friend>> typeReference = new TypeReference<List<Friend>>() {
};
List<Friend> friends = JSON.parseObject(JSON.toJSONString(result), typeReference);
return friends;
}
} }
...@@ -7,7 +7,6 @@ import java.util.Date; ...@@ -7,7 +7,6 @@ import java.util.Date;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.wecloud.im.sdk.common.HttpClient; import com.wecloud.im.sdk.common.HttpClient;
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;
...@@ -37,7 +36,7 @@ public abstract class WecloudImOperation { ...@@ -37,7 +36,7 @@ public abstract class WecloudImOperation {
this.appSecret = appSecret; this.appSecret = appSecret;
} }
protected JSONObject doOperation(RequestMessage request) { protected Object doOperation(RequestMessage request) {
Credentials credentials = new Credentials(appKey, appSecret); Credentials credentials = new Credentials(appKey, appSecret);
// 请求日期 // 请求日期
String date = DateUtil.formatHttpDate(new Date()); String date = DateUtil.formatHttpDate(new Date());
...@@ -54,7 +53,7 @@ public abstract class WecloudImOperation { ...@@ -54,7 +53,7 @@ public abstract class WecloudImOperation {
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private JSONObject send(RequestMessage request) { private Object send(RequestMessage request) {
try { try {
// 组装请求 // 组装请求
URL endpoint = new URL(apiDomain, request.getEndpoint()); URL endpoint = new URL(apiDomain, request.getEndpoint());
......
package com.wecloud.im.sdk.model;
import lombok.Data;
import java.io.Serializable;
/**
*
* @Author luozh
* @Date 2022年04月13日 11:03
* @Version 1.0
*/
@Data
public class Friend implements Serializable {
private static final long serialVersionUID = 5580006330057637138L;
/**
* 好友的client-id
*/
private String friendClientId;
/**
* 好友的昵称备注
*/
private String friendName;
/**
* 好友关系状态,1:待确定,2:已确认,3:已拒绝,4:已删除
*/
private Integer state;
/**
* 好友申请者
*/
private String claimerClientId;
/**
* 好友拒绝原因
*/
private String rejectRemark;
/**
* 好友请求说明
*/
private String requestRemark;
}
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 获取好友申请列表请求
* @Author luozh
* @Date 2022年04月21日 16:51
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Builder
@Data
public class GetUnsureFriendsRequest extends WebServiceRequest {
/**
* 用户id
*/
private Long userId;
}
...@@ -2,6 +2,8 @@ package com.wecloud.im.sdk.model; ...@@ -2,6 +2,8 @@ package com.wecloud.im.sdk.model;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
/** /**
* 终端 * 终端
* @Author luozh * @Author luozh
...@@ -9,7 +11,7 @@ import lombok.Data; ...@@ -9,7 +11,7 @@ import lombok.Data;
* @Version 1.0 * @Version 1.0
*/ */
@Data @Data
public class ImClient { public class ImClient implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private Long userId; private Long userId;
......
package com.wecloud.im.sdk.model;
import lombok.Data;
/**
*
* @Author luozh
* @Date 2022年04月13日 11:03
* @Version 1.0
*/
@Data
public class ImFriend {
private static final long serialVersionUID = 1L;
private Long id;
private String clientId;
private String clientIdFriend;
private String clientIdClaimer;
private String friendName;
private String rejectRemark;
private String requestRemark;
private Integer state;
}
...@@ -2,6 +2,8 @@ package com.wecloud.im.sdk.model; ...@@ -2,6 +2,8 @@ package com.wecloud.im.sdk.model;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
/** /**
* client token信息 * client token信息
* @Author luozh * @Author luozh
...@@ -9,7 +11,9 @@ import lombok.Data; ...@@ -9,7 +11,9 @@ import lombok.Data;
* @Version 1.0 * @Version 1.0
*/ */
@Data @Data
public class Token { public class Token implements Serializable {
private static final long serialVersionUID = 1L;
/** /**
* websocket登陆令牌 * websocket登陆令牌
......
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