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
fd8a084b
Commit
fd8a084b
authored
Oct 21, 2022
by
陈前凌
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/xiaohudou_20220427' into xiaohudou_20220427
parents
33a88a98
8ea108dc
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
128 additions
and
145 deletions
+128
-145
core/src/main/java/com/wecloud/im/netty/core/ChannelInboundHandler.java
+5
-2
core/src/main/java/com/wecloud/im/service/ImMessageService.java
+0
-6
core/src/main/java/com/wecloud/im/service/SaveMessageService.java
+86
-0
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
+10
-10
core/src/main/java/com/wecloud/im/service/impl/ImGroupServiceImpl.java
+9
-9
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
+13
-101
core/src/main/java/com/wecloud/im/ws/manager/ChannelManager.java
+1
-1
core/src/main/resources/mapper/ImMessageMapper.xml
+4
-16
No files found.
core/src/main/java/com/wecloud/im/netty/core/ChannelInboundHandler.java
View file @
fd8a084b
...
@@ -67,15 +67,18 @@ public class ChannelInboundHandler extends ChannelInboundHandlerAdapter {
...
@@ -67,15 +67,18 @@ public class ChannelInboundHandler extends ChannelInboundHandlerAdapter {
log
.
info
(
"连接的客户端地址:{}"
,
ctx
.
channel
().
remoteAddress
());
log
.
info
(
"连接的客户端地址:{}"
,
ctx
.
channel
().
remoteAddress
());
}
}
ctx
.
writeAndFlush
(
"客户端"
+
InetAddress
.
getLocalHost
().
getHostName
()
+
"成功与服务端建立连接! "
);
ctx
.
writeAndFlush
(
"客户端"
+
InetAddress
.
getLocalHost
().
getHostName
()
+
"成功与服务端建立连接! "
);
log
.
info
(
"连接成功 {},clientId {}"
,
ctx
.
channel
().
remoteAddress
(),
ctx
.
channel
().
attr
(
ChannelManager
.
CLIENT_ID
).
get
());
super
.
channelActive
(
ctx
);
super
.
channelActive
(
ctx
);
}
}
@Override
@Override
public
void
channelInactive
(
ChannelHandlerContext
ctx
)
throws
Exception
{
public
void
channelInactive
(
ChannelHandlerContext
ctx
)
throws
Exception
{
super
.
channelInactive
(
ctx
);
Long
clientId
=
ctx
.
channel
().
attr
(
ChannelManager
.
CLIENT_ID
).
get
();
Long
clientId
=
ctx
.
channel
().
attr
(
ChannelManager
.
CLIENT_ID
).
get
();
log
.
info
(
"触发channelInactive方法 clientId {}"
,
clientId
);
log
.
info
(
"触发channelInactive方法 clientId {}"
,
clientId
);
// ctx.channel().close();
super
.
channelInactive
(
ctx
);
if
(
clientId
==
null
)
{
ctx
.
channel
().
close
();
}
}
}
@Override
@Override
public
void
exceptionCaught
(
ChannelHandlerContext
ctx
,
Throwable
cause
)
public
void
exceptionCaught
(
ChannelHandlerContext
ctx
,
Throwable
cause
)
...
...
core/src/main/java/com/wecloud/im/service/ImMessageService.java
View file @
fd8a084b
...
@@ -180,10 +180,4 @@ public interface ImMessageService extends BaseService<ImMessage> {
...
@@ -180,10 +180,4 @@ public interface ImMessageService extends BaseService<ImMessage> {
List
<
WeCloudMessageVo
>
syncListMessage
(
SyncListMessageParam
param
);
List
<
WeCloudMessageVo
>
syncListMessage
(
SyncListMessageParam
param
);
/**
* 保存消息到数据库
* @param imMessage
*/
void
saveMessageToDb
(
ImMessage
imMessage
);
}
}
core/src/main/java/com/wecloud/im/service/SaveMessageService.java
0 → 100644
View file @
fd8a084b
package
com
.
wecloud
.
im
.
service
;
import
com.baomidou.lock.annotation.Lock4j
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImConversationMembers
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.param.ImConversationQueryVo
;
import
com.wecloud.im.ws.utils.RedisUtils
;
import
com.wecloud.utils.SnowflakeUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cache.Cache
;
import
org.springframework.cache.CacheManager
;
import
org.springframework.stereotype.Service
;
import
java.time.Duration
;
import
java.util.Date
;
import
java.util.List
;
/**
* @Author Future
* @Date 2022/8/24 17:18
* @Description 本地缓存服务
*/
@Slf4j
@Service
public
class
SaveMessageService
{
private
static
final
String
LAST_MSG_PREFIX
=
"last_msg_"
;
@Autowired
private
ImMessageService
imMessageService
;
@Autowired
private
RedisUtils
redisUtils
;
/**
* 持久化消息到数据库并更新相关缓存
* expire 锁过期时间 防止死锁
*
* @param imMessage
*/
@Lock4j
(
keys
=
{
"#imMessage.fkConversationId"
},
expire
=
3000
,
acquireTimeout
=
1000
)
public
void
saveMessageToDb
(
ImMessage
imMessage
)
{
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setCreateTime
(
new
Date
());
this
.
setLastMessageIdAndFreshCash
(
imMessage
);
imMessageService
.
save
(
imMessage
);
}
/**
* 查找会话的最新一条消息
*
* @param message
* @return
*/
private
void
setLastMessageIdAndFreshCash
(
ImMessage
message
)
{
try
{
// 执行业务方法
String
key
=
LAST_MSG_PREFIX
+
message
.
getFkConversationId
();
String
messageId
=
redisUtils
.
getKey
(
key
);
if
(
StringUtils
.
isNotBlank
(
messageId
))
{
// 将Redis中最新的messageId存入
message
.
setPreMessageId
(
Long
.
valueOf
(
messageId
));
}
else
{
// 落库查
ImMessage
preMessage
=
imMessageService
.
getOne
(
new
QueryWrapper
<
ImMessage
>().
lambda
()
.
eq
(
ImMessage:
:
getFkConversationId
,
message
.
getFkConversationId
())
.
orderByDesc
(
ImMessage:
:
getId
)
.
last
(
"limit 1"
)
);
if
(
preMessage
!=
null
)
{
message
.
setPreMessageId
(
preMessage
.
getId
());
}
}
redisUtils
.
addKey
(
key
,
message
.
getId
().
toString
(),
Duration
.
ofMinutes
(
30
));
}
catch
(
Exception
e
)
{
log
.
info
(
"获取会话最后一条消息异常 "
,
e
);
}
}
}
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
View file @
fd8a084b
...
@@ -62,6 +62,7 @@ import com.wecloud.im.service.ImConversationMembersService;
...
@@ -62,6 +62,7 @@ import com.wecloud.im.service.ImConversationMembersService;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.service.ImInboxService
;
import
com.wecloud.im.service.ImInboxService
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.service.SaveMessageService
;
import
com.wecloud.im.vo.ChatRoomMemberVo
;
import
com.wecloud.im.vo.ChatRoomMemberVo
;
import
com.wecloud.im.vo.ConversationCountVo
;
import
com.wecloud.im.vo.ConversationCountVo
;
import
com.wecloud.im.vo.ConversationMemberVo
;
import
com.wecloud.im.vo.ConversationMemberVo
;
...
@@ -162,6 +163,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -162,6 +163,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Resource
@Resource
private
EhcacheService
ehcacheService
;
private
EhcacheService
ehcacheService
;
@Autowired
private
SaveMessageService
saveMessageService
;
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ImConversationCreateVo
createImConversation
(
ImConversationCreate
imConversationCreate
)
{
public
ImConversationCreateVo
createImConversation
(
ImConversationCreate
imConversationCreate
)
{
...
@@ -341,7 +345,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -341,7 +345,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
content
.
put
(
"operator"
,
imClientSender
.
getClientId
());
//操作的client ID
content
.
put
(
"operator"
,
imClientSender
.
getClientId
());
//操作的client ID
content
.
put
(
"passivityOperator"
,
clientToConversation
.
getClientId
());
//被操作的client ID
content
.
put
(
"passivityOperator"
,
clientToConversation
.
getClientId
());
//被操作的client ID
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
,
imApplication
,
createClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
,
imApplication
,
createClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
boolean
save
=
imMessageService
.
save
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
// 发送给在群内的成员
// 发送给在群内的成员
sendMsgToMembers
(
imConversation
,
membersList
,
createClient
,
imMessage
,
content
);
sendMsgToMembers
(
imConversation
,
membersList
,
createClient
,
imMessage
,
content
);
// 发送给被邀请人
// 发送给被邀请人
...
@@ -403,7 +407,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -403,7 +407,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
content
.
put
(
"passivityOperator"
,
clientToBeRemove
.
getClientId
());
//被操作的client ID
content
.
put
(
"passivityOperator"
,
clientToBeRemove
.
getClientId
());
//被操作的client ID
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
REMOVE_CLIENT_CONVERSATION
,
imApplication
,
createClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
REMOVE_CLIENT_CONVERSATION
,
imApplication
,
createClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
imMessageService
.
save
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
membersList
.
removeIf
(
e
->
e
.
getId
().
equals
(
members
.
getId
()));
membersList
.
removeIf
(
e
->
e
.
getId
().
equals
(
members
.
getId
()));
...
@@ -451,7 +455,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -451,7 +455,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
content
.
put
(
"operator"
,
currentClient
.
getClientId
());
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_DISBAND
,
imApplication
,
currentClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_DISBAND
,
imApplication
,
currentClient
,
imConversation
,
JsonUtils
.
encodeJson
(
content
));
imMessageService
.
save
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
sendMsgToMembers
(
imConversation
,
membersList
,
currentClient
,
imMessage
,
content
);
sendMsgToMembers
(
imConversation
,
membersList
,
currentClient
,
imMessage
,
content
);
}
}
...
@@ -527,11 +531,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -527,11 +531,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 生成消息id
// 生成消息id
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
LEAVE_CONVERSATION
,
imApplication
,
currentClient
,
imConversation
,
""
);
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
LEAVE_CONVERSATION
,
imApplication
,
currentClient
,
imConversation
,
""
);
// 保存消息至消息表
// 保存消息至消息表
boolean
save
=
imMessageService
.
save
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
if
(!
save
)
{
throw
new
BusinessException
(
"退出群聊错误"
);
}
sendMsgToMembers
(
imConversation
,
membersList
,
currentClient
,
imMessage
,
null
);
sendMsgToMembers
(
imConversation
,
membersList
,
currentClient
,
imMessage
,
null
);
// 群主退出 转移给下一个人
// 群主退出 转移给下一个人
if
(
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
members
.
getRole
()))
{
if
(
GroupRoleEnum
.
OWNER
.
getCode
().
equals
(
members
.
getRole
()))
{
...
@@ -1022,7 +1022,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1022,7 +1022,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
if
(!
membersList
.
isEmpty
())
{
if
(!
membersList
.
isEmpty
())
{
// 保存事件消息
// 保存事件消息
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
msgType
,
application
,
operatorClient
,
group
,
JsonUtils
.
encodeJson
(
content
));
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
msgType
,
application
,
operatorClient
,
group
,
JsonUtils
.
encodeJson
(
content
));
imMessageService
.
save
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
// 发送消息至群成员
// 发送消息至群成员
sendMsgToMembers
(
group
,
membersList
,
operatorClient
,
imMessage
,
content
);
sendMsgToMembers
(
group
,
membersList
,
operatorClient
,
imMessage
,
content
);
}
}
...
@@ -1541,7 +1541,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
...
@@ -1541,7 +1541,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
content
.
put
(
"operator"
,
creator
.
getClientId
());
//操作的client ID
content
.
put
(
"operator"
,
creator
.
getClientId
());
//操作的client ID
content
.
put
(
"passivityOperator"
,
member
.
getClientId
());
//被操作的client ID
content
.
put
(
"passivityOperator"
,
member
.
getClientId
());
//被操作的client ID
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CLIENT_JOIN_NEW_CONVERSATION
,
application
,
creator
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CLIENT_JOIN_NEW_CONVERSATION
,
application
,
creator
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
imMessageService
.
save
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
// 投递消息
// 投递消息
couriers
.
deliver
(
imMessage
,
content
,
creator
,
member
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
couriers
.
deliver
(
imMessage
,
content
,
creator
,
member
,
WsResponseCmdEnum
.
CONVERSATION_EVENT_MSG
);
}
}
...
...
core/src/main/java/com/wecloud/im/service/impl/ImGroupServiceImpl.java
View file @
fd8a084b
package
com
.
wecloud
.
im
.
service
.
impl
;
package
com
.
wecloud
.
im
.
service
.
impl
;
import
com.wecloud.im.service.SaveMessageService
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.geekidea.springbootplus.framework.shiro.util.SecurityUtils
;
import
io.geekidea.springbootplus.framework.shiro.util.SecurityUtils
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
...
@@ -12,6 +13,7 @@ import java.util.List;
...
@@ -12,6 +13,7 @@ import java.util.List;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
...
@@ -86,10 +88,8 @@ public class ImGroupServiceImpl implements ImGroupService {
...
@@ -86,10 +88,8 @@ public class ImGroupServiceImpl implements ImGroupService {
*/
*/
private
final
ImConversationMapper
imConversationMapper
;
private
final
ImConversationMapper
imConversationMapper
;
/**
@Autowired
* 消息服务
private
SaveMessageService
saveMessageService
;
*/
private
final
ImMessageService
imMessageService
;
@Override
@Override
public
Long
createGroup
(
String
creatorClientId
,
String
groupName
,
List
<
String
>
memberIds
)
{
public
Long
createGroup
(
String
creatorClientId
,
String
groupName
,
List
<
String
>
memberIds
)
{
...
@@ -163,7 +163,7 @@ public class ImGroupServiceImpl implements ImGroupService {
...
@@ -163,7 +163,7 @@ public class ImGroupServiceImpl implements ImGroupService {
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_DISBAND
,
application
,
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_DISBAND
,
application
,
operator
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
operator
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
// 保存消息至消息表
imMessageService
.
save
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
conversationService
.
sendMsgToMembers
(
conversation
,
membersList
,
operator
,
imMessage
,
content
);
conversationService
.
sendMsgToMembers
(
conversation
,
membersList
,
operator
,
imMessage
,
content
);
return
true
;
return
true
;
...
@@ -236,7 +236,7 @@ public class ImGroupServiceImpl implements ImGroupService {
...
@@ -236,7 +236,7 @@ public class ImGroupServiceImpl implements ImGroupService {
content
.
put
(
"passivityOperator"
,
newMember
.
getClientId
());
content
.
put
(
"passivityOperator"
,
newMember
.
getClientId
());
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
,
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
INVITE_CLIENT_JOIN_CONVERSATION
,
imApplication
,
inviter
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
imApplication
,
inviter
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
boolean
save
=
imMessageService
.
save
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
// 发送给在群内的成员
// 发送给在群内的成员
conversationService
.
sendMsgToMembers
(
conversation
,
oldMembers
,
inviter
,
imMessage
,
content
);
conversationService
.
sendMsgToMembers
(
conversation
,
oldMembers
,
inviter
,
imMessage
,
content
);
// 发送给被邀请人
// 发送给被邀请人
...
@@ -286,7 +286,7 @@ public class ImGroupServiceImpl implements ImGroupService {
...
@@ -286,7 +286,7 @@ public class ImGroupServiceImpl implements ImGroupService {
content
.
put
(
"operator"
,
operator
.
getClientId
());
content
.
put
(
"operator"
,
operator
.
getClientId
());
// 自己主动退出
// 自己主动退出
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
LEAVE_CONVERSATION
,
imApplication
,
operator
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
LEAVE_CONVERSATION
,
imApplication
,
operator
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
imMessageService
.
save
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
// 发送给在群内的成员
// 发送给在群内的成员
conversationService
.
sendMsgToMembers
(
conversation
,
membersList
,
operator
,
imMessage
,
content
);
conversationService
.
sendMsgToMembers
(
conversation
,
membersList
,
operator
,
imMessage
,
content
);
}
else
{
}
else
{
...
@@ -294,7 +294,7 @@ public class ImGroupServiceImpl implements ImGroupService {
...
@@ -294,7 +294,7 @@ public class ImGroupServiceImpl implements ImGroupService {
// 被操作的client ID
// 被操作的client ID
content
.
put
(
"passivityOperator"
,
members
.
getClientId
());
content
.
put
(
"passivityOperator"
,
members
.
getClientId
());
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
REMOVE_CLIENT_CONVERSATION
,
imApplication
,
operator
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
REMOVE_CLIENT_CONVERSATION
,
imApplication
,
operator
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
imMessageService
.
save
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
// 发送给在群内的成员
// 发送给在群内的成员
conversationService
.
sendMsgToMembers
(
conversation
,
membersList
,
operator
,
imMessage
,
content
);
conversationService
.
sendMsgToMembers
(
conversation
,
membersList
,
operator
,
imMessage
,
content
);
}
}
...
@@ -394,7 +394,7 @@ public class ImGroupServiceImpl implements ImGroupService {
...
@@ -394,7 +394,7 @@ public class ImGroupServiceImpl implements ImGroupService {
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
Map
<
String
,
Object
>
content
=
new
HashMap
<>();
content
.
put
(
"operator"
,
newGroupOwner
.
getClientId
());
content
.
put
(
"operator"
,
newGroupOwner
.
getClientId
());
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_NEW_CREATOR
,
imApplication
,
newGroupOwnerClient
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
ImMessage
imMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
CONVERSATION_NEW_CREATOR
,
imApplication
,
newGroupOwnerClient
,
conversation
,
JsonUtils
.
encodeJson
(
content
));
imMessageService
.
save
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
// 发送给在群内的成员
// 发送给在群内的成员
List
<
ImConversationMembers
>
existMemberList
=
List
<
ImConversationMembers
>
existMemberList
=
conversationMembersService
.
list
(
Wrappers
.<
ImConversationMembers
>
lambdaQuery
()
conversationMembersService
.
list
(
Wrappers
.<
ImConversationMembers
>
lambdaQuery
()
...
...
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
View file @
fd8a084b
package
com
.
wecloud
.
im
.
service
.
impl
;
package
com
.
wecloud
.
im
.
service
.
impl
;
import
com.wecloud.im.entity.ImClientBlacklist
;
import
com.wecloud.im.param.ImConversationQueryVo
;
import
com.wecloud.im.param.SyncListMessageParam
;
import
com.wecloud.im.param.WeCloudMessageVo
;
import
com.wecloud.im.post.MessageBuilder
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
io.geekidea.springbootplus.framework.core.pagination.PageInfo
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
io.geekidea.springbootplus.framework.shiro.util.SecurityUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Set
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.ApplicationEventPublisher
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.lock.annotation.Lock4j
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.OrderItem
;
import
com.baomidou.mybatisplus.core.metadata.OrderItem
;
...
@@ -69,6 +32,8 @@ import com.wecloud.im.param.PrivateChatMessageParam;
...
@@ -69,6 +32,8 @@ import com.wecloud.im.param.PrivateChatMessageParam;
import
com.wecloud.im.param.PrivateChatStatusMessageParam
;
import
com.wecloud.im.param.PrivateChatStatusMessageParam
;
import
com.wecloud.im.param.PushExtParam
;
import
com.wecloud.im.param.PushExtParam
;
import
com.wecloud.im.param.SingleUserNotificationParam
;
import
com.wecloud.im.param.SingleUserNotificationParam
;
import
com.wecloud.im.param.SyncListMessageParam
;
import
com.wecloud.im.param.WeCloudMessageVo
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgSendToOnlineClient
;
import
com.wecloud.im.param.add.ImMsgSendToOnlineClient
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
...
@@ -82,6 +47,7 @@ import com.wecloud.im.service.ImConversationMembersService;
...
@@ -82,6 +47,7 @@ import com.wecloud.im.service.ImConversationMembersService;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.service.ImInboxService
;
import
com.wecloud.im.service.ImInboxService
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.service.SaveMessageService
;
import
com.wecloud.im.thousandchat.service.ThousandChatService
;
import
com.wecloud.im.thousandchat.service.ThousandChatService
;
import
com.wecloud.im.vo.ImMessageOfflineListVo
;
import
com.wecloud.im.vo.ImMessageOfflineListVo
;
import
com.wecloud.im.vo.OfflineMsgDto
;
import
com.wecloud.im.vo.OfflineMsgDto
;
...
@@ -91,8 +57,6 @@ import com.wecloud.im.ws.enums.MsgTypeEnum;
...
@@ -91,8 +57,6 @@ import com.wecloud.im.ws.enums.MsgTypeEnum;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
import
com.wecloud.im.ws.model.WsResponse
;
import
com.wecloud.im.ws.model.WsResponse
;
import
com.wecloud.im.ws.model.request.PushVO
;
import
com.wecloud.im.ws.model.request.PushVO
;
import
com.wecloud.im.ws.model.request.ReceiveDataVO
;
import
com.wecloud.im.ws.model.request.ReceiveVO
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.im.ws.utils.RedisUtils
;
import
com.wecloud.im.ws.utils.RedisUtils
;
import
com.wecloud.pushserver.client.model.constant.MqConstant
;
import
com.wecloud.pushserver.client.model.constant.MqConstant
;
...
@@ -115,7 +79,6 @@ import org.springframework.context.ApplicationEventPublisher;
...
@@ -115,7 +79,6 @@ import org.springframework.context.ApplicationEventPublisher;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.time.Duration
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.Collections
;
...
@@ -124,6 +87,7 @@ import java.util.HashMap;
...
@@ -124,6 +87,7 @@ import java.util.HashMap;
import
java.util.HashSet
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Set
;
import
java.util.Set
;
import
java.util.function.Function
;
import
java.util.function.Function
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
...
@@ -139,8 +103,6 @@ import java.util.stream.Collectors;
...
@@ -139,8 +103,6 @@ import java.util.stream.Collectors;
@Service
@Service
public
class
ImMessageServiceImpl
extends
BaseServiceImpl
<
ImMessageMapper
,
ImMessage
>
implements
ImMessageService
{
public
class
ImMessageServiceImpl
extends
BaseServiceImpl
<
ImMessageMapper
,
ImMessage
>
implements
ImMessageService
{
private
static
final
String
LAST_MSG_PREFIX
=
"last_msg_"
;
@Autowired
@Autowired
private
ImMessageMapper
imMessageMapper
;
private
ImMessageMapper
imMessageMapper
;
...
@@ -175,7 +137,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -175,7 +137,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
private
ApplicationEventPublisher
eventPublisher
;
private
ApplicationEventPublisher
eventPublisher
;
@Autowired
@Autowired
private
RedisUtils
redisUtils
;
private
SaveMessageService
saveMessageService
;
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
@@ -248,10 +210,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -248,10 +210,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessage
.
setMsgType
(
data
.
getType
());
imMessage
.
setMsgType
(
data
.
getType
());
imMessage
.
setAt
(
data
.
getAt
());
imMessage
.
setAt
(
data
.
getAt
());
imMessage
.
setFkConversationId
(
data
.
getToConversation
());
imMessage
.
setFkConversationId
(
data
.
getToConversation
());
this
.
saveMessageToDb
(
imMessage
);
saveMessageService
.
saveMessageToDb
(
imMessage
);
// eventPublisher.publishEvent(new ClientSendMessageEvent(client.getFkAppid(), imMessage));
return
imMessage
;
return
imMessage
;
}
}
...
@@ -290,7 +249,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -290,7 +249,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
ImMessage
eventMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
MSG_WITHDRAW
,
imApplication
,
ImMessage
eventMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
MSG_WITHDRAW
,
imApplication
,
imClientSender
,
new
ImConversation
().
setId
(
beOperatedMsg
.
getFkConversationId
()),
JsonUtils
.
encodeJson
(
content
));
imClientSender
,
new
ImConversation
().
setId
(
beOperatedMsg
.
getFkConversationId
()),
JsonUtils
.
encodeJson
(
content
));
this
.
saveMessageToDb
(
eventMessage
);
saveMessageService
.
saveMessageToDb
(
eventMessage
);
if
(
saveOk
)
{
if
(
saveOk
)
{
ImConversation
imConversation
=
imConversationService
.
getById
(
beOperatedMsg
.
getFkConversationId
());
ImConversation
imConversation
=
imConversationService
.
getById
(
beOperatedMsg
.
getFkConversationId
());
...
@@ -362,7 +321,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -362,7 +321,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
ImMessage
eventMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
MSG_DELETE
,
imApplication
,
ImMessage
eventMessage
=
MessageBuilder
.
buildEventMessage
(
MsgTypeEnum
.
MSG_DELETE
,
imApplication
,
imClientSender
,
new
ImConversation
().
setId
(
beOperatedMsg
.
getFkConversationId
()),
JsonUtils
.
encodeJson
(
content
));
imClientSender
,
new
ImConversation
().
setId
(
beOperatedMsg
.
getFkConversationId
()),
JsonUtils
.
encodeJson
(
content
));
this
.
saveMessageToDb
(
eventMessage
);
saveMessageService
.
saveMessageToDb
(
eventMessage
);
if
(
saveOk
)
{
if
(
saveOk
)
{
ImConversation
imConversation
=
imConversationService
.
getById
(
beOperatedMsg
.
getFkConversationId
());
ImConversation
imConversation
=
imConversationService
.
getById
(
beOperatedMsg
.
getFkConversationId
());
...
@@ -653,7 +612,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -653,7 +612,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
ImMessage
message
=
assembleImMessage
(
appId
,
sender
,
conversation
.
getId
(),
param
.
getMessageType
(),
false
,
ImMessage
message
=
assembleImMessage
(
appId
,
sender
,
conversation
.
getId
(),
param
.
getMessageType
(),
false
,
JSONObject
.
toJSONString
(
param
.
getContent
()));
JSONObject
.
toJSONString
(
param
.
getContent
()));
// 持久化
// 持久化
this
.
saveMessageToDb
(
message
);
saveMessageService
.
saveMessageToDb
(
message
);
// 拼装发送消息体
// 拼装发送消息体
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
message
,
sender
,
appId
);
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
message
,
sender
,
appId
);
// 入库 保存收件箱
// 入库 保存收件箱
...
@@ -751,7 +710,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -751,7 +710,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
}
}
}
}
// 持久化
// 持久化
this
.
saveMessageToDb
(
message
);
saveMessageService
.
saveMessageToDb
(
message
);
// 拼装发送消息体
// 拼装发送消息体
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
message
,
sender
,
appId
);
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
message
,
sender
,
appId
);
...
@@ -792,7 +751,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -792,7 +751,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
// 组装消息
// 组装消息
ImMessage
message
=
assembleImMessage
(
appId
,
sender
,
conversation
.
getId
(),
param
.
getMessageType
(),
false
,
JSONObject
.
toJSONString
(
param
.
getContent
()));
ImMessage
message
=
assembleImMessage
(
appId
,
sender
,
conversation
.
getId
(),
param
.
getMessageType
(),
false
,
JSONObject
.
toJSONString
(
param
.
getContent
()));
// 持久化
// 持久化
this
.
saveMessageToDb
(
message
);
saveMessageService
.
saveMessageToDb
(
message
);
// 拼装发送消息体
// 拼装发送消息体
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
message
,
sender
,
appId
);
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
message
,
sender
,
appId
);
...
@@ -842,7 +801,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -842,7 +801,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
ImMessage
message
=
assembleImMessage
(
appId
,
sender
,
conversation
.
getId
(),
param
.
getMessageType
(),
true
,
ImMessage
message
=
assembleImMessage
(
appId
,
sender
,
conversation
.
getId
(),
param
.
getMessageType
(),
true
,
JSONObject
.
toJSONString
(
param
.
getContent
()));
JSONObject
.
toJSONString
(
param
.
getContent
()));
// 持久化
// 持久化
this
.
saveMessageToDb
(
message
);
saveMessageService
.
saveMessageToDb
(
message
);
// 拼装发送消息体
// 拼装发送消息体
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
message
,
sender
,
appId
);
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
message
,
sender
,
appId
);
...
@@ -893,7 +852,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -893,7 +852,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
ImMessage
message
=
assembleImMessage
(
application
.
getId
(),
sender
,
conversation
.
getId
(),
param
.
getMessageType
(),
ImMessage
message
=
assembleImMessage
(
application
.
getId
(),
sender
,
conversation
.
getId
(),
param
.
getMessageType
(),
false
,
param
.
getContent
());
false
,
param
.
getContent
());
// 持久化
// 持久化
this
.
saveMessageToDb
(
message
);
saveMessageService
.
saveMessageToDb
(
message
);
// 拼装发送消息体
// 拼装发送消息体
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
message
,
sender
,
application
.
getId
());
ImMessageOnlineSend
imMessageOnlineSend
=
assembleImMessageOnlineSend
(
message
,
sender
,
application
.
getId
());
...
@@ -920,53 +879,6 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
...
@@ -920,53 +879,6 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
return
true
;
return
true
;
}
}
/**
* 持久化消息到数据库并更新相关缓存
* expire 锁过期时间 防止死锁
*
* @param imMessage
*/
@Lock4j
(
keys
=
{
"#imMessage.fkConversationId"
},
expire
=
3000
,
acquireTimeout
=
1000
)
@Override
public
void
saveMessageToDb
(
ImMessage
imMessage
)
{
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setCreateTime
(
new
Date
());
this
.
setLastMessageIdAndFreshCash
(
imMessage
);
this
.
save
(
imMessage
);
}
/**
* 查找会话的最新一条消息
*
* @param message
* @return
*/
private
void
setLastMessageIdAndFreshCash
(
ImMessage
message
)
{
try
{
// 执行业务方法
String
key
=
LAST_MSG_PREFIX
+
message
.
getFkConversationId
();
String
messageId
=
redisUtils
.
getKey
(
key
);
if
(
StringUtils
.
isNotBlank
(
messageId
))
{
// 将Redis中最新的messageId存入
message
.
setPreMessageId
(
Long
.
valueOf
(
messageId
));
}
else
{
// 落库查
ImMessage
preMessage
=
imMessageMapper
.
selectOne
(
new
QueryWrapper
<
ImMessage
>().
lambda
()
.
eq
(
ImMessage:
:
getFkConversationId
,
message
.
getFkConversationId
())
.
orderByDesc
(
ImMessage:
:
getId
)
.
last
(
"limit 1"
)
);
if
(
preMessage
!=
null
)
{
message
.
setPreMessageId
(
preMessage
.
getId
());
}
}
redisUtils
.
addKey
(
key
,
message
.
getId
().
toString
(),
Duration
.
ofMinutes
(
30
));
}
catch
(
Exception
e
)
{
log
.
info
(
"获取会话最后一条消息异常 "
,
e
);
}
}
private
WsResponse
buildEventResponse
(
Long
fkConversationId
,
MsgTypeEnum
msgTypeEnum
,
ImMessage
eventMessage
,
String
senderClientId
,
String
msgOwnerClientId
,
Long
beOperatedMsgId
)
{
private
WsResponse
buildEventResponse
(
Long
fkConversationId
,
MsgTypeEnum
msgTypeEnum
,
ImMessage
eventMessage
,
String
senderClientId
,
String
msgOwnerClientId
,
Long
beOperatedMsgId
)
{
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
BeanUtils
.
copyProperties
(
eventMessage
,
imMessageOnlineSend
);
BeanUtils
.
copyProperties
(
eventMessage
,
imMessageOnlineSend
);
...
...
core/src/main/java/com/wecloud/im/ws/manager/ChannelManager.java
View file @
fd8a084b
...
@@ -60,7 +60,7 @@ public class ChannelManager {
...
@@ -60,7 +60,7 @@ public class ChannelManager {
*/
*/
public
void
online
(
Long
clientId
,
Integer
platform
,
NioSocketChannel
channel
)
{
public
void
online
(
Long
clientId
,
Integer
platform
,
NioSocketChannel
channel
)
{
String
longChannelId
=
channel
.
id
().
asLongText
();
String
longChannelId
=
channel
.
id
().
asLongText
();
log
.
info
(
"保存本地连接clientId {} platform {}
"
,
clientId
,
platform
);
log
.
info
(
"保存本地连接clientId {} platform {}
channel is null {}"
,
clientId
,
platform
,
channel
==
null
);
this
.
putSessionInfoMap
(
clientId
,
platform
,
channel
);
this
.
putSessionInfoMap
(
clientId
,
platform
,
channel
);
UserStateListener
.
triggerOnlineEvent
(
clientId
,
platform
,
longChannelId
);
UserStateListener
.
triggerOnlineEvent
(
clientId
,
platform
,
longChannelId
);
...
...
core/src/main/resources/mapper/ImMessageMapper.xml
View file @
fd8a084b
...
@@ -67,14 +67,9 @@
...
@@ -67,14 +67,9 @@
im_message_new.send_status,
im_message_new.send_status,
im_message_new.`msg_type` AS 'type',
im_message_new.`msg_type` AS 'type',
im_message_new.fk_conversation_id as conversationId
im_message_new.fk_conversation_id as conversationId
-- (SELECT COUNT(id) FROM im_inbox WHERE fk_msg_id = msgId AND read_msg_status = 0) AS not_read_count,
-- (SELECT COUNT(id)
-- FROM im_inbox
-- WHERE fk_msg_id = msgId
-- AND receiver_msg_status = 0) AS not_receiver_count
FROM `im_message_new`
FROM `im_message_new`
INNER JOIN `im_client` ON `im_client`.id = `im_message_new`.sender
INNER JOIN `im_client` ON `im_client`.id = `im_message_new`.sender
WHERE fk_conversation_id = #{param.conversationId}
and im_message_new.is_delete = 1 and im_message_new.withdraw = 0
WHERE fk_conversation_id = #{param.conversationId}
and (im_message_new.`event`=0 || (im_message_new.`event`=1 and sender != #{param.currentFkClientId} and (receivers is
and (im_message_new.`event`=0 || (im_message_new.`event`=1 and sender != #{param.currentFkClientId} and (receivers is
null || (receivers !=null and FIND_IN_SET(#{param.currentFkClientId}, receivers))) ))
null || (receivers !=null and FIND_IN_SET(#{param.currentFkClientId}, receivers))) ))
<if
test=
"param.msgIdStart != null"
>
<if
test=
"param.msgIdStart != null"
>
...
@@ -84,9 +79,7 @@
...
@@ -84,9 +79,7 @@
AND im_message_new.id
<![CDATA[ < ]]>
#{param.msgIdEnd}
AND im_message_new.id
<![CDATA[ < ]]>
#{param.msgIdEnd}
</if>
</if>
and im_message_new.create_time > DATE_SUB(CURDATE(), INTERVAL 7 DAY)
ORDER BY `im_message_new`.`id` DESC
ORDER BY `im_message_new`.`create_time` DESC
</select>
</select>
...
@@ -103,15 +96,10 @@
...
@@ -103,15 +96,10 @@
im_message_new.`at`,
im_message_new.`at`,
im_message_new.send_status,
im_message_new.send_status,
im_message_new.`msg_type` AS 'type',
im_message_new.`msg_type` AS 'type',
im_message_new.fk_conversation_id as conversationId,
im_message_new.fk_conversation_id as conversationId
(SELECT COUNT(id) FROM im_inbox WHERE fk_msg_id = msgId AND read_msg_status = 0) AS not_read_count,
(SELECT COUNT(id)
FROM im_inbox
WHERE fk_msg_id = msgId
AND receiver_msg_status = 0) AS not_receiver_count
FROM `im_message_new`
FROM `im_message_new`
INNER JOIN `im_client` ON `im_client`.id = `im_message_new`.sender
INNER JOIN `im_client` ON `im_client`.id = `im_message_new`.sender
WHERE fk_conversation_id = #{param.conversationId}
and im_message_new.is_delete = 1 and im_message_new.withdraw = 0
WHERE fk_conversation_id = #{param.conversationId}
and (im_message_new.`event`=0 || (im_message_new.`event`=1 and sender != #{param.currentFkClientId} and (receivers is
and (im_message_new.`event`=0 || (im_message_new.`event`=1 and sender != #{param.currentFkClientId} and (receivers is
null || (receivers !=null and FIND_IN_SET(#{param.currentFkClientId}, receivers))) ))
null || (receivers !=null and FIND_IN_SET(#{param.currentFkClientId}, receivers))) ))
<if
test=
"param.msgIdStart != null"
>
<if
test=
"param.msgIdStart != null"
>
...
...
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