|
|
|
|
@ -18,6 +18,7 @@ import com.ruoyi.common.im.enums.IMTerminalType;
|
|
|
|
|
import com.ruoyi.common.im.enums.MessageStatus;
|
|
|
|
|
import com.ruoyi.common.im.enums.MessageType;
|
|
|
|
|
import com.ruoyi.common.im.model.IMGroupMessage;
|
|
|
|
|
import com.ruoyi.common.im.model.IMPrivateMessage;
|
|
|
|
|
import com.ruoyi.common.im.model.IMUserInfo;
|
|
|
|
|
import com.ruoyi.common.im.util.BeanUtils;
|
|
|
|
|
import com.ruoyi.common.im.util.CommaTextUtils;
|
|
|
|
|
@ -29,7 +30,10 @@ import com.ruoyi.im.domain.GroupMember;
|
|
|
|
|
import com.ruoyi.im.domain.GroupMessage;
|
|
|
|
|
import com.ruoyi.im.domain.PrivateMessage;
|
|
|
|
|
import com.ruoyi.im.domain.dto.GroupMessageDTO;
|
|
|
|
|
import com.ruoyi.im.domain.result.Result;
|
|
|
|
|
import com.ruoyi.im.domain.result.ResultUtils;
|
|
|
|
|
import com.ruoyi.im.domain.vo.GroupMessageVO;
|
|
|
|
|
import com.ruoyi.im.domain.vo.PrivateMessageVO;
|
|
|
|
|
import com.ruoyi.im.mapper.GroupMessageMapper;
|
|
|
|
|
import com.ruoyi.im.service.GroupMemberService;
|
|
|
|
|
import com.ruoyi.im.service.GroupMessageService;
|
|
|
|
|
@ -47,6 +51,7 @@ import java.util.*;
|
|
|
|
|
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
|
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
@Service
|
|
|
|
|
@ -62,20 +67,23 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
|
|
|
|
|
private static final ScheduledThreadPoolExecutor EXECUTOR = ThreadPoolExecutorFactory.getThreadPoolExecutor();
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public GroupMessageVO sendMessage(GroupMessageDTO dto) {
|
|
|
|
|
AppUser session = SecurityUtils.getAppLoginUser().getAppUser();
|
|
|
|
|
public Result sendMessage(GroupMessageDTO dto) {
|
|
|
|
|
// AppUser session = SecurityUtils.getAppLoginUser().getAppUser();
|
|
|
|
|
AppUser session =appUserService.getById(SecurityUtils.getAppLoginUser().getAppUserId());
|
|
|
|
|
if (!session.permissionToTalk()){
|
|
|
|
|
return ResultUtils.error(500,"您已被禁言,无法发送消息");
|
|
|
|
|
}
|
|
|
|
|
Group group = groupService.getAndCheckById(dto.getGroupId());
|
|
|
|
|
// 是否在群聊里面
|
|
|
|
|
GroupMember member = groupMemberService.findByGroupAndUserId(dto.getGroupId(), session.getId());
|
|
|
|
|
if (Objects.isNull(member) || member.getQuit()) {
|
|
|
|
|
throw new GlobalException("您已不在群聊里面,无法发送消息");
|
|
|
|
|
return ResultUtils.error(500,"您已不在群聊里面,无法发送消息");
|
|
|
|
|
}
|
|
|
|
|
// 群聊成员列表
|
|
|
|
|
List<Long> userIds = groupMemberService.findUserIdsByGroupId(group.getId());
|
|
|
|
|
if (dto.getReceipt() && userIds.size() > 10L) {
|
|
|
|
|
// 大群的回执消息过于消耗资源,不允许发送
|
|
|
|
|
throw new GlobalException(
|
|
|
|
|
String.format("当前群聊大于%s人,不支持发送回执消息", 10L));
|
|
|
|
|
return ResultUtils.error(500,String.format("当前群聊大于%s人,不支持发送回执消息", 10L));
|
|
|
|
|
}
|
|
|
|
|
// 不用发给自己
|
|
|
|
|
userIds = userIds.stream().filter(id -> !session.getId().equals(id)).collect(Collectors.toList());
|
|
|
|
|
@ -101,7 +109,7 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
|
|
|
|
|
imClient.sendGroupMessage(sendMessage);
|
|
|
|
|
jpush(group.getId(),group.getName(),msg.getContent(),userIds);
|
|
|
|
|
log.info("发送群聊消息,发送id:{},群聊id:{},内容:{}", session.getId(), dto.getGroupId(), dto.getContent());
|
|
|
|
|
return msgInfo;
|
|
|
|
|
return ResultUtils.success(msgInfo);
|
|
|
|
|
}
|
|
|
|
|
public void jpush(Long groupId,String groupName,String contentd,List<Long> recvIds){
|
|
|
|
|
List<AppUser> recvUsers= appUserService.listByIds(recvIds);
|
|
|
|
|
@ -161,7 +169,41 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
|
|
|
|
|
log.info("撤回群聊消息,发送id:{},群聊id:{},内容:{}", session.getId(), msg.getGroupId(), msg.getContent());
|
|
|
|
|
return msgInfo;
|
|
|
|
|
}
|
|
|
|
|
@Transactional
|
|
|
|
|
@Override
|
|
|
|
|
public void toBlock(List<Long> messageIds) {
|
|
|
|
|
//没有session 默认管理员的appuserId
|
|
|
|
|
//每一个messageId对应两条屏蔽消息
|
|
|
|
|
List<GroupMessage> msgs = this.listByIds(messageIds);
|
|
|
|
|
if (Objects.isNull(msgs)) {
|
|
|
|
|
throw new GlobalException("消息不存在");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (GroupMessage msg : msgs) {
|
|
|
|
|
// 生成一条屏蔽消息
|
|
|
|
|
GroupMessage recallMsg = new GroupMessage();
|
|
|
|
|
recallMsg.setSendId(1L);
|
|
|
|
|
recallMsg.setStatus(MessageStatus.BLOCKED.code());
|
|
|
|
|
recallMsg.setSendTime(new Date());
|
|
|
|
|
recallMsg.setGroupId(msg.getGroupId());
|
|
|
|
|
recallMsg.setType(MessageType.BLOCKED.code());
|
|
|
|
|
recallMsg.setContent(msg.getId().toString());
|
|
|
|
|
this.save(recallMsg);
|
|
|
|
|
|
|
|
|
|
// 群发
|
|
|
|
|
List<Long> userIds = groupMemberService.findUserIdsByGroupId(msg.getGroupId());
|
|
|
|
|
GroupMessageVO msgInfo = BeanUtils.copyProperties(recallMsg, GroupMessageVO.class);
|
|
|
|
|
IMGroupMessage<GroupMessageVO> sendMessage = new IMGroupMessage<>();
|
|
|
|
|
sendMessage.setSender(new IMUserInfo(1L, 1));
|
|
|
|
|
sendMessage.setRecvIds(userIds);
|
|
|
|
|
sendMessage.setData(msgInfo);
|
|
|
|
|
sendMessage.setSendResult(false);
|
|
|
|
|
sendMessage.setSendToSelf(false);
|
|
|
|
|
imClient.sendGroupMessage(sendMessage);
|
|
|
|
|
log.info("屏蔽群聊消息,发送id:{},群聊id:{},内容:{}", 1, msg.getGroupId(), msg.getContent());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
public void pullOfflineMessage(Long minId) {
|
|
|
|
|
AppUser session = SecurityUtils.getAppLoginUser().getAppUser();
|
|
|
|
|
@ -186,6 +228,7 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
|
|
|
|
|
wrapper.gt(GroupMessage::getId, minId)
|
|
|
|
|
.gt(GroupMessage::getSendTime, minDate)
|
|
|
|
|
.in(GroupMessage::getGroupId, groupIds)
|
|
|
|
|
.eq(GroupMessage::getIsBlocked, 0)//屏蔽违规信息
|
|
|
|
|
.orderByAsc(GroupMessage::getId);
|
|
|
|
|
List<GroupMessage> messages = this.list(wrapper);
|
|
|
|
|
// 通过群聊对消息进行分组
|
|
|
|
|
@ -434,4 +477,6 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
|
|
|
|
|
// }
|
|
|
|
|
return maxReadedId.toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|