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
3520861f
Commit
3520861f
authored
Oct 15, 2021
by
giaogiao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加撤回功能:只能撤回client自己发送的;
增加撤回系统推送; 增加撤回websocket事件通知
parent
d7ec0385
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
143 additions
and
13 deletions
+143
-13
common/src/main/java/com/wecloud/im/controller/ImMessageController.java
+3
-3
common/src/main/java/com/wecloud/im/param/add/ImMsgRecall.java
+31
-0
common/src/main/java/com/wecloud/im/service/ImMessageService.java
+2
-2
common/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
+105
-6
common/src/main/java/com/wecloud/im/ws/strategy/concrete/ImConcreteReceiveStrategy.java
+2
-2
No files found.
common/src/main/java/com/wecloud/im/controller/ImMessageController.java
View file @
3520861f
package
com
.
wecloud
.
im
.
controller
;
import
com.wecloud.im.param.ImHistoryMessagePageParam
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.vo.ImMessageOfflineListVo
;
...
...
@@ -18,7 +19,6 @@ import org.springframework.validation.annotation.Validated;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
...
...
@@ -43,8 +43,8 @@ public class ImMessageController extends BaseController {
*/
@PostMapping
(
"/withdraw"
)
@ApiOperation
(
value
=
"消息撤回"
,
notes
=
"只能撤回客户端自己发送的消息"
)
public
ApiResult
<
Boolean
>
updateMsgWithdrawById
(
@Request
Param
Long
msgId
)
throws
Exception
{
return
imMessageService
.
updateMsgWithdrawById
(
msgId
);
public
ApiResult
<
Boolean
>
updateMsgWithdrawById
(
@Request
Body
ImMsgRecall
imMsgRecall
)
throws
Exception
{
return
imMessageService
.
updateMsgWithdrawById
(
imMsgRecall
);
}
/**
...
...
common/src/main/java/com/wecloud/im/param/add/ImMsgRecall.java
0 → 100644
View file @
3520861f
package
com
.
wecloud
.
im
.
param
.
add
;
import
io.geekidea.springbootplus.framework.common.entity.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
java.util.HashMap
;
/**
* 撤回消息
*
* @author wei
*/
@Data
@Accessors
(
chain
=
true
)
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"ImMsgRecall"
)
public
class
ImMsgRecall
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
"消息id"
)
private
Long
msgId
;
@ApiModelProperty
(
"自定义推送字段"
)
private
HashMap
pushMap
;
}
common/src/main/java/com/wecloud/im/service/ImMessageService.java
View file @
3520861f
...
...
@@ -2,6 +2,7 @@ package com.wecloud.im.service;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.param.ImHistoryMessagePageParam
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
import
com.wecloud.im.vo.ImMessageOfflineListVo
;
import
com.wecloud.im.vo.OfflineMsgDto
;
...
...
@@ -23,10 +24,9 @@ public interface ImMessageService extends BaseService<ImMessage> {
/**
* 消息撤回 只能撤回客户端自己发送的消息
*
* @param msgId
* @return
*/
ApiResult
<
Boolean
>
updateMsgWithdrawById
(
Long
msgId
);
ApiResult
<
Boolean
>
updateMsgWithdrawById
(
ImMsgRecall
imMsgRecall
);
/**
* 修改消息体
...
...
common/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
View file @
3520861f
package
com
.
wecloud
.
im
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.OrderItem
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.json.JsonMapper
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImConversation
;
import
com.wecloud.im.entity.ImConversationMembers
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.entity.ImMessageOnlineSend
;
import
com.wecloud.im.mapper.ImMessageMapper
;
import
com.wecloud.im.param.ImHistoryMessagePageParam
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.service.ImConversationMembersService
;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.vo.ImMessageOfflineListVo
;
import
com.wecloud.im.vo.OfflineMsgDto
;
import
com.wecloud.im.ws.model.ResponseModel
;
import
com.wecloud.im.ws.sender.PushTask
;
import
com.wecloud.im.ws.service.WriteDataService
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
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
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
static
com
.
wecloud
.
im
.
ws
.
strategy
.
concrete
.
ImConcreteReceiveStrategy
.
PUSH_KEY
;
/**
* 消息存储表 服务实现类
*
...
...
@@ -48,14 +63,34 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
@Autowired
private
ImConversationService
imConversationService
;
@Autowired
private
PushTask
pushTask
;
@Autowired
private
ImApplicationService
imApplicationService
;
@Autowired
private
ImConversationMembersService
imConversationMembersService
;
@Autowired
private
WriteDataService
writeDataService
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
updateMsgWithdrawById
(
Long
msgId
)
{
ImClient
client
=
imClientService
.
getCurentClient
();
public
ApiResult
<
Boolean
>
updateMsgWithdrawById
(
ImMsgRecall
imMsgRecall
)
{
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
// 查询imApplication
ImApplication
imApplication
=
imApplicationService
.
getById
(
imClientSender
.
getFkAppid
());
if
(
imApplication
==
null
)
{
log
.
info
(
"imApplication为空"
);
return
ApiResult
.
fail
();
}
// 判断该消息是否是该客户端发送
ImMessage
messageById
=
this
.
getById
(
msgId
);
if
(!
messageById
.
getSender
().
equals
(
client
.
getId
()))
{
ImMessage
messageById
=
this
.
getById
(
imMsgRecall
.
getMsgId
()
);
if
(!
messageById
.
getSender
().
equals
(
imClientSender
.
getId
()))
{
log
.
error
(
"判断该消息是否是该客户端发送"
);
return
ApiResult
.
fail
();
}
...
...
@@ -63,13 +98,77 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
return
ApiResult
.
ok
();
}
// 修改消息体
messageById
.
setWithdraw
(
Boolean
.
TRUE
);
messageById
.
setWithdrawTime
(
new
Date
());
messageById
.
setContent
(
"{}"
);
boolean
saveOk
=
this
.
updateById
(
messageById
);
boolean
b
=
this
.
updateById
(
messageById
);
if
(
saveOk
)
{
// 获取自定义推送字段
HashMap
<
String
,
String
>
pushMap
=
null
;
if
(
imMsgRecall
.
getPushMap
().
get
(
PUSH_KEY
)
!=
null
)
{
pushMap
=
(
HashMap
<
String
,
String
>)
imMsgRecall
.
getPushMap
().
get
(
PUSH_KEY
);
}
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
messageById
.
getFkConversationId
())
.
notIn
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
);
if
(
membersList
.
isEmpty
())
{
log
.
info
(
"membersList为空,toConversationId:"
+
messageById
.
getFkConversationId
());
return
ApiResult
.
fail
();
}
// 遍历发送
for
(
ImConversationMembers
conversationMembers
:
membersList
)
{
// // 保存收件箱
// long imInboxId = SnowflakeUtil.getId();
// ImInbox imInbox = new ImInbox();
// imInbox.setId(imInboxId);
// imInbox.setCreateTime(new Date());
// imInbox.setFkAppid(imApplication.getId());
// imInbox.setReceiver(conversationMembers.getFkClientId());
// imInbox.setFkMsgId(messageId);
// imInbox.setReadMsgStatus(0);
// imInbox.setReceiverMsgStatus(0);
// imInbox.setFkConversationId(toConversationId);
// imInboxService.save(imInbox);
// 查询接收方
ImClient
imClientReceiver
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImClient:
:
getId
,
conversationMembers
.
getFkClientId
()));
if
(
imClientReceiver
==
null
)
{
continue
;
}
// 封装响应的实体
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
BeanUtils
.
copyProperties
(
messageById
,
imMessageOnlineSend
);
imMessageOnlineSend
.
setMsgId
(
messageById
.
getId
());
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
imMessageOnlineSend
.
setContent
(
null
);
imMessageOnlineSend
.
setConversationId
(
conversationMembers
.
getFkConversationId
());
imMessageOnlineSend
.
setWithdraw
(
Boolean
.
TRUE
);
imMessageOnlineSend
.
setEvent
(
Boolean
.
TRUE
);
// 向接收方推送
ResponseModel
<
ImMessageOnlineSend
>
responseModel
=
new
ResponseModel
<>();
responseModel
.
setCmd
(
ResponseModel
.
ONLINE_EVENT_MSG
);
ApiResult
<
Boolean
>
result
=
ApiResult
.
result
(
ApiCode
.
SUCCESS
);
responseModel
.
setCode
(
result
.
getCode
());
responseModel
.
setMsg
(
result
.
getMessage
());
responseModel
.
setData
(
imMessageOnlineSend
);
responseModel
.
setReqId
(
null
);
writeDataService
.
write
(
responseModel
,
imApplication
.
getAppKey
(),
imClientReceiver
.
getClientId
());
// 异步推送系统通知消息
pushTask
.
push
(
pushMap
,
imClientReceiver
,
imApplication
);
}
if
(
b
)
{
return
ApiResult
.
ok
();
}
else
{
...
...
common/src/main/java/com/wecloud/im/ws/strategy/concrete/ImConcreteReceiveStrategy.java
View file @
3520861f
...
...
@@ -44,8 +44,8 @@ import java.util.List;
public
class
ImConcreteReceiveStrategy
extends
AbstractReceiveStrategy
{
private
static
final
String
TO_CONVERSATION_KEY
=
"toConversation"
;
p
rivate
static
final
String
PUSH_KEY
=
"push"
;
p
rivate
static
final
String
MSG_ID
=
"msgId"
;
p
ublic
static
final
String
PUSH_KEY
=
"push"
;
p
ublic
static
final
String
MSG_ID
=
"msgId"
;
private
static
final
JsonMapper
JSON_MAPPER
=
new
JsonMapper
();
...
...
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