From 04167892c500169754bd38c991a2bd89411b76fc Mon Sep 17 00:00:00 2001 From: "xie.bx" Date: Thu, 17 Nov 2022 22:03:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=92=A4=E5=9B=9E=E5=90=8E?= =?UTF-8?q?=E9=87=87=E7=94=A8=E9=80=BB=E8=BE=91=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bx/common/enums/MessageStatusEnum.java | 4 ++-- .../java/com/bx/implatform/entity/GroupMessage.java | 6 ++++++ .../service/impl/GroupMessageServiceImpl.java | 10 +++++++--- .../service/impl/PrivateMessageServiceImpl.java | 6 ++++-- .../bx/implatform/task/PullAlreadyReadMessageTask.java | 1 + im-platform/src/main/resources/db/db.sql | 7 ++++--- .../websocket/processor/GroupMessageProcessor.java | 9 ++++++--- .../websocket/processor/PrivateMessageProcessor.java | 10 +++++++--- 8 files changed, 37 insertions(+), 16 deletions(-) diff --git a/commom/src/main/java/com/bx/common/enums/MessageStatusEnum.java b/commom/src/main/java/com/bx/common/enums/MessageStatusEnum.java index 1ee5ca6..be6997b 100644 --- a/commom/src/main/java/com/bx/common/enums/MessageStatusEnum.java +++ b/commom/src/main/java/com/bx/common/enums/MessageStatusEnum.java @@ -4,8 +4,8 @@ package com.bx.common.enums; public enum MessageStatusEnum { UNREAD(0,"未读"), - ALREADY_READ(1,"已读"); - + ALREADY_READ(1,"已读"), + RECALL(2,"已撤回"); private Integer code; diff --git a/im-platform/src/main/java/com/bx/implatform/entity/GroupMessage.java b/im-platform/src/main/java/com/bx/implatform/entity/GroupMessage.java index 2734aab..a94bec1 100644 --- a/im-platform/src/main/java/com/bx/implatform/entity/GroupMessage.java +++ b/im-platform/src/main/java/com/bx/implatform/entity/GroupMessage.java @@ -56,6 +56,12 @@ public class GroupMessage extends Model { @TableField("type") private Integer type; + /** + * 状态 + */ + @TableField("status") + private Integer status; + /** * 发送时间 */ diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java index 311936e..3036dab 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bx.common.contant.Constant; import com.bx.common.contant.RedisKey; +import com.bx.common.enums.MessageStatusEnum; import com.bx.common.enums.MessageTypeEnum; import com.bx.common.enums.ResultCode; import com.bx.common.model.im.GroupMessageInfo; @@ -100,14 +101,16 @@ public class GroupMessageServiceImpl extends ServiceImpl userIds = groupMemberService.findUserIdsByGroupId(msg.getGroupId()); GroupMessageInfo msgInfo = BeanUtils.copyProperties(msg, GroupMessageInfo.class); msgInfo.setType(MessageTypeEnum.TIP.getCode()); String content = String.format("'%s'撤回了一条消息",member.getAliasName()); msgInfo.setContent(content); + msgInfo.setSendTime(new Date()); this.sendMessage(userIds,msgInfo); log.info("撤回群聊消息,发送id:{},群聊id:{},内容:{}",userId,msg.getGroupId(),msg.getContent()); } @@ -135,7 +138,8 @@ public class GroupMessageServiceImpl extends ServiceImpl wrapper = new QueryWrapper(); wrapper.lambda().eq(GroupMessage::getGroupId,member.getGroupId()) - .gt(GroupMessage::getSendTime,member.getCreatedTime()); + .gt(GroupMessage::getSendTime,member.getCreatedTime()) + .ne(GroupMessage::getStatus,MessageStatusEnum.RECALL.getCode()); if(maxReadedId!=null){ wrapper.lambda().gt(GroupMessage::getId,maxReadedId); } diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java index 505e29b..95265a3 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java @@ -84,8 +84,9 @@ public class PrivateMessageServiceImpl extends ServiceImpl Constant.ALLOW_RECALL_SECOND * 1000){ throw new GlobalException(ResultCode.PROGRAM_ERROR,"消息已发送超过5分钟,无法撤回"); } - // 直接物理删除 - this.removeById(id); + // 修改消息状态 + msg.setStatus(MessageStatusEnum.RECALL.getCode()); + this.updateById(msg); // 获取对方连接的channelId String key = RedisKey.IM_USER_SERVER_ID+msg.getRecvId(); Integer serverId = (Integer)redisTemplate.opsForValue().get(key); @@ -94,6 +95,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl updateWrapper = new UpdateWrapper<>(); updateWrapper.lambda().eq(PrivateMessage::getId,msgId) + .eq(PrivateMessage::getStatus,MessageStatusEnum.UNREAD.getCode()) .set(PrivateMessage::getStatus, MessageStatusEnum.ALREADY_READ.getCode()); privateMessageService.update(updateWrapper); log.info("消息已读,id:{}",msgId); diff --git a/im-platform/src/main/resources/db/db.sql b/im-platform/src/main/resources/db/db.sql index 5c52c3a..5e2365b 100644 --- a/im-platform/src/main/resources/db/db.sql +++ b/im-platform/src/main/resources/db/db.sql @@ -30,8 +30,8 @@ create table `im_private_message`( `send_id` bigint not null comment '发送用户id', `recv_id` bigint not null comment '接收用户id', `content` text comment '发送内容', - `type` tinyint(1) NOT NULL comment '消息类型 0:文字 1:图片 2:文件', - `status` tinyint(1) NOT NULL comment '状态 0:未读 1:已读 ', + `type` tinyint(1) NOT NULL comment '消息类型 0:文字 1:图片 2:文件 3:语音 10:系统提示', + `status` tinyint(1) NOT NULL comment '状态 0:未读 1:已读 2:撤回', `send_time` datetime DEFAULT CURRENT_TIMESTAMP comment '发送时间', key `idx_send_recv_id` (`send_id`,`recv_id`) )ENGINE=InnoDB CHARSET=utf8mb3 comment '私聊消息'; @@ -67,7 +67,8 @@ create table `im_group_message`( `group_id` bigint not null comment '群id', `send_id` bigint not null comment '发送用户id', `content` text comment '发送内容', - `type` tinyint(1) NOT NULL comment '消息类型 0:文字 1:图片 2:文件', + `type` tinyint(1) NOT NULL comment '消息类型 0:文字 1:图片 2:文件 3:语音 10:系统提示' , + `status` tinyint(1) DEFAULT 0 comment '状态 0:正常 2:撤回', `send_time` datetime DEFAULT CURRENT_TIMESTAMP comment '发送时间', key `idx_group_id` (group_id) )ENGINE=InnoDB CHARSET=utf8mb3 comment '群消息'; diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java index d7f8359..67ace27 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/GroupMessageProcessor.java @@ -1,6 +1,7 @@ package com.bx.imserver.websocket.processor; import com.bx.common.contant.RedisKey; +import com.bx.common.enums.MessageTypeEnum; import com.bx.common.enums.WSCmdEnum; import com.bx.common.model.im.GroupMessageInfo; import com.bx.common.model.im.SendInfo; @@ -39,9 +40,11 @@ public class GroupMessageProcessor extends MessageProcessor { sendInfo.setData(data); channelCtx.channel().writeAndFlush(sendInfo); } - // 设置已读最大id - String key = RedisKey.IM_GROUP_READED_POSITION + data.getGroupId()+":"+recvId; - redisTemplate.opsForValue().set(key,data.getId()); + if(data.getType() != MessageTypeEnum.TIP.getCode()){ + // 设置已读最大id + String key = RedisKey.IM_GROUP_READED_POSITION + data.getGroupId()+":"+recvId; + redisTemplate.opsForValue().set(key,data.getId()); + } }else { log.error("未找到WS连接,发送者:{},群id:{},接收id:{},内容:{}",data.getSendId(),data.getGroupId(),data.getRecvIds()); } diff --git a/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java b/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java index d271b42..c8513ba 100644 --- a/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/websocket/processor/PrivateMessageProcessor.java @@ -1,6 +1,7 @@ package com.bx.imserver.websocket.processor; import com.bx.common.contant.RedisKey; +import com.bx.common.enums.MessageTypeEnum; import com.bx.common.enums.WSCmdEnum; import com.bx.common.model.im.PrivateMessageInfo; import com.bx.common.model.im.SendInfo; @@ -29,9 +30,12 @@ public class PrivateMessageProcessor extends MessageProcessor