package com.ruoyi.call.service.impl;
|
|
import java.util.Collections;
|
import java.util.List;
|
|
import com.ruoyi.call.compare.ArdCallSessionUserComparator;
|
import com.ruoyi.call.domain.*;
|
import com.ruoyi.call.mapper.ArdCallGroupUserMapper;
|
import com.ruoyi.call.mapper.ArdCallHistoryMapper;
|
import com.ruoyi.call.mapper.ArdCallUnreadMessagesMapper;
|
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.uuid.IdUtils;
|
import com.ruoyi.system.service.ISysUserService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.ArrayList;
|
import java.util.stream.Collectors;
|
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.call.mapper.ArdCallSessionUserMapper;
|
import com.ruoyi.call.service.IArdCallSessionUserService;
|
|
import javax.annotation.Resource;
|
|
/**
|
* 会话用户中间表Service业务层处理
|
*
|
* @author ard
|
* @date 2024-07-04
|
*/
|
@Service
|
public class ArdCallSessionUserServiceImpl implements IArdCallSessionUserService {
|
@Resource
|
private ArdCallSessionUserMapper ardCallSessionUserMapper;
|
@Resource
|
private ArdCallHistoryMapper ardCallHistoryMapper;
|
@Resource
|
private ArdCallSessionUserComparator ardCallSessionUserComparator;
|
@Resource
|
private ArdCallUnreadMessagesMapper ardCallUnreadMessagesMapper;
|
@Resource
|
private IArdCallGroupService ardCallGroupService;
|
|
/**
|
* 查询会话用户中间表
|
*
|
* @param id 会话用户中间表主键
|
* @return 会话用户中间表
|
*/
|
@Override
|
public ArdCallSessionUser selectArdCallSessionUserById(String id) {
|
return ardCallSessionUserMapper.selectArdCallSessionUserById(id);
|
}
|
|
@Override
|
public ArdCallSessionUser selectArdCallSessionUserBySesionId(String userId, String sessionId) {
|
ArdCallSessionUser ardCallSessionUser = ardCallSessionUserMapper.selectArdCallSessionUserBySesionId(userId, sessionId);
|
if (ardCallSessionUser != null) {
|
//获取未读数量
|
ArdCallUnreadMessages ardCallUnreadMessages = ardCallUnreadMessagesMapper.getUnreadMessage(ardCallSessionUser.getSessionId(), ardCallSessionUser.getUserId());
|
if (ardCallUnreadMessages != null) {
|
ardCallSessionUser.setUnReadCount(ardCallUnreadMessages.getUnreadCount());
|
} else {
|
ardCallSessionUser.setUnReadCount(0);
|
}
|
//获取最后一条消息实体
|
ArdCallHistory ardCallHistory = ardCallHistoryMapper.selectLastArdCallHistory(ardCallSessionUser.getSessionId());
|
ardCallSessionUser.setArdCallHistory(ardCallHistory);
|
//群聊targetNickName改为群名称
|
if (ardCallSessionUser.getType().equals("1")) {
|
ArdCallGroup ardCallGroup = ardCallGroupService.selectArdCallGroupById(ardCallSessionUser.getTargetId());
|
if (ardCallGroup != null) {
|
ardCallSessionUser.setTargetNickName(ardCallGroup.getName());
|
}
|
}
|
}
|
return ardCallSessionUser;
|
}
|
|
/**
|
* 查询会话用户中间表列表
|
*
|
* @param ardCallSessionUser 会话用户中间表
|
* @return 会话用户中间表
|
*/
|
@Override
|
public List<ArdCallSessionUser> selectArdCallSessionUserList(ArdCallSessionUser ardCallSessionUser) {
|
//获取用户的会话/未读消息数量/最后一条消息
|
List<ArdCallSessionUser> ardCallSessionUsers = ardCallSessionUserMapper.selectArdCallSessionUserList(ardCallSessionUser);
|
ardCallSessionUsers.stream().forEach(callSessionUser -> {
|
ArdCallUnreadMessages ardCallUnreadMessages = ardCallUnreadMessagesMapper.getUnreadMessage(callSessionUser.getSessionId(), ardCallSessionUser.getUserId());
|
if (ardCallUnreadMessages != null) {
|
callSessionUser.setUnReadCount(ardCallUnreadMessages.getUnreadCount());
|
} else {
|
callSessionUser.setUnReadCount(0);
|
}
|
//获取最后一条消息实体
|
ArdCallHistory ardCallHistory = ardCallHistoryMapper.selectLastArdCallHistory(callSessionUser.getSessionId());
|
callSessionUser.setArdCallHistory(ardCallHistory);
|
//群聊targetNickName改为群名称
|
if (callSessionUser.getType().equals("1")) {
|
ArdCallGroup ardCallGroup = ardCallGroupService.selectArdCallGroupById(callSessionUser.getTargetId());
|
if (ardCallGroup != null) {
|
callSessionUser.setTargetNickName(ardCallGroup.getName());
|
}
|
}
|
});
|
//过滤掉没有历史记录的会话
|
ardCallSessionUsers = ardCallSessionUsers.stream().filter(obj -> obj.getArdCallHistory() != null).collect(Collectors.toList());
|
// 使用定义的 ardCallSessionUserComparator 进行排序
|
Collections.sort(ardCallSessionUsers, ardCallSessionUserComparator);
|
return ardCallSessionUsers;
|
}
|
|
/**
|
* 新增会话用户中间表
|
*
|
* @param ardCallSessionUser 会话用户中间表
|
* @return 结果
|
*/
|
@Override
|
public int insertArdCallSessionUser(ArdCallSessionUser ardCallSessionUser) {
|
ardCallSessionUser.setId(IdUtils.simpleUUID());
|
ardCallSessionUser.setCreateTime(DateUtils.getNowDate());
|
return ardCallSessionUserMapper.insertArdCallSessionUser(ardCallSessionUser);
|
}
|
|
/**
|
* 修改会话用户中间表
|
*
|
* @param ardCallSessionUser 会话用户中间表
|
* @return 结果
|
*/
|
@Override
|
public int updateArdCallSessionUser(ArdCallSessionUser ardCallSessionUser) {
|
return ardCallSessionUserMapper.updateArdCallSessionUser(ardCallSessionUser);
|
}
|
|
/**
|
* 批量删除会话用户中间表
|
*
|
* @param ids 需要删除的会话用户中间表主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdCallSessionUserByIds(String[] ids) {
|
return ardCallSessionUserMapper.deleteArdCallSessionUserByIds(ids);
|
}
|
|
/**
|
* 删除会话用户中间表信息
|
*
|
* @param id 会话用户中间表主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdCallSessionUserById(String id) {
|
return ardCallSessionUserMapper.deleteArdCallSessionUserById(id);
|
}
|
|
|
@Override
|
public String getSessionId(String type, String userId, String targetId) {
|
return ardCallSessionUserMapper.getSessionId(type, userId, targetId);
|
}
|
|
@Override
|
public int deleteArdCallSessionUserBySessionId(String sessionId) {
|
return ardCallSessionUserMapper.deleteArdCallSessionUserBySessionId(sessionId);
|
}
|
|
@Override
|
public String getGroupSessionId(String type, String targetId) {
|
return ardCallSessionUserMapper.getGroupSessionId(type, targetId);
|
}
|
|
}
|