Explorar el Código

(1) 聊天室上的 × 由原先的退出概念 变更为 隐藏(列表不展示)
(2) 发送信息,在原先功能的基础上,增加 将该聊天室下的所有人 每个人对于该聊天室 变更属性 为显示,确保有新信息时,即使隐藏了该聊天室也能即使看见

jubs hace 2 meses
padre
commit
9e9caccdd2

+ 5 - 0
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/common/domain/MessageChatUser.java

@@ -48,6 +48,11 @@ public class MessageChatUser extends BaseEntity {
     @Excel(name = "排序")
     private Long sort;
 
+    /**
+     *是否列表展示,0:否,1:是,默认是
+     * */
+    private String visible;
+
 
     /**
      * 删除标记

+ 2 - 0
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/common/dto/MessageChatDto.java

@@ -51,4 +51,6 @@ public class MessageChatDto extends MessageChat {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
     Date  maxUnReadMessageTime;
 
+    String visible;
+
 }

+ 25 - 0
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/common/service/ChatRoomVisibleEnum.java

@@ -0,0 +1,25 @@
+package com.ruoyi.project.common.service;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author jubs
+ */
+
+@Getter
+@AllArgsConstructor
+public enum ChatRoomVisibleEnum {
+    /**
+     * 显示
+     */
+
+    SHOW("1"),
+    /**
+     * 隐藏
+     */
+
+    HIDE("0"),;
+
+    private final String code;
+}

+ 25 - 28
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/common/service/impl/MessageChatServiceImpl.java

@@ -14,10 +14,7 @@ import com.ruoyi.project.common.dto.MessageChatContentDto;
 import com.ruoyi.project.common.dto.MessageChatDto;
 import com.ruoyi.project.common.dto.MessageContentUserDto;
 import com.ruoyi.project.common.mapper.MessageChatMapper;
-import com.ruoyi.project.common.service.IMessageChatContentService;
-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.*;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -44,16 +41,15 @@ public class MessageChatServiceImpl extends ServiceImpl<MessageChatMapper, Messa
     private IMessageChatUserService iMessageChatUserService;
 
 
-
     @Override
     public List<MessageChatDto> getChatRoomByUserIds(List<Long> userIds, Long quotationId, String chatName) {
-        return messageChatMapper.getChatRoomByUserIds(userIds, quotationId,chatName);
+        return messageChatMapper.getChatRoomByUserIds(userIds, quotationId, chatName);
     }
 
     @Override
     public int readMessage(MessageChatDto dto) {
         //获取聊天室id
-        Long chatRoomId =dto.getId();
+        Long chatRoomId = dto.getId();
         //变更聊天室为激活
         //激活当前聊天室
         iMessageChatUserService.update(
@@ -69,7 +65,7 @@ public class MessageChatServiceImpl extends ServiceImpl<MessageChatMapper, Messa
                 Wrappers.<MessageChatUser>lambdaUpdate()
                         .eq(MessageChatUser::getUserId, SecurityUtils.getUserId())
                         .ne(MessageChatUser::getMessageChatId, chatRoomId)
-                        .set(MessageChatUser::getActive,1)
+                        .set(MessageChatUser::getActive, 1)
                         .set(MessageChatUser::getUpdateBy, SecurityUtils.getUserId().toString())
                         .set(MessageChatUser::getUpdateTime, DateUtils.getNowDate())
         );
@@ -77,15 +73,15 @@ public class MessageChatServiceImpl extends ServiceImpl<MessageChatMapper, Messa
         //变更该聊天室下 所有的未读信息状态为已读
         List<MessageContentUserDto> messageContentUserDtos =
                 iMessageContentUserService.getUnReadMessageByUserIdAndChatRoom(SecurityUtils.getUserId(), chatRoomId);
-        Date date= DateUtils.getNowDate();
-        if(!messageContentUserDtos.isEmpty()){
-            List<MessageContentUser> updateData =messageContentUserDtos.stream().map(item->{
-                MessageContentUser messageContentUser=new MessageContentUser();
-                BeanUtils.copyBeanProp(messageContentUser,item);
+        Date date = DateUtils.getNowDate();
+        if (!messageContentUserDtos.isEmpty()) {
+            List<MessageContentUser> updateData = messageContentUserDtos.stream().map(item -> {
+                MessageContentUser messageContentUser = new MessageContentUser();
+                BeanUtils.copyBeanProp(messageContentUser, item);
                 messageContentUser.setReadStatus(ReadStatusEnum.READ.getValue());
                 messageContentUser.setUpdateTime(date);
                 messageContentUser.setUpdateBy(SecurityUtils.getStrUserId());
-                return  messageContentUser;
+                return messageContentUser;
             }).collect(Collectors.toList());
             iMessageContentUserService.updateBatchById(updateData);
         }
@@ -95,15 +91,16 @@ public class MessageChatServiceImpl extends ServiceImpl<MessageChatMapper, Messa
 
     @Override
     public List<MessageChatDto> getChatRoomByQuery(MessageChatDto messageChatDto) {
-        Long currentUserId=SecurityUtils.getUserId();
+        Long currentUserId = SecurityUtils.getUserId();
         List<MessageChatDto> chatRooms = messageChatMapper.getChatRoomByUserIds(
-                Collections.singletonList(SecurityUtils.getUserId()), null,messageChatDto.getChatName() );
-        if (chatRooms != null && chatRooms.size() > 0) {
+                Collections.singletonList(SecurityUtils.getUserId()), null, messageChatDto.getChatName());
+        chatRooms = chatRooms.stream().filter(item -> ChatRoomVisibleEnum.SHOW.getCode().equals(item.getVisible())).collect(Collectors.toList());
+        if (chatRooms != null && !chatRooms.isEmpty()) {
             // 按照active排序 0 优先在前
             chatRooms = chatRooms.stream().sorted((o1, o2) -> o2.getActive().compareTo(o1.getActive())).collect(Collectors.toList());
             List<MessageChatDto> activeChatRooms = chatRooms.stream().filter(chatRoom -> ChatRoomActiveEnum.TOP.getCode().equals(chatRoom.getActive())).collect(Collectors.toList());
 
-            if (activeChatRooms.size() > 0) {
+            if (!activeChatRooms.isEmpty()) {
                 //查询被激活的聊天室 或者置顶的聊天室  聊天记录
                 //step 1: 查询 从当前时间向前的10条聊天记录
                 List<MessageChatContentDto> messageChatContents = iMessageChatContentService.getMessageChatContentList(activeChatRooms.get(0).getId());
@@ -112,11 +109,11 @@ public class MessageChatServiceImpl extends ServiceImpl<MessageChatMapper, Messa
                 List<MessageChatContentDto> messageChatContents = iMessageChatContentService.getMessageChatContentList(chatRooms.get(0).getId());
                 chatRooms.get(0).setChatContentList(messageChatContents);
             }
-            Map<String,Boolean> chatRoomUnRead=markUnreadMessage(
+            Map<String, Boolean> chatRoomUnRead = markUnreadMessage(
                     chatRooms.stream().map(MessageChatDto::getId).collect(Collectors.toList()),
                     Collections.singletonList(currentUserId));
-            for(MessageChatDto chatRoom:chatRooms){
-                if(chatRoomUnRead.containsKey(chatRoom.getId()+"__"+currentUserId)){
+            for (MessageChatDto chatRoom : chatRooms) {
+                if (chatRoomUnRead.containsKey(chatRoom.getId() + "__" + currentUserId)) {
                     chatRoom.setHasUnReadMessage(true);
                 }
             }
@@ -125,17 +122,17 @@ public class MessageChatServiceImpl extends ServiceImpl<MessageChatMapper, Messa
     }
 
 
-    Map<String,Boolean> markUnreadMessage(List<Long> chatRoomsId,List<Long> userIds) {
-        Map<String,Boolean> result = new HashMap<>();
+    Map<String, Boolean> markUnreadMessage(List<Long> chatRoomsId, List<Long> userIds) {
+        Map<String, Boolean> result = new HashMap<>();
         List<MessageContentUserDto> contentUserDtos = iMessageContentUserService.markUnReadMessage(chatRoomsId, userIds);
         // 以 聊天室+接收人分组
         Map<String, List<MessageContentUserDto>> groupByChatRoomIdAndUserId = contentUserDtos.stream()
-                .collect(Collectors.groupingBy(it->it.getMessageChatId()+"__"+it.getReceiveUserId()));
-        if(groupByChatRoomIdAndUserId.size()>0){
-            for(String key:groupByChatRoomIdAndUserId.keySet()){
+                .collect(Collectors.groupingBy(it -> it.getMessageChatId() + "__" + it.getReceiveUserId()));
+        if (groupByChatRoomIdAndUserId.size() > 0) {
+            for (String key : groupByChatRoomIdAndUserId.keySet()) {
                 List<MessageContentUserDto> messageContentUserDtos = groupByChatRoomIdAndUserId.get(key);
-                boolean flag=messageContentUserDtos!=null&& messageContentUserDtos.size()>0;
-                result.put(key,flag);
+                boolean flag = messageContentUserDtos != null && messageContentUserDtos.size() > 0;
+                result.put(key, flag);
 
             }
         }

+ 2 - 5
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/common/service/impl/MessageChatUserServiceImpl.java

@@ -13,10 +13,7 @@ import com.ruoyi.project.common.domain.MessageChatUser;
 import com.ruoyi.project.common.domain.MessageContentUser;
 import com.ruoyi.project.common.dto.MessageChatUserDto;
 import com.ruoyi.project.common.mapper.MessageChatUserMapper;
-import com.ruoyi.project.common.service.IMessageChatContentService;
-import com.ruoyi.project.common.service.IMessageChatGroupService;
-import com.ruoyi.project.common.service.IMessageChatUserService;
-import com.ruoyi.project.common.service.IMessageContentUserService;
+import com.ruoyi.project.common.service.*;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -58,7 +55,7 @@ public class MessageChatUserServiceImpl extends ServiceImpl<MessageChatUserMappe
                     Wrappers.<MessageChatUser>lambdaUpdate()
                             .eq(MessageChatUser::getMessageChatId, chatRoomId)
                             .eq(MessageChatUser::getUserId, currentUserId)
-                            .set(MessageChatUser::getDelFlag, DelFlagEnum.DELETED.getValue())
+                            .set(MessageChatUser::getVisible, ChatRoomVisibleEnum.HIDE.getCode())
                             .set(MessageChatUser::getUpdateTime, new Date())
                             .set(MessageChatUser::getUpdateBy, currentUserId)
             );

+ 44 - 18
RuoYi-Vue-fast-master/src/main/java/com/ruoyi/project/common/service/impl/SseChatEmitterServiceImpl.java

@@ -20,12 +20,7 @@ import com.ruoyi.project.common.dto.MessageChatContentDto;
 import com.ruoyi.project.common.dto.MessageChatDto;
 import com.ruoyi.project.common.dto.MessageChatRes;
 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.Collections;
@@ -78,7 +73,7 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
     @Resource
     private ITqQuotationService tqQuotationService;
     @Resource
-    private ISysUserService  sysUserService;
+    private ISysUserService sysUserService;
 
 
     private static final Map<String, SseEmitter> sseChatCache = new ConcurrentHashMap<>();
@@ -101,9 +96,7 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void createChatRoom(MessageChatDto dto) {
-
         List<Long> userIdList = getQuoteOrderUserIds(dto.getChatName());
-
         Long currentUserId = SecurityUtils.getUserId();
         Date date = DateUtils.getNowDate();
         userIdList = userIdList.stream().distinct().collect(Collectors.toList());
@@ -118,6 +111,8 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
         //确保所有参与者 都在该聊天室中,取出 userIdList 与 chatRooms 的差集
         List<Long> notInChatRooms;
 
+        List<Long> notVisibleChatUserId = new ArrayList<>();
+
         if (chatRooms.isEmpty()) {
             //需要创建聊天室
             MessageChat messageChat = new MessageChat();
@@ -137,6 +132,13 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
             notInChatRooms = userIdList.stream().filter(
                     userId -> !finalChatRooms.stream().map(MessageChatDto::getChatUserId).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: 新增 参与者
         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.setSort(0L);
+                messageChatUser.setVisible(ChatRoomVisibleEnum.SHOW.getCode());
                 messageChatUsers.add(messageChatUser);
             }
             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:当前聊天室激活,其余聊天室取消
         iMessageChatUserService.update(
                 Wrappers.<MessageChatUser>lambdaUpdate()
@@ -219,7 +233,10 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
                     Collections.singletonList(currentUserId), null, null);
             if (chatRooms != null && !chatRooms.isEmpty()) {
                 // 按照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());
                 List<MessageChatDto> activeChatRooms = chatRooms.stream()
                         .filter(chatRoom -> ChatRoomActiveEnum.TOP.getCode().equals(chatRoom.getActive()))
@@ -380,6 +397,14 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
         userIdList = userIdList.stream().distinct().collect(Collectors.toList());
         //查询 该报价单的所有在线 连接用户
         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::getMessageChatId, chatRoomId)
                         .set(MessageChatUser::getActive, 0)
+                        .set(MessageChatUser::getVisible, ChatRoomVisibleEnum.SHOW.getCode())
                         .set(MessageChatUser::getUpdateBy, currentUserId.toString())
                         .set(MessageChatUser::getUpdateTime, DateUtils.getNowDate())
         );
@@ -465,18 +491,18 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
         //(3)当前点击人的 区域链路上的 所有销售经理
         List<Long> userIdList = new ArrayList<>();
         userIdList.add(SecurityUtils.getUserId());
-       List<TqQuotation>  quotation = tqQuotationService.list(
+        List<TqQuotation> quotation = tqQuotationService.list(
                 Wrappers.<TqQuotation>lambdaQuery()
                         .eq(TqQuotation::getQuotationNo, quotationNo)
                         .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);
             }
         }
@@ -614,7 +640,7 @@ public class SseChatEmitterServiceImpl implements ISseChatEmitterService {
                             messageContentUserDto.getMessageChatId() + "__" + messageContentUserDto.getReceiveUserId())
                             && messageContentUserDto.getUnReadMessage() > 0) {
                         //设置最新的一条未读信息的产生的事件
-                        result.put(key+"lastUnReadTime", messageContentUserDto.getMaxUnReadMessageTime());
+                        result.put(key + "lastUnReadTime", messageContentUserDto.getMaxUnReadMessageTime());
                         result.put(key, true);
                     } else {
                         result.put(key, false);

+ 2 - 2
RuoYi-Vue-fast-master/src/main/resources/mybatis/common/MessageChatMapper.xml

@@ -33,7 +33,7 @@
     <resultMap id="MessageChatDtoResult" extends="MessageChatResult" type="com.ruoyi.project.common.dto.MessageChatDto">
         <result property="active" column="active"/>
         <result property="sort" column="sort"/>
-        <result property="connectId" column="connect_id"/>
+        <result property="visible" column="visible"/>
         <result property="chatUserId" column="user_id"/>
         <result property="messageChatUserId" column="message_chat_user_id"/>
     </resultMap>
@@ -49,7 +49,7 @@
         mcu.user_id,
         mc.quotation_id,
         mcu.active,
-        mcu.connect_id,
+        mcu.visible,
         mcu.sort
         FROM
         message_chat_user mcu