package com.ruoyi.call.service.impl;
|
|
import java.util.HashMap;
|
import java.util.List;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSONObject;
|
import com.ruoyi.call.domain.*;
|
import com.ruoyi.call.dto.MessageEvent;
|
import com.ruoyi.call.mapper.*;
|
import com.ruoyi.call.service.IArdCallGroupService;
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
import com.ruoyi.common.utils.DateUtils;
|
|
import com.ruoyi.common.utils.MessageUtils;
|
import com.ruoyi.common.utils.uuid.IdUtils;
|
import com.ruoyi.system.service.ISysUserService;
|
import com.ruoyi.utils.websocket.util.WebSocketUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.ApplicationEventPublisher;
|
import org.springframework.stereotype.Service;
|
|
import java.util.ArrayList;
|
import java.util.Map;
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
import java.util.stream.Collectors;
|
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.call.service.IArdCallHistoryService;
|
|
import javax.annotation.Resource;
|
import javax.websocket.Session;
|
|
import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
|
|
/**
|
* 会话历史Service业务层处理
|
*
|
* @author ard
|
* @date 2024-07-03
|
*/
|
@Service
|
public class ArdCallHistoryServiceImpl implements IArdCallHistoryService {
|
@Resource
|
private ArdCallHistoryMapper ardCallHistoryMapper;
|
@Resource
|
private ArdCallSessionMapper ardCallSessionMapper;
|
@Resource
|
private ArdCallUnreadMessagesMapper ardCallUnreadMessagesMapper;
|
@Resource
|
private ArdCallGroupUserMapper ardCallGroupUserMapper;
|
@Resource
|
private IArdCallGroupService ardCallGroupService;
|
@Autowired
|
private ApplicationEventPublisher eventPublisher;
|
|
/**
|
* 查询会话历史
|
*
|
* @param id 会话历史主键
|
* @return 会话历史
|
*/
|
@Override
|
public ArdCallHistory selectArdCallHistoryById(String id) {
|
ArdCallHistory ardCallHistory = ardCallHistoryMapper.selectArdCallHistoryById(id);
|
if (ardCallHistory != null) {
|
//群聊则将targetNickName改为群名称
|
ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(ardCallHistory.getSessionId());
|
if (ardCallSession != null && ardCallSession.getType().equals("1")) {
|
ArdCallGroup ardCallGroup = ardCallGroupService.selectArdCallGroupById(ardCallHistory.getTargetId());
|
if (ardCallGroup != null) {
|
ardCallHistory.setTargetNickName(ardCallGroup.getName());
|
}
|
}
|
}
|
return ardCallHistory;
|
}
|
|
/**
|
* 查询会话历史列表
|
*
|
* @param ardCallHistory 会话历史
|
* @return 会话历史
|
*/
|
@Override
|
public List<ArdCallHistory> selectArdCallHistoryList(ArdCallHistory ardCallHistory) {
|
List<ArdCallHistory> ardCallHistories = ardCallHistoryMapper.selectArdCallHistoryList(ardCallHistory);
|
ardCallHistories.stream().forEach(aCallHistory -> {
|
//群聊则将targetNickName改为群名称
|
ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(aCallHistory.getSessionId());
|
if (ardCallSession != null && ardCallSession.getType().equals("1")) {
|
ArdCallGroup ardCallGroup = ardCallGroupService.selectArdCallGroupById(aCallHistory.getTargetId());
|
if (ardCallGroup != null) {
|
aCallHistory.setTargetNickName(ardCallGroup.getName());
|
}
|
}
|
});
|
return ardCallHistories;
|
}
|
|
/**
|
* 新增会话历史
|
*
|
* @param ardCallHistory 会话历史
|
* @return 结果
|
*/
|
@Override
|
public int insertArdCallHistory(ArdCallHistory ardCallHistory) {
|
ardCallHistory.setId(IdUtils.simpleUUID());
|
ardCallHistory.setCreateTime(DateUtils.getNowDate());
|
ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(ardCallHistory.getSessionId());
|
if (ardCallSession.getType().equals("0")) {
|
//更新单聊用户未读消息计数
|
ArdCallUnreadMessages ardCallUnreadMessages = ardCallUnreadMessagesMapper.getUnreadMessage(ardCallHistory.getSessionId(), ardCallHistory.getTargetId());
|
if (ardCallUnreadMessages == null) {
|
ardCallUnreadMessages = new ArdCallUnreadMessages();
|
ardCallUnreadMessages.setUserId(ardCallHistory.getTargetId());
|
ardCallUnreadMessages.setSessionId(ardCallHistory.getSessionId());
|
ardCallUnreadMessages.setUnreadCount(1);
|
int rows = ardCallUnreadMessagesMapper.selectCountByUserIdAndSessionId(ardCallUnreadMessages.getUserId(), ardCallUnreadMessages.getSessionId());
|
if (rows == 0) {
|
ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
|
}
|
} else {
|
ardCallUnreadMessages.setUnreadCount(ardCallUnreadMessages.getUnreadCount() + 1);
|
ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
|
}
|
//websocket发送给targetId
|
MessageEvent messageEvent = new MessageEvent(ardCallHistory.getTargetId(), ardCallHistory);
|
eventPublisher.publishEvent(messageEvent);
|
} else {
|
//更新群聊用户未读消息计数
|
ArdCallGroupUser ardCallGroupUser = new ArdCallGroupUser();
|
ardCallGroupUser.setGroupId(ardCallHistory.getTargetId());
|
List<ArdCallGroupUser> ardCallGroupUsers = ardCallGroupUserMapper.selectArdCallGroupUserList(ardCallGroupUser);
|
ardCallGroupUsers.stream().forEach(groupUser -> {
|
if (!ardCallHistory.getUserId().equals(groupUser.getUserId())) {
|
//对群里除了自己外其他用户更新未读消息
|
ArdCallUnreadMessages ardCallUnreadMessages = ardCallUnreadMessagesMapper.getUnreadMessage(ardCallHistory.getSessionId(), groupUser.getUserId());
|
if (ardCallUnreadMessages == null) {
|
ardCallUnreadMessages = new ArdCallUnreadMessages();
|
ardCallUnreadMessages.setUserId(groupUser.getUserId());
|
ardCallUnreadMessages.setSessionId(ardCallHistory.getSessionId());
|
ardCallUnreadMessages.setUnreadCount(1);
|
int rows = ardCallUnreadMessagesMapper.selectCountByUserIdAndSessionId(ardCallUnreadMessages.getUserId(), ardCallUnreadMessages.getSessionId());
|
if (rows == 0) {
|
ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
|
}
|
} else {
|
ardCallUnreadMessages.setUnreadCount(ardCallUnreadMessages.getUnreadCount() + 1);
|
ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
|
}
|
//websocket发送给targetId
|
MessageEvent messageEvent = new MessageEvent(groupUser.getUserId(), ardCallHistory);
|
eventPublisher.publishEvent(messageEvent);
|
}
|
});
|
}
|
return ardCallHistoryMapper.insertArdCallHistory(ardCallHistory);
|
}
|
|
/**
|
* 修改会话历史
|
*
|
* @param ardCallHistory 会话历史
|
* @return 结果
|
*/
|
@Override
|
public int updateArdCallHistory(ArdCallHistory ardCallHistory) {
|
ardCallHistory.setUpdateBy(SecurityUtils.getUsername());
|
ardCallHistory.setUpdateTime(DateUtils.getNowDate());
|
return ardCallHistoryMapper.updateArdCallHistory(ardCallHistory);
|
}
|
|
/**
|
* 批量删除会话历史
|
*
|
* @param ids 需要删除的会话历史主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdCallHistoryByIds(String[] ids) {
|
return ardCallHistoryMapper.deleteArdCallHistoryByIds(ids);
|
}
|
|
/**
|
* 删除会话历史信息
|
*
|
* @param id 会话历史主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdCallHistoryById(String id) {
|
return ardCallHistoryMapper.deleteArdCallHistoryById(id);
|
}
|
}
|