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; @Resource private ISysUserService sysUserService; /** * 查询会话用户中间表 * * @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()); if (ardCallHistory != null) { SysUser sysUser = sysUserService.selectUserById(ardCallHistory.getUserId()); if (sysUser != null) { ardCallHistory.setNickName(sysUser.getNickName()); ardCallHistory.setAvatar(sysUser.getAvatar()); } 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 selectArdCallSessionUserList(ArdCallSessionUser ardCallSessionUser) { //获取用户的会话/未读消息数量/最后一条消息 List 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()); if(ardCallHistory != null) { SysUser sysUser = sysUserService.selectUserById(ardCallHistory.getUserId()); if (sysUser != null) { ardCallHistory.setNickName(sysUser.getNickName()); ardCallHistory.setAvatar(sysUser.getAvatar()); } 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); } }