Commit a33d6566 by Future

撤回删除逻辑调整

parent 03557328
...@@ -127,15 +127,6 @@ public interface ImMessageService extends BaseService<ImMessage> { ...@@ -127,15 +127,6 @@ public interface ImMessageService extends BaseService<ImMessage> {
OfflineMsgDto getReceivedLastMsgByConversationId(Long clientId, Long conversationId); OfflineMsgDto getReceivedLastMsgByConversationId(Long clientId, Long conversationId);
/** /**
* 保存
*
* @param imMessage
* @return
* @throws Exception
*/
boolean saveImMessage(ImMessage imMessage) throws Exception;
/**
* 获取读取人员 * 获取读取人员
* @param param * @param param
* @return * @return
......
...@@ -225,47 +225,47 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -225,47 +225,47 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
ImClient imClientSender = contextService.getImClientIfNotNullOrThrow(); ImClient imClientSender = contextService.getImClientIfNotNullOrThrow();
ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(imClientSender.getFkAppid()); ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(imClientSender.getFkAppid());
ImMessage messageById = this.getById(imMsgRecall.getMsgId()); ImMessage beOperatedMsg = this.getById(imMsgRecall.getMsgId());
// 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置 // 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置
boolean withdrawOther = true; boolean withdrawOther = true;
if (!withdrawOther && !messageById.getSender().equals(imClientSender.getId())) { if (!withdrawOther && !beOperatedMsg.getSender().equals(imClientSender.getId())) {
throw new BusinessException("不可撤回别人发送的消息"); throw new BusinessException("不可撤回别人发送的消息");
} }
if (messageById.getWithdraw()) { if (beOperatedMsg.getWithdraw()) {
return Boolean.TRUE; return Boolean.TRUE;
} }
ImClient msgOwner = imClientService.getCacheImClient(messageById.getSender()); ImClient msgOwner = imClientService.getCacheImClient(beOperatedMsg.getSender());
if (msgOwner == null) { if (msgOwner == null) {
throw new BusinessException("未查找到消息发送者"); throw new BusinessException("未查找到消息发送者");
} }
// 修改消息体
messageById.setWithdraw(Boolean.TRUE);
messageById.setWithdrawTime(new Date());
// 清空消息
messageById.setContent("{}");
boolean saveOk = this.updateById(messageById);
eventPublisher.publishEvent(new ClientSendMessageEvent(imApplication.getId(), messageById));
// 组装消息 // 组装消息
Map<String, Object> content = new HashMap<>(); Map<String, Object> content = new HashMap<>();
content.put("operator", imClientSender.getClientId()); content.put("operator", imClientSender.getClientId());
content.put("beOperatedMsgId", imMsgRecall.getMsgId()); content.put("beOperatedMsgId", imMsgRecall.getMsgId());
content.put("msgOwner", msgOwner.getClientId()); content.put("msgOwner", msgOwner.getClientId());
ImMessage imMessage = MessageBuilder.buildEventMessage(MsgTypeEnum.MSG_WITHDRAW, imApplication, // 修改消息体
imClientSender, new ImConversation().setId(messageById.getFkConversationId()), JsonUtils.encodeJson(content)); beOperatedMsg.setWithdraw(Boolean.TRUE);
this.saveMessageToDb(imMessage); beOperatedMsg.setWithdrawTime(new Date());
// 清空消息
beOperatedMsg.setContent(JsonUtils.encodeJson(content));
boolean saveOk = this.updateById(beOperatedMsg);
eventPublisher.publishEvent(new ClientSendMessageEvent(imApplication.getId(), beOperatedMsg));
ImMessage eventMessage = MessageBuilder.buildEventMessage(MsgTypeEnum.MSG_WITHDRAW, imApplication,
imClientSender, new ImConversation().setId(beOperatedMsg.getFkConversationId()), JsonUtils.encodeJson(content));
this.saveMessageToDb(eventMessage);
if (saveOk) { if (saveOk) {
ImConversation imConversation = imConversationService.getById(beOperatedMsg.getFkConversationId());
// 查询该会话所有成员 // 查询该会话所有成员
List<ImConversationMembers> membersList = imConversationMembersService.list( List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda() new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, messageById.getFkConversationId()) .eq(ImConversationMembers::getFkConversationId, beOperatedMsg.getFkConversationId())
.notIn(ImConversationMembers::getFkClientId, imClientSender.getId()) .notIn(ImConversationMembers::getFkClientId, imClientSender.getId())
); );
if (membersList.isEmpty()) { if (membersList.isEmpty()) {
log.info("membersList为空,toConversationId:" + messageById.getFkConversationId()); log.info("membersList为空,toConversationId:" + beOperatedMsg.getFkConversationId());
throw new BusinessException("该会话成员列表为空"); throw new BusinessException("该会话成员列表为空");
} }
// 删除inbox数据 // 删除inbox数据
...@@ -273,28 +273,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -273,28 +273,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
.eq(ImInbox::getFkMsgId, imMsgRecall.getMsgId())); .eq(ImInbox::getFkMsgId, imMsgRecall.getMsgId()));
// 遍历发送 // 遍历发送
for (ImConversationMembers member : membersList) { for (ImConversationMembers member : membersList) {
// 封装响应的实体 WsResponse responseModel = buildEventResponse(imConversation.getId(), MsgTypeEnum.MSG_WITHDRAW, eventMessage, imClientSender.getClientId(), msgOwner.getClientId(), beOperatedMsg.getId());
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
BeanUtils.copyProperties(messageById, imMessageOnlineSend);
imMessageOnlineSend.setType(MsgTypeEnum.MSG_WITHDRAW.getUriCode());
imMessageOnlineSend.setMsgId(messageById.getId());
imMessageOnlineSend.setCreateTime(new Date());
imMessageOnlineSend.setSender(imClientSender.getClientId());
Map<String, Object> contentMap = Maps.newHashMap();
contentMap.put("msgOwner", msgOwner.getClientId());
imMessageOnlineSend.setContent(contentMap);
imMessageOnlineSend.setConversationId(member.getFkConversationId());
imMessageOnlineSend.setWithdraw(Boolean.TRUE);
imMessageOnlineSend.setEvent(Boolean.TRUE);
// 向接收方推送
WsResponse<ImMessageOnlineSend> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.ONLINE_EVENT_MSG.getCmdCode());
ApiResult<Boolean> result = ApiResult.result(ApiCode.SUCCESS);
responseModel.setCode(result.getCode());
responseModel.setMsg(result.getMessage());
responseModel.setData(imMessageOnlineSend);
responseModel.setReqId(null);
channelSender.sendMsg(responseModel, member.getFkClientId()); channelSender.sendMsg(responseModel, member.getFkClientId());
// 异步推送系统通知消息 // 异步推送系统通知消息
...@@ -321,69 +300,52 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -321,69 +300,52 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
if (CollectionUtils.isEmpty(imMessageList)) { if (CollectionUtils.isEmpty(imMessageList)) {
throw new BusinessException("查无消息"); throw new BusinessException("查无消息");
} }
for (ImMessage message : imMessageList) { for (ImMessage beOperatedMsg : imMessageList) {
// 判断该消息是否是该客户端发送 // 判断该消息是否是该客户端发送
if (!deleteOther && !message.getSender().equals(imClientSender.getId())) { if (!deleteOther && !beOperatedMsg.getSender().equals(imClientSender.getId())) {
throw new BusinessException("不可删除别人发送的消息"); throw new BusinessException("不可删除别人发送的消息");
} }
if (message.getIsDelete() == 2) { if (beOperatedMsg.getIsDelete() == 2) {
continue; continue;
} }
// 修改消息体 ImClient msgOwner = imClientService.getCacheImClient(beOperatedMsg.getSender());
message.setIsDelete(2);
message.setUpdateDate(new Date());
boolean saveOk = this.updateById(message);
ImClient msgOwner = imClientService.getCacheImClient(message.getSender());
if (msgOwner == null) { if (msgOwner == null) {
throw new BusinessException("未查找到消息发送者"); throw new BusinessException("未查找到消息发送者");
} }
// 组装消息 // 组装消息
Map<String, Object> content = new HashMap<>(); Map<String, Object> content = new HashMap<>();
content.put("operator", imClientSender.getClientId()); content.put("operator", imClientSender.getClientId());
content.put("beOperatedMsgId", message.getId()); content.put("beOperatedMsgId", beOperatedMsg.getId());
content.put("msgOwner", msgOwner.getClientId()); content.put("msgOwner", msgOwner.getClientId());
ImMessage imMessage = MessageBuilder.buildEventMessage(MsgTypeEnum.MSG_DELETE, imApplication, // 修改消息体
imClientSender, new ImConversation().setId(message.getFkConversationId()), JsonUtils.encodeJson(content)); beOperatedMsg.setIsDelete(2);
this.saveMessageToDb(imMessage); beOperatedMsg.setUpdateDate(new Date());
// 清空消息 替换为其他消息
beOperatedMsg.setContent(JsonUtils.encodeJson(content));
boolean saveOk = this.updateById(beOperatedMsg);
ImMessage eventMessage = MessageBuilder.buildEventMessage(MsgTypeEnum.MSG_DELETE, imApplication,
imClientSender, new ImConversation().setId(beOperatedMsg.getFkConversationId()), JsonUtils.encodeJson(content));
this.saveMessageToDb(eventMessage);
if (saveOk) { if (saveOk) {
ImConversation imConversation = imConversationService.getById(beOperatedMsg.getFkConversationId());
// 查询该会话所有成员 // 查询该会话所有成员
List<ImConversationMembers> membersList = imConversationMembersService.list( List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda() new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, message.getFkConversationId()) .eq(ImConversationMembers::getFkConversationId, beOperatedMsg.getFkConversationId())
.notIn(ImConversationMembers::getFkClientId, imClientSender.getId()) .notIn(ImConversationMembers::getFkClientId, imClientSender.getId())
); );
if (membersList.isEmpty()) { if (membersList.isEmpty()) {
log.info("membersList为空,toConversationId:" + message.getFkConversationId()); log.info("membersList为空,toConversationId:" + beOperatedMsg.getFkConversationId());
throw new BusinessException("该会话成员列表为空"); throw new BusinessException("该会话成员列表为空");
} }
// 删除inbox数据 // 删除inbox数据
imInboxService.remove(new QueryWrapper<ImInbox>().lambda() imInboxService.remove(new QueryWrapper<ImInbox>().lambda()
.eq(ImInbox::getFkMsgId, message.getId())); .eq(ImInbox::getFkMsgId, beOperatedMsg.getId()));
// 遍历发送 // 遍历发送
for (ImConversationMembers member : membersList) { for (ImConversationMembers member : membersList) {
// 封装响应的实体 WsResponse responseModel = buildEventResponse(imConversation.getId(), MsgTypeEnum.MSG_DELETE, eventMessage, imClientSender.getClientId(), msgOwner.getClientId(), beOperatedMsg.getId());
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
BeanUtils.copyProperties(message, imMessageOnlineSend);
imMessageOnlineSend.setType(MsgTypeEnum.MSG_DELETE.getUriCode());
imMessageOnlineSend.setMsgId(message.getId());
imMessageOnlineSend.setCreateTime(new Date());
imMessageOnlineSend.setSender(imClientSender.getClientId());
Map<String, Object> contentMap = Maps.newHashMap();
contentMap.put("msgOwner", msgOwner.getClientId());
imMessageOnlineSend.setContent(contentMap);
imMessageOnlineSend.setConversationId(member.getFkConversationId());
imMessageOnlineSend.setEvent(Boolean.TRUE);
// 向接收方推送
WsResponse<ImMessageOnlineSend> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.ONLINE_EVENT_MSG.getCmdCode());
ApiResult<Boolean> result = ApiResult.result(ApiCode.SUCCESS);
responseModel.setCode(result.getCode());
responseModel.setMsg(result.getMessage());
responseModel.setData(imMessageOnlineSend);
responseModel.setReqId(null);
channelSender.sendMsg(responseModel, member.getFkClientId()); channelSender.sendMsg(responseModel, member.getFkClientId());
} }
return Boolean.TRUE; return Boolean.TRUE;
...@@ -421,12 +383,6 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -421,12 +383,6 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
} }
} }
@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveImMessage(ImMessage imMessage) throws Exception {
return super.save(imMessage);
}
/** /**
* 获取读取人员 * 获取读取人员
* *
...@@ -917,6 +873,33 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes ...@@ -917,6 +873,33 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
} }
} }
private WsResponse buildEventResponse(Long fkConversationId, MsgTypeEnum msgTypeEnum, ImMessage eventMessage, String senderClientId, String msgOwnerClientId, Long beOperatedMsgId) {
ImMessageOnlineSend imMessageOnlineSend = new ImMessageOnlineSend();
BeanUtils.copyProperties(eventMessage, imMessageOnlineSend);
imMessageOnlineSend.setType(msgTypeEnum.getUriCode());
imMessageOnlineSend.setMsgId(eventMessage.getId());
imMessageOnlineSend.setCreateTime(new Date());
imMessageOnlineSend.setSender(senderClientId);
Map<String, Object> contentMap = Maps.newHashMap();
contentMap.put("msgOwner", msgOwnerClientId);
contentMap.put("operator", senderClientId);
contentMap.put("beOperatedMsgId", beOperatedMsgId);
imMessageOnlineSend.setContent(contentMap);
imMessageOnlineSend.setConversationId(fkConversationId);
imMessageOnlineSend.setWithdraw(Boolean.FALSE);
imMessageOnlineSend.setEvent(Boolean.TRUE);
// 向接收方推送
WsResponse<ImMessageOnlineSend> responseModel = new WsResponse<>();
responseModel.setCmd(WsResponseCmdEnum.ONLINE_EVENT_MSG.getCmdCode());
ApiResult<Boolean> result = ApiResult.result(ApiCode.SUCCESS);
responseModel.setCode(result.getCode());
responseModel.setMsg(result.getMessage());
responseModel.setData(imMessageOnlineSend);
responseModel.setReqId(null);
return responseModel;
}
/** /**
* *
* @Author luozh * @Author luozh
......
...@@ -4,17 +4,17 @@ ...@@ -4,17 +4,17 @@
/* /*
Navicat Premium Data Transfer Navicat Premium Data Transfer
Source Server : 121.37.22.224 Source Server : 小虎豆-test
Source Server Type : MySQL Source Server Type : MySQL
Source Server Version : 50730 Source Server Version : 50730
Source Host : 121.37.22.224:3306 Source Host : 124.71.83.11:3306
Source Schema : wecloud_im_feature_cluster Source Schema : wecloud_im
Target Server Type : MySQL Target Server Type : MySQL
Target Server Version : 50730 Target Server Version : 50730
File Encoding : 65001 File Encoding : 65001
Date: 17/03/2022 15:25:44 Date: 19/10/2022 15:52:33
*/ */
SET NAMES utf8mb4; SET NAMES utf8mb4;
...@@ -38,6 +38,11 @@ CREATE TABLE `im_application` ( ...@@ -38,6 +38,11 @@ CREATE TABLE `im_application` (
`firebase_secret` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'firebase推送密钥', `firebase_secret` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'firebase推送密钥',
`repeat_session_status` int(1) NULL DEFAULT 0 COMMENT '是否允许创建重复会话 0不允许 1允许', `repeat_session_status` int(1) NULL DEFAULT 0 COMMENT '是否允许创建重复会话 0不允许 1允许',
`contrast_extended_field_status` int(1) NULL DEFAULT 0 COMMENT '创建会话时对比扩展字段 0不 1是', `contrast_extended_field_status` int(1) NULL DEFAULT 0 COMMENT '创建会话时对比扩展字段 0不 1是',
`online_status_subscribe_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '在线状态订阅地址',
`full_message_subscribe_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '全量消息订阅地址',
`tenant_id` bigint(20) NULL DEFAULT NULL,
`ios_umeng_key` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '友盟推送key',
`ios_umeng_secret` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '友盟推送密钥',
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `app_key`(`app_key`) USING BTREE UNIQUE INDEX `app_key`(`app_key`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '第三方应用表' ROW_FORMAT = Dynamic; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '第三方应用表' ROW_FORMAT = Dynamic;
...@@ -108,13 +113,18 @@ CREATE TABLE `im_conversation` ( ...@@ -108,13 +113,18 @@ CREATE TABLE `im_conversation` (
`last_message` timestamp NULL DEFAULT NULL COMMENT '对话中最后一条消息的发送或接收时间', `last_message` timestamp NULL DEFAULT NULL COMMENT '对话中最后一条消息的发送或接收时间',
`member_count` int(11) NULL DEFAULT NULL COMMENT '群成员数', `member_count` int(11) NULL DEFAULT NULL COMMENT '群成员数',
`chat_type` tinyint(4) NULL DEFAULT NULL COMMENT '是否万人群', `chat_type` tinyint(4) NULL DEFAULT NULL COMMENT '是否万人群',
` member_count` int(11) NULL DEFAULT NULL COMMENT '群成员数',
`fk_appid` bigint(20) NOT NULL COMMENT '应用appid', `fk_appid` bigint(20) NOT NULL COMMENT '应用appid',
`creator` bigint(20) NOT NULL COMMENT '创建者客户端id', `creator` bigint(20) NOT NULL COMMENT '创建者客户端id',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '可选 对话的名字,可为群组命名。', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '可选 对话的名字,可为群组命名。',
`attributes` json NULL COMMENT '可选 自定义属性,供开发者扩展使用。', `attributes` json NULL COMMENT '可选 自定义属性,供开发者扩展使用。',
`system_flag` tinyint(1) NULL DEFAULT NULL COMMENT '可选 对话类型标志,是否是系统对话,后面会说明。', `system_flag` tinyint(1) NULL DEFAULT NULL COMMENT '可选 对话类型标志,是否是系统对话,后面会说明。',
`muted` tinyint(4) NOT NULL DEFAULT 1 COMMENT '禁言开关 1-未禁言 2-禁言', `muted` tinyint(4) NOT NULL DEFAULT 1 COMMENT '禁言开关 1-未禁言 2-禁言',
`is_forbid_add_friend` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '是否禁止群里互加好友0否1是',
`is_forbid_send_pic` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '是否禁止发图片0否1是',
`is_forbid_send_link` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '是否禁止发链接0否1是',
`group_portrait` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '群头像',
`head_portrait` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '群头像',
`is_encrypt` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '是否加密聊天: 1-是 0-否',
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会话表' ROW_FORMAT = Dynamic; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会话表' ROW_FORMAT = Dynamic;
...@@ -136,6 +146,10 @@ CREATE TABLE `im_conversation_members` ( ...@@ -136,6 +146,10 @@ CREATE TABLE `im_conversation_members` (
`role` tinyint(4) NOT NULL DEFAULT 1 COMMENT '角色 1-普通群成员 2-管理员 3-群主', `role` tinyint(4) NOT NULL DEFAULT 1 COMMENT '角色 1-普通群成员 2-管理员 3-群主',
`muted` tinyint(4) NOT NULL DEFAULT 1 COMMENT '禁言开关 1-未禁言 2-禁言', `muted` tinyint(4) NOT NULL DEFAULT 1 COMMENT '禁言开关 1-未禁言 2-禁言',
`client_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户方提供的唯一id', `client_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户方提供的唯一id',
`is_do_not_disturb` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '免打扰开关 0-关闭 1开启',
`is_top` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '置顶开关 0-关闭 1开启',
`join_type_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '进群方式编码',
`join_type_msg` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '进群方式信息',
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`id`) USING BTREE,
INDEX `fk_conversation_id`(`fk_conversation_id`) USING BTREE, INDEX `fk_conversation_id`(`fk_conversation_id`) USING BTREE,
INDEX `fk_client_id`(`fk_client_id`) USING BTREE INDEX `fk_client_id`(`fk_client_id`) USING BTREE
...@@ -193,7 +207,8 @@ CREATE TABLE `im_inbox` ( ...@@ -193,7 +207,8 @@ CREATE TABLE `im_inbox` (
`receiver_msg_status` int(1) NULL DEFAULT NULL COMMENT '0未接收; 1已接收', `receiver_msg_status` int(1) NULL DEFAULT NULL COMMENT '0未接收; 1已接收',
`fk_conversation_id` bigint(20) NOT NULL COMMENT '会话id', `fk_conversation_id` bigint(20) NOT NULL COMMENT '会话id',
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`id`) USING BTREE,
INDEX `getMyOfflineMsg`(`receiver`) USING BTREE INDEX `getMyOfflineMsg`(`receiver`) USING BTREE,
INDEX `idx_create_time`(`create_time`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息收件箱表' ROW_FORMAT = Dynamic; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息收件箱表' ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
...@@ -211,14 +226,14 @@ CREATE TABLE `im_ios_apns` ( ...@@ -211,14 +226,14 @@ CREATE TABLE `im_ios_apns` (
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'apns配置表' ROW_FORMAT = Dynamic; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'apns配置表' ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Table structure for im_message -- Table structure for im_message_new
-- ---------------------------- -- ----------------------------
DROP TABLE IF EXISTS `im_message`; DROP TABLE IF EXISTS `im_message_new`;
CREATE TABLE `im_message` ( CREATE TABLE `im_message_new` (
`id` bigint(20) NOT NULL COMMENT '消息id', `id` bigint(20) NOT NULL COMMENT '消息id',
`fk_conversation_id` bigint(20) NULL DEFAULT NULL COMMENT '会话id', `fk_conversation_id` bigint(20) NULL DEFAULT NULL COMMENT '会话id',
`fk_appid` bigint(20) NOT NULL COMMENT '应用appid', `fk_appid` bigint(20) NOT NULL COMMENT '应用appid',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', `create_time` timestamp(3) NULL DEFAULT NULL COMMENT '创建时间',
`withdraw_time` timestamp NULL DEFAULT NULL COMMENT '撤回时间', `withdraw_time` timestamp NULL DEFAULT NULL COMMENT '撤回时间',
`update_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', `update_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`sender` bigint(20) NULL DEFAULT NULL COMMENT '发送者客户端id', `sender` bigint(20) NULL DEFAULT NULL COMMENT '发送者客户端id',
...@@ -230,8 +245,12 @@ CREATE TABLE `im_message` ( ...@@ -230,8 +245,12 @@ CREATE TABLE `im_message` (
`send_status` int(2) NULL DEFAULT NULL COMMENT '发送状态\n1AVIMMessageStatusSending(发送中)\n2AVIMMessageStatusSent(发送成功)\n3AVIMMessageStatusFailed(失败)', `send_status` int(2) NULL DEFAULT NULL COMMENT '发送状态\n1AVIMMessageStatusSending(发送中)\n2AVIMMessageStatusSent(发送成功)\n3AVIMMessageStatusFailed(失败)',
`msg_type` int(2) NULL DEFAULT NULL COMMENT '消息类型', `msg_type` int(2) NULL DEFAULT NULL COMMENT '消息类型',
`is_delete` tinyint(4) NOT NULL DEFAULT 1 COMMENT '是否删除 1-未删除 2-删除', `is_delete` tinyint(4) NOT NULL DEFAULT 1 COMMENT '是否删除 1-未删除 2-删除',
`receivers` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '接收人,多人用英文逗号分隔-群内指定人员可见场景',
`pre_message_id` bigint(20) NULL DEFAULT NULL COMMENT '前一条消息的id',
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`id`) USING BTREE,
INDEX ```fk_conversation_id```(`fk_conversation_id`) USING BTREE INDEX ```fk_conversation_id```(`fk_conversation_id`) USING BTREE,
INDEX `idx_sender`(`sender`) USING BTREE,
INDEX `idx_create_time`(`create_time`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息存储表' ROW_FORMAT = Dynamic; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '消息存储表' ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
...@@ -241,7 +260,7 @@ DROP TABLE IF EXISTS `im_multi_rtc_room`; ...@@ -241,7 +260,7 @@ DROP TABLE IF EXISTS `im_multi_rtc_room`;
CREATE TABLE `im_multi_rtc_room` ( CREATE TABLE `im_multi_rtc_room` (
`id` bigint(20) NOT NULL COMMENT '主键id', `id` bigint(20) NOT NULL COMMENT '主键id',
`fk_appid` bigint(20) NULL DEFAULT NULL COMMENT '应用appid', `fk_appid` bigint(20) NULL DEFAULT NULL COMMENT '应用appid',
`room_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '房间id', `room_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '房间id(live kit提供)',
`state` tinyint(4) NOT NULL DEFAULT 1 COMMENT '房间状态,1:已创建,2:会议中,3:会议结束', `state` tinyint(4) NOT NULL DEFAULT 1 COMMENT '房间状态,1:已创建,2:会议中,3:会议结束',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
...@@ -261,11 +280,14 @@ CREATE TABLE `im_multi_rtc_room_member` ( ...@@ -261,11 +280,14 @@ CREATE TABLE `im_multi_rtc_room_member` (
`client_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户方提供的唯一id', `client_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户方提供的唯一id',
`state` tinyint(4) NOT NULL DEFAULT 1 COMMENT '房间成员状态,1:呼叫中,2:已接听,3:已拒绝,4:未接听,5:已断开', `state` tinyint(4) NOT NULL DEFAULT 1 COMMENT '房间成员状态,1:呼叫中,2:已接听,3:已拒绝,4:未接听,5:已断开',
`call_time` timestamp NULL DEFAULT NULL COMMENT '呼叫时间', `call_time` timestamp NULL DEFAULT NULL COMMENT '呼叫时间',
`heartbeat_time` timestamp NULL DEFAULT NULL COMMENT '心跳时间',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间', `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_fk_rtc_room_id`(`fk_rtc_room_id`) USING BTREE, INDEX `idx_fk_rtc_room_id`(`fk_rtc_room_id`) USING BTREE,
INDEX `idx_room_id`(`room_id`) USING BTREE, INDEX `idx_room_id`(`room_id`) USING BTREE,
INDEX `idx_call_time_state`(`call_time`, `state`) USING BTREE,
INDEX `idx_heartbeat_time_state`(`heartbeat_time`, `state`) USING BTREE,
INDEX `idx_client_id`(`client_id`) USING BTREE INDEX `idx_client_id`(`client_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '多人音视频房间成员表' ROW_FORMAT = Dynamic; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '多人音视频房间成员表' ROW_FORMAT = Dynamic;
...@@ -303,6 +325,28 @@ CREATE TABLE `im_rtc_log` ( ...@@ -303,6 +325,28 @@ CREATE TABLE `im_rtc_log` (
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'RTC日志记录表' ROW_FORMAT = Dynamic; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'RTC日志记录表' ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Table structure for im_rtc_record
-- ----------------------------
DROP TABLE IF EXISTS `im_rtc_record`;
CREATE TABLE `im_rtc_record` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`fk_appid` bigint(20) NULL DEFAULT NULL COMMENT '应用appid',
`channel_id` bigint(20) NULL DEFAULT NULL COMMENT '频道id',
`from_client_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发起方clientId',
`to_client_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '接收方clientId',
`state` tinyint(4) NOT NULL DEFAULT 1 COMMENT '频道状态,1:音视频发起,2:音视频中,3:音视频结束',
`call_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '音视频类型: 1-video或2-voice',
`start_time` timestamp NULL DEFAULT NULL COMMENT '音视频开始时间',
`end_time` timestamp NULL DEFAULT NULL COMMENT '音视频结束时间',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`offline_times` tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '通话过程中离线次数统计',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_channel_id`(`channel_id`) USING BTREE,
INDEX `idx_state_create_time`(`state`, `create_time`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '单人音视频聊天记录表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for im_user -- Table structure for im_user
-- ---------------------------- -- ----------------------------
DROP TABLE IF EXISTS `im_user`; DROP TABLE IF EXISTS `im_user`;
...@@ -337,7 +381,7 @@ CREATE TABLE `meet_record` ( ...@@ -337,7 +381,7 @@ CREATE TABLE `meet_record` (
`livekit_sid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '流媒体服务短id', `livekit_sid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '流媒体服务短id',
PRIMARY KEY (`id`) USING BTREE, PRIMARY KEY (`id`) USING BTREE,
INDEX `room_id`(`room_id`) USING BTREE INDEX `room_id`(`room_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 241 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1; SET FOREIGN_KEY_CHECKS = 1;
...@@ -345,8 +389,3 @@ SET FOREIGN_KEY_CHECKS = 1; ...@@ -345,8 +389,3 @@ SET FOREIGN_KEY_CHECKS = 1;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment