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
673029d4
Commit
673029d4
authored
Mar 07, 2022
by
hweeeeeei
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/feature-cluster' into feature-cluster
parents
0c3334dd
aed89500
Show whitespace changes
Inline
Side-by-side
Showing
75 changed files
with
843 additions
and
669 deletions
+843
-669
bootstrap/src/test/java/io/geekidea/springbootplus/test/LoginTest.java
+2
-2
config/src/main/resources/config/application-dev.yml
+21
-11
config/src/main/resources/config/application-test.yml
+3
-3
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
+3
-1
core/src/main/java/com/wecloud/im/constant/NumberConstant.java
+16
-0
core/src/main/java/com/wecloud/im/constant/RedisKeyPrefixConstant.java
+1
-1
core/src/main/java/com/wecloud/im/controller/ImClientController.java
+13
-7
core/src/main/java/com/wecloud/im/controller/ImConversationController.java
+9
-0
core/src/main/java/com/wecloud/im/controller/TokenController.java
+0
-1
core/src/main/java/com/wecloud/im/entity/ImClient.java
+1
-16
core/src/main/java/com/wecloud/im/entity/ImClientDevice.java
+57
-0
core/src/main/java/com/wecloud/im/enums/DeviceTypeEnum.java
+10
-5
core/src/main/java/com/wecloud/im/externalaccess/controller/FriendController.java
+3
-6
core/src/main/java/com/wecloud/im/externalaccess/controller/MultiMeetController.java
+41
-0
core/src/main/java/com/wecloud/im/externalaccess/controller/UserController.java
+30
-18
core/src/main/java/com/wecloud/im/externalaccess/controller/VerifyCodeController.java
+18
-3
core/src/main/java/com/wecloud/im/externalaccess/entity/User.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/mapper/UserMapper.java
+2
-2
core/src/main/java/com/wecloud/im/externalaccess/param/ChangePhoneParam.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/CheckPhoneParam.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/FindUserParam.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/FriendDto.java
+7
-4
core/src/main/java/com/wecloud/im/externalaccess/param/GetUserParam.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/LoginSuccessDto.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/ModifyHeadPortraitParam.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/ModifyLandouParam.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/ModifyNicknameParam.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/ModifySexParam.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/MultiMeetSignGetParam.java
+39
-0
core/src/main/java/com/wecloud/im/externalaccess/param/RegisterSuccessDto.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/ResetPasswordParam.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/SendVerifyCodeParam.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/UserBaseDto.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/param/UserLoginParam.java
+7
-8
core/src/main/java/com/wecloud/im/externalaccess/param/UserRegisterParam.java
+1
-1
core/src/main/java/com/wecloud/im/externalaccess/service/FriendService.java
+7
-7
core/src/main/java/com/wecloud/im/externalaccess/service/UserService.java
+60
-28
core/src/main/java/com/wecloud/im/friend/controller/ImFriendController.java
+9
-9
core/src/main/java/com/wecloud/im/friend/service/FriendEventSender.java
+8
-4
core/src/main/java/com/wecloud/im/friend/service/ImFriendService.java
+19
-8
core/src/main/java/com/wecloud/im/mapper/ImClientBlacklistMapper.java
+1
-1
core/src/main/java/com/wecloud/im/mapper/ImClientDeviceMapper.java
+24
-0
core/src/main/java/com/wecloud/im/mapper/ImClientMapper.java
+0
-4
core/src/main/java/com/wecloud/im/mq/MqSender.java
+45
-20
core/src/main/java/com/wecloud/im/param/ImHistoryMessagePageParam.java
+7
-0
core/src/main/java/com/wecloud/im/param/LogoutParam.java
+33
-0
core/src/main/java/com/wecloud/im/param/add/ClientDeviceUpdateParam.java
+9
-2
core/src/main/java/com/wecloud/im/service/ImClientDeviceService.java
+21
-0
core/src/main/java/com/wecloud/im/service/ImClientService.java
+10
-14
core/src/main/java/com/wecloud/im/service/ImMessageService.java
+2
-2
core/src/main/java/com/wecloud/im/service/impl/ImClientBlacklistServiceImpl.java
+4
-4
core/src/main/java/com/wecloud/im/service/impl/ImClientDeviceServiceImpl.java
+28
-0
core/src/main/java/com/wecloud/im/service/impl/ImClientLoginServiceImpl.java
+2
-2
core/src/main/java/com/wecloud/im/service/impl/ImClientServiceImpl.java
+53
-64
core/src/main/java/com/wecloud/im/service/impl/ImConversationMembersServiceImpl.java
+4
-4
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
+65
-49
core/src/main/java/com/wecloud/im/service/impl/ImInboxServiceImpl.java
+4
-3
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
+21
-17
core/src/main/java/com/wecloud/im/thousandchat/action/ThousandChatAction.java
+10
-4
core/src/main/java/com/wecloud/im/thousandchat/param/ThousandOffineMsgDto.java
+0
-4
core/src/main/java/com/wecloud/im/thousandchat/service/ThousandChatService.java
+3
-3
core/src/main/java/com/wecloud/im/vo/ConversationMemberVo.java
+5
-0
core/src/main/java/com/wecloud/im/vo/OfflineMsgDto.java
+8
-1
core/src/main/java/com/wecloud/im/ws/ImConstant.java
+2
-2
core/src/main/java/com/wecloud/im/ws/cache/UserStateCacheManager.java
+2
-2
core/src/main/java/com/wecloud/im/ws/enums/MsgTypeEnum.java
+7
-0
core/src/main/java/com/wecloud/im/ws/sender/AsyncPush.java
+0
-272
core/src/main/java/com/wecloud/rtc/service/impl/RtcServiceImpl.java
+6
-6
core/src/main/java/com/wecloud/utils/SnowflakeUtil.java
+22
-17
core/src/main/resources/mapper/ImClientDeviceMapper.xml
+13
-0
core/src/main/resources/mapper/ImClientMapper.xml
+2
-7
core/src/main/resources/mapper/ImFriendMapper.xml
+1
-1
core/src/main/resources/mapper/ImMessageMapper.xml
+3
-1
docs/db/feature-cluster增量.sql
+24
-3
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/util/JwtUtil.java
+1
-1
No files found.
bootstrap/src/test/java/io/geekidea/springbootplus/test/LoginTest.java
View file @
673029d4
...
...
@@ -5,7 +5,7 @@ import cn.hutool.crypto.digest.MD5;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.enums.
Platform
Enum
;
import
com.wecloud.im.enums.
DeviceType
Enum
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.ws.utils.RedisUtils
;
...
...
@@ -85,7 +85,7 @@ public class LoginTest {
}
// 生成token
String
generateToken
=
JwtUtil
.
generateToken
(
clientId
,
appKey
,
imApplication
.
getAppSecret
(),
Duration
.
ofDays
(
99999
),
Platform
Enum
.
WEB
.
getCode
());
String
generateToken
=
JwtUtil
.
generateToken
(
clientId
,
appKey
,
imApplication
.
getAppSecret
(),
Duration
.
ofDays
(
99999
),
DeviceType
Enum
.
WEB
.
getCode
());
// 保存redis
redisTemplate
.
opsForValue
().
set
(
"client:"
+
imApplication
.
getAppKey
()
+
":"
+
clientId
,
generateToken
);
...
...
config/src/main/resources/config/application-dev.yml
View file @
673029d4
...
...
@@ -15,26 +15,34 @@ spring-boot-plus:
spring
:
datasource
:
url
:
jdbc:mysql://192.168.1.51:3306/wecloud-im?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username
:
mysql
password
:
mysql
# url: jdbc:mysql://127.0.0.1:3306/wecloud-im?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
# username: root
# password: 123456
# 测试外网
url
:
jdbc:mysql://121.37.22.224:3306/wecloud_im_feature_cluster?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username
:
root
password
:
temple123456
#//测试外网
# url: jdbc:mysql://18.136.207.16:3306/wecloud_im?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
# username: web
# password: axT8knPN5hAP
# Redis配置
redis
:
# database: 0
# host: 127.0.0.1
# password:
# port: 6379
database
:
0
host
:
1
92.168.1.51
password
:
host
:
1
21.37.22.224
password
:
temple123456
port
:
6379
cloud
:
nacos
:
discovery
:
server-addr
:
1
92.168.1.5
1:8848
server-addr
:
1
27.0.0.
1:8848
dubbo
:
...
...
@@ -42,9 +50,11 @@ dubbo:
port
:
20881
name
:
dubbo
registry
:
address
:
nacos://1
92.168.1.5
1:8848?username=nacos&password=nacos
address
:
nacos://1
27.0.0.
1:8848?username=nacos&password=nacos
provider
:
cluster
:
channelRouterCluster
consumer
:
check
:
false
# 打印SQL语句和结果集,本地开发环境可开启,线上注释掉
mybatis-plus
:
...
...
config/src/main/resources/config/application-test.yml
View file @
673029d4
...
...
@@ -15,7 +15,7 @@ spring-boot-plus:
spring
:
datasource
:
url
:
jdbc:mysql://121.37.2
34.35:3306/wecloud
im_feature_cluster?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
url
:
jdbc:mysql://121.37.2
2.224:3306/wecloud_
im_feature_cluster?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username
:
root
password
:
temple123456
...
...
@@ -27,8 +27,8 @@ spring:
# Redis配置
redis
:
database
:
0
host
:
12
7.0.0.1
password
:
host
:
12
1.37.22.224
password
:
temple123456
port
:
6379
cloud
:
...
...
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
View file @
673029d4
...
...
@@ -152,7 +152,9 @@ public class NormalChatAction {
// 异步推送系统通知消息
PushDTO
pushDTO
=
mqSender
.
buildPushDto
(
data
.
getPush
(),
imClientReceiver
,
imApplication
);
mqSender
.
orderSend
(
MqConstant
.
Topic
.
IM_MSG_TOPIC
,
MqConstant
.
Tag
.
IM_MSG_TAG
,
pushDTO
);
if
(
pushDTO
!=
null
)
{
mqSender
.
orderSend
(
MqConstant
.
Topic
.
IM_ORDER_MSG_TOPIC
,
MqConstant
.
Tag
.
IM_ORDER_MSG_TAG
,
pushDTO
);
}
}
// 响应发送方消息id等信息
...
...
core/src/main/java/com/wecloud/im/constant/NumberConstant.java
0 → 100644
View file @
673029d4
package
com
.
wecloud
.
im
.
constant
;
/**
* @Author wenzhida
* @Date 2022/3/1 18:17
* @Description 数字常量
*/
public
class
NumberConstant
{
/**
* 数字常量
*/
public
static
final
int
NUM_30
=
30
;
public
static
final
int
NUM_32
=
32
;
}
core/src/main/java/com/wecloud/im/
user/
constant/RedisKeyPrefixConstant.java
→
core/src/main/java/com/wecloud/im/constant/RedisKeyPrefixConstant.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
constant
;
package
com
.
wecloud
.
im
.
constant
;
/**
* @Author wenzhida
...
...
core/src/main/java/com/wecloud/im/controller/ImClientController.java
View file @
673029d4
package
com
.
wecloud
.
im
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.friend.param.ImFriendApplyDto
;
import
com.wecloud.im.param.ClientInfoParam
;
import
com.wecloud.im.param.GetClientInfoParam
;
import
com.wecloud.im.param.GetOnlineStatusParam
;
import
com.wecloud.im.param.add.ImClientDeviceInfoAdd
;
import
com.wecloud.im.param.LogoutParam
;
import
com.wecloud.im.param.add.ClientDeviceUpdateParam
;
import
com.wecloud.im.param.add.ImClientHeadPortraitAdd
;
import
com.wecloud.im.param.add.ImClientHeadPortraitAndNicknameUpdate
;
import
com.wecloud.im.param.add.ImClientNicknameAdd
;
...
...
@@ -93,8 +94,9 @@ public class ImClientController extends BaseController {
*/
@PostMapping
(
"/addDeviceInfo"
)
@ApiOperation
(
value
=
"添加或修改推送设备信息(每次请求都会覆盖之前的数据)"
)
public
ApiResult
<
Boolean
>
addDeviceInfo
(
@Validated
(
Add
.
class
)
@RequestBody
ImClientDeviceInfoAdd
imClientDevice
)
throws
Exception
{
boolean
flag
=
imClientService
.
updateDeviceInfo
(
imClientDevice
);
public
ApiResult
<
Boolean
>
addDeviceInfo
(
@Validated
(
Add
.
class
)
@RequestBody
ClientDeviceUpdateParam
param
)
throws
Exception
{
log
.
info
(
"添加或修改推送设备信息入参 {}"
,
JSON
.
toJSONString
(
param
));
boolean
flag
=
imClientService
.
updateDeviceInfo
(
param
);
return
ApiResult
.
result
(
flag
);
}
...
...
@@ -102,6 +104,7 @@ public class ImClientController extends BaseController {
@PostMapping
(
"/updateHeadAndNickname"
)
@ApiOperation
(
value
=
"添加或修改头像和昵称"
)
public
ApiResult
<
Boolean
>
updateHeadAndNickname
(
@Validated
(
Add
.
class
)
@RequestBody
ImClientHeadPortraitAndNicknameUpdate
imClientHeadPortraitAndNicknameUpdate
)
throws
Exception
{
log
.
info
(
"添加或修改头像和昵称入参 {}"
,
JSON
.
toJSONString
(
imClientHeadPortraitAndNicknameUpdate
));
boolean
flag
=
imClientService
.
updateHeadAndNickname
(
imClientHeadPortraitAndNicknameUpdate
);
return
ApiResult
.
result
(
flag
);
}
...
...
@@ -110,6 +113,7 @@ public class ImClientController extends BaseController {
@PostMapping
(
"/updateHeadPortrait"
)
@ApiOperation
(
value
=
"添加或修改头像"
)
public
ApiResult
<
Boolean
>
updateHeadPortrait
(
@Validated
(
Add
.
class
)
@RequestBody
ImClientHeadPortraitAdd
imClientHeadPortraitAdd
)
throws
Exception
{
log
.
info
(
"添加或修改头像入参 {}"
,
JSON
.
toJSONString
(
imClientHeadPortraitAdd
));
boolean
flag
=
imClientService
.
updateHeadPortrait
(
imClientHeadPortraitAdd
);
return
ApiResult
.
result
(
flag
);
}
...
...
@@ -117,6 +121,7 @@ public class ImClientController extends BaseController {
@PostMapping
(
"/updateNickname"
)
@ApiOperation
(
value
=
"添加或修改主昵称"
)
public
ApiResult
<
Boolean
>
updateNickname
(
@Validated
(
Add
.
class
)
@RequestBody
ImClientNicknameAdd
imClientNicknameAdd
)
throws
Exception
{
log
.
info
(
"添加或修改主昵称入参 {}"
,
JSON
.
toJSONString
(
imClientNicknameAdd
));
boolean
flag
=
imClientService
.
updateNickname
(
imClientNicknameAdd
);
return
ApiResult
.
result
(
flag
);
}
...
...
@@ -130,8 +135,9 @@ public class ImClientController extends BaseController {
*/
@PostMapping
(
"/logout"
)
@ApiOperation
(
value
=
"退出登陆 清除推送token等"
)
public
ApiResult
<
Boolean
>
logout
()
throws
Exception
{
boolean
flag
=
imClientService
.
logout
();
public
ApiResult
<
Boolean
>
logout
(
@RequestBody
@Validated
LogoutParam
param
)
{
log
.
info
(
"退出登陆入参 {}"
,
JSON
.
toJSONString
(
param
));
boolean
flag
=
imClientService
.
logout
(
param
);
return
ApiResult
.
result
(
flag
);
}
...
...
@@ -144,7 +150,7 @@ public class ImClientController extends BaseController {
@ApiOperation
(
value
=
"获取用户在线状态(批量)"
)
ApiResult
<
List
<
ImOnlineStatusVo
>>
getOnlineStatus
(
@RequestBody
GetOnlineStatusParam
getOnlineStatusParam
)
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
JwtToken
curentJwtToken
=
JwtUtil
.
getCur
r
entJwtToken
();
// 根据appKey查询appid
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
...
...
core/src/main/java/com/wecloud/im/controller/ImConversationController.java
View file @
673029d4
package
com
.
wecloud
.
im
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.wecloud.im.param.ImConversationQueryParam
;
import
com.wecloud.im.param.MutedGroupParam
;
import
com.wecloud.im.param.SetAdminsParam
;
...
...
@@ -71,6 +72,7 @@ public class ImConversationController extends BaseController {
@PostMapping
(
"/leave"
)
@ApiOperation
(
value
=
"client退出会话"
,
notes
=
"若是创建者退出,[创建者]权限将会转移给按加入会话时间排序的下一个client"
)
public
ApiResult
<
Boolean
>
leaveConversation
(
@RequestBody
ImClientLeaveConversation
imClientToConversation
)
throws
Exception
{
log
.
info
(
"client退出会话入参 {}"
,
JSON
.
toJSONString
(
imClientToConversation
));
return
imConversationService
.
leaveConversation
(
imClientToConversation
);
}
...
...
@@ -81,6 +83,7 @@ public class ImConversationController extends BaseController {
@PostMapping
(
"/delClient"
)
@ApiOperation
(
value
=
"将client从会话移除"
,
notes
=
"权限:目前只有创建者有权限操作"
)
public
ApiResult
<
Boolean
>
delClientToConversation
(
@RequestBody
ImClientToConversation
imClientToConversation
)
throws
Exception
{
log
.
info
(
"将client从会话移除入参 {}"
,
JSON
.
toJSONString
(
imClientToConversation
));
return
imConversationService
.
delClientToConversation
(
imClientToConversation
);
}
...
...
@@ -91,6 +94,7 @@ public class ImConversationController extends BaseController {
@PostMapping
(
"/addClient"
)
@ApiOperation
(
value
=
"将用户添加进会话"
,
notes
=
"权限:会话中所有client都有权限操作"
)
public
ApiResult
<
Boolean
>
addClientToConversation
(
@RequestBody
ImClientToConversation
imClientToConversation
)
throws
Exception
{
log
.
info
(
"将用户添加进会话入参 {}"
,
JSON
.
toJSONString
(
imClientToConversation
));
return
imConversationService
.
addClientToConversation
(
imClientToConversation
);
}
...
...
@@ -100,6 +104,7 @@ public class ImConversationController extends BaseController {
@PostMapping
(
"/create"
)
@ApiOperation
(
value
=
"创建会话"
,
notes
=
"后台可配置:两个客户端如果已经创建过会话,是否重复创建会话"
)
public
ApiResult
<
ImConversationCreateVo
>
createImConversation
(
@RequestBody
ImConversationCreate
imConversationCreate
)
throws
Exception
{
log
.
info
(
"创建会话入参 {}"
,
JSON
.
toJSONString
(
imConversationCreate
));
return
imConversationService
.
createImConversation
(
imConversationCreate
);
}
...
...
@@ -109,6 +114,7 @@ public class ImConversationController extends BaseController {
@PostMapping
(
"/transferOwner"
)
@ApiOperation
(
value
=
"群主转让"
,
notes
=
"权限:目前只有群主有权限操作"
)
public
ApiResult
<
Boolean
>
transferOwner
(
@RequestBody
TransferOwnerParam
param
)
{
log
.
info
(
"群主转让入参 {}"
,
JSON
.
toJSONString
(
param
));
Boolean
result
=
imConversationService
.
transferOwner
(
param
);
return
ApiResult
.
ok
(
result
);
}
...
...
@@ -119,6 +125,7 @@ public class ImConversationController extends BaseController {
@PostMapping
(
"/setAdmins"
)
@ApiOperation
(
value
=
"设置群管理员"
,
notes
=
"权限:目前只有群主有权限操作"
)
public
ApiResult
<
Boolean
>
setAdmins
(
@RequestBody
@Validated
SetAdminsParam
param
)
{
log
.
info
(
"设置群管理员入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
CollectionUtils
.
isEmpty
(
param
.
getClientIds
()))
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -132,6 +139,7 @@ public class ImConversationController extends BaseController {
@PostMapping
(
"/mutedGroup"
)
@ApiOperation
(
value
=
"群禁言、取消群禁言"
,
notes
=
"权限:群主和管理员有权限操作"
)
public
ApiResult
<
Boolean
>
mutedGroup
(
@RequestBody
@Validated
MutedGroupParam
param
)
{
log
.
info
(
"群禁言、取消群禁言入参 {}"
,
JSON
.
toJSONString
(
param
));
Boolean
result
=
imConversationService
.
mutedGroup
(
param
);
return
ApiResult
.
ok
(
result
);
}
...
...
@@ -142,6 +150,7 @@ public class ImConversationController extends BaseController {
@PostMapping
(
"/mutedGroupMember"
)
@ApiOperation
(
value
=
"选择禁言"
,
notes
=
"权限:群主和管理员有权限操作"
)
public
ApiResult
<
Boolean
>
mutedGroupMember
(
@RequestBody
@Validated
MutedGroupParam
param
)
{
log
.
info
(
"选择禁言入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
CollectionUtils
.
isEmpty
(
param
.
getClientIds
()))
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
core/src/main/java/com/wecloud/im/controller/TokenController.java
View file @
673029d4
...
...
@@ -36,7 +36,6 @@ public class TokenController extends BaseController {
@PostMapping
(
"/verify"
)
@ApiOperation
(
value
=
"根据sign申请token"
,
notes
=
"校验客户方生成的签名字符串,验证通过则下发token"
)
public
ApiResult
<
TokenVo
>
verify
(
@RequestBody
ImTokenVerify
imTokenVerify
)
throws
NacosException
{
return
imClientLoginService
.
verifySign
(
imTokenVerify
);
}
...
...
core/src/main/java/com/wecloud/im/entity/ImClient.java
View file @
673029d4
...
...
@@ -48,25 +48,10 @@ public class ImClient extends BaseEntity {
@ApiModelProperty
(
"客户方提供的唯一id"
)
private
String
clientId
;
@ApiModelProperty
(
"设备不想收到推送提醒, 1想, 0不想"
)
private
Integer
valid
;
@ApiModelProperty
(
"设备类型1:ios; 2:android"
)
private
Integer
deviceType
;
@ApiModelProperty
(
"设备推送token"
)
private
String
deviceToken
;
@ApiModelProperty
(
"头像"
)
private
String
headPortrait
;
@ApiModelProperty
(
"主昵称"
)
private
String
nickname
;
/**
* 客户端平台
* @see com.wecloud.im.enums.PlatformEnum
*/
@NotNull
(
message
=
"平台不可为空"
)
@ApiModelProperty
(
"客户端平台: 1 web, 2 安卓, 3 ios, 4 pc-win, 5 pc-macOs"
)
private
Integer
platform
;
}
core/src/main/java/com/wecloud/im/entity/ImClientDevice.java
0 → 100644
View file @
673029d4
package
com
.
wecloud
.
im
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
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
javax.validation.constraints.NotNull
;
import
java.util.Date
;
/**
* @Author wenzhida
* @Date 2022/3/2 14:52
* @Description 客户端设备
*/
@Data
@Accessors
(
chain
=
true
)
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"客户端设备"
)
public
class
ImClientDevice
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
6988763580951760226L
;
@NotNull
(
message
=
"主键id不能为空"
)
@ApiModelProperty
(
"主键id"
)
@TableId
(
value
=
"id"
,
type
=
IdType
.
INPUT
)
private
Long
id
;
@ApiModelProperty
(
"应用appid"
)
private
Long
fkAppid
;
@ApiModelProperty
(
"client主键id"
)
private
Long
fkClientId
;
@ApiModelProperty
(
"设备不想收到推送提醒, 1想, 0不想"
)
private
Integer
valid
;
@ApiModelProperty
(
"设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac"
)
private
Integer
deviceType
;
@ApiModelProperty
(
"设备推送token"
)
private
String
deviceToken
;
@ApiModelProperty
(
"唯一id"
)
private
String
uniqueDeviceId
;
@ApiModelProperty
(
"创建时间"
)
private
Date
createTime
;
@ApiModelProperty
(
"修改时间"
)
private
Date
updateTime
;
}
core/src/main/java/com/wecloud/im/enums/
Platform
Enum.java
→
core/src/main/java/com/wecloud/im/enums/
DeviceType
Enum.java
View file @
673029d4
...
...
@@ -2,18 +2,23 @@ package com.wecloud.im.enums;
import
io.geekidea.springbootplus.framework.common.enums.BaseEnum
;
public
enum
PlatformEnum
implements
BaseEnum
{
WEB
(
1
,
"web端"
),
/**
* @Author wenzhida
* @Date 2022/3/2 17:15
* @Description 设备类型枚举
*/
public
enum
DeviceTypeEnum
implements
BaseEnum
{
IOS
(
1
,
"IOS端"
),
ANDROID
(
2
,
"安卓端"
),
IOS
(
3
,
"IOS
端"
),
WEB
(
3
,
"web
端"
),
WIN
(
4
,
"PC-windows端"
),
MAC
(
5
,
"PC-macOs端"
);
private
final
Integer
code
;
private
final
String
desc
;
Platform
Enum
(
Integer
code
,
String
desc
)
{
DeviceType
Enum
(
Integer
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
...
...
core/src/main/java/com/wecloud/im/
user
/controller/FriendController.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/controller/FriendController.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
controller
;
package
com
.
wecloud
.
im
.
externalaccess
.
controller
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.friend.param.ImFriendApplyDto
;
import
com.wecloud.im.friend.param.ImFriendBaseParam
;
import
com.wecloud.im.friend.service.ImFriendService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.
user
.param.FriendDto
;
import
com.wecloud.im.
user
.service.FriendService
;
import
com.wecloud.im.
externalaccess
.param.FriendDto
;
import
com.wecloud.im.
externalaccess
.service.FriendService
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
...
...
core/src/main/java/com/wecloud/im/externalaccess/controller/MultiMeetController.java
0 → 100644
View file @
673029d4
package
com
.
wecloud
.
im
.
externalaccess
.
controller
;
import
cn.hutool.crypto.digest.MD5
;
import
com.wecloud.im.externalaccess.param.MultiMeetSignGetParam
;
import
com.wecloud.im.externalaccess.param.SendVerifyCodeParam
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
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.RestController
;
/**
* @Author wenzhida
* @Date 2022/3/3 17:39
* @Description 多人音视频控制器
*/
@Slf4j
@RestController
@RequestMapping
(
"/multiMeet"
)
@Api
(
value
=
"多人音视频API"
,
tags
=
{
"多人音视频"
})
public
class
MultiMeetController
extends
BaseController
{
/**
* 获取sign
*/
@PostMapping
(
"/getSign"
)
@ApiOperation
(
value
=
"获取多人音视频专用sign"
)
public
ApiResult
<
String
>
sendVerifyCode
(
@RequestBody
@Validated
MultiMeetSignGetParam
param
)
{
String
sign
=
new
MD5
().
digestHex
(
param
.
getTimestamp
()
+
param
.
getClientId
()
+
param
.
getAppKey
()
+
param
.
getAppSecret
()
+
param
.
getPlatform
());
return
ApiResult
.
ok
(
sign
);
}
}
core/src/main/java/com/wecloud/im/
user
/controller/UserController.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/controller/UserController.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
controller
;
import
com.wecloud.im.user.param.ChangePhoneParam
;
import
com.wecloud.im.user.param.CheckPhoneParam
;
import
com.wecloud.im.user.param.FindUserParam
;
import
com.wecloud.im.user.param.GetUserParam
;
import
com.wecloud.im.user.param.LoginSuccessDto
;
import
com.wecloud.im.user.param.ModifyHeadPortraitParam
;
import
com.wecloud.im.user.param.ModifyLandouParam
;
import
com.wecloud.im.user.param.ModifyNicknameParam
;
import
com.wecloud.im.user.param.ModifySexParam
;
import
com.wecloud.im.user.param.RegisterSuccessDto
;
import
com.wecloud.im.user.param.ResetPasswordParam
;
import
com.wecloud.im.user.param.UserBaseDto
;
import
com.wecloud.im.user.param.UserLoginParam
;
import
com.wecloud.im.user.param.UserRegisterParam
;
import
com.wecloud.im.user.service.UserService
;
package
com
.
wecloud
.
im
.
externalaccess
.
controller
;
import
com.alibaba.fastjson.JSON
;
import
com.wecloud.im.externalaccess.param.ChangePhoneParam
;
import
com.wecloud.im.externalaccess.param.CheckPhoneParam
;
import
com.wecloud.im.externalaccess.param.FindUserParam
;
import
com.wecloud.im.externalaccess.param.GetUserParam
;
import
com.wecloud.im.externalaccess.param.LoginSuccessDto
;
import
com.wecloud.im.externalaccess.param.ModifyHeadPortraitParam
;
import
com.wecloud.im.externalaccess.param.ModifyLandouParam
;
import
com.wecloud.im.externalaccess.param.ModifyNicknameParam
;
import
com.wecloud.im.externalaccess.param.ModifySexParam
;
import
com.wecloud.im.externalaccess.param.RegisterSuccessDto
;
import
com.wecloud.im.externalaccess.param.ResetPasswordParam
;
import
com.wecloud.im.externalaccess.param.UserBaseDto
;
import
com.wecloud.im.externalaccess.param.UserLoginParam
;
import
com.wecloud.im.externalaccess.param.UserRegisterParam
;
import
com.wecloud.im.externalaccess.service.UserService
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
...
...
@@ -43,8 +44,9 @@ public class UserController extends BaseController {
private
UserService
userService
;
@PostMapping
(
"/checkPhone"
)
@ApiOperation
(
value
=
"校验手机号码是否
可使用
true-可使用 false-不可使用"
)
@ApiOperation
(
value
=
"校验手机号码是否
未注册用户
true-可使用 false-不可使用"
)
public
ApiResult
<
Boolean
>
checkPhone
(
@RequestBody
@Validated
CheckPhoneParam
param
)
{
log
.
info
(
"校验手机号码是否未注册用户 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -54,6 +56,7 @@ public class UserController extends BaseController {
@PostMapping
(
"/register"
)
@ApiOperation
(
value
=
"用户注册接口"
)
public
ApiResult
<
RegisterSuccessDto
>
register
(
@RequestBody
@Validated
UserRegisterParam
param
)
{
log
.
info
(
"用户注册接口入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -64,6 +67,7 @@ public class UserController extends BaseController {
@PostMapping
(
"/login"
)
@ApiOperation
(
value
=
"用户登录接口"
)
public
ApiResult
<
LoginSuccessDto
>
login
(
@RequestBody
@Validated
UserLoginParam
param
)
{
log
.
info
(
"用户登录接口入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -74,6 +78,7 @@ public class UserController extends BaseController {
@PostMapping
(
"/resetPassword"
)
@ApiOperation
(
value
=
"重置密码接口"
)
public
ApiResult
<
Boolean
>
resetPassword
(
@RequestBody
@Validated
ResetPasswordParam
param
)
{
log
.
info
(
"重置密码接口入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -84,6 +89,7 @@ public class UserController extends BaseController {
@PostMapping
(
"/changePhone"
)
@ApiOperation
(
value
=
"更换手机号接口"
)
public
ApiResult
<
Boolean
>
changePhone
(
@RequestBody
@Validated
ChangePhoneParam
param
)
{
log
.
info
(
"更换手机号接口入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -101,6 +107,7 @@ public class UserController extends BaseController {
@PostMapping
(
"/findUser"
)
@ApiOperation
(
value
=
"查找用户"
)
public
ApiResult
<
UserBaseDto
>
findUser
(
@RequestBody
@Validated
FindUserParam
param
)
{
log
.
info
(
"查找用户入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -111,6 +118,7 @@ public class UserController extends BaseController {
@PostMapping
(
"/getUserByUserId"
)
@ApiOperation
(
value
=
"根据用户id查找用户信息"
)
public
ApiResult
<
UserBaseDto
>
getUserByUserId
(
@RequestBody
@Validated
GetUserParam
param
)
{
log
.
info
(
"根据用户id查找用户信息入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -121,6 +129,7 @@ public class UserController extends BaseController {
@PostMapping
(
"/modifyHeadPortrait"
)
@ApiOperation
(
value
=
"修改头像"
)
public
ApiResult
<
Boolean
>
modifyHeadPortrait
(
@RequestBody
@Validated
ModifyHeadPortraitParam
param
)
{
log
.
info
(
"修改头像入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -131,6 +140,7 @@ public class UserController extends BaseController {
@PostMapping
(
"/modifyNickname"
)
@ApiOperation
(
value
=
"修改昵称"
)
public
ApiResult
<
Boolean
>
modifyNickname
(
@RequestBody
@Validated
ModifyNicknameParam
param
)
{
log
.
info
(
"修改昵称入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -141,6 +151,7 @@ public class UserController extends BaseController {
@PostMapping
(
"/modifyLandouNo"
)
@ApiOperation
(
value
=
"修改蓝豆号"
)
public
ApiResult
<
Boolean
>
modifyLandouNo
(
@RequestBody
@Validated
ModifyLandouParam
param
)
{
log
.
info
(
"修改蓝豆号入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
@@ -151,6 +162,7 @@ public class UserController extends BaseController {
@PostMapping
(
"/modifySex"
)
@ApiOperation
(
value
=
"修改性别"
)
public
ApiResult
<
Boolean
>
modifySex
(
@RequestBody
@Validated
ModifySexParam
param
)
{
log
.
info
(
"修改性别入参 {}"
,
JSON
.
toJSONString
(
param
));
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
...
...
core/src/main/java/com/wecloud/im/
user
/controller/VerifyCodeController.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/controller/VerifyCodeController.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
controller
;
package
com
.
wecloud
.
im
.
externalaccess
.
controller
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.wecloud.im.enums.VerifySceneEnum
;
import
com.wecloud.im.user.constant.RedisKeyPrefixConstant
;
import
com.wecloud.im.user.param.SendVerifyCodeParam
;
import
com.wecloud.im.constant.RedisKeyPrefixConstant
;
import
com.wecloud.im.externalaccess.entity.User
;
import
com.wecloud.im.externalaccess.param.SendVerifyCodeParam
;
import
com.wecloud.im.externalaccess.service.UserService
;
import
com.wecloud.im.ws.utils.RedisUtils
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.geekidea.springbootplus.framework.common.enums.BaseEnum
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -34,6 +38,9 @@ public class VerifyCodeController extends BaseController {
@Autowired
private
RedisUtils
redisUtils
;
@Autowired
private
UserService
userService
;
/**
* 发送验证码接口
*/
...
...
@@ -46,6 +53,14 @@ public class VerifyCodeController extends BaseController {
if
(
BaseEnum
.
valueOf
(
VerifySceneEnum
.
class
,
param
.
getVerifyScene
())
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
if
(
VerifySceneEnum
.
RESET_PWD
.
getCode
().
equals
(
param
.
getVerifyScene
()))
{
// 重置密码、找回密码校验手机号码已注册
User
user
=
userService
.
getOne
(
new
QueryWrapper
<
User
>().
lambda
()
.
eq
(
User:
:
getPhone
,
param
.
getPhone
()));
if
(
user
==
null
)
{
throw
new
BusinessException
(
"账号不存在"
);
}
}
// String verifyCode = RandomUtil.generateVerifyCode();
String
verifyCode
=
"666666"
;
String
key
=
new
StringBuilder
(
RedisKeyPrefixConstant
.
VERIFY_CODE_PREFIX
).
append
(
param
.
getVerifyScene
()).
append
(
param
.
getPhone
()).
toString
();
...
...
core/src/main/java/com/wecloud/im/
user
/entity/User.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/entity/User.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
entity
;
package
com
.
wecloud
.
im
.
externalaccess
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
...
...
core/src/main/java/com/wecloud/im/
user
/mapper/UserMapper.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/mapper/UserMapper.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
mapper
;
package
com
.
wecloud
.
im
.
externalaccess
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.wecloud.im.
user
.entity.User
;
import
com.wecloud.im.
externalaccess
.entity.User
;
import
org.springframework.stereotype.Repository
;
/**
...
...
core/src/main/java/com/wecloud/im/
user
/param/ChangePhoneParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/ChangePhoneParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/CheckPhoneParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/CheckPhoneParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/FindUserParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/FindUserParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/FriendDto.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/FriendDto.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
com.wecloud.im.friend.param.ImFriendBaseDto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/2/22 23:20
...
...
@@ -23,6 +20,12 @@ public class FriendDto extends ImFriendBaseDto {
@ApiModelProperty
(
"昵称"
)
private
String
nickname
;
@ApiModelProperty
(
"好友拒绝原因"
)
private
String
rejectRemark
;
@ApiModelProperty
(
"好友请求说明"
)
private
String
requestRemark
;
/**
* 头像路径url
*/
...
...
core/src/main/java/com/wecloud/im/
user
/param/GetUserParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/GetUserParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/LoginSuccessDto.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/LoginSuccessDto.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/ModifyHeadPortraitParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/ModifyHeadPortraitParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/ModifyLandouParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/ModifyLandouParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/ModifyNicknameParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/ModifyNicknameParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/ModifySexParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/ModifySexParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/externalaccess/param/MultiMeetSignGetParam.java
0 → 100644
View file @
673029d4
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/3/3 17:42
* @Description 多人音视频sign获取入参
*/
@Data
public
class
MultiMeetSignGetParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1538118936608500035L
;
@ApiModelProperty
(
"时间戳"
)
@NotNull
(
message
=
"时间戳不能为空"
)
private
String
timestamp
;
@ApiModelProperty
(
"client客户端id"
)
@NotNull
(
message
=
"client客户端id不能为空"
)
private
String
clientId
;
@ApiModelProperty
(
"appKey"
)
@NotNull
(
message
=
"appKey不能为空"
)
private
String
appKey
;
@ApiModelProperty
(
"客户端平台: 1 web, 2 安卓, 3 ios, 4 pc-win, 5 pc-macOs"
)
@NotNull
(
message
=
"客户端平台不能为空"
)
private
Integer
platform
;
@ApiModelProperty
(
"密钥"
)
@NotNull
(
message
=
"密钥不能为空"
)
private
String
appSecret
;
}
core/src/main/java/com/wecloud/im/
user
/param/RegisterSuccessDto.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/RegisterSuccessDto.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/ResetPasswordParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/ResetPasswordParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/SendVerifyCodeParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/SendVerifyCodeParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/UserBaseDto.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/UserBaseDto.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/param/UserLoginParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/UserLoginParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
com.wecloud.im.enums.DeviceTypeEnum
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
@@ -35,13 +36,11 @@ public class UserLoginParam implements Serializable {
private
String
appKey
;
/**
*
客户端平台
* @see
com.wecloud.im.enums.Platform
Enum
*
设备类型
* @see
DeviceType
Enum
*/
@NotNull
(
message
=
"
平台
不可为空"
)
@ApiModelProperty
(
"
客户端平台: 1 web, 2 安卓, 3 ios, 4 pc-win, 5 pc-macOs
"
)
private
Integer
platform
;
@NotNull
(
message
=
"
设备类型
不可为空"
)
@ApiModelProperty
(
"
设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac
"
)
private
Integer
deviceType
;
@ApiModelProperty
(
"设备推送token"
)
private
String
deviceToken
;
}
core/src/main/java/com/wecloud/im/
user
/param/UserRegisterParam.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/param/UserRegisterParam.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
param
;
package
com
.
wecloud
.
im
.
externalaccess
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
core/src/main/java/com/wecloud/im/
user
/service/FriendService.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/service/FriendService.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
service
;
package
com
.
wecloud
.
im
.
externalaccess
.
service
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.google.common.collect.Lists
;
...
...
@@ -10,9 +10,9 @@ import com.wecloud.im.friend.param.ImFriendBaseParam;
import
com.wecloud.im.friend.param.ImFriendPageParam
;
import
com.wecloud.im.friend.service.ImFriendService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.
user
.entity.User
;
import
com.wecloud.im.
user
.mapper.UserMapper
;
import
com.wecloud.im.
user
.param.FriendDto
;
import
com.wecloud.im.
externalaccess
.entity.User
;
import
com.wecloud.im.
externalaccess
.mapper.UserMapper
;
import
com.wecloud.im.
externalaccess
.param.FriendDto
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
...
...
@@ -44,7 +44,7 @@ public class FriendService extends BaseServiceImpl<UserMapper, User> {
public
FriendDto
getFriendInfo
(
ImFriendBaseParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
throw
new
BusinessException
(
"当前登录用户未找到"
);
}
...
...
@@ -74,7 +74,7 @@ public class FriendService extends BaseServiceImpl<UserMapper, User> {
* 全量获取好友列表
*/
public
List
<
FriendDto
>
getFriends
()
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
throw
new
BusinessException
(
"当前登录用户未找到"
);
}
...
...
@@ -116,7 +116,7 @@ public class FriendService extends BaseServiceImpl<UserMapper, User> {
* 获取好友列表申请
*/
public
List
<
FriendDto
>
getApplyFriends
()
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
throw
new
BusinessException
(
"当前登录用户未找到"
);
}
...
...
core/src/main/java/com/wecloud/im/
user
/service/UserService.java
→
core/src/main/java/com/wecloud/im/
externalaccess
/service/UserService.java
View file @
673029d4
package
com
.
wecloud
.
im
.
user
.
service
;
package
com
.
wecloud
.
im
.
externalaccess
.
service
;
import
cn.hutool.core.lang.Snowflake
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.wecloud.im.constant.NumberConstant
;
import
com.wecloud.im.constant.RedisKeyPrefixConstant
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImClientDevice
;
import
com.wecloud.im.enums.FriendStateEnum
;
import
com.wecloud.im.enums.RelationEnum
;
import
com.wecloud.im.enums.VerifySceneEnum
;
import
com.wecloud.im.externalaccess.entity.User
;
import
com.wecloud.im.externalaccess.mapper.UserMapper
;
import
com.wecloud.im.externalaccess.param.ChangePhoneParam
;
import
com.wecloud.im.externalaccess.param.CheckPhoneParam
;
import
com.wecloud.im.externalaccess.param.FindUserParam
;
import
com.wecloud.im.externalaccess.param.GetUserParam
;
import
com.wecloud.im.externalaccess.param.LoginSuccessDto
;
import
com.wecloud.im.externalaccess.param.ModifyHeadPortraitParam
;
import
com.wecloud.im.externalaccess.param.ModifyLandouParam
;
import
com.wecloud.im.externalaccess.param.ModifyNicknameParam
;
import
com.wecloud.im.externalaccess.param.ModifySexParam
;
import
com.wecloud.im.externalaccess.param.ResetPasswordParam
;
import
com.wecloud.im.externalaccess.param.UserBaseDto
;
import
com.wecloud.im.externalaccess.param.UserLoginParam
;
import
com.wecloud.im.externalaccess.param.UserRegisterParam
;
import
com.wecloud.im.friend.entity.ImFriend
;
import
com.wecloud.im.friend.service.ImFriendService
;
import
com.wecloud.im.param.add.ImClientHeadPortraitAdd
;
import
com.wecloud.im.param.add.ImClientNicknameUpdate
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImClientBlacklistService
;
import
com.wecloud.im.service.ImClientDeviceService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.user.constant.RedisKeyPrefixConstant
;
import
com.wecloud.im.user.entity.User
;
import
com.wecloud.im.user.mapper.UserMapper
;
import
com.wecloud.im.user.param.ChangePhoneParam
;
import
com.wecloud.im.user.param.CheckPhoneParam
;
import
com.wecloud.im.user.param.FindUserParam
;
import
com.wecloud.im.user.param.GetUserParam
;
import
com.wecloud.im.user.param.LoginSuccessDto
;
import
com.wecloud.im.user.param.ModifyHeadPortraitParam
;
import
com.wecloud.im.user.param.ModifyLandouParam
;
import
com.wecloud.im.user.param.ModifyNicknameParam
;
import
com.wecloud.im.user.param.ModifySexParam
;
import
com.wecloud.im.user.param.ResetPasswordParam
;
import
com.wecloud.im.user.param.UserBaseDto
;
import
com.wecloud.im.user.param.UserLoginParam
;
import
com.wecloud.im.user.param.UserRegisterParam
;
import
com.wecloud.im.ws.utils.RedisUtils
;
import
com.wecloud.utils.AesUtil
;
import
com.wecloud.utils.RandomUtil
;
...
...
@@ -62,6 +65,9 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
private
ImClientService
imClientService
;
@Autowired
private
ImClientDeviceService
imClientDeviceService
;
@Autowired
private
ImFriendService
imFriendService
;
@Autowired
...
...
@@ -70,19 +76,21 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
/**
* 校验手机号码是否可使用
*
* @param param
*/
public
Boolean
checkPhone
(
CheckPhoneParam
param
)
{
User
userExist
=
this
.
getOne
(
new
QueryWrapper
<
User
>().
lambda
()
.
eq
(
User:
:
getPhone
,
param
.
getPhone
()));
if
(
userExist
!=
null
)
{
return
Boolean
.
FALSE
;
throw
new
BusinessException
(
"该手机号已被注册"
)
;
}
return
Boolean
.
TRUE
;
}
/**
* 注册用户
*
* @param param
*/
public
String
registerUser
(
UserRegisterParam
param
)
{
...
...
@@ -95,6 +103,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
}
User
user
=
new
User
();
user
.
setId
(
SnowflakeUtil
.
getId
());
user
.
setNickname
(
"蓝豆-"
+
RandomUtil
.
generateRandomStr
(
6
));
user
.
setIdNumber
(
this
.
getLandouNo
());
user
.
setPhone
(
param
.
getPhone
());
user
.
setPassword
(
AesUtil
.
encrypt
(
param
.
getPassword
()));
...
...
@@ -106,6 +115,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
/**
* 用户登录
*
* @param param
*/
public
LoginSuccessDto
loginUser
(
UserLoginParam
param
)
{
...
...
@@ -129,16 +139,21 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
.
eq
(
ImClient:
:
getClientId
,
user
.
getId
()));
if
(
imClient
==
null
)
{
imClient
=
new
ImClient
();
imClient
.
setId
(
new
Snowflake
(
1L
,
1L
).
nex
tId
());
imClient
.
setId
(
SnowflakeUtil
.
ge
tId
());
imClient
.
setFkAppid
(
imApplication
.
getId
());
imClient
.
setClientId
(
user
.
getId
().
toString
());
imClient
.
setHeadPortrait
(
user
.
getHeadPortrait
());
imClient
.
setNickname
(
user
.
getNickname
());
imClient
.
setPlatform
(
param
.
getPlatform
());
imClientService
.
save
(
imClient
);
}
else
{
imClient
.
setPlatform
(
param
.
getPlatform
());
imClientService
.
updateById
(
imClient
);
ImClientDevice
imClientDevice
=
new
ImClientDevice
();
imClientDevice
.
setId
(
SnowflakeUtil
.
getId
());
imClientDevice
.
setFkAppid
(
imApplication
.
getId
());
imClientDevice
.
setFkClientId
(
imClient
.
getId
());
imClientDevice
.
setValid
(
1
);
imClientDevice
.
setDeviceType
(
param
.
getDeviceType
());
imClientDevice
.
setCreateTime
(
new
Date
());
imClientDevice
.
setUpdateTime
(
new
Date
());
imClientDeviceService
.
save
(
imClientDevice
);
}
LoginSuccessDto
loginSuccessDto
=
new
LoginSuccessDto
();
...
...
@@ -149,6 +164,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
/**
* 重置密码
*
* @param param
*/
public
void
resetPassword
(
ResetPasswordParam
param
)
{
...
...
@@ -165,6 +181,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
/**
* 更换手机号码
*
* @param param
*/
public
void
changePhone
(
ChangePhoneParam
param
)
{
...
...
@@ -192,7 +209,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
* 查找本人信息
*/
public
UserBaseDto
myInfo
()
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
User
user
=
this
.
getOne
(
new
QueryWrapper
<
User
>().
lambda
()
.
eq
(
User:
:
getId
,
currentClient
.
getClientId
()));
if
(
user
==
null
)
{
...
...
@@ -206,6 +223,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
/**
* 查找用户
*
* @param param
*/
public
UserBaseDto
findUser
(
FindUserParam
param
)
{
...
...
@@ -222,7 +240,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
userBaseDto
.
setRelation
(
RelationEnum
.
STRANGER
.
getCode
());
// 查询该好友与自己关系: 陌生人、好友、被拉黑名单
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
ImFriend
imFriend
=
imFriendService
.
getByKey
(
currentClient
.
getClientId
(),
user
.
getId
().
toString
());
if
(
imFriend
!=
null
&&
FriendStateEnum
.
CONFORM
.
getCode
().
equals
(
imFriend
.
getState
()))
{
userBaseDto
.
setRelation
(
RelationEnum
.
FRIEND
.
getCode
());
...
...
@@ -237,6 +255,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
/**
* 查找用户
*
* @param param
*/
public
UserBaseDto
getUserByUserId
(
GetUserParam
param
)
{
...
...
@@ -250,7 +269,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
userBaseDto
.
setUserId
(
user
.
getId
().
toString
());
userBaseDto
.
setRelation
(
RelationEnum
.
STRANGER
.
getCode
());
// 查询该好友与自己关系: 陌生人、好友、被拉黑名单
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
ImFriend
imFriend
=
imFriendService
.
getByKey
(
currentClient
.
getClientId
(),
user
.
getId
().
toString
());
if
(
imFriend
!=
null
&&
FriendStateEnum
.
CONFORM
.
getCode
().
equals
(
imFriend
.
getState
()))
{
userBaseDto
.
setRelation
(
RelationEnum
.
FRIEND
.
getCode
());
...
...
@@ -264,6 +283,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
/**
* 修改头像
*
* @param param
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
...
@@ -281,6 +301,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
/**
* 修改昵称
*
* @param param
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
...
@@ -289,6 +310,9 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
if
(
user
==
null
)
{
throw
new
BusinessException
(
"查无用户"
);
}
if
(
param
.
getNickname
().
length
()
>
NumberConstant
.
NUM_30
)
{
throw
new
BusinessException
(
"昵称长度需小于30位"
);
}
user
.
setNickname
(
param
.
getNickname
());
this
.
updateById
(
user
);
ImClientNicknameUpdate
imClientNicknameUpdate
=
new
ImClientNicknameUpdate
();
...
...
@@ -298,6 +322,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
/**
* 修改昵称
*
* @param param
*/
public
void
modifyLandouNo
(
ModifyLandouParam
param
)
{
...
...
@@ -309,12 +334,16 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
if
(
userByLando
!=
null
)
{
throw
new
BusinessException
(
"该蓝豆号已被使用,请更换"
);
}
if
(
param
.
getLandouNo
().
length
()
>
NumberConstant
.
NUM_32
)
{
throw
new
BusinessException
(
"蓝豆号输入长度需小于32位"
);
}
user
.
setIdNumber
(
param
.
getLandouNo
());
this
.
updateById
(
user
);
}
/**
* 修改性别
*
* @param param
*/
public
void
modifySex
(
ModifySexParam
param
)
{
...
...
@@ -328,16 +357,18 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
/**
* 根据蓝豆号获取用户
*
* @param landouNo
* @return
*/
public
User
getByLandouNo
(
String
landouNo
)
{
public
User
getByLandouNo
(
String
landouNo
)
{
return
this
.
getOne
(
new
QueryWrapper
<
User
>().
lambda
()
.
eq
(
User:
:
getIdNumber
,
landouNo
));
}
/**
* 校验短信验证码
*
* @param verifyCode
* @param redisKey
*/
...
...
@@ -351,9 +382,10 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
/**
* 获取可使用蓝豆号
*
* @return
*/
private
String
getLandouNo
()
{
private
String
getLandouNo
()
{
String
landouNo
;
do
{
landouNo
=
RandomUtil
.
generateRandomStr
(
8
);
...
...
core/src/main/java/com/wecloud/im/friend/controller/ImFriendController.java
View file @
673029d4
...
...
@@ -58,7 +58,7 @@ public class ImFriendController extends BaseController {
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
...
...
@@ -79,7 +79,7 @@ public class ImFriendController extends BaseController {
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
...
...
@@ -100,7 +100,7 @@ public class ImFriendController extends BaseController {
@PostMapping
(
"/unsureFriends"
)
@ApiOperation
(
value
=
"待接受的好友请求列表,最多只返回1000个"
)
public
ApiResult
<
List
<
ImFriendApplyDto
>>
getUnsureFriends
()
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
...
...
@@ -117,7 +117,7 @@ public class ImFriendController extends BaseController {
if
(
param
==
null
||
param
.
getAgree
()
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
...
...
@@ -137,7 +137,7 @@ public class ImFriendController extends BaseController {
@PostMapping
(
"/batchDelete"
)
@ApiOperation
(
value
=
"删除好友"
)
public
ApiResult
<
Boolean
>
batchDeleteFriend
(
@RequestBody
ImDeleteFriendParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
...
...
@@ -153,7 +153,7 @@ public class ImFriendController extends BaseController {
@OperationLog
(
name
=
"好友分页列表"
,
type
=
OperationLogType
.
PAGE
)
@ApiOperation
(
value
=
"好友分页列表"
)
public
ApiResult
<
Paging
<
ImFriendBaseDto
>>
getImFriendPageList
(
@RequestBody
ImFriendPageParam
pageParam
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
...
...
@@ -169,7 +169,7 @@ public class ImFriendController extends BaseController {
@OperationLog
(
name
=
"批量创建好友推荐"
,
type
=
OperationLogType
.
PAGE
)
@ApiOperation
(
value
=
"批量创建好友推荐"
)
public
ApiResult
<
Boolean
>
batchCreateRecommend
(
@RequestBody
ImCreateRecommendParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
...
...
@@ -192,7 +192,7 @@ public class ImFriendController extends BaseController {
@OperationLog
(
name
=
"好友推荐分页列表"
,
type
=
OperationLogType
.
PAGE
)
@ApiOperation
(
value
=
"好友推荐分页列表"
)
public
ApiResult
<
Paging
<
ImFriendRecommendDto
>>
getImFriendRecommendPageList
(
@RequestBody
ImFriendPageParam
pageParam
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
...
...
@@ -207,7 +207,7 @@ public class ImFriendController extends BaseController {
@PostMapping
(
"/recommend/batchDelete"
)
@ApiOperation
(
value
=
"删除好友推荐"
)
public
ApiResult
<
Boolean
>
batchDeleteRecommend
(
@RequestBody
ImDeleteRecommendParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
...
...
core/src/main/java/com/wecloud/im/friend/service/FriendEventSender.java
View file @
673029d4
...
...
@@ -38,8 +38,8 @@ public class FriendEventSender {
private
final
static
String
FRIEND_APPLY_TITLE
=
"好友申请"
;
private
final
static
String
FRIEND_APPLY_TITLE_SUB
=
"您有好友申请待验证"
;
private
final
static
String
FRIEND_APPROVE_TITLE
=
"好友验证结果"
;
private
final
static
String
FRIEND_APPROVE_TITLE_AGREE
=
"您的好友
拒绝
了您的好友申请"
;
private
final
static
String
FRIEND_APPROVE_TITLE_REJECT
=
"您的好友
同意
了您的好友申请"
;
private
final
static
String
FRIEND_APPROVE_TITLE_AGREE
=
"您的好友
同意
了您的好友申请"
;
private
final
static
String
FRIEND_APPROVE_TITLE_REJECT
=
"您的好友
拒绝
了您的好友申请"
;
public
void
sendFriendApplyEventMsg
(
ImClient
claimerClient
,
ImClient
receiveClient
,
String
requestRemark
)
{
...
...
@@ -66,7 +66,9 @@ public class FriendEventSender {
pushVO
.
setTitle
(
FRIEND_APPLY_TITLE
);
pushVO
.
setSubTitle
(
FRIEND_APPLY_TITLE_SUB
);
PushDTO
pushDTO
=
mqSender
.
buildPushDto
(
pushVO
,
receiveClient
,
app
);
mqSender
.
orderSend
(
MqConstant
.
Topic
.
IM_MSG_TOPIC
,
MqConstant
.
Tag
.
IM_MSG_TAG
,
pushDTO
);
if
(
pushDTO
!=
null
)
{
mqSender
.
orderSend
(
MqConstant
.
Topic
.
IM_ORDER_MSG_TOPIC
,
MqConstant
.
Tag
.
IM_ORDER_MSG_TAG
,
pushDTO
);
}
}
public
void
sendFriendApproveEventMsg
(
ImClient
claimerClient
,
ImClient
receiveClient
,
boolean
isAgree
,
String
rejectRemark
)
{
...
...
@@ -94,6 +96,8 @@ public class FriendEventSender {
pushVO
.
setTitle
(
FRIEND_APPROVE_TITLE
);
pushVO
.
setSubTitle
(
isAgree
?
FRIEND_APPROVE_TITLE_AGREE
:
FRIEND_APPROVE_TITLE_REJECT
);
PushDTO
pushDTO
=
mqSender
.
buildPushDto
(
pushVO
,
receiveClient
,
app
);
mqSender
.
orderSend
(
MqConstant
.
Topic
.
IM_MSG_TOPIC
,
MqConstant
.
Tag
.
IM_MSG_TAG
,
pushDTO
);
if
(
pushDTO
!=
null
)
{
mqSender
.
orderSend
(
MqConstant
.
Topic
.
IM_ORDER_MSG_TOPIC
,
MqConstant
.
Tag
.
IM_ORDER_MSG_TAG
,
pushDTO
);
}
}
}
core/src/main/java/com/wecloud/im/friend/service/ImFriendService.java
View file @
673029d4
...
...
@@ -4,6 +4,7 @@ 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.google.common.collect.Lists
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.enums.FriendStateEnum
;
import
com.wecloud.im.friend.entity.ImFriend
;
...
...
@@ -101,7 +102,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
if
(
StringUtils
.
isNotEmpty
(
friendName
))
{
my
.
setFriendName
(
friendName
);
}
this
.
updateByKey
AndClaimer
(
my
);
this
.
updateByKey
(
my
);
}
else
{
my
.
setId
(
SnowflakeUtil
.
getId
());
my
.
setCreateTime
(
new
Date
());
...
...
@@ -118,10 +119,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
if
(
StringUtils
.
isNotEmpty
(
requestRemark
))
{
friend
.
setRequestRemark
(
requestRemark
);
}
if
(
StringUtils
.
isNotEmpty
(
friendName
))
{
friend
.
setFriendName
(
friendName
);
}
this
.
updateByKeyAndClaimer
(
friend
);
this
.
updateByKey
(
friend
);
}
else
{
friend
.
setId
(
SnowflakeUtil
.
getId
());
friend
.
setCreateTime
(
new
Date
());
...
...
@@ -137,7 +135,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
/**
* 根据 自己id和好友id查询好友信息
* 根据 自己id和好友id查询好友信息
- 待确认、已确认
* @param clientId
* @param friendClientId
* @return
...
...
@@ -163,6 +161,19 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
}
/**
* 根据 自己id和好友id,更新好友信息
* @param imFriend
*/
public
boolean
updateByKey
(
ImFriend
imFriend
)
{
// 不更新id
imFriend
.
setId
(
null
);
imFriend
.
setCreateTime
(
null
);
return
this
.
update
(
imFriend
,
new
QueryWrapper
<
ImFriend
>().
lambda
()
.
eq
(
ImFriend:
:
getClientId
,
imFriend
.
getClientId
())
.
eq
(
ImFriend:
:
getClientIdFriend
,
imFriend
.
getClientIdFriend
()));
}
/**
* 好友通过/拒绝
* @param currentClient
* @param friendClient
...
...
@@ -184,7 +195,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
if
(
StringUtils
.
isNotEmpty
(
rejectRemark
))
{
friend
.
setRejectRemark
(
rejectRemark
);
}
boolean
ok1
=
this
.
updateByKey
AndClaimer
(
friend
);
boolean
ok1
=
this
.
updateByKey
(
friend
);
// 同时更新我的
ImFriend
my
=
new
ImFriend
();
my
.
setClientId
(
currentClient
.
getClientId
());
...
...
@@ -194,7 +205,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
if
(
StringUtils
.
isNotEmpty
(
rejectRemark
))
{
my
.
setRejectRemark
(
rejectRemark
);
}
boolean
ok2
=
this
.
updateByKey
AndClaimer
(
my
);
boolean
ok2
=
this
.
updateByKey
(
my
);
friendEventSender
.
sendFriendApproveEventMsg
(
currentClient
,
friendClient
,
agree
,
rejectRemark
);
...
...
core/src/main/java/com/wecloud/im/mapper/ImClientBlacklistMapper.java
View file @
673029d4
...
...
@@ -25,7 +25,7 @@ public interface ImClientBlacklistMapper extends BaseMapper<ImClientBlacklist> {
* @param clientId
* @return
*/
IPage
<
ImClientBlacklistQueryVo
>
getImClientBlacklistPageList
(
@Param
(
"page"
)
Page
page
,
@Param
(
"clientId"
)
Lo
ng
clientId
);
IPage
<
ImClientBlacklistQueryVo
>
getImClientBlacklistPageList
(
@Param
(
"page"
)
Page
page
,
@Param
(
"clientId"
)
Stri
ng
clientId
);
/**
* 根据ID获取查询对象
...
...
core/src/main/java/com/wecloud/im/mapper/ImClientDeviceMapper.java
0 → 100644
View file @
673029d4
package
com
.
wecloud
.
im
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.wecloud.im.entity.ImClientDevice
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
/**
* @Author wenzhida
* @Date 2022/3/2 14:57
* @Description 客户端设备mapper
*/
@Repository
public
interface
ImClientDeviceMapper
extends
BaseMapper
<
ImClientDevice
>
{
/**
* 清除旧token
* @param appId
* @param deviceToken
* @return
*/
int
removeOldToken
(
@Param
(
"appId"
)
Long
appId
,
@Param
(
"deviceToken"
)
String
deviceToken
);
}
core/src/main/java/com/wecloud/im/mapper/ImClientMapper.java
View file @
673029d4
...
...
@@ -32,10 +32,6 @@ public interface ImClientMapper extends BaseMapper<ImClient> {
*/
IPage
<
ImClientQueryVo
>
getImClientPageList
(
@Param
(
"page"
)
Page
page
,
@Param
(
"param"
)
ImClientPageParam
imClientPageParam
);
int
removeOldToken
(
@Param
(
"appId"
)
Long
appId
,
@Param
(
"deviceToken"
)
String
deviceToken
);
List
<
GetInfoListVo
>
getInfoList
(
@Param
(
"appId"
)
Long
appId
,
@Param
(
"conversationId"
)
Long
conversationId
,
@Param
(
"clientIds"
)
List
<
String
>
clientIds
);
List
<
ImClientSimpleDto
>
getSimpleClients
(
@Param
(
"appId"
)
Long
appId
,
@Param
(
"clientIds"
)
List
<
String
>
clientIds
);
...
...
core/src/main/java/com/wecloud/im/mq/MqSender.java
View file @
673029d4
package
com
.
wecloud
.
im
.
mq
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.google.common.collect.Lists
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImClientDevice
;
import
com.wecloud.im.service.ImClientDeviceService
;
import
com.wecloud.im.service.ImInboxService
;
import
com.wecloud.im.ws.model.request.PushVO
;
import
com.wecloud.pushserver.client.model.
constant.MqConstant
;
import
com.wecloud.pushserver.client.model.dto.
ImApplication
DTO
;
import
com.wecloud.pushserver.client.model.dto.
ImClient
DTO
;
import
com.wecloud.pushserver.client.model.
dto.ApplicationDTO
;
import
com.wecloud.pushserver.client.model.dto.
Client
DTO
;
import
com.wecloud.pushserver.client.model.dto.
ClientDevice
DTO
;
import
com.wecloud.pushserver.client.model.dto.MessageDTO
;
import
com.wecloud.pushserver.client.model.dto.PushDTO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.rocketmq.client.producer.SendResult
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
import
static
com
.
wecloud
.
im
.
ws
.
ImConstant
.
PUSH_BODY
;
import
static
com
.
wecloud
.
im
.
ws
.
ImConstant
.
PUSH_TITLE
;
...
...
@@ -34,8 +40,12 @@ public class MqSender {
@Autowired
private
RocketMqProducerService
rocketMqProducerService
;
@Autowired
private
ImClientDeviceService
imClientDeviceService
;
/**
* mq同步推送方法
*
* @param topic
* @param tag
* @param pushDTO
...
...
@@ -50,6 +60,7 @@ public class MqSender {
/**
* mq异步推送方法
*
* @param topic
* @param tag
* @param pushDTO
...
...
@@ -62,6 +73,7 @@ public class MqSender {
/**
* mq按顺序发送
*
* @param topic
* @param tag
* @param pushDTO
...
...
@@ -89,23 +101,36 @@ public class MqSender {
// 统计未读消息数量
int
badge
=
imInboxService
.
countMyNotReadCount
(
imClientReceiver
.
getId
());
messageDTO
.
setBadge
(
badge
);
ImClientDTO
imClientDTO
=
new
ImClientDTO
();
imClientDTO
.
setClientId
(
imClientReceiver
.
getClientId
());
imClientDTO
.
setValid
(
imClientReceiver
.
getValid
());
imClientDTO
.
setDeviceType
(
imClientReceiver
.
getDeviceType
());
imClientDTO
.
setDeviceToken
(
imClientReceiver
.
getDeviceToken
());
messageDTO
.
setImClientDTO
(
imClientDTO
);
ImApplicationDTO
imApplicationDTO
=
new
ImApplicationDTO
();
imApplicationDTO
.
setId
(
imApplication
.
getId
());
imApplicationDTO
.
setAppKey
(
imApplication
.
getAppKey
());
imApplicationDTO
.
setAppSecret
(
imApplication
.
getAppSecret
());
imApplicationDTO
.
setAppName
(
imApplication
.
getAppName
());
imApplicationDTO
.
setIosPushChannel
(
imApplication
.
getIosPushChannel
());
imApplicationDTO
.
setAndroidPushChannel
(
imApplication
.
getAndroidPushChannel
());
imApplicationDTO
.
setUmengKey
(
imApplication
.
getUmengKey
());
imApplicationDTO
.
setUmengSecret
(
imApplication
.
getUmengSecret
());
imApplicationDTO
.
setFirebaseSecret
(
imApplication
.
getFirebaseSecret
());
messageDTO
.
setImApplicationDTO
(
imApplicationDTO
);
ClientDTO
clientDTO
=
new
ClientDTO
();
clientDTO
.
setClientId
(
imClientReceiver
.
getClientId
());
List
<
ImClientDevice
>
clientDeviceList
=
imClientDeviceService
.
list
(
new
QueryWrapper
<
ImClientDevice
>().
lambda
()
.
eq
(
ImClientDevice:
:
getFkClientId
,
imClientReceiver
.
getId
()));
if
(
CollectionUtils
.
isEmpty
(
clientDeviceList
))
{
log
.
info
(
"接收人信息 {} 查无推送设备"
,
imClientReceiver
.
getId
());
return
null
;
}
List
<
ClientDeviceDTO
>
deviceDTOList
=
Lists
.
newArrayList
();
for
(
ImClientDevice
imClientDevice
:
clientDeviceList
)
{
ClientDeviceDTO
clientDeviceDTO
=
new
ClientDeviceDTO
();
clientDeviceDTO
.
setValid
(
imClientDevice
.
getValid
());
clientDeviceDTO
.
setDeviceType
(
imClientDevice
.
getDeviceType
());
clientDeviceDTO
.
setDeviceToken
(
imClientDevice
.
getDeviceToken
());
deviceDTOList
.
add
(
clientDeviceDTO
);
}
clientDTO
.
setDeviceDTOList
(
deviceDTOList
);
messageDTO
.
setClientDTO
(
clientDTO
);
ApplicationDTO
applicationDTO
=
new
ApplicationDTO
();
applicationDTO
.
setId
(
imApplication
.
getId
());
applicationDTO
.
setAppKey
(
imApplication
.
getAppKey
());
applicationDTO
.
setAppSecret
(
imApplication
.
getAppSecret
());
applicationDTO
.
setAppName
(
imApplication
.
getAppName
());
applicationDTO
.
setIosPushChannel
(
imApplication
.
getIosPushChannel
());
applicationDTO
.
setAndroidPushChannel
(
imApplication
.
getAndroidPushChannel
());
applicationDTO
.
setUmengKey
(
imApplication
.
getUmengKey
());
applicationDTO
.
setUmengSecret
(
imApplication
.
getUmengSecret
());
applicationDTO
.
setFirebaseSecret
(
imApplication
.
getFirebaseSecret
());
messageDTO
.
setApplicationDTO
(
applicationDTO
);
pushDTO
.
setMessageDTOList
(
Lists
.
newArrayList
(
messageDTO
));
return
pushDTO
;
}
...
...
core/src/main/java/com/wecloud/im/param/ImHistoryMessagePageParam.java
View file @
673029d4
...
...
@@ -28,10 +28,17 @@ public class ImHistoryMessagePageParam extends BasePageOrderParam {
/**
* 消息id最小值
*/
@ApiModelProperty
(
"消息id最小值"
)
private
Long
msgIdStart
;
/**
* 消息id最大值
*/
@ApiModelProperty
(
"消息id最大值"
)
private
Long
msgIdEnd
;
/**
* 当前操作人client主键id
*/
private
Long
currentFkClientId
;
}
core/src/main/java/com/wecloud/im/param/LogoutParam.java
0 → 100644
View file @
673029d4
package
com
.
wecloud
.
im
.
param
;
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
javax.validation.constraints.NotNull
;
/**
* @Author wenzhida
* @Date 2022/3/2 18:11
* @Description 登出操作入参
*/
@Data
@ApiModel
(
value
=
"登出操作入参"
)
public
class
LogoutParam
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
-
2718673661281424767L
;
/**
* 设备类型
* @see com.wecloud.im.enums.DeviceTypeEnum
*/
@ApiModelProperty
(
"设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac"
)
@NotNull
(
message
=
"设备类型不能为空"
)
private
Integer
deviceType
;
@ApiModelProperty
(
"唯一设备id"
)
private
String
uniqueDeviceId
;
}
core/src/main/java/com/wecloud/im/param/add/
ImClientDeviceInfoAdd
.java
→
core/src/main/java/com/wecloud/im/param/add/
ClientDeviceUpdateParam
.java
View file @
673029d4
...
...
@@ -17,15 +17,22 @@ import lombok.experimental.Accessors;
@Accessors
(
chain
=
true
)
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"添加或修改推送设备信息"
)
public
class
ImClientDeviceInfoAdd
extends
BaseEntity
{
public
class
ClientDeviceUpdateParam
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
"设备不想收到推送提醒, 1想, 0不想"
)
private
Integer
valid
;
@ApiModelProperty
(
"设备类型1:ios; 2:android; 3:web"
)
/**
* 设备类型
* @see com.wecloud.im.enums.DeviceTypeEnum
*/
@ApiModelProperty
(
"设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac"
)
private
Integer
deviceType
;
@ApiModelProperty
(
"设备推送token"
)
private
String
deviceToken
;
@ApiModelProperty
(
"唯一设备id"
)
private
String
uniqueDeviceId
;
}
core/src/main/java/com/wecloud/im/service/ImClientDeviceService.java
0 → 100644
View file @
673029d4
package
com
.
wecloud
.
im
.
service
;
import
com.wecloud.im.entity.ImClientDevice
;
import
io.geekidea.springbootplus.framework.common.service.BaseService
;
/**
* @Author wenzhida
* @Date 2022/3/2 14:58
* @Description 客户端设备服务接口
*/
public
interface
ImClientDeviceService
extends
BaseService
<
ImClientDevice
>
{
/**
* 清除旧token
* @param appId
* @param deviceToken
* @return
*/
int
removeOldToken
(
Long
appId
,
String
deviceToken
);
}
core/src/main/java/com/wecloud/im/service/ImClientService.java
View file @
673029d4
...
...
@@ -6,7 +6,8 @@ import com.wecloud.im.param.GetClientInfoParam;
import
com.wecloud.im.param.ImClientPageParam
;
import
com.wecloud.im.param.ImClientQueryVo
;
import
com.wecloud.im.param.ImClientSimpleDto
;
import
com.wecloud.im.param.add.ImClientDeviceInfoAdd
;
import
com.wecloud.im.param.LogoutParam
;
import
com.wecloud.im.param.add.ClientDeviceUpdateParam
;
import
com.wecloud.im.param.add.ImClientHeadPortraitAdd
;
import
com.wecloud.im.param.add.ImClientHeadPortraitAndNicknameUpdate
;
import
com.wecloud.im.param.add.ImClientNicknameAdd
;
...
...
@@ -17,7 +18,6 @@ import com.wecloud.im.vo.MyInfoVo;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.service.BaseService
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
java.util.List
;
...
...
@@ -86,9 +86,14 @@ public interface ImClientService extends BaseService<ImClient> {
* @param imClientDevice
* @return
*/
boolean
updateDeviceInfo
(
ImClientDeviceInfoAdd
imClientDevice
);
boolean
updateDeviceInfo
(
ClientDeviceUpdateParam
imClientDevice
);
boolean
logout
();
/**
* 登出操作
* @param param
* @return
*/
boolean
logout
(
LogoutParam
param
);
/**
...
...
@@ -110,15 +115,6 @@ public interface ImClientService extends BaseService<ImClient> {
boolean
deleteImClient
(
Long
id
)
throws
Exception
;
/**
* 移除旧的设备token
*
* @param appId
* @param deviceToken
* @return
*/
int
removeOldToken
(
Long
appId
,
String
deviceToken
);
/**
* 获取分页对象
*
* @param imClientPageParam
...
...
@@ -133,7 +129,7 @@ public interface ImClientService extends BaseService<ImClient> {
*
* @return
*/
ImClient
getCurentClient
();
ImClient
getCur
r
entClient
();
ImClient
getCacheImClient
(
Long
applicationId
,
String
clientId
);
...
...
core/src/main/java/com/wecloud/im/service/ImMessageService.java
View file @
673029d4
...
...
@@ -74,11 +74,11 @@ public interface ImMessageService extends BaseService<ImMessage> {
/**
* 查询某个会话历史消息分页列表
*
* @param
imHistoryMessagePageP
aram
* @param
p
aram
* @return
* @throws Exception
*/
Paging
<
OfflineMsgDto
>
getHistoryMsgConversationId
(
ImHistoryMessagePageParam
imHistoryMessagePageP
aram
);
Paging
<
OfflineMsgDto
>
getHistoryMsgConversationId
(
ImHistoryMessagePageParam
p
aram
);
/**
* 查询用户所有离线消息
...
...
core/src/main/java/com/wecloud/im/service/impl/ImClientBlacklistServiceImpl.java
View file @
673029d4
...
...
@@ -52,7 +52,7 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
addImClientBlacklist
(
ImClientBlacklistUpdate
imClientBlacklistUpdate
)
throws
Exception
{
ImClient
client
=
imClientService
.
getCurentClient
();
ImClient
client
=
imClientService
.
getCur
r
entClient
();
if
(
client
==
null
)
{
throw
new
BusinessException
(
"当前用户登录信息失效"
);
}
...
...
@@ -77,7 +77,7 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
removeImClientBlacklist
(
ImClientBlacklistUpdate
imClientBlacklistUpdate
)
throws
Exception
{
// 操作者
ImClient
client
=
imClientService
.
getCurentClient
();
ImClient
client
=
imClientService
.
getCur
r
entClient
();
if
(
client
==
null
)
{
throw
new
BusinessException
(
"当前用户登录信息失效"
);
}
...
...
@@ -100,9 +100,9 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
Page
<
ImClientBlacklistQueryVo
>
page
=
new
PageInfo
<>(
imClientBlacklistPageParam
);
ImClient
client
=
imClientService
.
getCurentClient
();
ImClient
client
=
imClientService
.
getCur
r
entClient
();
IPage
<
ImClientBlacklistQueryVo
>
imClientBlacklistPageList
=
imClientBlacklistMapper
.
getImClientBlacklistPageList
(
page
,
client
.
getId
());
IPage
<
ImClientBlacklistQueryVo
>
imClientBlacklistPageList
=
imClientBlacklistMapper
.
getImClientBlacklistPageList
(
page
,
client
.
get
Client
Id
());
Paging
<
ImClientBlacklistQueryVo
>
imClientBlacklistQueryVoPaging
=
new
Paging
<>(
imClientBlacklistPageList
);
...
...
core/src/main/java/com/wecloud/im/service/impl/ImClientDeviceServiceImpl.java
0 → 100644
View file @
673029d4
package
com
.
wecloud
.
im
.
service
.
impl
;
import
com.wecloud.im.entity.ImClientDevice
;
import
com.wecloud.im.mapper.ImClientDeviceMapper
;
import
com.wecloud.im.service.ImClientDeviceService
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
/**
* @Author wenzhida
* @Date 2022/3/2 15:00
* @Description 客户端设备服务接口实现
*/
@Slf4j
@Service
public
class
ImClientDeviceServiceImpl
extends
BaseServiceImpl
<
ImClientDeviceMapper
,
ImClientDevice
>
implements
ImClientDeviceService
{
@Autowired
private
ImClientDeviceMapper
imClientDeviceMapper
;
@Override
public
int
removeOldToken
(
Long
appId
,
String
deviceToken
)
{
return
imClientDeviceMapper
.
removeOldToken
(
appId
,
deviceToken
);
}
}
core/src/main/java/com/wecloud/im/service/impl/ImClientLoginServiceImpl.java
View file @
673029d4
package
com
.
wecloud
.
im
.
service
.
impl
;
import
cn.hutool.core.lang.Snowflake
;
import
cn.hutool.crypto.digest.MD5
;
import
com.alibaba.nacos.api.exception.NacosException
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
...
...
@@ -12,6 +11,7 @@ import com.wecloud.im.service.ImApplicationService;
import
com.wecloud.im.service.ImClientLoginService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.vo.TokenVo
;
import
com.wecloud.utils.SnowflakeUtil
;
import
io.geekidea.springbootplus.config.properties.JwtProperties
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
...
...
@@ -91,7 +91,7 @@ public class ImClientLoginServiceImpl implements ImClientLoginService {
if
(
imClient
==
null
)
{
log
.
info
(
"client不存在,先走注册流程"
);
imClient
=
new
ImClient
();
imClient
.
setId
(
new
Snowflake
(
1L
,
1L
).
nex
tId
());
imClient
.
setId
(
SnowflakeUtil
.
ge
tId
());
imClient
.
setFkAppid
(
imApplication
.
getId
());
imClient
.
setClientId
(
imTokenVerify
.
getClientId
());
imClientService
.
save
(
imClient
);
...
...
core/src/main/java/com/wecloud/im/service/impl/ImClientServiceImpl.java
View file @
673029d4
...
...
@@ -8,7 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import
com.google.common.collect.Lists
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImClient
Blacklist
;
import
com.wecloud.im.entity.ImClient
Device
;
import
com.wecloud.im.enums.FriendStateEnum
;
import
com.wecloud.im.enums.RelationEnum
;
import
com.wecloud.im.friend.entity.ImFriend
;
...
...
@@ -19,17 +19,20 @@ import com.wecloud.im.param.GetClientInfoParam;
import
com.wecloud.im.param.ImClientPageParam
;
import
com.wecloud.im.param.ImClientQueryVo
;
import
com.wecloud.im.param.ImClientSimpleDto
;
import
com.wecloud.im.param.add.ImClientDeviceInfoAdd
;
import
com.wecloud.im.param.LogoutParam
;
import
com.wecloud.im.param.add.ClientDeviceUpdateParam
;
import
com.wecloud.im.param.add.ImClientHeadPortraitAdd
;
import
com.wecloud.im.param.add.ImClientHeadPortraitAndNicknameUpdate
;
import
com.wecloud.im.param.add.ImClientNicknameAdd
;
import
com.wecloud.im.param.add.ImClientNicknameUpdate
;
import
com.wecloud.im.service.ImApplicationService
;
import
com.wecloud.im.service.ImClientBlacklistService
;
import
com.wecloud.im.service.ImClientDeviceService
;
import
com.wecloud.im.service.ImClientService
;
import
com.wecloud.im.vo.ClientInfoVo
;
import
com.wecloud.im.vo.GetInfoListVo
;
import
com.wecloud.im.vo.MyInfoVo
;
import
com.wecloud.utils.SnowflakeUtil
;
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
;
...
...
@@ -47,7 +50,7 @@ import org.springframework.cache.annotation.Cacheable;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java
x.annotation.Resourc
e
;
import
java
.util.Dat
e
;
import
java.util.List
;
/**
...
...
@@ -73,10 +76,13 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Autowired
private
ImClientBlacklistService
imClientBlacklistService
;
@Autowired
private
ImClientDeviceService
imClientDeviceService
;
@Override
public
MyInfoVo
getMyInfo
()
{
ImClient
currentClient
=
this
.
getCurentClient
();
ImClient
currentClient
=
this
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
throw
new
BusinessException
(
"当前用户登录信息失效"
);
}
...
...
@@ -88,7 +94,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
boolean
updateHeadPortrait
(
ImClientHeadPortraitAdd
imClientHeadPortraitAdd
)
{
ImClient
curentClient
=
getCurentClient
();
ImClient
curentClient
=
getCur
r
entClient
();
curentClient
.
setHeadPortrait
(
imClientHeadPortraitAdd
.
getHeadPortrait
());
imClientMapper
.
updateById
(
curentClient
);
...
...
@@ -100,7 +106,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override
public
boolean
updateNickname
(
ImClientNicknameUpdate
imClientNicknameUpdate
)
{
ImClient
curentClient
=
getCurentClient
();
ImClient
curentClient
=
getCur
r
entClient
();
curentClient
.
setNickname
(
imClientNicknameUpdate
.
getNickname
());
imClientMapper
.
updateById
(
curentClient
);
...
...
@@ -112,7 +118,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override
public
boolean
updateHeadAndNickname
(
ImClientHeadPortraitAndNicknameUpdate
imClientHeadPortraitAndNicknameUpdate
)
{
ImClient
curentClient
=
getCurentClient
();
ImClient
curentClient
=
getCur
r
entClient
();
curentClient
.
setHeadPortrait
(
imClientHeadPortraitAndNicknameUpdate
.
getHeadPortrait
());
curentClient
.
setNickname
(
imClientHeadPortraitAndNicknameUpdate
.
getNickname
());
imClientMapper
.
updateById
(
curentClient
);
...
...
@@ -125,7 +131,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override
public
ApiResult
<
List
<
GetInfoListVo
>>
getInfoList
(
GetClientInfoParam
getClientInfoParam
)
throws
Exception
{
ImClient
curentClient
=
getCurentClient
();
ImClient
curentClient
=
getCur
r
entClient
();
if
(
getClientInfoParam
.
getClientIds
()
==
null
||
getClientInfoParam
.
getClientIds
().
isEmpty
())
{
throw
new
BusinessException
(
"getClientInfoParam.getClientIds() == null"
);
...
...
@@ -154,7 +160,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override
public
ClientInfoVo
getClientInfo
(
ClientInfoParam
param
)
{
ImClient
currentClient
=
this
.
getCurentClient
();
ImClient
currentClient
=
this
.
getCur
r
entClient
();
if
(
currentClient
==
null
)
{
throw
new
BusinessException
(
"当前用户登录信息失效"
);
}
...
...
@@ -186,13 +192,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
boolean
updateNickname
(
ImClientNicknameAdd
imClientNicknameAdd
)
throws
Exception
{
ImClient
curentClient
=
getCurentClient
();
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
// 根据appKey查询appid
// ImApplication imApplication = imApplicationService.getOneByAppKey(curentJwtToken.getAppKey());
ImClient
curentClient
=
getCurrentClient
();
curentClient
.
setNickname
(
imClientNicknameAdd
.
getNickname
());
imClientMapper
.
updateById
(
curentClient
);
...
...
@@ -211,52 +211,48 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
boolean
updateDeviceInfo
(
ImClientDeviceInfoAdd
imClientDevice
)
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
// 根据appKey查询appid
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
public
boolean
updateDeviceInfo
(
ClientDeviceUpdateParam
param
)
{
ImClient
currentClient
=
getCurrentClient
();
// 清除旧client的redis缓存
ImClient
imClient
=
this
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
())
.
eq
(
ImClient:
:
getDeviceToken
,
imClientDevice
.
getDeviceToken
()));
if
(
imClient
!=
null
)
{
deleteCacheImClient
(
imClient
.
getFkAppid
(),
imClient
.
getClientId
());
ImClientDevice
clientDevice
=
imClientDeviceService
.
getOne
(
new
QueryWrapper
<
ImClientDevice
>().
lambda
()
.
eq
(
ImClientDevice:
:
getFkAppid
,
currentClient
.
getFkAppid
())
.
eq
(
ImClientDevice:
:
getDeviceToken
,
param
.
getDeviceToken
()));
if
(
clientDevice
!=
null
)
{
// client登陆的时候 判断数据库内是否已经存在这个设备token,如果存在就清空旧的
this
.
removeOldToken
(
imApplication
.
getId
(),
curentJwtToken
.
getToken
());
JwtToken
currentJwtToken
=
JwtUtil
.
getCurrentJwtToken
();
imClientDeviceService
.
removeOldToken
(
currentClient
.
getId
(),
currentJwtToken
.
getToken
());
}
ImClient
client
=
getCurentClient
();
ImClient
clientNew
=
new
ImClient
();
BeanUtils
.
copyProperties
(
imClientDevice
,
clientNew
);
clientNew
.
setId
(
client
.
getId
());
// 清除新client的redis缓存
deleteCacheImClient
(
client
.
getFkAppid
(),
client
.
getClientId
());
// 修改
return
this
.
updateImClient
(
clientNew
);
ImClientDevice
clientDeviceToUpdate
=
imClientDeviceService
.
getOne
(
new
QueryWrapper
<
ImClientDevice
>().
lambda
()
.
eq
(
ImClientDevice:
:
getFkAppid
,
currentClient
.
getFkAppid
())
.
eq
(
ImClientDevice:
:
getFkClientId
,
currentClient
.
getId
())
.
eq
(
ImClientDevice:
:
getDeviceType
,
param
.
getDeviceType
())
);
if
(
clientDeviceToUpdate
==
null
)
{
ImClientDevice
imClientDevice
=
new
ImClientDevice
();
imClientDevice
.
setId
(
SnowflakeUtil
.
getId
());
imClientDevice
.
setFkAppid
(
currentClient
.
getFkAppid
());
imClientDevice
.
setFkClientId
(
currentClient
.
getId
());
imClientDevice
.
setValid
(
1
);
imClientDevice
.
setDeviceType
(
param
.
getDeviceType
());
imClientDevice
.
setCreateTime
(
new
Date
());
imClientDevice
.
setUpdateTime
(
new
Date
());
imClientDeviceService
.
save
(
imClientDevice
);
}
else
{
clientDeviceToUpdate
.
setDeviceToken
(
param
.
getDeviceToken
());
imClientDeviceService
.
updateById
(
clientDeviceToUpdate
);
}
return
true
;
}
@Override
public
boolean
logout
()
{
ImClient
curentClient
=
getCurentClient
();
public
boolean
logout
(
LogoutParam
param
)
{
ImClient
currentClient
=
getCurrentClient
();
// 清除设备token
boolean
update
=
this
.
update
(
new
UpdateWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
curentClient
.
getFkAppid
())
.
eq
(
ImClient:
:
getId
,
curentClient
.
getId
())
.
set
(
ImClient:
:
getDeviceToken
,
null
)
);
if
(
update
)
{
// 清除新client的redis缓存
deleteCacheImClient
(
curentClient
.
getFkAppid
(),
curentClient
.
getClientId
());
}
return
update
;
return
imClientDeviceService
.
update
(
new
UpdateWrapper
<
ImClientDevice
>().
lambda
()
.
eq
(
ImClientDevice:
:
getFkAppid
,
currentClient
.
getFkAppid
())
.
eq
(
ImClientDevice:
:
getFkClientId
,
currentClient
.
getId
())
.
eq
(
ImClientDevice:
:
getDeviceType
,
param
.
getDeviceType
())
.
set
(
ImClientDevice:
:
getDeviceToken
,
null
));
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
...
@@ -270,13 +266,6 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
return
super
.
removeById
(
id
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
int
removeOldToken
(
Long
appId
,
String
deviceToken
)
{
return
imClientMapper
.
removeOldToken
(
appId
,
deviceToken
);
}
@Override
public
Paging
<
ImClientQueryVo
>
getImClientPageList
(
ImClientPageParam
imClientPageParam
)
throws
Exception
{
Page
<
ImClientQueryVo
>
page
=
new
PageInfo
<>(
imClientPageParam
,
OrderItem
.
desc
(
getLambdaColumn
(
ImClient:
:
getCreateTime
)));
...
...
@@ -285,10 +274,10 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
}
@Override
public
ImClient
getCurentClient
()
{
public
ImClient
getCur
r
entClient
()
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
JwtToken
curentJwtToken
=
JwtUtil
.
getCur
r
entJwtToken
();
// 根据appKey查询appid
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
return
getCacheImClient
(
imApplication
.
getId
(),
curentJwtToken
.
getClientId
());
...
...
core/src/main/java/com/wecloud/im/service/impl/ImConversationMembersServiceImpl.java
View file @
673029d4
...
...
@@ -84,11 +84,11 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
public
ApiResult
<
Boolean
>
saveOrUpdateClientRemarkName
(
ImConvMemeClientRemarkNameParam
imConvMemeClientRemarkNameParam
)
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
JwtToken
curentJwtToken
=
JwtUtil
.
getCur
r
entJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
ImClient
imClientSender
=
imClientService
.
getCur
r
entClient
();
// 查询该成员
ImConversationMembers
imConversationMember
=
imConversationMembersService
.
getOne
(
...
...
@@ -138,11 +138,11 @@ public class ImConversationMembersServiceImpl extends BaseServiceImpl<ImConversa
public
ApiResult
<
Boolean
>
saveOrUpdateAttr
(
ImConversationMemAttrUpdate
imConversationMemAttrUpdate
)
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
JwtToken
curentJwtToken
=
JwtUtil
.
getCur
r
entJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
ImClient
imClientSender
=
imClientService
.
getCur
r
entClient
();
// 查询该成员
ImConversationMembers
imConversationMember
=
imConversationMembersService
.
getOne
(
...
...
core/src/main/java/com/wecloud/im/service/impl/ImConversationServiceImpl.java
View file @
673029d4
...
...
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import
com.baomidou.mybatisplus.core.metadata.OrderItem
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImConversation
;
...
...
@@ -14,7 +15,6 @@ import com.wecloud.im.entity.ImMessage;
import
com.wecloud.im.entity.ImMessageOnlineSend
;
import
com.wecloud.im.enums.ChatTypeEnum
;
import
com.wecloud.im.enums.GroupRoleEnum
;
import
com.wecloud.im.enums.MutedEnum
;
import
com.wecloud.im.mapper.ImConversationMapper
;
import
com.wecloud.im.param.ImClientSimpleDto
;
import
com.wecloud.im.param.ListConversationMembersParam
;
...
...
@@ -59,7 +59,6 @@ import org.apache.commons.collections4.CollectionUtils;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cache.annotation.CacheConfig
;
import
org.springframework.cache.annotation.CacheEvict
;
import
org.springframework.cache.annotation.Cacheable
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -111,7 +110,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
ImConversationCreateVo
>
createImConversation
(
ImConversationCreate
imConversationCreate
)
{
ImClient
createClient
=
imClientService
.
getCurentClient
();
ImClient
createClient
=
imClientService
.
getCur
r
entClient
();
if
(
CollectionUtils
.
isEmpty
(
imConversationCreate
.
getClientIds
()))
{
log
.
info
(
"未找到群成员信息"
);
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
...
...
@@ -133,7 +132,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
JwtToken
curentJwtToken
=
JwtUtil
.
getCur
r
entJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
...
...
@@ -179,7 +178,6 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
return
ApiResult
.
ok
(
imConversationCreateVo
);
}
}
}
// 会话id
...
...
@@ -221,17 +219,37 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
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
.
setId
(
SnowflakeUtil
.
getId
()
);
imConversationMembers2
.
setCreateTime
(
new
Date
());
imConversationMembers2
.
setFkAppid
(
createClient
.
getFkAppid
());
imConversationMembers2
.
setFkConversationId
(
imConversationId
);
imConversationMembers2
.
setFkClientId
(
client2
.
getId
());
imConversationMembers2
.
setRole
(
GroupRoleEnum
.
NORMAL
.
getCode
());
imConversationMembersService
.
save
(
imConversationMembers2
);
}
if
(
imConversationCreate
.
getClientIds
().
size
()
>
1
)
{
// 给被拉入群的成员下发事件消息 -- 单聊则不下发
ImMessage
imMessage
=
new
ImMessage
();
Map
<
String
,
Object
>
content
=
Maps
.
newHashMap
();
content
.
put
(
"operator"
,
createClient
.
getClientId
());
//操作的client ID
content
.
put
(
"passivityOperator"
,
client2
.
getClientId
());
//被操作的client ID
imMessage
.
setContent
(
JsonUtils
.
encodeJson
(
content
));
// 保存消息至消息表
imMessage
.
setId
(
SnowflakeUtil
.
getId
());
imMessage
.
setMsgType
(
MsgTypeEnum
.
CLIENT_JOIN_NEW_CONVERSATION
.
getUriCode
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
imApplication
.
getId
());
imMessage
.
setSender
(
createClient
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
imMessage
.
setSendStatus
(
2
);
imMessage
.
setFkConversationId
(
imConversation
.
getId
());
imMessageService
.
save
(
imMessage
);
sendEventMsgToMember
(
imApplication
,
client2
.
getId
(),
imMessage
,
createClient
);
}
}
ImConversationCreateVo
imConversationCreateVo
=
new
ImConversationCreateVo
();
imConversationCreateVo
.
setId
(
imConversationId
);
...
...
@@ -243,11 +261,11 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
public
ApiResult
<
Boolean
>
addClientToConversation
(
ImClientToConversation
imClientToConversation
)
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
JwtToken
curentJwtToken
=
JwtUtil
.
getCur
r
entJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
ImClient
imClientSender
=
imClientService
.
getCur
r
entClient
();
// 查询该会话所有成员
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
...
...
@@ -323,10 +341,10 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 遍历发送给已在群内的成员
for
(
ImConversationMembers
conversationMember
:
membersList
)
{
sendEventMsgToMember
(
imApplication
,
conversationMember
.
getFkClientId
(),
imMessage
,
imClientSender
,
clientToConversation
);
sendEventMsgToMember
(
imApplication
,
conversationMember
.
getFkClientId
(),
imMessage
,
imClientSender
);
}
// 发送给刚被拉入群的成员
sendEventMsgToMember
(
imApplication
,
clientToConversation
.
getId
(),
imMessage
,
imClientSender
,
clientToConversation
);
sendEventMsgToMember
(
imApplication
,
clientToConversation
.
getId
(),
imMessage
,
imClientSender
);
}
// 将群成员数量减
...
...
@@ -342,7 +360,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
private
void
sendEventMsgToMember
(
ImApplication
imApplication
,
Long
conversationMemberClientId
,
ImMessage
imMessage
,
ImClient
clientSender
,
ImClient
clientToConversation
)
{
ImClient
clientSender
)
{
// 查询接收方
ImClient
imClientReceiver
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getId
())
...
...
@@ -354,6 +372,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
imMessageOnlineSend
.
setMsgId
(
imMessage
.
getId
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setType
(
imMessage
.
getMsgType
());
imMessageOnlineSend
.
setSender
(
clientSender
.
getClientId
());
imMessageOnlineSend
.
setContent
(
JsonUtils
.
decodeJson2Map
(
imMessage
.
getContent
()));
...
...
@@ -377,11 +396,11 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
public
ApiResult
<
Boolean
>
delClientToConversation
(
ImClientToConversation
imClientToConversation
)
throws
Exception
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
JwtToken
curentJwtToken
=
JwtUtil
.
getCur
r
entJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
ImClient
imClientSender
=
imClientService
.
getCur
r
entClient
();
// 判断是否为群主
ImConversationMembers
conversationMember
=
imConversationMembersService
.
getOne
(
...
...
@@ -464,6 +483,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
imMessageOnlineSend
.
setMsgId
(
messageId
);
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setType
(
imMessage
.
getMsgType
());
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
imMessageOnlineSend
.
setContent
(
content
);
...
...
@@ -493,17 +513,11 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
leaveConversation
(
ImClientLeaveConversation
imClientToConversation
)
throws
Exception
{
ImClient
currentClient
=
imClientService
.
getCurrentClient
();
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
ImConversation
imConversationById
=
imConversationService
.
getById
(
imClientToConversation
.
getConversationId
());
if
(
imConversationById
==
null
)
{
throw
new
BusinessException
(
"查无应用消息"
);
ImConversation
imConversation
=
imConversationService
.
getById
(
imClientToConversation
.
getConversationId
());
if
(
imConversation
==
null
)
{
throw
new
BusinessException
(
"查无会话消息"
);
}
// 查询该会话所有成员
...
...
@@ -511,7 +525,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
orderByAsc
(
ImConversationMembers:
:
getCreateTime
)
.
notIn
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
.
notIn
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
if
(
membersList
.
isEmpty
())
{
...
...
@@ -521,9 +535,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 判断用户是否在该会话
ImConversationMembers
members
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkAppid
,
imApplication
.
getI
d
())
.
eq
(
ImConversationMembers:
:
getFkAppid
,
currentClient
.
getFkAppi
d
())
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
imClientToConversation
.
getConversationId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
.
eq
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
);
// 将client从会话移除
...
...
@@ -533,7 +547,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
}
// 将群成员数量减1
imConversationMapper
.
addMemberCount
(
imApplication
.
getI
d
(),
imClientToConversation
.
getConversationId
(),
-
1
);
imConversationMapper
.
addMemberCount
(
currentClient
.
getFkAppi
d
(),
imClientToConversation
.
getConversationId
(),
-
1
);
// ws 退出事件通知给群内其他人 ----------
...
...
@@ -546,8 +560,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
imMessage
.
setId
(
messageId
);
imMessage
.
setMsgType
(
MsgTypeEnum
.
LEAVE_CONVERSATION
.
getUriCode
());
imMessage
.
setCreateTime
(
new
Date
());
imMessage
.
setFkAppid
(
imApplication
.
getI
d
());
imMessage
.
setSender
(
imClientSender
.
getId
());
imMessage
.
setFkAppid
(
currentClient
.
getFkAppi
d
());
imMessage
.
setSender
(
currentClient
.
getId
());
imMessage
.
setWithdraw
(
false
);
imMessage
.
setEvent
(
true
);
imMessage
.
setSystemFlag
(
false
);
...
...
@@ -563,7 +577,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 查询接收方
ImClient
imClientReceiver
=
imClientService
.
getOne
(
new
QueryWrapper
<
ImClient
>().
lambda
()
.
eq
(
ImClient:
:
getFkAppid
,
imApplication
.
getI
d
())
.
eq
(
ImClient:
:
getFkAppid
,
currentClient
.
getFkAppi
d
())
.
eq
(
ImClient:
:
getId
,
conversationMembers
.
getFkClientId
()));
if
(
imClientReceiver
==
null
)
{
continue
;
...
...
@@ -573,8 +587,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
ImMessageOnlineSend
imMessageOnlineSend
=
new
ImMessageOnlineSend
();
imMessageOnlineSend
.
setMsgId
(
messageId
);
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
LEAVE_CONVERSATION
.
getUriCode
());
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
imMessageOnlineSend
.
setSender
(
currentClient
.
getClientId
());
imMessageOnlineSend
.
setConversationId
(
conversationMembers
.
getFkConversationId
());
imMessageOnlineSend
.
setWithdraw
(
Boolean
.
FALSE
);
imMessageOnlineSend
.
setEvent
(
Boolean
.
TRUE
);
...
...
@@ -611,10 +626,10 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Boolean
transferOwner
(
TransferOwnerParam
param
)
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
JwtToken
curentJwtToken
=
JwtUtil
.
getCur
r
entJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
ImClient
imClientSender
=
imClientService
.
getCur
r
entClient
();
// 判断操作人是否为群主
ImConversationMembers
currentMember
=
imConversationMembersService
.
getOne
(
...
...
@@ -647,7 +662,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
*/
@Override
public
Boolean
setAdmins
(
SetAdminsParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
// 判断操作人是否为群主
ImConversationMembers
currentMember
=
imConversationMembersService
.
getOne
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
...
...
@@ -675,7 +690,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
*/
@Override
public
Boolean
mutedGroup
(
MutedGroupParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(!
imConversationService
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getConversationId
(),
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
// 当前操作人不属于群主或管理人员
...
...
@@ -692,7 +707,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
public
Boolean
mutedGroupMember
(
MutedGroupParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
if
(!
imConversationService
.
isBelongToRole
(
currentClient
.
getClientId
(),
param
.
getConversationId
(),
Lists
.
newArrayList
(
GroupRoleEnum
.
OWNER
.
getCode
(),
GroupRoleEnum
.
ADMIN
.
getCode
())))
{
// 当前操作人不属于群主或管理人员
...
...
@@ -744,11 +759,11 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
public
ApiResult
<
Boolean
>
saveOrUpdateName
(
ImConversationNameUpdate
imConversationNameUpdate
)
throws
Exception
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
JwtToken
curentJwtToken
=
JwtUtil
.
getCur
r
entJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
ImClient
imClientSender
=
imClientService
.
getCur
r
entClient
();
ImConversation
imConversationById
=
imConversationService
.
getById
(
imConversationNameUpdate
.
getConversationId
());
...
...
@@ -777,10 +792,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 内容
HashMap
<
String
,
String
>
content
=
new
HashMap
<>();
content
.
put
(
"type"
,
"-1015"
);
content
.
put
(
"name"
,
imConversationById
.
getName
());
// 遍历发送
for
(
ImConversationMembers
conversationMembers
:
membersList
)
{
...
...
@@ -797,6 +810,8 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// imMessageOnlineSend.setMsgId(null);
// imMessageOnlineSend.setSender(imClientSender.getClientId());
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
CONVERSATION_NAME_CHANGE
.
getUriCode
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setContent
(
content
);
imMessageOnlineSend
.
setConversationId
(
conversationMembers
.
getFkConversationId
());
// imMessageOnlineSend.setWithdraw(Boolean.FALSE);
...
...
@@ -827,11 +842,11 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
public
ApiResult
<
Boolean
>
saveOrUpdateAttr
(
ImConversationAttrUpdate
imConversationAttrUpdate
)
throws
Exception
{
// shiro线程中获取当前token
JwtToken
curentJwtToken
=
JwtUtil
.
getCurentJwtToken
();
JwtToken
curentJwtToken
=
JwtUtil
.
getCur
r
entJwtToken
();
// 根据appKey查询application
ImApplication
imApplication
=
imApplicationService
.
getCacheAppByAppKey
(
curentJwtToken
.
getAppKey
());
ImClient
imClientSender
=
imClientService
.
getCurentClient
();
ImClient
imClientSender
=
imClientService
.
getCur
r
entClient
();
ImConversation
imConversationById
=
imConversationService
.
getById
(
imConversationAttrUpdate
.
getConversationId
());
// 判断是否为群主
...
...
@@ -862,7 +877,6 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// 内容
HashMap
<
String
,
String
>
content
=
new
HashMap
<>();
content
.
put
(
"type"
,
"-1014"
);
content
.
put
(
"attributes"
,
imConversationById
.
getAttributes
());
...
...
@@ -882,7 +896,9 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
// imMessageOnlineSend.setMsgId(null);
// imMessageOnlineSend.setSender(imClientSender.getClientId());
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
CONVERSATION_EXPAND_FIELD_CHANGE
.
getUriCode
());
imMessageOnlineSend
.
setContent
(
content
);
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setConversationId
(
conversationMembers
.
getFkConversationId
());
// imMessageOnlineSend.setWithdraw(Boolean.FALSE);
imMessageOnlineSend
.
setEvent
(
Boolean
.
TRUE
);
...
...
@@ -923,7 +939,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
boolean
updateDisplayConversation
(
ImConversationDisplayUpdate
imConversationDisplayUpdate
)
{
ImClient
curentClient
=
imClientService
.
getCurentClient
();
ImClient
curentClient
=
imClientService
.
getCur
r
entClient
();
for
(
Long
id
:
imConversationDisplayUpdate
.
getConversationIds
())
{
// 修改为删除隐藏状态
boolean
update
=
imConversationMembersService
.
update
(
new
UpdateWrapper
<
ImConversationMembers
>()
...
...
@@ -957,7 +973,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
public
List
<
ConversationVo
>
getMyImConversationListAndMsgCount
()
throws
Exception
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
// 查询用户加入的所有会话 与每个会话的未读条数 成员
List
<
ConversationVo
>
myImConversationListAndMsgCount
=
imConversationMapper
.
getMyImConversationListAndMsgCount
(
currentClient
.
getId
(),
null
);
...
...
@@ -983,7 +999,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
public
ConversationVo
infoImConversationAndMsgCount
(
ImConversationQueryParam
param
)
throws
Exception
{
ImClient
client
=
imClientService
.
getCurentClient
();
ImClient
client
=
imClientService
.
getCur
r
entClient
();
// 查询用户加入的所有会话 与每个会话的未读条数 成员
List
<
ConversationVo
>
conversationList
=
imConversationMapper
.
getMyImConversationListAndMsgCount
(
client
.
getId
(),
param
.
getId
());
if
(
CollectionUtils
.
isEmpty
(
conversationList
))
{
...
...
@@ -1001,7 +1017,7 @@ public class ImConversationServiceImpl extends BaseServiceImpl<ImConversationMap
@Override
public
List
<
ImConversation
>
getMyImConversationList
()
throws
Exception
{
ImClient
client
=
imClientService
.
getCurentClient
();
ImClient
client
=
imClientService
.
getCur
r
entClient
();
return
imConversationMapper
.
getMyImConversationList
(
client
.
getId
());
}
...
...
core/src/main/java/com/wecloud/im/service/impl/ImInboxServiceImpl.java
View file @
673029d4
...
...
@@ -95,7 +95,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
updateImMsgReceived
(
ImMsgReceivedStatusUpdate
imMsgReceivedUpdate
)
{
ImClient
curentClient
=
imClientService
.
getCurentClient
();
ImClient
curentClient
=
imClientService
.
getCur
r
entClient
();
// 修改已接收状态
Long
aLong
=
imInboxMapper
.
updateImMsgReceivedByIds
(
curentClient
.
getId
(),
imMsgReceivedUpdate
.
getMsgIds
());
...
...
@@ -136,7 +136,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
updateImMsgRead
(
MsgReadStatusUpdateParam
msgReadStatusUpdateParam
)
{
ImClient
curentClient
=
imClientService
.
getCurentClient
();
ImClient
curentClient
=
imClientService
.
getCur
r
entClient
();
// 修改已读状态
Long
aLong
=
imInboxMapper
.
updateImMsgReadByIds
(
curentClient
.
getId
(),
msgReadStatusUpdateParam
.
getMsgIds
());
...
...
@@ -155,7 +155,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
@Override
public
Boolean
updateMsgReadStatusByConversation
(
MsgReadStatusUpdateParam
msgReadStatusUpdateParam
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
// 获取该用户该会话所有未读消息 msgId 列表
List
<
ImInbox
>
imInboxList
=
this
.
list
(
new
QueryWrapper
<
ImInbox
>().
lambda
()
.
eq
(
ImInbox:
:
getFkConversationId
,
msgReadStatusUpdateParam
.
getConversationId
())
...
...
@@ -219,6 +219,7 @@ public class ImInboxServiceImpl extends BaseServiceImpl<ImInboxMapper, ImInbox>
BeanUtils
.
copyProperties
(
imMessage
,
imMessageOnlineSend
);
imMessageOnlineSend
.
setType
(
msgTypeEnum
.
getUriCode
());
imMessageOnlineSend
.
setMsgId
(
imMessage
.
getId
());
imMessageOnlineSend
.
setCreateTime
(
new
Date
());
imMessageOnlineSend
.
setSender
(
curentClient
.
getClientId
());
imMessageOnlineSend
.
setContent
(
contentMap
);
imMessageOnlineSend
.
setConversationId
(
conversationMember
.
getFkConversationId
());
...
...
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
View file @
673029d4
...
...
@@ -16,6 +16,7 @@ import com.wecloud.im.entity.ImMessage;
import
com.wecloud.im.entity.ImMessageOnlineSend
;
import
com.wecloud.im.enums.ChatTypeEnum
;
import
com.wecloud.im.mapper.ImMessageMapper
;
import
com.wecloud.im.mq.MqSender
;
import
com.wecloud.im.param.ChatContentVo
;
import
com.wecloud.im.param.GetReadersParam
;
import
com.wecloud.im.param.ImClientSimpleDto
;
...
...
@@ -40,8 +41,9 @@ import com.wecloud.im.ws.model.WsResponse;
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.AsyncPush
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.pushserver.client.model.constant.MqConstant
;
import
com.wecloud.pushserver.client.model.dto.PushDTO
;
import
com.wecloud.utils.JsonUtils
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
...
...
@@ -58,7 +60,6 @@ import org.springframework.transaction.annotation.Transactional;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -82,9 +83,6 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
private
ImConversationService
imConversationService
;
@Autowired
private
AsyncPush
asyncPush
;
@Autowired
private
ImApplicationService
imApplicationService
;
...
...
@@ -97,6 +95,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
@Autowired
private
ThousandChatService
thousandChatService
;
@Autowired
private
MqSender
mqSender
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
restApiImMessageSend
(
ImMsgSendToOnlineClient
imMsgSendToOnlineClient
,
ImApplication
imApplication
)
{
...
...
@@ -208,7 +209,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imClientSender
=
imClientService
.
getCacheImClient
(
request
.
getSenderClientId
());
imApplication
=
imApplicationService
.
getCacheById
(
imClientSender
.
getFkAppid
());
}
else
{
imClientSender
=
imClientService
.
getCurentClient
();
imClientSender
=
imClientService
.
getCur
r
entClient
();
// 查询imApplication
imApplication
=
imApplicationService
.
getCacheById
(
imClientSender
.
getFkAppid
());
}
...
...
@@ -278,6 +279,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
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
());
...
...
@@ -296,11 +298,11 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
responseModel
.
setReqId
(
null
);
channelSender
.
sendMsg
(
responseModel
,
imClientReceiver
.
getId
());
// 获取自定义推送字段
PushVO
pushVO
=
imMsgRecall
.
getPush
();
// 异步推送系统通知消息
asyncPush
.
push
(
pushVO
,
imClientReceiver
,
imApplication
);
PushDTO
pushDTO
=
mqSender
.
buildPushDto
(
imMsgRecall
.
getPush
(),
imClientReceiver
,
imApplication
);
if
(
pushDTO
!=
null
)
{
mqSender
.
orderSend
(
MqConstant
.
Topic
.
IM_ORDER_MSG_TOPIC
,
MqConstant
.
Tag
.
IM_ORDER_MSG_TAG
,
pushDTO
);
}
}
return
Boolean
.
TRUE
;
...
...
@@ -318,7 +320,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imClientSender
=
imClientService
.
getCacheImClient
(
request
.
getSenderClientId
());
imApplication
=
imApplicationService
.
getCacheById
(
imClientSender
.
getFkAppid
());
}
else
{
imClientSender
=
imClientService
.
getCurentClient
();
imClientSender
=
imClientService
.
getCur
r
entClient
();
// 查询imApplication
imApplication
=
imApplicationService
.
getCacheById
(
imClientSender
.
getFkAppid
());
}
...
...
@@ -389,6 +391,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
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
());
...
...
@@ -459,7 +462,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
if
(
request
!=
null
)
{
imClientSender
=
imClientService
.
getCacheImClient
(
request
.
getSenderClientId
());
}
else
{
imClientSender
=
imClientService
.
getCurentClient
();
imClientSender
=
imClientService
.
getCur
r
entClient
();
}
if
(
imClientSender
==
null
)
{
throw
new
BusinessException
(
"查无发送用户信息"
);
...
...
@@ -484,10 +487,11 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
}
@Override
public
Paging
<
OfflineMsgDto
>
getHistoryMsgConversationId
(
ImHistoryMessagePageParam
imHistoryMessagePageParam
)
{
Page
<
ImMessage
>
page
=
new
PageInfo
<>(
imHistoryMessagePageParam
,
OrderItem
.
desc
(
getLambdaColumn
(
ImMessage:
:
getCreateTime
)));
IPage
<
OfflineMsgDto
>
iPage
=
imMessageMapper
.
getHistoryMsgConversationId
(
page
,
imHistoryMessagePageParam
);
public
Paging
<
OfflineMsgDto
>
getHistoryMsgConversationId
(
ImHistoryMessagePageParam
param
)
{
Page
<
ImMessage
>
page
=
new
PageInfo
<>(
param
,
OrderItem
.
desc
(
getLambdaColumn
(
ImMessage:
:
getCreateTime
)));
ImClient
currentClient
=
imClientService
.
getCurrentClient
();
param
.
setCurrentFkClientId
(
currentClient
.
getId
());
IPage
<
OfflineMsgDto
>
iPage
=
imMessageMapper
.
getHistoryMsgConversationId
(
page
,
param
);
return
new
Paging
<>(
iPage
);
}
...
...
@@ -505,7 +509,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
// 返回数据
List
<
ImMessageOfflineListVo
>
imMessageOfflineListVoList
=
new
ArrayList
<>();
ImClient
client
=
imClientService
.
getCurentClient
();
ImClient
client
=
imClientService
.
getCur
r
entClient
();
// 获取加入的所有会话
List
<
ImConversation
>
myImConversationList
=
imConversationService
.
getMyImConversationList
();
...
...
core/src/main/java/com/wecloud/im/thousandchat/action/ThousandChatAction.java
View file @
673029d4
...
...
@@ -9,6 +9,7 @@ import com.wecloud.im.entity.ImClient;
import
com.wecloud.im.entity.ImConversationMembers
;
import
com.wecloud.im.entity.ImMessage
;
import
com.wecloud.im.entity.ImMessageOnlineSend
;
import
com.wecloud.im.mq.MqSender
;
import
com.wecloud.im.param.ChatContentVo
;
import
com.wecloud.im.param.ImClientSimpleDto
;
import
com.wecloud.im.param.ImConversationQueryVo
;
...
...
@@ -21,8 +22,9 @@ import com.wecloud.im.service.ImMessageService;
import
com.wecloud.im.thousandchat.cache.ThousandChatCacheManager
;
import
com.wecloud.im.ws.enums.WsResponseCmdEnum
;
import
com.wecloud.im.ws.model.WsResponse
;
import
com.wecloud.im.ws.sender.AsyncPush
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
com.wecloud.pushserver.client.model.constant.MqConstant
;
import
com.wecloud.pushserver.client.model.dto.PushDTO
;
import
com.wecloud.utils.JsonUtils
;
import
com.wecloud.utils.SnowflakeUtil
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
...
...
@@ -54,8 +56,6 @@ public class ThousandChatAction {
@Autowired
private
ImConversationService
imConversationService
;
@Autowired
private
AsyncPush
systemPush
;
@Autowired
private
ImConversationMembersService
imConversationMembersService
;
@Autowired
private
ImMessageService
imMessageService
;
...
...
@@ -64,6 +64,9 @@ public class ThousandChatAction {
@Autowired
private
ThousandChatCacheManager
thousandChatCacheManager
;
@Autowired
private
MqSender
mqSender
;
@ActionMapping
(
"/thousand/send"
)
public
void
sendMsg
(
ActionRequest
request
,
ChatContentVo
data
,
String
reqId
)
{
if
(
log
.
isDebugEnabled
())
{
...
...
@@ -117,7 +120,10 @@ public class ThousandChatAction {
continue
;
}
// 异步推送系统通知消息
systemPush
.
push
(
data
.
getPush
(),
imClientReceiver
,
imApplication
);
PushDTO
pushDTO
=
mqSender
.
buildPushDto
(
data
.
getPush
(),
imClientReceiver
,
imApplication
);
if
(
pushDTO
!=
null
)
{
mqSender
.
orderSend
(
MqConstant
.
Topic
.
IM_ORDER_MSG_TOPIC
,
MqConstant
.
Tag
.
IM_ORDER_MSG_TAG
,
pushDTO
);
}
}
// 响应发送方消息id等信息
...
...
core/src/main/java/com/wecloud/im/thousandchat/param/ThousandOffineMsgDto.java
View file @
673029d4
...
...
@@ -11,8 +11,4 @@ import lombok.Data;
@Data
public
class
ThousandOffineMsgDto
extends
OfflineMsgDto
{
/**
* 会话id
*/
private
Long
conversationId
;
}
core/src/main/java/com/wecloud/im/thousandchat/service/ThousandChatService.java
View file @
673029d4
...
...
@@ -65,7 +65,7 @@ public class ThousandChatService extends BaseServiceImpl<ImMsgReadLastestMapper,
* @return
*/
public
ApiResult
<
Boolean
>
updateImMsgReceived
(
LastestReceivedMsg
lastestReceivedMsg
)
{
ImClient
curentClient
=
imClientService
.
getCurentClient
();
ImClient
curentClient
=
imClientService
.
getCur
r
entClient
();
ImMessage
lastestMsg
=
imMessageService
.
getById
(
lastestReceivedMsg
.
getLastestMsgId
());
...
...
@@ -105,7 +105,7 @@ public class ThousandChatService extends BaseServiceImpl<ImMsgReadLastestMapper,
* @return
*/
public
ApiResult
<
Boolean
>
updateImMsgRead
(
Long
lastestMsgId
)
{
ImClient
curentClient
=
imClientService
.
getCurentClient
();
ImClient
curentClient
=
imClientService
.
getCur
r
entClient
();
ImMessage
lastestMsg
=
imMessageService
.
getById
(
lastestMsgId
);
...
...
@@ -139,7 +139,7 @@ public class ThousandChatService extends BaseServiceImpl<ImMsgReadLastestMapper,
return
new
ArrayList
<>();
}
ImClient
curentClient
=
imClientService
.
getCurentClient
();
ImClient
curentClient
=
imClientService
.
getCur
r
entClient
();
List
<
ConversationLastestReadMsg
>
lastestReadMsgs
=
imMsgReadLastestMapper
.
findLastestReadMsgs
(
curentClient
.
getId
());
Map
<
Long
,
ConversationLastestReadMsg
>
conversationMsgMap
=
lastestReadMsgs
.
stream
().
collect
(
Collectors
.
toMap
(
ConversationLastestReadMsg:
:
getConversationId
,
v
->
v
,(
a
,
b
)->
a
));
...
...
core/src/main/java/com/wecloud/im/vo/ConversationMemberVo.java
View file @
673029d4
...
...
@@ -19,14 +19,19 @@ public class ConversationMemberVo implements Serializable {
@ApiModelProperty
(
"会话中client的备注名"
)
private
String
clientRemarkName
;
@ApiModelProperty
(
"头像"
)
private
String
headPortrait
;
@ApiModelProperty
(
"主昵称"
)
private
String
nickname
;
@ApiModelProperty
(
"clientId"
)
private
String
clientId
;
@ApiModelProperty
(
"client自己的自定义扩展属性"
)
private
String
clientAttributes
;
@ApiModelProperty
(
"会话成员列表的自定义扩展属性"
)
private
String
memberAttributes
;
...
...
core/src/main/java/com/wecloud/im/vo/OfflineMsgDto.java
View file @
673029d4
...
...
@@ -9,13 +9,20 @@ import java.io.Serializable;
import
java.util.Date
;
/**
* 离线消息内容实体
* @Author wenzhida
* @Date 2022/3/3 11:19
* @Description 离线消息内容实体
*/
@Data
@Accessors
(
chain
=
true
)
@ApiModel
(
value
=
"OfflineMsgDto"
)
public
class
OfflineMsgDto
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
7073389493201687249L
;
@ApiModelProperty
(
"会话id"
)
private
Long
conversationId
;
@ApiModelProperty
(
"消息类型"
)
private
Integer
type
;
...
...
core/src/main/java/com/wecloud/im/ws/ImConstant.java
View file @
673029d4
...
...
@@ -46,12 +46,12 @@ public class ImConstant implements Serializable {
/**
* 您收到一条新消息
*/
public
static
final
String
PUSH_TITLE
=
"
You have received a new message
"
;
public
static
final
String
PUSH_TITLE
=
"
您收到一条新消息
"
;
/**
* 点击查看
*/
public
static
final
String
PUSH_BODY
=
"
Click to view
"
;
public
static
final
String
PUSH_BODY
=
"
点击查看
"
;
/**
* 会话id的key名
...
...
core/src/main/java/com/wecloud/im/ws/cache/UserStateCacheManager.java
View file @
673029d4
...
...
@@ -60,10 +60,10 @@ public class UserStateCacheManager extends UserStateListener {
public
List
<
ClientChannelInfo
>
findOnlineInfosByClientId
(
Long
clientId
)
{
// 获取所有 CLIENTS的 <platform>:<ip>
Set
<
String
>
platformAndIs
=
redisUtils
.
getForSetMembers
(
getUserStateCacheKey
(
clientId
));
Set
<
String
>
platformAndI
p
s
=
redisUtils
.
getForSetMembers
(
getUserStateCacheKey
(
clientId
));
ArrayList
<
ClientChannelInfo
>
clientChannelInfos
=
new
ArrayList
<>();
for
(
String
platformAndIp
:
platformAndIs
)
{
for
(
String
platformAndIp
:
platformAndI
p
s
)
{
String
[]
split
=
platformAndIp
.
split
(
RedisUtils
.
SPLIT
);
ClientChannelInfo
clientChannelInfo
=
new
ClientChannelInfo
();
clientChannelInfo
.
setPlatform
(
Integer
.
valueOf
(
split
[
0
]));
...
...
core/src/main/java/com/wecloud/im/ws/enums/MsgTypeEnum.java
View file @
673029d4
...
...
@@ -29,6 +29,13 @@ public enum MsgTypeEnum {
// 成为新群主 -1013
CONVERSATION_NEW_CREATOR
(-
1013
),
// 群拓展字段变动事件 -1014
CONVERSATION_EXPAND_FIELD_CHANGE
(-
1014
),
// 会话名称字段变动事件 -1015
CONVERSATION_NAME_CHANGE
(-
1015
),
// 消息撤回 -1016
MSG_WITHDRAW
(-
1016
),
...
...
core/src/main/java/com/wecloud/im/ws/sender/AsyncPush.java
deleted
100644 → 0
View file @
0c3334dd
package
com
.
wecloud
.
im
.
ws
.
sender
;
import
cn.hutool.core.codec.Base64
;
import
com.turo.pushy.apns.DeliveryPriority
;
import
com.turo.pushy.apns.PushType
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImIosApns
;
import
com.wecloud.im.push.PushUtils
;
import
com.wecloud.im.service.ImInboxService
;
import
com.wecloud.im.service.ImIosApnsService
;
import
com.wecloud.im.ws.model.request.PushVO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.stereotype.Component
;
import
java.io.BufferedReader
;
import
java.io.ByteArrayInputStream
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.OutputStreamWriter
;
import
java.net.HttpURLConnection
;
import
java.net.URL
;
import
java.util.HashMap
;
import
java.util.Map
;
import
static
com
.
wecloud
.
im
.
ws
.
ImConstant
.
PUSH_BODY
;
import
static
com
.
wecloud
.
im
.
ws
.
ImConstant
.
PUSH_TITLE
;
import
static
com
.
wecloud
.
im
.
ws
.
ImConstant
.
SUB_TITLE
;
import
static
com
.
wecloud
.
im
.
ws
.
ImConstant
.
TITLE
;
/**
* 异步系统推送
*/
@Component
@Slf4j
public
class
AsyncPush
{
/**
* 谷歌推送地址
*/
private
static
final
String
API_URL_FCM
=
"https://fcm.googleapis.com/fcm/send"
;
// /**
// * 您收到一条新消息
// */
// private static final String PUSH_TITLE = "You have received a new message";
// /**
// * 点击查看
// */
// private static final String PUSH_BODY = "Click to view";
// private static final String TITLE = "title";
// private static final String SUB_TITLE = "subTitle";
@Autowired
private
ImIosApnsService
imIosApnsService
;
@Autowired
private
ImInboxService
imInboxService
;
/**
* 异步系统推送
*
* @param imClientReceiver
*/
@Async
public
void
push
(
PushVO
pushVO
,
ImClient
imClientReceiver
,
ImApplication
imApplication
)
{
log
.
info
(
"push: {}"
,
imClientReceiver
.
getClientId
());
if
(
pushVO
==
null
)
{
pushVO
=
new
PushVO
();
pushVO
.
setTitle
(
PUSH_TITLE
);
pushVO
.
setSubTitle
(
PUSH_BODY
);
}
// 校验参数
if
(
imClientReceiver
.
getValid
()
==
null
||
imClientReceiver
.
getDeviceToken
()
==
null
||
imClientReceiver
.
getDeviceType
()
==
null
)
{
log
.
info
(
"{} 应用未配置push,或client无DeviceToken {}"
,
imApplication
.
getId
(),
imClientReceiver
.
getClientId
());
return
;
}
// 设备不想收到推送提醒, 1想, 0不想
if
(
imClientReceiver
.
getValid
()
==
0
)
{
return
;
}
// 设备类型1:ios; 2:android
if
(
imClientReceiver
.
getDeviceType
()
==
1
)
{
ios
(
pushVO
,
imClientReceiver
,
imApplication
);
}
else
{
android
(
pushVO
,
imClientReceiver
,
imApplication
);
}
}
/**
* 异步系统推送
*
* @param imClientReceiver
*/
@Async
public
void
push
(
HashMap
<
String
,
String
>
pushMap
,
ImClient
imClientReceiver
,
ImApplication
imApplication
)
{
log
.
info
(
"push:"
+
imClientReceiver
.
getClientId
());
PushVO
pushVO
=
new
PushVO
();
if
(
pushMap
==
null
||
pushMap
.
isEmpty
())
{
pushVO
.
setTitle
(
PUSH_TITLE
);
pushVO
.
setSubTitle
(
PUSH_BODY
);
}
else
{
pushVO
.
setTitle
(
pushMap
.
get
(
TITLE
));
pushVO
.
setSubTitle
(
pushMap
.
get
(
SUB_TITLE
));
}
this
.
push
(
pushVO
,
imClientReceiver
,
imApplication
);
}
private
void
android
(
PushVO
pushVO
,
ImClient
imClientReceiver
,
ImApplication
imApplication
)
{
if
(
imApplication
.
getAndroidPushChannel
()
==
null
)
{
return
;
}
// 安卓推送通道,友盟:1;firebase:2; 信鸽3
if
(
imApplication
.
getAndroidPushChannel
()
==
1
)
{
log
.
info
(
"友盟"
);
// 友盟推送
PushUtils
pushUtils
=
new
PushUtils
(
imApplication
.
getUmengKey
(),
imApplication
.
getUmengSecret
());
// 安卓 单推
String
deviceToken
=
imClientReceiver
.
getDeviceToken
();
try
{
pushUtils
.
sendIOSUnicast
(
deviceToken
,
pushVO
.
getTitle
(),
pushVO
.
getSubTitle
(),
PUSH_BODY
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
else
if
(
imApplication
.
getAndroidPushChannel
()
==
2
)
{
//firebase:2
log
.
info
(
"android_firebase"
);
firebase
(
pushVO
,
imClientReceiver
,
imApplication
);
}
else
if
(
imApplication
.
getAndroidPushChannel
()
==
3
)
{
// 信鸽3
log
.
info
(
"信鸽3"
);
}
else
{
log
.
info
(
"没有找到推送类型"
);
}
}
private
void
ios
(
PushVO
pushVO
,
ImClient
imClientReceiver
,
ImApplication
imApplication
)
{
if
(
imApplication
.
getIosPushChannel
()
==
null
)
{
return
;
}
// ios推送通道,友盟:1;firebase:2; apns原生:3
if
(
imApplication
.
getIosPushChannel
()
==
1
)
{
log
.
info
(
"友盟"
);
// 友盟推送
PushUtils
pushUtils
=
new
PushUtils
(
imApplication
.
getUmengKey
(),
imApplication
.
getUmengSecret
());
// 安卓单推
String
deviceToken
=
imClientReceiver
.
getDeviceToken
();
String
unicastText
=
"Android unicast text"
;
String
unicastTicker
=
pushVO
.
getSubTitle
();
try
{
pushUtils
.
sendAndroidUnicast
(
deviceToken
,
unicastText
,
unicastTicker
,
pushVO
.
getTitle
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
else
if
(
imApplication
.
getIosPushChannel
()
==
2
)
{
//firebase:2
log
.
info
(
"firebase"
);
firebase
(
pushVO
,
imClientReceiver
,
imApplication
);
}
else
if
(
imApplication
.
getIosPushChannel
()
==
3
)
{
// apns原生:3
log
.
info
(
"apns原生"
);
apnsPush
(
pushVO
,
imClientReceiver
,
imApplication
);
}
else
{
log
.
info
(
"没有找到推送类型"
);
}
}
public
void
firebase
(
PushVO
pushVO
,
ImClient
imClientReceiver
,
ImApplication
imApplication
)
{
String
jsonStr
=
null
;
try
{
URL
url
=
new
URL
(
API_URL_FCM
);
HttpURLConnection
conn
=
(
HttpURLConnection
)
url
.
openConnection
();
conn
.
setUseCaches
(
false
);
conn
.
setDoInput
(
true
);
conn
.
setDoOutput
(
true
);
conn
.
setConnectTimeout
(
10000
);
conn
.
setRequestMethod
(
"POST"
);
//不设置默认发送文本格式。设置就是json
conn
.
setRequestProperty
(
"Content-Type"
,
"application/json"
);
conn
.
setRequestProperty
(
"Authorization"
,
"key="
+
imApplication
.
getFirebaseSecret
());
JSONObject
json
=
new
JSONObject
();
//推送到哪台客户端机器
json
.
put
(
"to"
,
imClientReceiver
.
getDeviceToken
());
JSONObject
info
=
new
JSONObject
();
info
.
put
(
"title"
,
pushVO
.
getTitle
());
info
.
put
(
"body"
,
pushVO
.
getSubTitle
());
//数据消息data 通知消息 notification
json
.
put
(
"notification"
,
info
);
OutputStreamWriter
wr
=
new
OutputStreamWriter
(
conn
.
getOutputStream
());
jsonStr
=
json
.
toString
();
wr
.
write
(
jsonStr
);
wr
.
flush
();
InputStream
inputStream
=
conn
.
getInputStream
();
InputStreamReader
in
=
new
InputStreamReader
(
inputStream
);
BufferedReader
reader
=
new
BufferedReader
(
in
);
String
line
=
reader
.
readLine
();
log
.
info
(
line
);
wr
.
close
();
reader
.
close
();
}
catch
(
Exception
e
)
{
log
.
error
(
"FCM push failure: "
+
jsonStr
,
e
);
}
}
private
void
apnsPush
(
PushVO
pushVO
,
ImClient
imClientReceiver
,
ImApplication
imApplication
)
{
// 查询apns证书
ImIosApns
apns
=
imIosApnsService
.
getImIosApnsByAppId
(
imApplication
.
getId
());
Map
<
String
,
Object
>
customProperty
=
new
HashMap
<
String
,
Object
>(
1
);
String
deviceToken
=
imClientReceiver
.
getDeviceToken
();
String
alertTitle
=
pushVO
.
getTitle
();
String
alertBody
=
pushVO
.
getSubTitle
();
// 统计未读消息数量
int
badge
=
imInboxService
.
countMyNotReadCount
(
imClientReceiver
.
getId
());
String
topicBundleId
=
apns
.
getBundleId
();
String
certificatePassword
=
apns
.
getPwd
();
boolean
contentAvailable
=
false
;
String
sound
=
"default"
;
// 解码
byte
[]
decode
=
Base64
.
decode
(
apns
.
getApnsFileValue
());
InputStream
inputStream2
=
new
ByteArrayInputStream
(
decode
);
// productFlag 环境,测试=Boolean.FALSE,正式=Boolean.TRUE
Boolean
productFlag
=
Boolean
.
FALSE
;
// 正式1,测试0
if
(
apns
.
getEnv
()
==
1
)
{
productFlag
=
Boolean
.
TRUE
;
}
IosPush
.
push
(
certificatePassword
,
inputStream2
,
productFlag
,
deviceToken
,
alertTitle
,
alertBody
,
contentAvailable
,
customProperty
,
badge
,
DeliveryPriority
.
IMMEDIATE
,
PushType
.
ALERT
,
topicBundleId
,
sound
);
}
}
core/src/main/java/com/wecloud/rtc/service/impl/RtcServiceImpl.java
View file @
673029d4
...
...
@@ -78,7 +78,7 @@ public class RtcServiceImpl extends UserStateListener implements RtcService {
@Override
public
ApiResult
<
CreateRtcChannelResult
>
createAndCall
(
CreateRtcChannelParam
createRtcChannelParam
)
throws
JsonProcessingException
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
Long
rtcChannelId
=
SnowflakeUtil
.
getId
();
// 判断发起方必须在线
boolean
onlineStatus
=
userStateCacheManager
.
isOnline
(
currentClient
.
getId
());
...
...
@@ -116,7 +116,7 @@ public class RtcServiceImpl extends UserStateListener implements RtcService {
@Override
public
ApiResult
<
Boolean
>
join
(
JoinRtcChannelParam
joinRtcChannelParam
)
{
ImClient
client
=
imClientService
.
getCurentClient
();
ImClient
client
=
imClientService
.
getCur
r
entClient
();
// 修改缓存
mangerRtcCacheService
.
join
(
client
.
getId
(),
joinRtcChannelParam
.
getChannelId
());
...
...
@@ -142,7 +142,7 @@ public class RtcServiceImpl extends UserStateListener implements RtcService {
@Override
public
ApiResult
<
Boolean
>
reject
(
RejectRtcChannelParam
rejectRtcChannelParam
)
{
ImClient
client
=
imClientService
.
getCurentClient
();
ImClient
client
=
imClientService
.
getCur
r
entClient
();
// 修改缓存
mangerRtcCacheService
.
leave
(
client
.
getId
(),
rejectRtcChannelParam
.
getChannelId
());
//获取频道内所有client
...
...
@@ -172,7 +172,7 @@ public class RtcServiceImpl extends UserStateListener implements RtcService {
@Override
public
ApiResult
<
Boolean
>
leave
(
LeaveRtcChannelParam
leaveRtcChannelParam
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImClient
currentClient
=
imClientService
.
getCur
r
entClient
();
this
.
leave
(
leaveRtcChannelParam
,
currentClient
);
return
ApiResult
.
ok
(
true
);
...
...
@@ -209,7 +209,7 @@ public class RtcServiceImpl extends UserStateListener implements RtcService {
@Override
public
ApiResult
<
Boolean
>
sdpForward
(
SdpForwardParam
sdpForwardParam
)
{
ImClient
client
=
imClientService
.
getCurentClient
();
ImClient
client
=
imClientService
.
getCur
r
entClient
();
Long
rtcChannelId
=
SnowflakeUtil
.
getId
();
// 根据appKey查询appid
...
...
@@ -250,7 +250,7 @@ public class RtcServiceImpl extends UserStateListener implements RtcService {
@Override
public
ApiResult
<
Boolean
>
candidateForward
(
CandidateForwardParam
candidateForwardParam
)
{
ImClient
client
=
imClientService
.
getCurentClient
();
ImClient
client
=
imClientService
.
getCur
r
entClient
();
Long
rtcChannelId
=
SnowflakeUtil
.
getId
();
// 根据appKey查询appid
...
...
core/src/main/java/com/wecloud/utils/SnowflakeUtil.java
View file @
673029d4
package
com
.
wecloud
.
utils
;
import
cn.hutool.core.lang.Snowflake
;
import
com.wecloud.im.ws.utils.RedisUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.apache.commons.lang3.RandomUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.SystemUtils
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.PostConstruct
;
import
java.net.Inet4Address
;
import
java.net.UnknownHostException
;
/**
* 雪花算法 获取id工具类
...
...
@@ -15,14 +17,11 @@ import javax.annotation.PostConstruct;
@Component
public
class
SnowflakeUtil
{
private
static
SnowflakeUtil
snowflakeUtil
;
/**
* workerId, dataCenterId动态获取
* 12位序列号部分,支持同一毫秒内同一个节点可以生成4096个ID, 在目前一段不用做成动态获取服务器ID
*/
private
static
volatile
Snowflake
SNOWFLAKE
=
null
;
@Autowired
private
RedisUtils
redisUtils
;
/**
* 多线程中加synchronized 保证不会获取重复id
...
...
@@ -34,12 +33,7 @@ public class SnowflakeUtil {
if
(
SNOWFLAKE
==
null
)
{
synchronized
(
SnowflakeUtil
.
class
)
{
if
(
SNOWFLAKE
==
null
)
{
// workerId通过redis获取
long
workerId
=
snowflakeUtil
.
redisUtils
.
incr
(
"workerId"
,
1
);
// redisUtils不需要用了,释放回收掉
snowflakeUtil
.
redisUtils
=
null
;
SNOWFLAKE
=
new
Snowflake
(
workerId
,
1L
);
SNOWFLAKE
=
new
Snowflake
(
SnowflakeUtil
.
getWorkId
(),
1L
);
}
}
}
...
...
@@ -47,11 +41,22 @@ public class SnowflakeUtil {
}
/**
* 静态方法里调用spring注入的方法
* workId通过本机ip计算获得
* @return
*/
@PostConstruct
public
void
init
()
{
snowflakeUtil
=
this
;
snowflakeUtil
.
redisUtils
=
this
.
redisUtils
;
private
static
Long
getWorkId
(){
try
{
String
hostAddress
=
Inet4Address
.
getLocalHost
().
getHostAddress
();
int
[]
ints
=
StringUtils
.
toCodePoints
(
hostAddress
);
int
sums
=
0
;
for
(
int
b
:
ints
){
sums
+=
b
;
}
return
(
long
)(
sums
%
32
);
}
catch
(
UnknownHostException
e
)
{
// 如果获取失败,则使用随机数备用
return
RandomUtils
.
nextLong
(
0
,
31
);
}
}
}
core/src/main/resources/mapper/ImClientDeviceMapper.xml
0 → 100644
View file @
673029d4
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.wecloud.im.mapper.ImClientDeviceMapper"
>
<update
id=
"removeOldToken"
>
UPDATE im_client_device
SET device_token = NULL
WHERE device_token = #{deviceToken}
AND fk_appid = #{appId}
</update>
</mapper>
core/src/main/resources/mapper/ImClientMapper.xml
View file @
673029d4
...
...
@@ -5,14 +5,8 @@
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
id
, create_time, update_time, fk_appid, attributes,client_id,
device_type,valid,device_token,
head_portrait,nickname
, create_time, update_time, fk_appid, attributes,client_id,head_portrait,nickname
</sql>
<update
id=
"removeOldToken"
>
UPDATE im_client
SET device_token = NULL
WHERE device_token = #{deviceToken}
AND fk_appid = #{appId}
</update>
<select
id=
"getImClientPageList"
parameterType=
"com.wecloud.im.param.ImClientPageParam"
resultType=
"com.wecloud.im.param.ImClientQueryVo"
>
...
...
@@ -20,6 +14,7 @@
<include
refid=
"Base_Column_List"
/>
from im_client
</select>
<select
id=
"getInfoList"
resultType=
"com.wecloud.im.vo.GetInfoListVo"
>
SELECT
...
...
core/src/main/resources/mapper/ImFriendMapper.xml
View file @
673029d4
...
...
@@ -25,7 +25,7 @@
<select
id=
"getApplyFriendPageList"
resultType=
"com.wecloud.im.friend.param.ImFriendApplyDto"
>
select
friend.id, client.client_id as friendClientId, friend.friend_name, claimer.client_id as claimerClientId,
friend.id, client.client_id as friendClientId, friend.friend_name
as friendName
, claimer.client_id as claimerClientId,
friend.reject_remark, friend.request_remark, friend.state, friend.create_time
from im_friend friend inner join im_client client on friend.client_id_friend = client.client_id
inner join im_client claimer on friend.client_id_claimer = claimer.client_id
...
...
core/src/main/resources/mapper/ImMessageMapper.xml
View file @
673029d4
...
...
@@ -63,7 +63,8 @@
im_message.system_flag,
im_message.`at`,
im_message.send_status,
im_message.`msg_type` AS 'type', im_message.fk_conversation_id,
im_message.`msg_type` AS 'type',
im_message.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
...
...
@@ -72,6 +73,7 @@
FROM `im_message`
INNER JOIN `im_client` ON `im_client`.id = `im_message`.sender
WHERE fk_conversation_id = #{param.conversationId} and im_message.is_delete = 1 and im_message.withdraw = 0
and (im_message.`event`=0 || (im_message.`event`=1 and sender != #{param.currentFkClientId} ))
<if
test=
"param.msgIdStart != null"
>
AND im_message.id > #{param.msgIdStart}
</if>
...
...
docs/db/feature-cluster增量.sql
View file @
673029d4
-- 在f
eature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
-- 在f
eature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
...
...
@@ -43,7 +43,7 @@ CREATE TABLE `im_friend`
`create_time`
timestamp
NULL
DEFAULT
NULL
COMMENT
'创建时间'
,
`update_time`
timestamp
NULL
DEFAULT
NULL
ON
UPDATE
CURRENT_TIMESTAMP
COMMENT
'修改时间'
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
,
UNIQUE
KEY
`friend_id`
(
`
fk_client_id`
,
`fk_
client_id_friend`
)
USING
BTREE
UNIQUE
KEY
`friend_id`
(
`
client_id`
,
`
client_id_friend`
)
USING
BTREE
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'好友表'
;
CREATE
TABLE
`im_friend_recommend`
...
...
@@ -56,7 +56,7 @@ CREATE TABLE `im_friend_recommend`
`create_time`
timestamp
NULL
DEFAULT
NULL
COMMENT
'创建时间'
,
`update_time`
timestamp
NULL
DEFAULT
NULL
ON
UPDATE
CURRENT_TIMESTAMP
COMMENT
'修改时间'
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
,
UNIQUE
KEY
`friend_id`
(
fk_client_id
,
fk_
client_id_friend
)
USING
BTREE
UNIQUE
KEY
`friend_id`
(
client_id
,
client_id_friend
)
USING
BTREE
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'好友表'
;
...
...
@@ -98,6 +98,27 @@ CREATE TABLE `im_user`
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'用户表'
;
-- 20220302 by wenzhida
CREATE
TABLE
`im_client_device`
(
`id`
bigint
NOT
NULL
COMMENT
'主键id'
,
`fk_appid`
bigint
DEFAULT
NULL
COMMENT
'应用appid'
,
`fk_client_id`
bigint
NOT
NULL
COMMENT
'客户端id'
,
`valid`
int
DEFAULT
NULL
COMMENT
'设备不想收到推送提醒'
,
`device_type`
int
DEFAULT
NULL
COMMENT
'设备类型1:ios; 2:android'
,
`device_token`
varchar
(
300
)
DEFAULT
NULL
COMMENT
'设备推送token'
,
`unique_device_id`
varchar
(
50
)
DEFAULT
NULL
COMMENT
'设备唯一id(由设备端生成)'
,
`create_time`
timestamp
NULL
DEFAULT
NULL
COMMENT
'创建时间'
,
`update_time`
timestamp
NULL
DEFAULT
NULL
ON
UPDATE
CURRENT_TIMESTAMP
COMMENT
'修改时间'
,
PRIMARY
KEY
(
`id`
)
USING
BTREE
,
KEY
`idx_fk_client_id`
(
`fk_client_id`
)
USING
BTREE
,
KEY
`idx_device_token_appid`
(
`device_token`
,
`fk_appid`
)
USING
BTREE
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COMMENT
=
'客户端设备表'
;
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/util/JwtUtil.java
View file @
673029d4
...
...
@@ -59,7 +59,7 @@ public class JwtUtil {
*
* @return
*/
public
static
JwtToken
getCurentJwtToken
()
{
public
static
JwtToken
getCur
r
entJwtToken
()
{
JwtToken
jwtToken
=
(
JwtToken
)
SecurityUtils
.
getSubject
().
getPrincipal
();
return
jwtToken
;
}
...
...
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