Commit 2b4e9a5e by 南千昊

vip和非vip发送消息数量控制 加好友数量控制

parent 5d51f967
package com.wecloud.im.action; package com.wecloud.im.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.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
...@@ -30,12 +7,7 @@ import com.google.common.collect.Lists; ...@@ -30,12 +7,7 @@ import com.google.common.collect.Lists;
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;
import com.wecloud.im.entity.ImApplication; import com.wecloud.im.entity.*;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImInbox;
import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.friend.entity.ImFriend; import com.wecloud.im.friend.entity.ImFriend;
import com.wecloud.im.friend.service.ImFriendService; import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.mq.MqSender; import com.wecloud.im.mq.MqSender;
...@@ -47,13 +19,7 @@ import com.wecloud.im.sdk.enums.ChatTypeEnum; ...@@ -47,13 +19,7 @@ import com.wecloud.im.sdk.enums.ChatTypeEnum;
import com.wecloud.im.sdk.enums.FriendStateEnum; import com.wecloud.im.sdk.enums.FriendStateEnum;
import com.wecloud.im.sdk.enums.GroupRoleEnum; import com.wecloud.im.sdk.enums.GroupRoleEnum;
import com.wecloud.im.sdk.enums.MutedEnum; import com.wecloud.im.sdk.enums.MutedEnum;
import com.wecloud.im.service.ImApplicationService; import com.wecloud.im.service.*;
import com.wecloud.im.service.ImClientBlacklistService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImConversationService;
import com.wecloud.im.service.ImInboxService;
import com.wecloud.im.service.ImMessageService;
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;
import com.wecloud.im.ws.model.WsResponse; import com.wecloud.im.ws.model.WsResponse;
...@@ -62,6 +28,22 @@ import com.wecloud.pushserver.client.model.constant.MqConstant; ...@@ -62,6 +28,22 @@ 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.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/** /**
* @Description 普通聊天 * @Description 普通聊天
...@@ -430,6 +412,7 @@ public class NormalChatAction { ...@@ -430,6 +412,7 @@ public class NormalChatAction {
imMessageService.count(Wrappers.<ImMessage>lambdaQuery().eq(ImMessage::getFkConversationId, imMessageService.count(Wrappers.<ImMessage>lambdaQuery().eq(ImMessage::getFkConversationId,
conversationId).eq(ImMessage::getSender, imClientSender.getId()).between(ImMessage::getCreateTime, getStartTime(), getEndTime())); conversationId).eq(ImMessage::getSender, imClientSender.getId()).between(ImMessage::getCreateTime, getStartTime(), getEndTime()));
if (!isVip) { if (!isVip) {
// 非vip发送消息
// 判断消息发送数量 // 判断消息发送数量
if (sendCount >= 3) { if (sendCount >= 3) {
WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>(); WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>();
...@@ -441,12 +424,13 @@ public class NormalChatAction { ...@@ -441,12 +424,13 @@ public class NormalChatAction {
return false; return false;
} }
} else { } else {
// vip发送
// 判断消息发送数量 // 判断消息发送数量
if (sendCount >= 30) { if (sendCount >= 10) {
WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>(); WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.RES.getCmdCode()); responseModel.setCmd(WsResponseCmdEnum.RES.getCmdCode());
responseModel.setCode(ApiCode.EXCEED_VIP_QUANTITY_LIMIT.getCode()); responseModel.setCode(ApiCode.EXCEED_VIP_QUANTITY_LIMIT.getCode());
responseModel.setMsg("和对方还不是好友,只能发送十条消息"); responseModel.setMsg("和对方还不是好友,只能发送十条消息");
responseModel.setReqId(reqId); responseModel.setReqId(reqId);
channelSender.sendMsgLocal((NioSocketChannel) channel, responseModel); channelSender.sendMsgLocal((NioSocketChannel) channel, responseModel);
return false; return false;
......
package com.wecloud.im.friend.controller; package com.wecloud.im.friend.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.friend.param.*;
import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.sdk.enums.FriendStateEnum;
import com.wecloud.im.service.ImClientService;
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;
...@@ -12,36 +19,13 @@ import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils; ...@@ -12,36 +19,13 @@ 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;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
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.*;
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 java.util.List;
import com.wecloud.im.entity.ImClient; import java.util.Optional;
import com.wecloud.im.friend.param.FriendRemarkParam;
import com.wecloud.im.friend.param.ImCreateRecommendParam;
import com.wecloud.im.friend.param.ImDeleteFriendParam;
import com.wecloud.im.friend.param.ImDeleteRecommendParam;
import com.wecloud.im.friend.param.ImFriendApplyDto;
import com.wecloud.im.friend.param.ImFriendApplyParam;
import com.wecloud.im.friend.param.ImFriendApproveParam;
import com.wecloud.im.friend.param.ImFriendBaseDto;
import com.wecloud.im.friend.param.ImFriendBaseParam;
import com.wecloud.im.friend.param.ImFriendPageParam;
import com.wecloud.im.friend.param.ImFriendRecommendDto;
import com.wecloud.im.friend.param.UnfriendParam;
import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.sdk.enums.FriendStateEnum;
import com.wecloud.im.service.ImClientService;
/** /**
* @author lixiaozhong * @author lixiaozhong
...@@ -91,9 +75,9 @@ public class ImFriendController extends BaseController { ...@@ -91,9 +75,9 @@ public class ImFriendController extends BaseController {
if(param == null) { if(param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null); return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
} }
ImClient currentClient = imClientService.getCurrentClient(); ImClient currentClient = imClientService.getCurrentClient();
// 判断是否为vip
Boolean isVip = getIsVip(currentClient);
if(currentClient == null) { if(currentClient == null) {
return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null); return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null);
} }
...@@ -104,11 +88,24 @@ public class ImFriendController extends BaseController { ...@@ -104,11 +88,24 @@ public class ImFriendController extends BaseController {
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);
} }
List<ImFriendBaseDto> friends = imFriendService.getFriends(currentClient);
if (isVip){
// 是vip
if (friends.size()>=10){
throw new BusinessException("vip最多只能加10个好友");
}
}else {
// 不是vip
if (friends.size()>=3){
throw new BusinessException("非vip最多只能加3个好友");
}
}
imFriendService.applyFriend(currentClient, friendClient, param.getFriendName(), param.getRequestRemark()); imFriendService.applyFriend(currentClient, friendClient, param.getFriendName(), param.getRequestRemark());
log.info("申请添加好友逻辑完成"); log.info("申请添加好友逻辑完成");
return ApiResult.ok(); return ApiResult.ok();
} }
/** /**
* 申请添加好友 * 申请添加好友
*/ */
...@@ -130,6 +127,19 @@ public class ImFriendController extends BaseController { ...@@ -130,6 +127,19 @@ public class ImFriendController extends BaseController {
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);
} }
Boolean isVip = getIsVip(currentClient);
List<ImFriendBaseDto> friends = imFriendService.getFriends(currentClient);
if (isVip){
// 是vip
if (friends.size()>=10){
throw new BusinessException("vip最多只能加10个好友");
}
}else {
// 不是vip
if (friends.size()>=3){
throw new BusinessException("非vip最多只能加3个好友");
}
}
imFriendService.applyFriend(currentClient, friendClient, param.getFriendName(), param.getRequestRemark()); imFriendService.applyFriend(currentClient, friendClient, param.getFriendName(), param.getRequestRemark());
if (!param.getNeedVerify()) { if (!param.getNeedVerify()) {
imFriendService.approveFriend(friendClient, currentClient, true, ""); imFriendService.approveFriend(friendClient, currentClient, true, "");
...@@ -138,6 +148,20 @@ public class ImFriendController extends BaseController { ...@@ -138,6 +148,20 @@ public class ImFriendController extends BaseController {
return ApiResult.ok(); return ApiResult.ok();
} }
private Boolean getIsVip(ImClient currentClient) {
String senderAttributesStr = currentClient.getAttributes();
JSONObject senderAttributes = new JSONObject();
if (StringUtils.isNotBlank(senderAttributesStr)) {
try {
senderAttributes = JSONObject.parseObject(senderAttributesStr);
} catch (Exception e) {
// do nothing is ok
}
}
boolean isVip = Optional.ofNullable(senderAttributes.getBoolean("isVip")).orElse(Boolean.FALSE);
return isVip;
}
/** /**
* 待接受的好友请求列表,最多只返回1000个 * 待接受的好友请求列表,最多只返回1000个
*/ */
......
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