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
763a9228
Commit
763a9228
authored
Sep 02, 2022
by
NaoiAyato
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'upay-test' into 'upay-prod'
Upay test->upay pro See merge request
!32
parents
33ade855
907ea87f
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
202 additions
and
2 deletions
+202
-2
common/src/main/java/com/wecloud/im/controller/serverapi/ApiImConversationController.java
+29
-0
common/src/main/java/com/wecloud/im/param/add/ImConversationRestApiCreate.java
+38
-0
common/src/main/java/com/wecloud/im/service/ImConversationService.java
+3
-0
common/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
+132
-2
No files found.
common/src/main/java/com/wecloud/im/controller/serverapi/ApiImConversationController.java
View file @
763a9228
package
com
.
wecloud
.
im
.
controller
.
serverapi
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.param.add.ImConversationRestApiCreate
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImConversationService
;
import
com.wecloud.im.vo.ImConversationCreateVo
;
import
com.wecloud.im.vo.MyConversationListVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
...
...
@@ -12,6 +14,8 @@ import io.swagger.annotations.ApiOperation;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestHeader
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
...
...
@@ -35,6 +39,31 @@ public class ApiImConversationController extends BaseController {
@Autowired
private
ImApplicationService
imApplicationService
;
/**
* 服务端创建会话
*/
@PostMapping
(
"/create"
)
@ApiOperation
(
value
=
"服务端创建会话"
,
notes
=
"后台可配置:两个客户端如果已经创建过会话,是否重复创建会话"
)
public
ApiResult
<
ImConversationCreateVo
>
createImConversation
(
@RequestBody
ImConversationRestApiCreate
imConversationRestApiCreate
,
@RequestHeader
String
appkey
,
@RequestHeader
String
appSecret
)
throws
Exception
{
// 根据appKey从数据库查询密钥
ImApplication
imApplication
=
imApplicationService
.
getOneByAppKey
(
appkey
);
if
(
imApplication
==
null
)
{
return
ApiResult
.
result
(
ApiCode
.
FAIL
,
null
);
}
// 校验appkey 和appSecret
if
(!
imApplication
.
getAppSecret
().
equals
(
appSecret
))
{
return
ApiResult
.
result
(
ApiCode
.
FAIL
,
null
);
}
return
imConversationService
.
createImConversationRestApi
(
imConversationRestApiCreate
,
appkey
,
appSecret
);
}
/**
* 获取会话表详情
*/
...
...
common/src/main/java/com/wecloud/im/param/add/ImConversationRestApiCreate.java
0 → 100644
View file @
763a9228
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
;
import
java.util.List
;
/**
* 服务端创建会话
*
* @author wei
* @since 2022年06月21日11:36:38
*/
@Data
@Accessors
(
chain
=
true
)
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"ImConversationCreate"
)
public
class
ImConversationRestApiCreate
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
"可选 对话的名字,可为群组命名。"
)
private
String
name
;
@ApiModelProperty
(
"json格式,可选 自定义属性,供开发者扩展使用。"
)
private
HashMap
attributes
;
@ApiModelProperty
(
"可选 邀请加入会话的客户端,如创建单聊,则填入对方的clientId"
)
private
List
<
String
>
clientIds
;
@ApiModelProperty
(
"创建者"
)
private
String
creator
;
}
common/src/main/java/com/wecloud/im/service/ImConversationService.java
View file @
763a9228
...
...
@@ -10,6 +10,7 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate;
import
com.wecloud.im.param.add.ImConversationCreate
;
import
com.wecloud.im.param.add.ImConversationDisplayUpdate
;
import
com.wecloud.im.param.add.ImConversationNameUpdate
;
import
com.wecloud.im.param.add.ImConversationRestApiCreate
;
import
com.wecloud.im.vo.ImConversationCreateVo
;
import
com.wecloud.im.vo.MyConversationListVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
...
...
@@ -44,6 +45,8 @@ public interface ImConversationService extends BaseService<ImConversation> {
*/
ApiResult
<
ImConversationCreateVo
>
createImConversation
(
ImConversationCreate
imConversationCreate
)
throws
JsonProcessingException
;
ApiResult
<
ImConversationCreateVo
>
createImConversationRestApi
(
ImConversationRestApiCreate
imConversationRestApiCreate
,
String
appkey
,
String
appSecret
)
throws
JsonProcessingException
;
/**
* 将用户添加进会话
...
...
common/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
View file @
763a9228
...
...
@@ -22,6 +22,7 @@ import com.wecloud.im.param.add.ImConversationAttrUpdate;
import
com.wecloud.im.param.add.ImConversationCreate
;
import
com.wecloud.im.param.add.ImConversationDisplayUpdate
;
import
com.wecloud.im.param.add.ImConversationNameUpdate
;
import
com.wecloud.im.param.add.ImConversationRestApiCreate
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.service.ImConversationMembersService
;
...
...
@@ -224,6 +225,137 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
@Override
public
ApiResult
<
ImConversationCreateVo
>
createImConversationRestApi
(
ImConversationRestApiCreate
imConversationRestApiCreate
,
String
appkey
,
String
appSecret
)
throws
JsonProcessingException
{
if
(
imConversationRestApiCreate
.
getClientIds
().
size
()
==
0
)
{
log
.
info
(
"没有成员"
);
return
ApiResult
.
result
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
// 根据appKey查询appid
ImApplication
imApplication
=
imApplicationService
.
getOneByAppKey
(
appkey
);
// 创建者
ImClient
createClient
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImClient:
:
getClientId
,
imConversationRestApiCreate
.
getCreator
()));
if
(
createClient
==
null
)
{
log
.
info
(
"没有创建者"
);
return
ApiResult
.
result
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
// 成员不存在,不能创建会话
for
(
String
id
:
imConversationRestApiCreate
.
getClientIds
())
{
ImClient
imClient
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
select
(
ImClient:
:
getId
)
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImClient:
:
getClientId
,
id
));
if
(
imClient
==
null
)
{
log
.
info
(
"成员不存在,不能创建会话 client2 == null"
);
return
ApiResult
.
result
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
}
// 该应用 是否允许创建重复一对一会话 0不允许 1允许
if
(
imApplication
.
getRepeatSessionStatus
()
!=
null
&&
imApplication
.
getRepeatSessionStatus
()
==
0
)
{
// 判断是否已经存在一对一会话
// size() == 1 为单聊不允许重复创建 两个用户如果已经创建过会话,不能重复创建会话
if
(
imConversationRestApiCreate
.
getClientIds
().
size
()
==
1
)
{
ImClient
client2
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
())
.
eq
(
ImClient:
:
getClientId
,
imConversationRestApiCreate
.
getClientIds
().
get
(
0
)));
// 是否存在重复一对一会话
Integer
repetitionConversation
=
getRepetitionConversation
(
createClient
.
getId
(),
client2
.
getId
());
if
(
repetitionConversation
!=
0
)
{
log
.
info
(
"repetitionConversation != 0"
);
// 返回已存在的一对一会话id
ImConversation
repetitionConversationInfo
=
imConversationMapper
.
getRepetitionConversationInfo
(
createClient
.
getId
(),
client2
.
getId
());
ImConversationCreateVo
createVo
=
new
ImConversationCreateVo
();
createVo
.
setId
(
repetitionConversationInfo
.
getId
());
return
ApiResult
.
ok
(
createVo
);
}
}
}
else
{
//创建重复一对一会话时对比扩展字段 1是
if
(
imApplication
.
getContrastExtendedFieldStatus
()
==
1
)
{
// 被邀请client
ImClient
inviteClient
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
())
.
eq
(
ImClient:
:
getClientId
,
imConversationRestApiCreate
.
getClientIds
().
get
(
0
)));
JsonMapper
jsonMapper
=
new
JsonMapper
();
String
asString
=
jsonMapper
.
writeValueAsString
(
imConversationRestApiCreate
.
getAttributes
());
log
.
info
(
"RequestAttributes:"
+
asString
);
Long
repetitionConversation
=
getRepetitionConversationAttributes
(
createClient
.
getId
(),
inviteClient
.
getId
(),
asString
);
// 存在重复会话
if
(
repetitionConversation
!=
null
)
{
log
.
info
(
"出现Attributes重复"
);
ImConversationCreateVo
createVo
=
new
ImConversationCreateVo
();
createVo
.
setId
(
repetitionConversation
);
// 为重复
return
ApiResult
.
ok
(
createVo
);
}
}
}
// 会话id
Long
imConversationId
=
SnowflakeUtil
.
getId
();
// 创建者
Long
creator
=
createClient
.
getId
();
// 创建会话
ImConversation
imConversation
=
new
ImConversation
();
imConversation
.
setId
(
imConversationId
);
imConversation
.
setCreateTime
(
new
Date
());
imConversation
.
setLastMessage
(
null
);
imConversation
.
setFkAppid
(
createClient
.
getFkAppid
());
imConversation
.
setCreator
(
creator
);
imConversation
.
setName
(
imConversationRestApiCreate
.
getName
());
imConversation
.
setSystem
(
false
);
JsonMapper
jsonMapper
=
new
JsonMapper
();
// 拓展数据
String
writeValueAsString
=
jsonMapper
.
writeValueAsString
(
imConversationRestApiCreate
.
getAttributes
());
imConversation
.
setAttributes
(
writeValueAsString
);
imConversationService
.
save
(
imConversation
);
// 将创建者自己添加到会话
Long
imConversationMembersId
=
SnowflakeUtil
.
getId
();
ImConversationMembers
imConversationMembers
=
new
ImConversationMembers
();
imConversationMembers
.
setId
(
imConversationMembersId
);
imConversationMembers
.
setCreateTime
(
new
Date
());
imConversationMembers
.
setFkAppid
(
createClient
.
getFkAppid
());
imConversationMembers
.
setFkConversationId
(
imConversationId
);
imConversationMembers
.
setFkClientId
(
creator
);
imConversationMembersService
.
save
(
imConversationMembers
);
// 将他人添加到会话
for
(
String
id
:
imConversationRestApiCreate
.
getClientIds
())
{
ImClient
client2
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
createClient
.
getFkAppid
())
.
eq
(
ImClient:
:
getClientId
,
id
));
Long
imConversationMembersId2
=
SnowflakeUtil
.
getId
();
ImConversationMembers
imConversationMembers2
=
new
ImConversationMembers
();
imConversationMembers2
.
setId
(
imConversationMembersId2
);
imConversationMembers2
.
setCreateTime
(
new
Date
());
imConversationMembers2
.
setFkAppid
(
createClient
.
getFkAppid
());
imConversationMembers2
.
setFkConversationId
(
imConversationId
);
imConversationMembers2
.
setFkClientId
(
client2
.
getId
());
imConversationMembersService
.
save
(
imConversationMembers2
);
}
ImConversationCreateVo
createVo
=
new
ImConversationCreateVo
();
createVo
.
setId
(
imConversationId
);
return
ApiResult
.
ok
(
createVo
);
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
addClientToConversation
(
ImClientToConversation
imClientToConversation
)
{
...
...
@@ -321,11 +453,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
String
imApplicationAppKey
=
imApplication
.
getAppKey
();
sendEventMsg
(
messageId
,
(
HashMap
)
content
,
fkConversationId
,
clientId
,
toClientId
,
imApplicationAppKey
);
// 遍历发送
for
(
ImConversationMembers
conversationMembers
:
membersList
)
{
// 查询接收方
ImClient
imClientReceiver
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
())
...
...
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