Commit b530285b by 罗长华

小虎豆聊天数限制

parent 9277964a
...@@ -17,10 +17,13 @@ import java.util.regex.Pattern; ...@@ -17,10 +17,13 @@ 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;
import org.apache.commons.lang3.StringUtils;
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 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.google.common.collect.Lists; 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;
...@@ -31,11 +34,14 @@ import com.wecloud.im.entity.ImConversationMembers; ...@@ -31,11 +34,14 @@ import com.wecloud.im.entity.ImConversationMembers;
import com.wecloud.im.entity.ImInbox; import com.wecloud.im.entity.ImInbox;
import com.wecloud.im.entity.ImMessage; import com.wecloud.im.entity.ImMessage;
import com.wecloud.im.entity.ImMessageOnlineSend; import com.wecloud.im.entity.ImMessageOnlineSend;
import com.wecloud.im.friend.entity.ImFriend;
import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.mq.MqSender; import com.wecloud.im.mq.MqSender;
import com.wecloud.im.param.ChatContentVo; import com.wecloud.im.param.ChatContentVo;
import com.wecloud.im.param.ImClientSimpleDto; import com.wecloud.im.param.ImClientSimpleDto;
import com.wecloud.im.param.ImConversationQueryVo; import com.wecloud.im.param.ImConversationQueryVo;
import com.wecloud.im.param.MsgVo; import com.wecloud.im.param.MsgVo;
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.ImApplicationService;
...@@ -83,6 +89,8 @@ public class NormalChatAction { ...@@ -83,6 +89,8 @@ public class NormalChatAction {
private ImInboxService imInboxService; private ImInboxService imInboxService;
@Autowired @Autowired
private MqSender mqSender; private MqSender mqSender;
@Autowired
private ImFriendService friendService;
@ActionMapping("/normal/send") @ActionMapping("/normal/send")
@ApiOperation("普通消息发送") @ApiOperation("普通消息发送")
...@@ -147,6 +155,9 @@ public class NormalChatAction { ...@@ -147,6 +155,9 @@ public class NormalChatAction {
if (!checkMsg(imClientSender, conversation, reqId, data, request.getSenderChannel())) { if (!checkMsg(imClientSender, conversation, reqId, data, request.getSenderChannel())) {
return; return;
} }
if (!friend(reqId, imClientSender, data.getToConversation(), membersList, request.getSenderChannel())) {
return;
}
ImMessageOnlineSend imMessageOnlineSend = assembleImMessageOnlineSend(data, imClientSender, imApplication.getId()); ImMessageOnlineSend imMessageOnlineSend = assembleImMessageOnlineSend(data, imClientSender, imApplication.getId());
...@@ -323,6 +334,82 @@ public class NormalChatAction { ...@@ -323,6 +334,82 @@ public class NormalChatAction {
} }
/** /**
* 好友判断
* @Author luozh
* @Date 2022年05月18日 07:28:34
* @param
* @Return
*/
private boolean friend(String reqId, ImClient imClientSender, Long conversationId,
List<ImConversationMembers> membersList, Channel channel) {
String meClientId = imClientSender.getClientId();
String heClientId;
if (membersList.get(0).getClientId() != null && membersList.get(0).getClientId().equals(meClientId)) {
heClientId = membersList.get(1).getClientId();
} else {
heClientId = membersList.get(0).getClientId();
}
ImFriend my = friendService.getByKey(meClientId, heClientId);
ImFriend friend = friendService.getByKey(heClientId, meClientId);
// 判定是陌生人的几种情况,没有好友申请 or 好友申请未通过 or 我/朋友拒绝了请求 or 我/朋友删除了好友关系
Boolean isStranger =
(my == null || friend == null)
|| FriendStateEnum.UNSURE.getCode().equals(my.getState())
|| FriendStateEnum.REJECT.getCode().equals(my.getState())
|| FriendStateEnum.REJECT.getCode().equals(friend.getState())
|| FriendStateEnum.DEL.getCode().equals(my.getState())
|| FriendStateEnum.DEL.getCode().equals(friend.getState());
if (isStranger) {
// 陌生人限制
String attributes = imClientSender.getAttributes();
boolean isVip = false;
if (StringUtils.isNotEmpty(attributes)) {
// 小虎豆独有功能
try {
JSONObject jsonObject = JSONObject.parseObject(attributes);
isVip = jsonObject.getBoolean("isVip");
} catch (Exception e) {
// 没有配置 认为不是vip
}
}
int sendCount =
imMessageService.count(Wrappers.<ImMessage>lambdaQuery().eq(ImMessage::getFkConversationId,
conversationId));
if (!isVip) {
// 判断消息发送数量
if (sendCount >= 3) {
WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.RES.getCmdCode());
responseModel.setCode(500);
responseModel.setMsg("和对方还不是好友,只能发送三条消息");
responseModel.setReqId(reqId);
channelSender.sendMsgLocal((NioSocketChannel) channel, responseModel);
return false;
}
} else {
// 判断消息发送数量
if (sendCount >= 30) {
WsResponse<HashMap<String, Long>> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.RES.getCmdCode());
responseModel.setCode(500);
responseModel.setMsg("和对方还不是好友,只能发送三十条消息");
responseModel.setReqId(reqId);
channelSender.sendMsgLocal((NioSocketChannel) channel, responseModel);
return false;
}
}
return true;
}
// 非陌生人
return true;
}
/**
* 判断被踢出逻辑 * 判断被踢出逻辑
* @param reqId * @param reqId
* @param imClientSender * @param imClientSender
......
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