Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wecloud_im_server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hewei
wecloud_im_server
Commits
a33d6566
Commit
a33d6566
authored
Oct 19, 2022
by
Future
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
撤回删除逻辑调整
parent
03557328
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
141 additions
and
128 deletions
+141
-128
core/src/main/java/com/wecloud/im/service/ImMessageService.java
+0
-9
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
+67
-84
docs/db/20221019-全量.sql
+74
-35
No files found.
core/src/main/java/com/wecloud/im/service/ImMessageService.java
View file @
a33d6566
...
...
@@ -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
...
...
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
View file @
a33d6566
...
...
@@ -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
...
...
docs/db/2022
0317
-全量.sql
→
docs/db/2022
1019
-全量.sql
View file @
a33d6566
...
...
@@ -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 : 12
1.37.22.224
:3306
Source Schema : wecloud_im
_feature_cluster
Source Host : 12
4.71.83.11
:3306
Source Schema : wecloud_im
Target Server Type : MySQL
Target Server Version : 50730
File Encoding : 65001
Date: 1
7/03/2022 15:25:44
Date: 1
9/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
'发送状态
\n
1AVIMMessageStatusSending(发送中)
\n
2AVIMMessageStatusSent(发送成功)
\n
3AVIMMessageStatusFailed(失败)'
,
`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
'发送状态
\n
1AVIMMessageStatusSending(发送中)
\n
2AVIMMessageStatusSent(发送成功)
\n
3AVIMMessageStatusFailed(失败)'
,
`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
=
24
1
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;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment