|
@@ -20,12 +20,7 @@ import com.ruoyi.project.common.dto.MessageChatContentDto;
|
|
import com.ruoyi.project.common.dto.MessageChatDto;
|
|
import com.ruoyi.project.common.dto.MessageChatDto;
|
|
import com.ruoyi.project.common.dto.MessageChatRes;
|
|
import com.ruoyi.project.common.dto.MessageChatRes;
|
|
import com.ruoyi.project.common.dto.MessageContentUserDto;
|
|
import com.ruoyi.project.common.dto.MessageContentUserDto;
|
|
-import com.ruoyi.project.common.service.IMessageChatContentService;
|
|
|
|
-import com.ruoyi.project.common.service.IMessageChatGroupService;
|
|
|
|
-import com.ruoyi.project.common.service.IMessageChatService;
|
|
|
|
-import com.ruoyi.project.common.service.IMessageChatUserService;
|
|
|
|
-import com.ruoyi.project.common.service.IMessageContentUserService;
|
|
|
|
-import com.ruoyi.project.common.service.ISseChatEmitterService;
|
|
|
|
|
|
+import com.ruoyi.project.common.service.*;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
@@ -78,7 +73,7 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
|
|
@Resource
|
|
@Resource
|
|
private ITqQuotationService tqQuotationService;
|
|
private ITqQuotationService tqQuotationService;
|
|
@Resource
|
|
@Resource
|
|
- private ISysUserService sysUserService;
|
|
|
|
|
|
+ private ISysUserService sysUserService;
|
|
|
|
|
|
|
|
|
|
private static final Map<String, SseEmitter> sseChatCache = new ConcurrentHashMap<>();
|
|
private static final Map<String, SseEmitter> sseChatCache = new ConcurrentHashMap<>();
|
|
@@ -101,9 +96,7 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public void createChatRoom(MessageChatDto dto) {
|
|
public void createChatRoom(MessageChatDto dto) {
|
|
-
|
|
|
|
List<Long> userIdList = getQuoteOrderUserIds(dto.getChatName());
|
|
List<Long> userIdList = getQuoteOrderUserIds(dto.getChatName());
|
|
-
|
|
|
|
Long currentUserId = SecurityUtils.getUserId();
|
|
Long currentUserId = SecurityUtils.getUserId();
|
|
Date date = DateUtils.getNowDate();
|
|
Date date = DateUtils.getNowDate();
|
|
userIdList = userIdList.stream().distinct().collect(Collectors.toList());
|
|
userIdList = userIdList.stream().distinct().collect(Collectors.toList());
|
|
@@ -118,6 +111,8 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
|
|
//确保所有参与者 都在该聊天室中,取出 userIdList 与 chatRooms 的差集
|
|
//确保所有参与者 都在该聊天室中,取出 userIdList 与 chatRooms 的差集
|
|
List<Long> notInChatRooms;
|
|
List<Long> notInChatRooms;
|
|
|
|
|
|
|
|
+ List<Long> notVisibleChatUserId = new ArrayList<>();
|
|
|
|
+
|
|
if (chatRooms.isEmpty()) {
|
|
if (chatRooms.isEmpty()) {
|
|
//需要创建聊天室
|
|
//需要创建聊天室
|
|
MessageChat messageChat = new MessageChat();
|
|
MessageChat messageChat = new MessageChat();
|
|
@@ -137,6 +132,13 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
|
|
notInChatRooms = userIdList.stream().filter(
|
|
notInChatRooms = userIdList.stream().filter(
|
|
userId -> !finalChatRooms.stream().map(MessageChatDto::getChatUserId).collect(Collectors.toList())
|
|
userId -> !finalChatRooms.stream().map(MessageChatDto::getChatUserId).collect(Collectors.toList())
|
|
.contains(userId)).collect(Collectors.toList());
|
|
.contains(userId)).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ List<MessageChatDto> hideChatRooms = chatRooms.stream()
|
|
|
|
+ .filter(chatRoom -> chatRoom.getVisible().equals(ChatRoomVisibleEnum.HIDE.getCode()))
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ notVisibleChatUserId = userIdList.stream().filter(
|
|
|
|
+ userId -> hideChatRooms.stream().map(MessageChatDto::getChatUserId).collect(Collectors.toList()).contains(userId)
|
|
|
|
+ ).collect(Collectors.toList());
|
|
}
|
|
}
|
|
//step 2: 新增 参与者
|
|
//step 2: 新增 参与者
|
|
if (!notInChatRooms.isEmpty()) {
|
|
if (!notInChatRooms.isEmpty()) {
|
|
@@ -148,10 +150,22 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
|
|
//如果是自己点击了聊天室,激活当前聊天室
|
|
//如果是自己点击了聊天室,激活当前聊天室
|
|
messageChatUser.setActive(currentUserId.equals(userId) ? ChatRoomActiveEnum.TOP.getCode() : ChatRoomActiveEnum.NOT_TOP.getCode());
|
|
messageChatUser.setActive(currentUserId.equals(userId) ? ChatRoomActiveEnum.TOP.getCode() : ChatRoomActiveEnum.NOT_TOP.getCode());
|
|
messageChatUser.setSort(0L);
|
|
messageChatUser.setSort(0L);
|
|
|
|
+ messageChatUser.setVisible(ChatRoomVisibleEnum.SHOW.getCode());
|
|
messageChatUsers.add(messageChatUser);
|
|
messageChatUsers.add(messageChatUser);
|
|
}
|
|
}
|
|
iMessageChatUserService.saveBatch(messageChatUsers);
|
|
iMessageChatUserService.saveBatch(messageChatUsers);
|
|
}
|
|
}
|
|
|
|
+ //step 3: 展示 隐藏的聊天室
|
|
|
|
+ if (!notVisibleChatUserId.isEmpty()) {
|
|
|
|
+ iMessageChatUserService.update(
|
|
|
|
+ Wrappers.<MessageChatUser>lambdaUpdate()
|
|
|
|
+ .in(MessageChatUser::getUserId, notVisibleChatUserId)
|
|
|
|
+ .set(MessageChatUser::getVisible, ChatRoomVisibleEnum.SHOW.getCode())
|
|
|
|
+ .set(MessageChatUser::getUpdateBy, currentUserId.toString())
|
|
|
|
+ .set(MessageChatUser::getUpdateTime, DateUtils.getNowDate())
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
// @Date 2024/7/3 17:24 @Author jubs 😀 @description:当前聊天室激活,其余聊天室取消
|
|
// @Date 2024/7/3 17:24 @Author jubs 😀 @description:当前聊天室激活,其余聊天室取消
|
|
iMessageChatUserService.update(
|
|
iMessageChatUserService.update(
|
|
Wrappers.<MessageChatUser>lambdaUpdate()
|
|
Wrappers.<MessageChatUser>lambdaUpdate()
|
|
@@ -219,7 +233,10 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
|
|
Collections.singletonList(currentUserId), null, null);
|
|
Collections.singletonList(currentUserId), null, null);
|
|
if (chatRooms != null && !chatRooms.isEmpty()) {
|
|
if (chatRooms != null && !chatRooms.isEmpty()) {
|
|
// 按照active排序 0 优先在前
|
|
// 按照active排序 0 优先在前
|
|
- chatRooms = chatRooms.stream().sorted(Comparator.comparing(MessageChatDto::getActive))
|
|
|
|
|
|
+ //过滤掉其中隐藏的聊天
|
|
|
|
+ chatRooms = chatRooms.stream()
|
|
|
|
+ .filter(chatRoom -> !ChatRoomVisibleEnum.HIDE.getCode().equals(chatRoom.getVisible()))
|
|
|
|
+ .sorted(Comparator.comparing(MessageChatDto::getActive))
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
List<MessageChatDto> activeChatRooms = chatRooms.stream()
|
|
List<MessageChatDto> activeChatRooms = chatRooms.stream()
|
|
.filter(chatRoom -> ChatRoomActiveEnum.TOP.getCode().equals(chatRoom.getActive()))
|
|
.filter(chatRoom -> ChatRoomActiveEnum.TOP.getCode().equals(chatRoom.getActive()))
|
|
@@ -380,6 +397,14 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
|
|
userIdList = userIdList.stream().distinct().collect(Collectors.toList());
|
|
userIdList = userIdList.stream().distinct().collect(Collectors.toList());
|
|
//查询 该报价单的所有在线 连接用户
|
|
//查询 该报价单的所有在线 连接用户
|
|
List<Long> userIdListOnline = new ArrayList<>(userIdList);
|
|
List<Long> userIdListOnline = new ArrayList<>(userIdList);
|
|
|
|
+ //将所有人 对于该聊天是来说 都要展示
|
|
|
|
+ iMessageChatUserService.update(Wrappers.<MessageChatUser>lambdaUpdate()
|
|
|
|
+ .eq(MessageChatUser::getMessageChatId, chatRoomId)
|
|
|
|
+ .set(MessageChatUser::getVisible, ChatRoomVisibleEnum.SHOW.getCode())
|
|
|
|
+ .set(MessageChatUser::getUpdateBy, SecurityUtils.getUsername())
|
|
|
|
+ .set(MessageChatUser::getUpdateTime, new Date()));
|
|
|
|
+
|
|
|
|
+
|
|
// 将当前 聊天记录 按天存入表中
|
|
// 将当前 聊天记录 按天存入表中
|
|
|
|
|
|
//按照当天 查询 是否已经有聊天记录组
|
|
//按照当天 查询 是否已经有聊天记录组
|
|
@@ -396,6 +421,7 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
|
|
.eq(MessageChatUser::getUserId, currentUserId)
|
|
.eq(MessageChatUser::getUserId, currentUserId)
|
|
.eq(MessageChatUser::getMessageChatId, chatRoomId)
|
|
.eq(MessageChatUser::getMessageChatId, chatRoomId)
|
|
.set(MessageChatUser::getActive, 0)
|
|
.set(MessageChatUser::getActive, 0)
|
|
|
|
+ .set(MessageChatUser::getVisible, ChatRoomVisibleEnum.SHOW.getCode())
|
|
.set(MessageChatUser::getUpdateBy, currentUserId.toString())
|
|
.set(MessageChatUser::getUpdateBy, currentUserId.toString())
|
|
.set(MessageChatUser::getUpdateTime, DateUtils.getNowDate())
|
|
.set(MessageChatUser::getUpdateTime, DateUtils.getNowDate())
|
|
);
|
|
);
|
|
@@ -465,18 +491,18 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
|
|
//(3)当前点击人的 区域链路上的 所有销售经理
|
|
//(3)当前点击人的 区域链路上的 所有销售经理
|
|
List<Long> userIdList = new ArrayList<>();
|
|
List<Long> userIdList = new ArrayList<>();
|
|
userIdList.add(SecurityUtils.getUserId());
|
|
userIdList.add(SecurityUtils.getUserId());
|
|
- List<TqQuotation> quotation = tqQuotationService.list(
|
|
|
|
|
|
+ List<TqQuotation> quotation = tqQuotationService.list(
|
|
Wrappers.<TqQuotation>lambdaQuery()
|
|
Wrappers.<TqQuotation>lambdaQuery()
|
|
.eq(TqQuotation::getQuotationNo, quotationNo)
|
|
.eq(TqQuotation::getQuotationNo, quotationNo)
|
|
.eq(TqQuotation::getDelFlag, DelFlagEnum.NORMAL.getValue())
|
|
.eq(TqQuotation::getDelFlag, DelFlagEnum.NORMAL.getValue())
|
|
);
|
|
);
|
|
- if (quotation != null&&!quotation.isEmpty()) {
|
|
|
|
- userIdList.addAll(quotation.stream().map((item)-> Long.valueOf(item.getCreateBy())).collect(Collectors.toList()));
|
|
|
|
|
|
+ if (quotation != null && !quotation.isEmpty()) {
|
|
|
|
+ userIdList.addAll(quotation.stream().map((item) -> Long.valueOf(item.getCreateBy())).collect(Collectors.toList()));
|
|
}
|
|
}
|
|
- List<SysUser> sysUsers=sysUserService.selectSaleByCurAgent();
|
|
|
|
- if(sysUsers!=null&&!sysUsers.isEmpty()){
|
|
|
|
- List<Long> userIds=sysUsers.stream().map(SysUser::getUserId).collect(Collectors.toList());
|
|
|
|
- if(!userIds.isEmpty()){
|
|
|
|
|
|
+ List<SysUser> sysUsers = sysUserService.selectSaleByCurAgent();
|
|
|
|
+ if (sysUsers != null && !sysUsers.isEmpty()) {
|
|
|
|
+ List<Long> userIds = sysUsers.stream().map(SysUser::getUserId).collect(Collectors.toList());
|
|
|
|
+ if (!userIds.isEmpty()) {
|
|
userIdList.addAll(userIds);
|
|
userIdList.addAll(userIds);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -614,7 +640,7 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
|
|
messageContentUserDto.getMessageChatId() + "__" + messageContentUserDto.getReceiveUserId())
|
|
messageContentUserDto.getMessageChatId() + "__" + messageContentUserDto.getReceiveUserId())
|
|
&& messageContentUserDto.getUnReadMessage() > 0) {
|
|
&& messageContentUserDto.getUnReadMessage() > 0) {
|
|
//设置最新的一条未读信息的产生的事件
|
|
//设置最新的一条未读信息的产生的事件
|
|
- result.put(key+"lastUnReadTime", messageContentUserDto.getMaxUnReadMessageTime());
|
|
|
|
|
|
+ result.put(key + "lastUnReadTime", messageContentUserDto.getMaxUnReadMessageTime());
|
|
result.put(key, true);
|
|
result.put(key, true);
|
|
} else {
|
|
} else {
|
|
result.put(key, false);
|
|
result.put(key, false);
|