Commit a33d6566 by Future

撤回删除逻辑调整

parent 03557328
......@@ -127,15 +127,6 @@ public interface ImMessageService extends BaseService<ImMessage> {
OfflineMsgDto getReceivedLastMsgByConversationId(Long clientId, Long conversationId);
/**
* 保存
*
* @param imMessage
* @return
* @throws Exception
*/
boolean saveImMessage(ImMessage imMessage) throws Exception;
/**
* 获取读取人员
* @param param
* @return
......
......@@ -225,47 +225,47 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
ImClient imClientSender = contextService.getImClientIfNotNullOrThrow();
ImApplication imApplication = contextService.getImApplicationIfNotNullOrThrow(imClientSender.getFkAppid());
ImMessage messageById = this.getById(imMsgRecall.getMsgId());
ImMessage beOperatedMsg = this.getById(imMsgRecall.getMsgId());
// 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置
boolean withdrawOther = true;
if (!withdrawOther && !messageById.getSender().equals(imClientSender.getId())) {
if (!withdrawOther && !beOperatedMsg.getSender().equals(imClientSender.getId())) {
throw new BusinessException("不可撤回别人发送的消息");
}
if (messageById.getWithdraw()) {
if (beOperatedMsg.getWithdraw()) {
return Boolean.TRUE;
}
ImClient msgOwner = imClientService.getCacheImClient(messageById.getSender());
ImClient msgOwner = imClientService.getCacheImClient(beOperatedMsg.getSender());
if (msgOwner == null) {
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<>();
content.put("operator", imClientSender.getClientId());
content.put("beOperatedMsgId", imMsgRecall.getMsgId());
content.put("msgOwner", msgOwner.getClientId());
ImMessage imMessage = MessageBuilder.buildEventMessage(MsgTypeEnum.MSG_WITHDRAW, imApplication,
imClientSender, new ImConversation().setId(messageById.getFkConversationId()), JsonUtils.encodeJson(content));
this.saveMessageToDb(imMessage);
// 修改消息体
beOperatedMsg.setWithdraw(Boolean.TRUE);
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) {
ImConversation imConversation = imConversationService.getById(beOperatedMsg.getFkConversationId());
// 查询该会话所有成员
List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, messageById.getFkConversationId())
.eq(ImConversationMembers::getFkConversationId, beOperatedMsg.getFkConversationId())
.notIn(ImConversationMembers::getFkClientId, imClientSender.getId())
);
if (membersList.isEmpty()) {
log.info("membersList为空,toConversationId:" + messageById.getFkConversationId());
log.info("membersList为空,toConversationId:" + beOperatedMsg.getFkConversationId());
throw new BusinessException("该会话成员列表为空");
}
// 删除inbox数据
......@@ -273,28 +273,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
.eq(ImInbox::getFkMsgId, imMsgRecall.getMsgId()));
// 遍历发送
for (ImConversationMembers member : membersList) {
// 封装响应的实体
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);
WsResponse responseModel = buildEventResponse(imConversation.getId(), MsgTypeEnum.MSG_WITHDRAW, eventMessage, imClientSender.getClientId(), msgOwner.getClientId(), beOperatedMsg.getId());
channelSender.sendMsg(responseModel, member.getFkClientId());
// 异步推送系统通知消息
......@@ -321,69 +300,52 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
if (CollectionUtils.isEmpty(imMessageList)) {
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("不可删除别人发送的消息");
}
if (message.getIsDelete() == 2) {
if (beOperatedMsg.getIsDelete() == 2) {
continue;
}
// 修改消息体
message.setIsDelete(2);
message.setUpdateDate(new Date());
boolean saveOk = this.updateById(message);
ImClient msgOwner = imClientService.getCacheImClient(message.getSender());
ImClient msgOwner = imClientService.getCacheImClient(beOperatedMsg.getSender());
if (msgOwner == null) {
throw new BusinessException("未查找到消息发送者");
}
// 组装消息
Map<String, Object> content = new HashMap<>();
content.put("operator", imClientSender.getClientId());
content.put("beOperatedMsgId", message.getId());
content.put("beOperatedMsgId", beOperatedMsg.getId());
content.put("msgOwner", msgOwner.getClientId());
ImMessage imMessage = MessageBuilder.buildEventMessage(MsgTypeEnum.MSG_DELETE, imApplication,
imClientSender, new ImConversation().setId(message.getFkConversationId()), JsonUtils.encodeJson(content));
this.saveMessageToDb(imMessage);
// 修改消息体
beOperatedMsg.setIsDelete(2);
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) {
ImConversation imConversation = imConversationService.getById(beOperatedMsg.getFkConversationId());
// 查询该会话所有成员
List<ImConversationMembers> membersList = imConversationMembersService.list(
new QueryWrapper<ImConversationMembers>().lambda()
.eq(ImConversationMembers::getFkConversationId, message.getFkConversationId())
.eq(ImConversationMembers::getFkConversationId, beOperatedMsg.getFkConversationId())
.notIn(ImConversationMembers::getFkClientId, imClientSender.getId())
);
if (membersList.isEmpty()) {
log.info("membersList为空,toConversationId:" + message.getFkConversationId());
log.info("membersList为空,toConversationId:" + beOperatedMsg.getFkConversationId());
throw new BusinessException("该会话成员列表为空");
}
// 删除inbox数据
imInboxService.remove(new QueryWrapper<ImInbox>().lambda()
.eq(ImInbox::getFkMsgId, message.getId()));
.eq(ImInbox::getFkMsgId, beOperatedMsg.getId()));
// 遍历发送
for (ImConversationMembers member : membersList) {
// 封装响应的实体
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);
WsResponse responseModel = buildEventResponse(imConversation.getId(), MsgTypeEnum.MSG_DELETE, eventMessage, imClientSender.getClientId(), msgOwner.getClientId(), beOperatedMsg.getId());
channelSender.sendMsg(responseModel, member.getFkClientId());
}
return Boolean.TRUE;
......@@ -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
}
}
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
......
......@@ -4,17 +4,17 @@
/*
Navicat Premium Data Transfer
Source Server : 121.37.22.224
Source Server : 小虎豆-test
Source Server Type : MySQL
Source Server Version : 50730
Source Host : 121.37.22.224:3306
Source Schema : wecloud_im_feature_cluster
Source Host : 124.71.83.11:3306
Source Schema : wecloud_im
Target Server Type : MySQL
Target Server Version : 50730
File Encoding : 65001
Date: 17/03/2022 15:25:44
Date: 19/10/2022 15:52:33
*/
SET NAMES utf8mb4;
......@@ -38,6 +38,11 @@ CREATE TABLE `im_application` (
`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允许',
`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,
UNIQUE INDEX `app_key`(`app_key`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '第三方应用表' ROW_FORMAT = Dynamic;
......@@ -108,13 +113,18 @@ CREATE TABLE `im_conversation` (
`last_message` timestamp NULL DEFAULT NULL COMMENT '对话中最后一条消息的发送或接收时间',
`member_count` int(11) 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',
`creator` bigint(20) NOT NULL COMMENT '创建者客户端id',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '可选 对话的名字,可为群组命名。',
`attributes` json NULL COMMENT '可选 自定义属性,供开发者扩展使用。',
`system_flag` tinyint(1) NULL DEFAULT NULL COMMENT '可选 对话类型标志,是否是系统对话,后面会说明。',
`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
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会话表' ROW_FORMAT = Dynamic;
......@@ -136,6 +146,10 @@ CREATE TABLE `im_conversation_members` (
`role` tinyint(4) NOT NULL DEFAULT 1 COMMENT '角色 1-普通群成员 2-管理员 3-群主',
`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',
`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,
INDEX `fk_conversation_id`(`fk_conversation_id`) USING BTREE,
INDEX `fk_client_id`(`fk_client_id`) USING BTREE
......@@ -193,7 +207,8 @@ CREATE TABLE `im_inbox` (
`receiver_msg_status` int(1) NULL DEFAULT NULL COMMENT '0未接收; 1已接收',
`fk_conversation_id` bigint(20) NOT NULL COMMENT '会话id',
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;
-- ----------------------------
......@@ -211,27 +226,31 @@ CREATE TABLE `im_ios_apns` (
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'apns配置表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for im_message
-- ----------------------------
DROP TABLE IF EXISTS `im_message`;
CREATE TABLE `im_message` (
`id` bigint(20) NOT NULL COMMENT '消息id',
`fk_conversation_id` bigint(20) NULL DEFAULT NULL COMMENT '会话id',
`fk_appid` bigint(20) NOT NULL COMMENT '应用appid',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`withdraw_time` timestamp NULL DEFAULT NULL COMMENT '撤回时间',
`update_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`sender` bigint(20) NULL DEFAULT NULL COMMENT '发送者客户端id',
`content` json NULL COMMENT '内容',
`withdraw` tinyint(1) NULL DEFAULT 0 COMMENT '0未撤回; 1已撤回',
`event` tinyint(1) NULL DEFAULT 0 COMMENT '0非事件; 1为事件',
`system_flag` tinyint(1) NULL DEFAULT 0 COMMENT '0非系统通知; 1为系统通知',
`at` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'at他人,传入客户端id数组',
`send_status` int(2) NULL DEFAULT NULL COMMENT '发送状态\n1AVIMMessageStatusSending(发送中)\n2AVIMMessageStatusSent(发送成功)\n3AVIMMessageStatusFailed(失败)',
`msg_type` int(2) NULL DEFAULT NULL COMMENT '消息类型',
`is_delete` tinyint(4) NOT NULL DEFAULT 1 COMMENT '是否删除 1-未删除 2-删除',
PRIMARY KEY (`id`) USING BTREE,
INDEX ```fk_conversation_id```(`fk_conversation_id`) USING BTREE
-- Table structure for im_message_new
-- ----------------------------
DROP TABLE IF EXISTS `im_message_new`;
CREATE TABLE `im_message_new` (
`id` bigint(20) NOT NULL COMMENT '消息id',
`fk_conversation_id` bigint(20) NULL DEFAULT NULL COMMENT '会话id',
`fk_appid` bigint(20) NOT NULL COMMENT '应用appid',
`create_time` timestamp(3) NULL DEFAULT NULL COMMENT '创建时间',
`withdraw_time` timestamp NULL DEFAULT NULL COMMENT '撤回时间',
`update_date` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`sender` bigint(20) NULL DEFAULT NULL COMMENT '发送者客户端id',
`content` json NULL COMMENT '内容',
`withdraw` tinyint(1) NULL DEFAULT 0 COMMENT '0未撤回; 1已撤回',
`event` tinyint(1) NULL DEFAULT 0 COMMENT '0非事件; 1为事件',
`system_flag` tinyint(1) NULL DEFAULT 0 COMMENT '0非系统通知; 1为系统通知',
`at` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'at他人,传入客户端id数组',
`send_status` int(2) NULL DEFAULT NULL COMMENT '发送状态\n1AVIMMessageStatusSending(发送中)\n2AVIMMessageStatusSent(发送成功)\n3AVIMMessageStatusFailed(失败)',
`msg_type` int(2) NULL DEFAULT NULL COMMENT '消息类型',
`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,
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;
-- ----------------------------
......@@ -241,7 +260,7 @@ DROP TABLE IF EXISTS `im_multi_rtc_room`;
CREATE TABLE `im_multi_rtc_room` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`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:会议结束',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
......@@ -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',
`state` tinyint(4) NOT NULL DEFAULT 1 COMMENT '房间成员状态,1:呼叫中,2:已接听,3:已拒绝,4:未接听,5:已断开',
`call_time` timestamp NULL DEFAULT NULL COMMENT '呼叫时间',
`heartbeat_time` timestamp NULL DEFAULT NULL COMMENT '心跳时间',
`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`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_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
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '多人音视频房间成员表' ROW_FORMAT = Dynamic;
......@@ -303,6 +325,28 @@ CREATE TABLE `im_rtc_log` (
) 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
-- ----------------------------
DROP TABLE IF EXISTS `im_user`;
......@@ -337,7 +381,7 @@ CREATE TABLE `meet_record` (
`livekit_sid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '流媒体服务短id',
PRIMARY KEY (`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;
......@@ -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