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
01e55a5d
Commit
01e55a5d
authored
Feb 24, 2022
by
Future
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
非sdk
parent
c4195da7
Show whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
1169 additions
and
298 deletions
+1169
-298
core/src/main/java/com/wecloud/im/action/MessageAction.java
+108
-0
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
+9
-9
core/src/main/java/com/wecloud/im/controller/ImClientBlacklistController.java
+0
-32
core/src/main/java/com/wecloud/im/controller/ImClientController.java
+0
-76
core/src/main/java/com/wecloud/im/controller/ImMessageController.java
+6
-6
core/src/main/java/com/wecloud/im/entity/ImClientBlacklist.java
+2
-2
core/src/main/java/com/wecloud/im/entity/ImConversationMembers.java
+6
-0
core/src/main/java/com/wecloud/im/enums/SexEnum.java
+45
-0
core/src/main/java/com/wecloud/im/friend/controller/ImFriendController.java
+2
-2
core/src/main/java/com/wecloud/im/friend/mapper/ImFriendMapper.java
+2
-2
core/src/main/java/com/wecloud/im/friend/service/ImFriendService.java
+3
-3
core/src/main/java/com/wecloud/im/param/ChatContentVo.java
+32
-1
core/src/main/java/com/wecloud/im/service/ImClientBlacklistService.java
+3
-50
core/src/main/java/com/wecloud/im/service/ImMessageService.java
+9
-7
core/src/main/java/com/wecloud/im/service/impl/ImClientBlacklistServiceImpl.java
+8
-39
core/src/main/java/com/wecloud/im/service/impl/ImClientServiceImpl.java
+7
-2
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
+62
-36
core/src/main/java/com/wecloud/im/user/controller/FriendController.java
+70
-0
core/src/main/java/com/wecloud/im/user/controller/UserController.java
+81
-4
core/src/main/java/com/wecloud/im/user/controller/VerifyCodeController.java
+1
-11
core/src/main/java/com/wecloud/im/user/entity/User.java
+3
-0
core/src/main/java/com/wecloud/im/user/param/FindUserParam.java
+26
-0
core/src/main/java/com/wecloud/im/user/param/FriendDto.java
+32
-0
core/src/main/java/com/wecloud/im/user/param/GetUserParam.java
+26
-0
core/src/main/java/com/wecloud/im/user/param/LoginSuccessDto.java
+18
-3
core/src/main/java/com/wecloud/im/user/param/ModifyHeadPortraitParam.java
+33
-0
core/src/main/java/com/wecloud/im/user/param/ModifyLandouParam.java
+33
-0
core/src/main/java/com/wecloud/im/user/param/ModifyNicknameParam.java
+33
-0
core/src/main/java/com/wecloud/im/user/param/ModifySexParam.java
+34
-0
core/src/main/java/com/wecloud/im/user/param/RegisterSuccessDto.java
+26
-0
core/src/main/java/com/wecloud/im/user/param/UserBaseDto.java
+50
-0
core/src/main/java/com/wecloud/im/user/service/FriendService.java
+156
-0
core/src/main/java/com/wecloud/im/user/service/UserService.java
+188
-4
core/src/main/java/com/wecloud/rtc/service/impl/RtcServiceImpl.java
+12
-5
core/src/main/java/com/wecloud/utils/RandomUtil.java
+35
-0
core/src/main/resources/mapper/ImFriendMapper.xml
+2
-2
docs/db/feature-cluster增量.sql
+6
-2
No files found.
core/src/main/java/com/wecloud/im/action/MessageAction.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
action
;
import
com.alibaba.fastjson.JSON
;
import
com.wecloud.dispatch.annotation.ActionMapping
;
import
com.wecloud.dispatch.extend.ActionRequest
;
import
com.wecloud.im.param.GetReadersParam
;
import
com.wecloud.im.param.ImHistoryMessagePageParam
;
import
com.wecloud.im.param.MsgDeleteParam
;
import
com.wecloud.im.param.add.ImMsgRecall
;
import
com.wecloud.im.param.add.ImMsgUpdate
;
import
com.wecloud.im.service.ImMessageService
;
import
com.wecloud.im.vo.OfflineMsgDto
;
import
com.wecloud.im.vo.ReaderList
;
import
com.wecloud.im.ws.model.WsResponse
;
import
com.wecloud.im.ws.sender.ChannelSender
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
io.netty.channel.socket.nio.NioSocketChannel
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
/**
* @Author wenzhida
* @Date 2022/2/23 17:14
* @Description 长连接方式处理消息
*/
@Slf4j
@Component
@ActionMapping
(
value
=
"/imMessage"
)
public
class
MessageAction
{
@Autowired
private
ImMessageService
imMessageService
;
@Autowired
private
ChannelSender
channelSender
;
/**
* 消息撤回
* @param request
* @param msgRecall
* @param reqId
*/
@ActionMapping
(
"/withdraw"
)
public
void
withdraw
(
ActionRequest
request
,
ImMsgRecall
msgRecall
,
String
reqId
)
{
log
.
info
(
"撤回消息内容:{}"
,
JSON
.
toJSONString
(
msgRecall
));
WsResponse
<
Boolean
>
wsResponse
=
new
WsResponse
<>();
wsResponse
.
setData
(
imMessageService
.
withdrawMsg
(
request
,
msgRecall
));
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
request
.
getSenderChannel
(),
wsResponse
);
}
/**
* 删除消息内容
* @param request
* @param msgDeleteParam
* @param reqId
*/
@ActionMapping
(
"/delete"
)
public
void
deleteMsg
(
ActionRequest
request
,
MsgDeleteParam
msgDeleteParam
,
String
reqId
)
{
log
.
info
(
"删除消息内容:{}"
,
JSON
.
toJSONString
(
msgDeleteParam
));
WsResponse
<
Boolean
>
wsResponse
=
new
WsResponse
<>();
wsResponse
.
setData
(
imMessageService
.
deleteMsg
(
request
,
msgDeleteParam
));
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
request
.
getSenderChannel
(),
wsResponse
);
}
/**
* 修改消息体
* @param request
* @param imMsgUpdate
* @param reqId
*/
@ActionMapping
(
"/updateMsgById"
)
public
void
updateMsgById
(
ActionRequest
request
,
ImMsgUpdate
imMsgUpdate
,
String
reqId
)
{
log
.
info
(
"修改消息内容:{}"
,
JSON
.
toJSONString
(
imMsgUpdate
));
WsResponse
<
Boolean
>
wsResponse
=
new
WsResponse
<>();
wsResponse
.
setData
(
imMessageService
.
updateMsgById
(
imMsgUpdate
));
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
request
.
getSenderChannel
(),
wsResponse
);
}
/**
* 查询某个会话历史消息分页列表
* @param request
* @param param
* @param reqId
*/
@ActionMapping
(
"/getHistoryMsg"
)
public
void
getHistoryMsg
(
ActionRequest
request
,
ImHistoryMessagePageParam
param
,
String
reqId
)
{
log
.
info
(
"查询某个会话历史消息分页列表:{}"
,
JSON
.
toJSONString
(
param
));
WsResponse
<
Paging
<
OfflineMsgDto
>>
wsResponse
=
new
WsResponse
<>();
wsResponse
.
setData
(
imMessageService
.
getHistoryMsgConversationId
(
param
));
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
request
.
getSenderChannel
(),
wsResponse
);
}
/**
* 查询某个消息已读client列表和未读client
* @param request
* @param param
* @param reqId
*/
@ActionMapping
(
"/getReaders"
)
public
void
getReaders
(
ActionRequest
request
,
GetReadersParam
param
,
String
reqId
)
{
log
.
info
(
"查询某个消息已读client列表和未读client:{}"
,
JSON
.
toJSONString
(
param
));
WsResponse
<
ReaderList
>
wsResponse
=
new
WsResponse
<>();
wsResponse
.
setData
(
imMessageService
.
getReaders
(
request
,
param
));
channelSender
.
sendMsgLocal
((
NioSocketChannel
)
request
.
getSenderChannel
(),
wsResponse
);
}
}
core/src/main/java/com/wecloud/im/action/NormalChatAction.java
View file @
01e55a5d
...
...
@@ -261,17 +261,17 @@ public class NormalChatAction {
* @return
*/
private
boolean
black
(
String
reqId
,
ImClient
imClientSender
,
List
<
ImConversationMembers
>
membersList
,
Channel
channel
)
{
Long
meId
=
imClientSender
.
ge
tId
();
Long
heId
=
null
;
if
(
membersList
.
get
(
0
).
getFkClientId
().
equals
(
meId
))
{
he
Id
=
membersList
.
get
(
1
).
getFk
ClientId
();
String
meClientId
=
imClientSender
.
getClien
tId
();
String
heClientId
;
if
(
membersList
.
get
(
0
).
getFkClientId
().
equals
(
me
Client
Id
))
{
he
ClientId
=
membersList
.
get
(
1
).
get
ClientId
();
}
else
{
he
Id
=
membersList
.
get
(
0
).
getFk
ClientId
();
he
ClientId
=
membersList
.
get
(
0
).
get
ClientId
();
}
// 判断是否被拉黑
boolean
beBlack
=
imClientBlacklistService
.
isBeBlack
(
he
Id
,
me
Id
);
boolean
beBlack
=
imClientBlacklistService
.
isBeBlack
(
he
ClientId
,
meClient
Id
);
if
(
beBlack
)
{
log
.
info
(
"被对方拉黑了, meId={},he
Id={}"
,
meId
,
he
Id
);
log
.
info
(
"被对方拉黑了, meId={},he
ClientId={}"
,
meClientId
,
heClient
Id
);
// 响应发送方
WsResponse
<
HashMap
<
String
,
Long
>>
responseModel
=
new
WsResponse
<>();
...
...
@@ -287,9 +287,9 @@ public class NormalChatAction {
}
// 是否把对方拉黑
boolean
black
=
imClientBlacklistService
.
isBeBlack
(
me
Id
,
he
Id
);
boolean
black
=
imClientBlacklistService
.
isBeBlack
(
me
ClientId
,
heClient
Id
);
if
(
black
)
{
log
.
info
(
"你把对方拉黑了, meId={},he
Id={}"
,
meId
,
he
Id
);
log
.
info
(
"你把对方拉黑了, meId={},he
ClientId={}"
,
meClientId
,
heClient
Id
);
// 响应发送方
WsResponse
<
HashMap
<
String
,
Long
>>
responseModel
=
new
WsResponse
<>();
ApiResult
<
Boolean
>
result
=
ApiResult
.
result
(
ApiCode
.
IS_TO_BLACK
);
...
...
core/src/main/java/com/wecloud/im/controller/ImClientBlacklistController.java
View file @
01e55a5d
...
...
@@ -64,37 +64,5 @@ public class ImClientBlacklistController extends BaseController {
return
imClientBlacklistService
.
getImClientBlacklistPageList
(
imClientBlacklistPageParam
);
}
// /**
// * 修改黑名单
// */
// @PostMapping("/update")
// @OperationLog(name = "修改黑名单", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改黑名单")
// public ApiResult<Boolean> updateImClientBlacklist(@Validated(Update.class) @RequestBody ImClientBlacklist imClientBlacklist) throws Exception {
// boolean flag = imClientBlacklistService.updateImClientBlacklist(imClientBlacklist);
// return ApiResult.result(flag);
// }
// /**
// * 获取黑名单详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "黑名单详情", type = OperationLogType.INFO)
// @ApiOperation(value = "黑名单详情")
// public ApiResult<ImClientBlacklistQueryVo> getImClientBlacklist(@PathVariable("id") Long id) throws Exception {
// ImClientBlacklistQueryVo imClientBlacklistQueryVo = imClientBlacklistService.getImClientBlacklistById(id);
// return ApiResult.ok(imClientBlacklistQueryVo);
// }
// /**
// * 黑名单分页列表
// */
// @PostMapping("/getPageList")
// @OperationLog(name = "黑名单分页列表", type = OperationLogType.PAGE)
// @ApiOperation(value = "黑名单分页列表")
// public ApiResult<Paging<ImClientBlacklistQueryVo>> getImClientBlacklistPageList(@Validated @RequestBody ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception {
// Paging<ImClientBlacklistQueryVo> paging = imClientBlacklistService.getImClientBlacklistPageList(imClientBlacklistPageParam);
// return ApiResult.ok(paging);
// }
}
core/src/main/java/com/wecloud/im/controller/ImClientController.java
View file @
01e55a5d
...
...
@@ -160,82 +160,6 @@ public class ImClientController extends BaseController {
}
return
ApiResult
.
ok
(
imOnlineStatusVos
);
}
//
// /**
// * 获取用户在线状态(批量)
// *
// * @return true:在线, false 不在线
// */
// @PostMapping("/getOnlineStatus")
// @OperationLog(name = "获取用户在线状态", type = OperationLogType.ADD)
// @ApiOperation(value = "获取用户在线状态")
// ApiResult<ImOnlineStatusVo> getOnlinesStatus(String clientId) {
// // shiro线程中获取当前token
// JwtToken curentJwtToken = JwtUtil.getCurentJwtToken();
//
// // 根据appKey查询appid
// ImApplication imApplication = imApplicationService.getOneByAppKey(curentJwtToken.getAppKey());
//
// boolean onlineStatus = mangerChannelService.getOnlineStatus(imApplication.getAppKey(), clientId);
// ImOnlineStatusVo imOnlineStatusVo = new ImOnlineStatusVo();
// imOnlineStatusVo.setStatus(onlineStatus);
// return ApiResult.ok(imOnlineStatusVo);
// }
// /**
// * 添加终端表
// */
// @PostMapping("/add")
// @OperationLog(name = "添加终端表", type = OperationLogType.ADD)
// @ApiOperation(value = "添加终端表")
// public ApiResult<Boolean> addImClient(@Validated(Add.class) @RequestBody ImClient imClient) throws Exception {
// boolean flag = imClientService.saveImClient(imClient);
// return ApiResult.result(flag);
// }
//
// /**
// * 修改终端表
// */
// @PostMapping("/update")
// @OperationLog(name = "修改终端表", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改终端表")
// public ApiResult<Boolean> updateImClient(@Validated(Update.class) @RequestBody ImClient imClient) throws Exception {
// boolean flag = imClientService.updateImClient(imClient);
// return ApiResult.result(flag);
// }
//
// /**
// * 删除终端表
// */
// @PostMapping("/delete/{id}")
// @OperationLog(name = "删除终端表", type = OperationLogType.DELETE)
// @ApiOperation(value = "删除终端表")
// public ApiResult<Boolean> deleteImClient(@PathVariable("id") Long id) throws Exception {
// boolean flag = imClientService.deleteImClient(id);
// return ApiResult.result(flag);
// }
//
// /**
// * 获取终端表详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "终端表详情", type = OperationLogType.INFO)
// @ApiOperation(value = "终端表详情")
// public ApiResult<ImClientQueryVo> getImClient(@PathVariable("id") Long id) throws Exception {
// ImClientQueryVo imClientQueryVo = imClientService.getImClientById(id);
// return ApiResult.ok(imClientQueryVo);
// }
//
// /**
// * 终端表分页列表
// */
// @PostMapping("/getPageList")
// @OperationLog(name = "终端表分页列表", type = OperationLogType.PAGE)
// @ApiOperation(value = "终端表分页列表")
// public ApiResult<Paging<ImClientQueryVo>> getImClientPageList(@Validated @RequestBody ImClientPageParam imClientPageParam) throws Exception {
// Paging<ImClientQueryVo> paging = imClientService.getImClientPageList(imClientPageParam);
// return ApiResult.ok(paging);
// }
}
core/src/main/java/com/wecloud/im/controller/ImMessageController.java
View file @
01e55a5d
...
...
@@ -49,7 +49,7 @@ public class ImMessageController extends BaseController {
@PostMapping
(
"/withdraw"
)
@ApiOperation
(
value
=
"消息撤回"
,
notes
=
"只能撤回客户端自己发送的消息"
)
public
ApiResult
<
Boolean
>
withdrawMsg
(
@RequestBody
ImMsgRecall
imMsgRecall
)
throws
Exception
{
return
imMessageService
.
withdrawMsg
(
imMsgRecall
);
return
ApiResult
.
ok
(
imMessageService
.
withdrawMsg
(
null
,
imMsgRecall
)
);
}
/**
...
...
@@ -62,9 +62,9 @@ public class ImMessageController extends BaseController {
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
if
(
CollectionUtils
.
isEmpty
(
param
.
getMsgIds
()))
{
return
ApiResult
.
fail
(
"请选择要删除"
);
return
ApiResult
.
fail
(
"请选择要删除
的消息id
"
);
}
return
imMessageService
.
deleteMsg
(
param
);
return
ApiResult
.
ok
(
imMessageService
.
deleteMsg
(
null
,
param
)
);
}
/**
...
...
@@ -73,7 +73,7 @@ public class ImMessageController extends BaseController {
@PostMapping
(
"/updateMsgById"
)
@ApiOperation
(
value
=
"修改消息体"
,
notes
=
"只能修改客户端自己发送的消息"
)
public
ApiResult
<
Boolean
>
updateMsgById
(
@RequestBody
ImMsgUpdate
imMsgUpdate
)
throws
Exception
{
return
imMessageService
.
updateMsgById
(
imMsgUpdate
);
return
ApiResult
.
ok
(
imMessageService
.
updateMsgById
(
imMsgUpdate
)
);
}
/**
...
...
@@ -92,7 +92,7 @@ public class ImMessageController extends BaseController {
@PostMapping
(
"/getHistoryMsg"
)
@OperationLog
(
name
=
"查询某个会话历史消息分页列表"
,
type
=
OperationLogType
.
PAGE
)
@ApiOperation
(
value
=
"查询某个会话历史消息分页列表"
)
public
ApiResult
<
Paging
<
OfflineMsgDto
>>
getHistoryMsg
(
@Validated
@RequestBody
ImHistoryMessagePageParam
imHistoryMessagePageParam
)
throws
Exception
{
public
ApiResult
<
Paging
<
OfflineMsgDto
>>
getHistoryMsg
(
@Validated
@RequestBody
ImHistoryMessagePageParam
imHistoryMessagePageParam
)
{
Paging
<
OfflineMsgDto
>
paging
=
imMessageService
.
getHistoryMsgConversationId
(
imHistoryMessagePageParam
);
return
ApiResult
.
ok
(
paging
);
}
...
...
@@ -103,7 +103,7 @@ public class ImMessageController extends BaseController {
@PostMapping
(
"/getReaders"
)
@ApiOperation
(
value
=
"查询某个消息已读client列表和未读client"
)
public
ApiResult
<
ReaderList
>
getReaders
(
@Validated
@RequestBody
GetReadersParam
param
)
{
ReaderList
readerList
=
imMessageService
.
getReaders
(
param
);
ReaderList
readerList
=
imMessageService
.
getReaders
(
null
,
param
);
return
ApiResult
.
ok
(
readerList
);
}
...
...
core/src/main/java/com/wecloud/im/entity/ImClientBlacklist.java
View file @
01e55a5d
...
...
@@ -40,9 +40,9 @@ public class ImClientBlacklist extends BaseEntity {
private
Long
fkAppid
;
@ApiModelProperty
(
"拉黑者"
)
private
Long
fkC
lientIdPrevent
;
private
String
c
lientIdPrevent
;
@ApiModelProperty
(
"被拉黑"
)
private
Long
fkC
lientIdBePrevent
;
private
String
c
lientIdBePrevent
;
}
core/src/main/java/com/wecloud/im/entity/ImConversationMembers.java
View file @
01e55a5d
...
...
@@ -72,4 +72,10 @@ public class ImConversationMembers extends BaseEntity {
@ApiModelProperty
(
"禁言开关 1-未禁言 2-禁言"
)
private
Integer
muted
;
/**
* 客户方提供的唯一id
*/
@ApiModelProperty
(
"客户方提供的唯一id"
)
private
String
clientId
;
}
core/src/main/java/com/wecloud/im/enums/SexEnum.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
enums
;
import
io.geekidea.springbootplus.framework.common.enums.BaseEnum
;
/**
* @Author wenzhida
* @Date 2022/2/23 13:44
* @Description 性别枚举
*/
public
enum
SexEnum
implements
BaseEnum
{
/**
* 1 - 男
*/
MAN
(
1
,
"男"
),
/**
* 2 - 女
*/
WOMAN
(
2
,
"女"
),
/**
* 3 - 未知
*/
UNKNOWN
(
3
,
"未知"
);
SexEnum
(
int
code
,
String
desc
)
{
this
.
code
=
code
;
this
.
desc
=
desc
;
}
private
final
Integer
code
;
private
final
String
desc
;
@Override
public
Integer
getCode
()
{
return
this
.
code
;
}
@Override
public
String
getDesc
()
{
return
this
.
desc
;
}
}
core/src/main/java/com/wecloud/im/friend/controller/ImFriendController.java
View file @
01e55a5d
...
...
@@ -104,7 +104,7 @@ public class ImFriendController extends BaseController {
if
(
currentClient
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
List
<
ImFriendApplyDto
>
friendInfo
=
imFriendService
.
get
Unsure
Friends
(
currentClient
);
List
<
ImFriendApplyDto
>
friendInfo
=
imFriendService
.
get
Apply
Friends
(
currentClient
);
return
ApiResult
.
ok
(
friendInfo
);
}
...
...
@@ -158,7 +158,7 @@ public class ImFriendController extends BaseController {
return
ApiResult
.
fail
(
ApiCode
.
CLIENT_NOT_FOUNT
,
null
);
}
Paging
<
ImFriendBaseDto
>
friends
=
imFriendService
.
getImFriendPageList
(
currentClient
.
getId
(),
pageParam
);
Paging
<
ImFriendBaseDto
>
friends
=
imFriendService
.
getImFriendPageList
(
currentClient
.
get
Client
Id
(),
pageParam
);
return
ApiResult
.
ok
(
friends
);
}
...
...
core/src/main/java/com/wecloud/im/friend/mapper/ImFriendMapper.java
View file @
01e55a5d
...
...
@@ -19,7 +19,7 @@ import java.util.List;
@Repository
public
interface
ImFriendMapper
extends
BaseMapper
<
ImFriend
>
{
IPage
<
ImFriendBaseDto
>
getImFriendPageList
(
@Param
(
"page"
)
Page
<
ImFriendBaseDto
>
page
,
@Param
(
"clientId"
)
Long
fkC
lientId
);
IPage
<
ImFriendBaseDto
>
getImFriendPageList
(
@Param
(
"page"
)
Page
<
ImFriendBaseDto
>
page
,
@Param
(
"clientId"
)
String
c
lientId
);
/**
* 获取待验证的好友列表
...
...
@@ -27,7 +27,7 @@ public interface ImFriendMapper extends BaseMapper<ImFriend> {
* @param clientId
* @return
*/
IPage
<
ImFriendApplyDto
>
get
Unsure
FriendPageList
(
@Param
(
"page"
)
Page
<
ImFriendApplyDto
>
page
,
@Param
(
"clientId"
)
String
clientId
);
IPage
<
ImFriendApplyDto
>
get
Apply
FriendPageList
(
@Param
(
"page"
)
Page
<
ImFriendApplyDto
>
page
,
@Param
(
"clientId"
)
String
clientId
);
ImFriendApplyDto
getFriendInfo
(
@Param
(
"clientId"
)
String
clientId
,
@Param
(
"friendClientId"
)
String
friendClientId
);
...
...
core/src/main/java/com/wecloud/im/friend/service/ImFriendService.java
View file @
01e55a5d
...
...
@@ -68,11 +68,11 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
* @param currentClient
* @return
*/
public
List
<
ImFriendApplyDto
>
get
Unsure
Friends
(
ImClient
currentClient
)
{
public
List
<
ImFriendApplyDto
>
get
Apply
Friends
(
ImClient
currentClient
)
{
ImFriendPageParam
pageParam
=
new
ImFriendPageParam
();
pageParam
.
setPageSize
(
1000L
);
Page
<
ImFriendApplyDto
>
page
=
new
PageInfo
(
pageParam
,
OrderItem
.
desc
(
getLambdaColumn
(
ImFriend:
:
getCreateTime
)));
IPage
<
ImFriendApplyDto
>
pageList
=
imFriendMapper
.
get
Unsure
FriendPageList
(
page
,
currentClient
.
getClientId
());
IPage
<
ImFriendApplyDto
>
pageList
=
imFriendMapper
.
get
Apply
FriendPageList
(
page
,
currentClient
.
getClientId
());
return
pageList
.
getRecords
();
}
...
...
@@ -208,7 +208,7 @@ public class ImFriendService extends BaseServiceImpl<ImFriendMapper, ImFriend> {
imFriendMapper
.
batchDeleteFriend
(
currentClient
.
getClientId
(),
currentClient
.
getFkAppid
(),
friendClientIds
);
}
public
Paging
<
ImFriendBaseDto
>
getImFriendPageList
(
Lo
ng
currentClientId
,
ImFriendPageParam
pageParam
)
{
public
Paging
<
ImFriendBaseDto
>
getImFriendPageList
(
Stri
ng
currentClientId
,
ImFriendPageParam
pageParam
)
{
Page
<
ImFriendBaseDto
>
page
=
new
PageInfo
(
pageParam
,
OrderItem
.
desc
(
getLambdaColumn
(
ImFriend:
:
getFriendName
)));
IPage
<
ImFriendBaseDto
>
pageList
=
imFriendMapper
.
getImFriendPageList
(
page
,
currentClientId
);
return
new
Paging
<>(
pageList
);
...
...
core/src/main/java/com/wecloud/im/param/ChatContentVo.java
View file @
01e55a5d
...
...
@@ -7,16 +7,37 @@ import com.wecloud.utils.JsonUtils;
import
javax.validation.constraints.NotNull
;
/**
* @Description
TODO
* @Description
聊天内容
* @Author lixiaozhong
* @Date 2022/1/26 6:11 下午
*/
public
class
ChatContentVo
extends
BaseRequest
{
/**
* 客户端请求id
*/
String
reqId
;
/**
* 推送到通知栏对象
*/
PushVO
push
;
/**
* 会话id
*/
@NotNull
Long
toConversation
;
/**
* 消息类型
*/
@NotNull
Integer
type
;
/**
* 发送文本
*/
String
text
;
public
PushVO
getPush
()
{
...
...
@@ -51,4 +72,14 @@ public class ChatContentVo extends BaseRequest {
public
void
setText
(
String
text
)
{
this
.
text
=
text
;
}
@Override
public
String
getReqId
()
{
return
reqId
;
}
@Override
public
void
setReqId
(
String
reqId
)
{
this
.
reqId
=
reqId
;
}
}
core/src/main/java/com/wecloud/im/service/ImClientBlacklistService.java
View file @
01e55a5d
...
...
@@ -20,11 +20,11 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
/**
* 当前客户端是否被拉黑
*
* @param currentClient 当前客户端
* @param toClient 对方客户端
* @param currentClient
Id
当前客户端
* @param toClient
Id
对方客户端
* @return
*/
boolean
isBeBlack
(
Long
currentClient
,
Long
toClient
);
boolean
isBeBlack
(
String
currentClientId
,
String
toClientId
);
/**
* 拉入黑名单
...
...
@@ -44,53 +44,6 @@ public interface ImClientBlacklistService extends BaseService<ImClientBlacklist>
*/
ApiResult
<
Boolean
>
removeImClientBlacklist
(
ImClientBlacklistUpdate
imClientBlacklistUpdate
)
throws
Exception
;
/**
* 保存
*
* @param imClientBlacklist
* @return
* @throws Exception
*/
boolean
saveImClientBlacklist
(
ImClientBlacklist
imClientBlacklist
)
throws
Exception
;
/**
* 修改
*
* @param imClientBlacklist
* @return
* @throws Exception
*/
boolean
updateImClientBlacklist
(
ImClientBlacklist
imClientBlacklist
)
throws
Exception
;
/**
* 删除
*
* @param id
* @return
* @throws Exception
*/
boolean
deleteImClientBlacklist
(
Long
id
)
throws
Exception
;
/**
* 根据ID获取查询对象
*
* @param id
* @return
* @throws Exception
*/
ImClientBlacklistQueryVo
getImClientBlacklistById
(
Long
id
)
throws
Exception
;
// /**
// * 获取分页对象
// *
// * @param imClientBlacklistPageParam
// * @return
// * @throws Exception
// */
// Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception;
/**
* 获取分页对象
*
...
...
core/src/main/java/com/wecloud/im/service/ImMessageService.java
View file @
01e55a5d
package
com
.
wecloud
.
im
.
service
;
import
com.wecloud.dispatch.extend.ActionRequest
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImMessage
;
...
...
@@ -48,18 +49,19 @@ public interface ImMessageService extends BaseService<ImMessage> {
ImMessage
saveImMessage
(
ImClientSimpleDto
client
,
long
messageId
,
ChatContentVo
data
);
/**
* 消息撤回 只能撤回客户端自己发送的消息
*
* 消息撤回
* @param imMsgRecall
* @param request
* @return
*/
ApiResult
<
Boolean
>
withdrawMsg
(
ImMsgRecall
imMsgRecall
);
Boolean
withdrawMsg
(
ActionRequest
request
,
ImMsgRecall
imMsgRecall
);
/**
* 删除消息
* @param param
* @return
*/
ApiResult
<
Boolean
>
deleteMsg
(
MsgDeleteParam
param
);
Boolean
deleteMsg
(
ActionRequest
request
,
MsgDeleteParam
param
);
/**
* 修改消息体
...
...
@@ -67,7 +69,7 @@ public interface ImMessageService extends BaseService<ImMessage> {
* @param imMsgUpdate
* @return
*/
ApiResult
<
Boolean
>
updateMsgById
(
ImMsgUpdate
imMsgUpdate
);
Boolean
updateMsgById
(
ImMsgUpdate
imMsgUpdate
);
/**
* 查询某个会话历史消息分页列表
...
...
@@ -76,7 +78,7 @@ public interface ImMessageService extends BaseService<ImMessage> {
* @return
* @throws Exception
*/
Paging
<
OfflineMsgDto
>
getHistoryMsgConversationId
(
ImHistoryMessagePageParam
imHistoryMessagePageParam
)
throws
Exception
;
Paging
<
OfflineMsgDto
>
getHistoryMsgConversationId
(
ImHistoryMessagePageParam
imHistoryMessagePageParam
);
/**
* 查询用户所有离线消息
...
...
@@ -127,6 +129,6 @@ public interface ImMessageService extends BaseService<ImMessage> {
* @param param
* @return
*/
ReaderList
getReaders
(
GetReadersParam
param
);
ReaderList
getReaders
(
ActionRequest
request
,
GetReadersParam
param
);
}
core/src/main/java/com/wecloud/im/service/impl/ImClientBlacklistServiceImpl.java
View file @
01e55a5d
...
...
@@ -2,7 +2,6 @@ package com.wecloud.im.service.impl;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.OrderItem
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.entity.ImClientBlacklist
;
...
...
@@ -12,12 +11,12 @@ import com.wecloud.im.param.ImClientBlacklistQueryVo;
import
com.wecloud.im.param.add.ImClientBlacklistUpdate
;
import
com.wecloud.im.service.ImClientBlacklistService
;
import
com.wecloud.im.service.ImClientService
;
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
;
import
io.geekidea.springbootplus.framework.core.pagination.PageInfo
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
com.wecloud.utils.SnowflakeUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -42,10 +41,10 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
private
ImClientService
imClientService
;
@Override
public
boolean
isBeBlack
(
Long
currentClient
,
Long
toClient
)
{
public
boolean
isBeBlack
(
String
currentClientId
,
String
toClientId
)
{
ImClientBlacklist
one
=
this
.
getOne
(
new
QueryWrapper
<
ImClientBlacklist
>().
lambda
()
.
eq
(
ImClientBlacklist:
:
get
FkClientIdPrevent
,
currentClient
)
.
eq
(
ImClientBlacklist:
:
get
FkClientIdBePrevent
,
toClient
));
.
eq
(
ImClientBlacklist:
:
get
ClientIdPrevent
,
currentClientId
)
.
eq
(
ImClientBlacklist:
:
get
ClientIdBePrevent
,
toClientId
));
return
one
!=
null
;
}
...
...
@@ -67,8 +66,8 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
imClientBlacklist
.
setId
(
SnowflakeUtil
.
getId
());
imClientBlacklist
.
setCreateTime
(
new
Date
());
imClientBlacklist
.
setFkAppid
(
client
.
getFkAppid
());
imClientBlacklist
.
set
FkClientIdPrevent
(
client
.
ge
tId
());
imClientBlacklist
.
set
FkClientIdBePrevent
(
beBlacker
.
ge
tId
());
imClientBlacklist
.
set
ClientIdPrevent
(
client
.
getClien
tId
());
imClientBlacklist
.
set
ClientIdBePrevent
(
beBlacker
.
getClien
tId
());
this
.
save
(
imClientBlacklist
);
return
ApiResult
.
ok
();
...
...
@@ -91,41 +90,11 @@ public class ImClientBlacklistServiceImpl extends BaseServiceImpl<ImClientBlackl
}
// 删除
this
.
remove
(
new
QueryWrapper
<
ImClientBlacklist
>().
lambda
()
.
eq
(
ImClientBlacklist:
:
get
FkClientIdPrevent
,
client
.
ge
tId
())
.
eq
(
ImClientBlacklist:
:
get
FkClientIdBePrevent
,
beBlacker
.
ge
tId
()));
.
eq
(
ImClientBlacklist:
:
get
ClientIdPrevent
,
client
.
getClien
tId
())
.
eq
(
ImClientBlacklist:
:
get
ClientIdBePrevent
,
beBlacker
.
getClien
tId
()));
return
ApiResult
.
ok
();
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
boolean
saveImClientBlacklist
(
ImClientBlacklist
imClientBlacklist
)
throws
Exception
{
return
super
.
save
(
imClientBlacklist
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
boolean
updateImClientBlacklist
(
ImClientBlacklist
imClientBlacklist
)
throws
Exception
{
return
super
.
updateById
(
imClientBlacklist
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
boolean
deleteImClientBlacklist
(
Long
id
)
throws
Exception
{
return
super
.
removeById
(
id
);
}
@Override
public
ImClientBlacklistQueryVo
getImClientBlacklistById
(
Long
id
)
throws
Exception
{
return
imClientBlacklistMapper
.
getImClientBlacklistById
(
id
);
}
// @Override
// public Paging<ImClientBlacklistQueryVo> getImClientBlacklistPageList(ImClientBlacklistPageParam imClientBlacklistPageParam) throws Exception {
// Page<ImClientBlacklistQueryVo> page = new PageInfo<>(imClientBlacklistPageParam, OrderItem.desc(getLambdaColumn(ImClientBlacklist::getCreateTime)));
// IPage<ImClientBlacklistQueryVo> iPage = imClientBlacklistMapper.getImClientBlacklistPageList(page, imClientBlacklistPageParam);
// return new Paging<ImClientBlacklistQueryVo>(iPage);
// }
@Override
public
ApiResult
<
Paging
<
ImClientBlacklistQueryVo
>>
getImClientBlacklistPageList
(
ImClientBlacklistPageParam
imClientBlacklistPageParam
)
throws
Exception
{
...
...
core/src/main/java/com/wecloud/im/service/impl/ImClientServiceImpl.java
View file @
01e55a5d
...
...
@@ -158,13 +158,18 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
if
(
currentClient
==
null
)
{
throw
new
BusinessException
(
"当前用户登录信息失效"
);
}
ClientInfoVo
clientInfoVo
=
new
ClientInfoVo
();
if
(
param
.
getConversationId
()
!=
null
)
{
List
<
GetInfoListVo
>
infoList
=
imClientMapper
.
getInfoList
(
currentClient
.
getFkAppid
(),
param
.
getConversationId
(),
Lists
.
newArrayList
(
param
.
getClientId
()));
if
(
CollectionUtils
.
isEmpty
(
infoList
))
{
throw
new
BusinessException
(
"群内未查询到该用户信息"
);
}
ClientInfoVo
clientInfoVo
=
new
ClientInfoVo
();
BeanUtils
.
copyProperties
(
infoList
.
get
(
0
),
clientInfoVo
);
}
else
{
ImClient
imClient
=
this
.
getCacheImClient
(
currentClient
.
getFkAppid
(),
param
.
getClientId
());
BeanUtils
.
copyProperties
(
imClient
,
clientInfoVo
);
}
clientInfoVo
.
setRelation
(
RelationEnum
.
STRANGER
.
getCode
());
// 查询该好友与自己关系: 陌生人、好友、被拉黑名单
ImFriend
imFriend
=
imFriendService
.
getByKey
(
currentClient
.
getClientId
(),
clientInfoVo
.
getClientId
());
...
...
@@ -172,7 +177,7 @@ public class ImClientServiceImpl extends BaseServiceImpl<ImClientMapper, ImClien
clientInfoVo
.
setRelation
(
RelationEnum
.
FRIEND
.
getCode
());
}
// 查询是否被拉黑
if
(
imClientBlacklistService
.
isBeBlack
(
currentClient
.
get
Id
(),
clientInfoVo
.
ge
tId
()))
{
if
(
imClientBlacklistService
.
isBeBlack
(
currentClient
.
get
ClientId
(),
clientInfoVo
.
getClien
tId
()))
{
clientInfoVo
.
setRelation
(
RelationEnum
.
BE_BLACK
.
getCode
());
}
return
clientInfoVo
;
...
...
core/src/main/java/com/wecloud/im/service/impl/ImMessageServiceImpl.java
View file @
01e55a5d
...
...
@@ -6,6 +6,7 @@ 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.dispatch.extend.ActionRequest
;
import
com.wecloud.im.entity.ImApiMessageOnlineSend
;
import
com.wecloud.im.entity.ImApplication
;
import
com.wecloud.im.entity.ImClient
;
...
...
@@ -200,22 +201,32 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
withdrawMsg
(
ImMsgRecall
imMsgRecall
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
public
Boolean
withdrawMsg
(
ActionRequest
request
,
ImMsgRecall
imMsgRecall
)
{
ImClient
imClientSender
;
ImApplication
imApplication
;
if
(
request
!=
null
)
{
imClientSender
=
imClientService
.
getCacheImClient
(
request
.
getSenderClientId
());
imApplication
=
imApplicationService
.
getCacheById
(
imClientSender
.
getFkAppid
());
}
else
{
imClientSender
=
imClientService
.
getCurentClient
();
// 查询imApplication
ImApplication
imApplication
=
imApplicationService
.
getCacheById
(
currentClient
.
getFkAppid
());
imApplication
=
imApplicationService
.
getCacheById
(
imClientSender
.
getFkAppid
());
}
if
(
imClientSender
==
null
)
{
throw
new
BusinessException
(
"查无发送用户信息"
);
}
if
(
imApplication
==
null
)
{
return
ApiResult
.
fail
(
"查无应用信息"
);
throw
new
BusinessException
(
"查无应用信息"
);
}
ImMessage
messageById
=
this
.
getById
(
imMsgRecall
.
getMsgId
());
// 判断该消息是否是该客户端发送 todo 单向撤回、双向撤回开关可配置
Boolean
withdrawOther
=
true
;
if
(!
withdrawOther
&&
!
messageById
.
getSender
().
equals
(
currentClient
.
getId
()))
{
return
ApiResult
.
fail
(
"不可撤回别人发送的消息"
);
if
(!
withdrawOther
&&
!
messageById
.
getSender
().
equals
(
imClientSender
.
getId
()))
{
throw
new
BusinessException
(
"不可撤回别人发送的消息"
);
}
if
(
messageById
.
getWithdraw
())
{
return
ApiResult
.
ok
()
;
return
Boolean
.
TRUE
;
}
// 修改消息体
messageById
.
setWithdraw
(
Boolean
.
TRUE
);
...
...
@@ -225,7 +236,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
boolean
saveOk
=
this
.
updateById
(
messageById
);
ImClient
msgOwner
=
imClientService
.
getCacheImClient
(
messageById
.
getSender
());
if
(
msgOwner
==
null
)
{
return
ApiResult
.
fail
(
"未查找到消息发送者"
);
throw
new
BusinessException
(
"未查找到消息发送者"
);
}
if
(
saveOk
)
{
...
...
@@ -233,11 +244,11 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
messageById
.
getFkConversationId
())
.
notIn
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
.
notIn
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
);
if
(
membersList
.
isEmpty
())
{
log
.
info
(
"membersList为空,toConversationId:"
+
messageById
.
getFkConversationId
());
return
ApiResult
.
fail
(
"该会话成员列表为空"
);
throw
new
BusinessException
(
"该会话成员列表为空"
);
}
// 遍历发送
for
(
ImConversationMembers
conversationMembers
:
membersList
)
{
...
...
@@ -267,7 +278,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
BeanUtils
.
copyProperties
(
messageById
,
imMessageOnlineSend
);
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
MSG_WITHDRAW
.
getUriCode
());
imMessageOnlineSend
.
setMsgId
(
messageById
.
getId
());
imMessageOnlineSend
.
setSender
(
currentClient
.
getClientId
());
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
Map
<
String
,
Object
>
contentMap
=
Maps
.
newHashMap
();
contentMap
.
put
(
"msgOwner"
,
msgOwner
.
getClientId
());
imMessageOnlineSend
.
setContent
(
contentMap
);
...
...
@@ -292,31 +303,41 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
asyncPush
.
push
(
pushVO
,
imClientReceiver
,
imApplication
);
}
return
ApiResult
.
ok
()
;
return
Boolean
.
TRUE
;
}
else
{
return
ApiResult
.
fail
()
;
return
Boolean
.
TRUE
;
}
}
@Override
public
ApiResult
<
Boolean
>
deleteMsg
(
MsgDeleteParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
public
Boolean
deleteMsg
(
ActionRequest
request
,
MsgDeleteParam
param
)
{
ImClient
imClientSender
;
ImApplication
imApplication
;
if
(
request
!=
null
)
{
imClientSender
=
imClientService
.
getCacheImClient
(
request
.
getSenderClientId
());
imApplication
=
imApplicationService
.
getCacheById
(
imClientSender
.
getFkAppid
());
}
else
{
imClientSender
=
imClientService
.
getCurentClient
();
// 查询imApplication
ImApplication
imApplication
=
imApplicationService
.
getCacheById
(
currentClient
.
getFkAppid
());
imApplication
=
imApplicationService
.
getCacheById
(
imClientSender
.
getFkAppid
());
}
if
(
imClientSender
==
null
)
{
throw
new
BusinessException
(
"查无发送用户信息"
);
}
if
(
imApplication
==
null
)
{
return
ApiResult
.
fail
(
"查无应用信息"
);
throw
new
BusinessException
(
"查无应用信息"
);
}
// todo 单向撤回、双向撤回开关可配置
Boolean
deleteOther
=
true
;
List
<
ImMessage
>
imMessageList
=
this
.
listByIds
(
param
.
getMsgIds
());
if
(
CollectionUtils
.
isEmpty
(
imMessageList
))
{
return
ApiResult
.
fail
(
"查无消息"
);
throw
new
BusinessException
(
"查无消息"
);
}
for
(
ImMessage
message
:
imMessageList
)
{
// 判断该消息是否是该客户端发送
if
(!
deleteOther
&&
!
message
.
getSender
().
equals
(
currentClient
.
getId
()))
{
return
ApiResult
.
fail
(
"不可删除别人发送的消息"
);
if
(!
deleteOther
&&
!
message
.
getSender
().
equals
(
imClientSender
.
getId
()))
{
throw
new
BusinessException
(
"不可删除别人发送的消息"
);
}
if
(
message
.
getIsDelete
()
==
2
)
{
continue
;
...
...
@@ -327,7 +348,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
boolean
saveOk
=
this
.
updateById
(
message
);
ImClient
msgOwner
=
imClientService
.
getCacheImClient
(
message
.
getSender
());
if
(
msgOwner
==
null
)
{
return
ApiResult
.
fail
(
"未查找到消息发送者"
);
throw
new
BusinessException
(
"未查找到消息发送者"
);
}
if
(
saveOk
)
{
...
...
@@ -335,11 +356,11 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
List
<
ImConversationMembers
>
membersList
=
imConversationMembersService
.
list
(
new
QueryWrapper
<
ImConversationMembers
>().
lambda
()
.
eq
(
ImConversationMembers:
:
getFkConversationId
,
message
.
getFkConversationId
())
.
notIn
(
ImConversationMembers:
:
getFkClientId
,
currentClient
.
getId
())
.
notIn
(
ImConversationMembers:
:
getFkClientId
,
imClientSender
.
getId
())
);
if
(
membersList
.
isEmpty
())
{
log
.
info
(
"membersList为空,toConversationId:"
+
message
.
getFkConversationId
());
return
ApiResult
.
fail
(
"该会话成员列表为空"
);
throw
new
BusinessException
(
"该会话成员列表为空"
);
}
// 遍历发送
for
(
ImConversationMembers
conversationMembers
:
membersList
)
{
...
...
@@ -368,7 +389,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
BeanUtils
.
copyProperties
(
message
,
imMessageOnlineSend
);
imMessageOnlineSend
.
setType
(
MsgTypeEnum
.
MSG_DELETE
.
getUriCode
());
imMessageOnlineSend
.
setMsgId
(
message
.
getId
());
imMessageOnlineSend
.
setSender
(
currentClient
.
getClientId
());
imMessageOnlineSend
.
setSender
(
imClientSender
.
getClientId
());
Map
<
String
,
Object
>
contentMap
=
Maps
.
newHashMap
();
contentMap
.
put
(
"msgOwner"
,
msgOwner
.
getClientId
());
imMessageOnlineSend
.
setContent
(
contentMap
);
...
...
@@ -385,18 +406,18 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
responseModel
.
setReqId
(
null
);
channelSender
.
sendMsg
(
responseModel
,
imClientReceiver
.
getId
());
}
return
ApiResult
.
ok
()
;
return
Boolean
.
TRUE
;
}
else
{
return
ApiResult
.
fail
(
"删除消息错误,稍后重试"
);
throw
new
BusinessException
(
"删除消息错误,稍后重试"
);
}
}
return
ApiResult
.
ok
()
;
return
Boolean
.
TRUE
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
ApiResult
<
Boolean
>
updateMsgById
(
ImMsgUpdate
imMsgUpdate
)
{
public
Boolean
updateMsgById
(
ImMsgUpdate
imMsgUpdate
)
{
// ImClient client = imClientService.getCurentClient();
...
...
@@ -414,9 +435,9 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
imMessage
.
setContent
(
content
);
if
(
this
.
updateById
(
imMessage
))
{
return
ApiResult
.
ok
()
;
return
Boolean
.
TRUE
;
}
else
{
return
ApiResult
.
fail
(
);
throw
new
BusinessException
(
"修改消息错误"
);
}
}
...
...
@@ -433,12 +454,17 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
* @return
*/
@Override
public
ReaderList
getReaders
(
GetReadersParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
if
(
currentClient
==
null
)
{
throw
new
BusinessException
(
"当前用户登录信息失效"
);
public
ReaderList
getReaders
(
ActionRequest
request
,
GetReadersParam
param
)
{
ImClient
imClientSender
;
if
(
request
!=
null
)
{
imClientSender
=
imClientService
.
getCacheImClient
(
request
.
getSenderClientId
());
}
else
{
imClientSender
=
imClientService
.
getCurentClient
();
}
if
(
imClientSender
==
null
)
{
throw
new
BusinessException
(
"查无发送用户信息"
);
}
List
<
ReaderVo
>
readerVos
=
imMessageMapper
.
getReaders
(
currentClient
.
getId
(),
param
);
List
<
ReaderVo
>
readerVos
=
imMessageMapper
.
getReaders
(
imClientSender
.
getId
(),
param
);
if
(
CollectionUtils
.
isEmpty
(
readerVos
))
{
return
null
;
}
...
...
@@ -458,7 +484,7 @@ public class ImMessageServiceImpl extends BaseServiceImpl<ImMessageMapper, ImMes
}
@Override
public
Paging
<
OfflineMsgDto
>
getHistoryMsgConversationId
(
ImHistoryMessagePageParam
imHistoryMessagePageParam
)
throws
Exception
{
public
Paging
<
OfflineMsgDto
>
getHistoryMsgConversationId
(
ImHistoryMessagePageParam
imHistoryMessagePageParam
)
{
Page
<
ImMessage
>
page
=
new
PageInfo
<>(
imHistoryMessagePageParam
,
OrderItem
.
desc
(
getLambdaColumn
(
ImMessage:
:
getCreateTime
)));
IPage
<
OfflineMsgDto
>
iPage
=
imMessageMapper
.
getHistoryMsgConversationId
(
page
,
imHistoryMessagePageParam
);
...
...
core/src/main/java/com/wecloud/im/user/controller/FriendController.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
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
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.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
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
;
import
java.util.List
;
/**
* @Author wenzhida
* @Date 2022/2/22 23:09
* @Description 非sdk朋友相关控制器
*/
@Slf4j
@RestController
@RequestMapping
(
"/friends"
)
@Api
(
value
=
"好友相关API"
,
tags
=
{
"好友"
})
public
class
FriendController
extends
BaseController
{
@Autowired
private
ImClientService
imClientService
;
@Autowired
private
FriendService
friendService
;
/**
* 查询好友信息,只有自己的好友才查得到
*/
@PostMapping
(
"/info"
)
@ApiOperation
(
value
=
"查询好友信息,只有自己的好友才查得到"
)
public
ApiResult
<
FriendDto
>
getFriendInfo
(
@RequestBody
ImFriendBaseParam
param
)
{
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
return
ApiResult
.
ok
(
friendService
.
getFriendInfo
(
param
));
}
@PostMapping
(
"/getFriends"
)
@ApiOperation
(
value
=
"全量获取好友列表"
)
public
ApiResult
<
List
<
FriendDto
>>
getFriends
()
{
return
ApiResult
.
ok
(
friendService
.
getFriends
());
}
/**
* 好友请求列表,最多只返回1000个
*/
@PostMapping
(
"/unsureFriends"
)
@ApiOperation
(
value
=
"获取好友请求列表,最多只返回1000个"
)
public
ApiResult
<
List
<
FriendDto
>>
getUnsureFriends
()
{
List
<
FriendDto
>
applyFriends
=
friendService
.
getApplyFriends
();
return
ApiResult
.
ok
(
applyFriends
);
}
}
core/src/main/java/com/wecloud/im/user/controller/UserController.java
View file @
01e55a5d
...
...
@@ -2,8 +2,16 @@ 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
;
...
...
@@ -45,12 +53,12 @@ public class UserController extends BaseController {
@PostMapping
(
"/register"
)
@ApiOperation
(
value
=
"用户注册接口"
)
public
ApiResult
<
Login
SuccessDto
>
register
(
@RequestBody
@Validated
UserRegisterParam
param
)
{
public
ApiResult
<
Register
SuccessDto
>
register
(
@RequestBody
@Validated
UserRegisterParam
param
)
{
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
String
userId
=
userService
.
registerUser
(
param
);
return
ApiResult
.
ok
(
new
Login
SuccessDto
(
userId
));
return
ApiResult
.
ok
(
new
Register
SuccessDto
(
userId
));
}
@PostMapping
(
"/login"
)
...
...
@@ -59,8 +67,8 @@ public class UserController extends BaseController {
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
String
userId
=
userService
.
loginUser
(
param
);
return
ApiResult
.
ok
(
new
LoginSuccessDto
(
userId
)
);
LoginSuccessDto
loginUser
=
userService
.
loginUser
(
param
);
return
ApiResult
.
ok
(
loginUser
);
}
@PostMapping
(
"/resetPassword"
)
...
...
@@ -83,5 +91,74 @@ public class UserController extends BaseController {
return
ApiResult
.
ok
();
}
@PostMapping
(
"/myInfo"
)
@ApiOperation
(
value
=
"查找我的信息"
)
public
ApiResult
<
UserBaseDto
>
myInfo
()
{
UserBaseDto
user
=
userService
.
myInfo
();
return
ApiResult
.
ok
(
user
);
}
@PostMapping
(
"/findUser"
)
@ApiOperation
(
value
=
"查找用户"
)
public
ApiResult
<
UserBaseDto
>
findUser
(
@RequestBody
@Validated
FindUserParam
param
)
{
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
UserBaseDto
user
=
userService
.
findUser
(
param
);
return
ApiResult
.
ok
(
user
);
}
@PostMapping
(
"/getUserByUserId"
)
@ApiOperation
(
value
=
"根据用户id查找用户信息"
)
public
ApiResult
<
UserBaseDto
>
getUserByUserId
(
@RequestBody
@Validated
GetUserParam
param
)
{
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
UserBaseDto
user
=
userService
.
getUserByUserId
(
param
);
return
ApiResult
.
ok
(
user
);
}
@PostMapping
(
"/modifyHeadPortrait"
)
@ApiOperation
(
value
=
"修改头像"
)
public
ApiResult
<
Boolean
>
modifyHeadPortrait
(
@RequestBody
@Validated
ModifyHeadPortraitParam
param
)
{
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
userService
.
modifyHeadPortrait
(
param
);
return
ApiResult
.
ok
();
}
@PostMapping
(
"/modifyNickname"
)
@ApiOperation
(
value
=
"修改昵称"
)
public
ApiResult
<
Boolean
>
modifyNickname
(
@RequestBody
@Validated
ModifyNicknameParam
param
)
{
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
userService
.
modifyNickname
(
param
);
return
ApiResult
.
ok
();
}
@PostMapping
(
"/modifyLandouNo"
)
@ApiOperation
(
value
=
"修改蓝豆号"
)
public
ApiResult
<
Boolean
>
modifyLandouNo
(
@RequestBody
@Validated
ModifyLandouParam
param
)
{
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
userService
.
modifyLandouNo
(
param
);
return
ApiResult
.
ok
();
}
@PostMapping
(
"/modifySex"
)
@ApiOperation
(
value
=
"修改性别"
)
public
ApiResult
<
Boolean
>
modifySex
(
@RequestBody
@Validated
ModifySexParam
param
)
{
if
(
param
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
userService
.
modifySex
(
param
);
return
ApiResult
.
ok
();
}
}
core/src/main/java/com/wecloud/im/user/controller/VerifyCodeController.java
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
controller
;
import
com.wecloud.im.enums.FriendStateEnum
;
import
com.wecloud.im.enums.VerifySceneEnum
;
import
com.wecloud.im.user.constant.RedisKeyPrefixConstant
;
import
com.wecloud.im.user.param.SendVerifyCodeParam
;
...
...
@@ -47,7 +46,7 @@ public class VerifyCodeController extends BaseController {
if
(
BaseEnum
.
valueOf
(
VerifySceneEnum
.
class
,
param
.
getVerifyScene
())
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
PARAMETER_EXCEPTION
,
null
);
}
// String verifyCode =
this
.generateVerifyCode();
// String verifyCode =
RandomUtil
.generateVerifyCode();
String
verifyCode
=
"666666"
;
String
key
=
new
StringBuilder
(
RedisKeyPrefixConstant
.
VERIFY_CODE_PREFIX
).
append
(
param
.
getVerifyScene
()).
append
(
param
.
getPhone
()).
toString
();
redisUtils
.
addKey
(
key
,
verifyCode
,
Duration
.
ofSeconds
(
3
*
60
));
...
...
@@ -55,15 +54,6 @@ public class VerifyCodeController extends BaseController {
return
ApiResult
.
ok
();
}
/**
* 生成短信验证码
* @return
*/
private
String
generateVerifyCode
()
{
Integer
verifyCode
=
(
int
)
((
Math
.
random
()
*
9
+
1
)
*
100000
);
return
verifyCode
.
toString
();
}
}
core/src/main/java/com/wecloud/im/user/entity/User.java
View file @
01e55a5d
...
...
@@ -32,6 +32,9 @@ public class User extends BaseEntity {
@TableId
(
value
=
"id"
,
type
=
IdType
.
INPUT
)
private
Long
id
;
@ApiModelProperty
(
"蓝豆号"
)
private
String
idNumber
;
@ApiModelProperty
(
"手机号码"
)
private
String
phone
;
...
...
core/src/main/java/com/wecloud/im/user/param/FindUserParam.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/2/23 11:14
* @Description 查找用户入参
*/
@Data
public
class
FindUserParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
5511914212981726139L
;
/**
* 查询字符串
*/
@NotNull
(
message
=
"查询字符串不可为空"
)
@ApiModelProperty
(
"查询字符串"
)
private
String
queryStr
;
}
core/src/main/java/com/wecloud/im/user/param/FriendDto.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
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
* @Description 好友出参
*/
@Data
public
class
FriendDto
extends
ImFriendBaseDto
{
private
static
final
long
serialVersionUID
=
5580006330057637138L
;
@ApiModelProperty
(
"蓝豆号"
)
private
String
idNumber
;
@ApiModelProperty
(
"昵称"
)
private
String
nickname
;
/**
* 头像路径url
*/
@ApiModelProperty
(
"头像路径url"
)
private
String
headPortrait
;
}
core/src/main/java/com/wecloud/im/user/param/GetUserParam.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/2/23 11:14
* @Description 查找用户入参
*/
@Data
public
class
GetUserParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
5511914212981726139L
;
/**
* userId
*/
@NotNull
(
message
=
"userId不可为空"
)
@ApiModelProperty
(
"userId"
)
private
String
userId
;
}
core/src/main/java/com/wecloud/im/user/param/LoginSuccessDto.java
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
...
...
@@ -13,7 +11,6 @@ import java.io.Serializable;
* @Description 用户登录成功dto
*/
@Data
@AllArgsConstructor
public
class
LoginSuccessDto
implements
Serializable
{
private
static
final
long
serialVersionUID
=
7813920366165375711L
;
...
...
@@ -24,4 +21,22 @@ public class LoginSuccessDto implements Serializable {
@ApiModelProperty
(
"userId"
)
private
String
userId
;
@ApiModelProperty
(
"蓝豆号"
)
private
String
idNumber
;
@ApiModelProperty
(
"手机号码"
)
private
String
phone
;
@ApiModelProperty
(
"邮箱号码"
)
private
String
email
;
@ApiModelProperty
(
"性别"
)
private
Integer
sex
;
@ApiModelProperty
(
"头像"
)
private
String
headPortrait
;
@ApiModelProperty
(
"昵称"
)
private
String
nickname
;
}
core/src/main/java/com/wecloud/im/user/param/ModifyHeadPortraitParam.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/2/23 15:20
* @Description 修改头像入参
*/
@Data
public
class
ModifyHeadPortraitParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
5394800929946659395L
;
/**
* userId
*/
@NotNull
(
message
=
"userId不可为空"
)
@ApiModelProperty
(
"userId"
)
private
Long
userId
;
/**
* 头像url
*/
@NotNull
(
message
=
"头像url不能为空"
)
@ApiModelProperty
(
"头像url"
)
private
String
headPortrait
;
}
core/src/main/java/com/wecloud/im/user/param/ModifyLandouParam.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/2/23 15:20
* @Description 修改昵称入参
*/
@Data
public
class
ModifyLandouParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
4266385433321572881L
;
/**
* userId
*/
@NotNull
(
message
=
"userId不可为空"
)
@ApiModelProperty
(
"userId"
)
private
Long
userId
;
/**
* 蓝豆号
*/
@NotNull
(
message
=
"蓝豆号不能为空"
)
@ApiModelProperty
(
"蓝豆号"
)
private
String
landouNo
;
}
core/src/main/java/com/wecloud/im/user/param/ModifyNicknameParam.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/2/23 15:20
* @Description 修改昵称入参
*/
@Data
public
class
ModifyNicknameParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
4266385433321572881L
;
/**
* userId
*/
@NotNull
(
message
=
"userId不可为空"
)
@ApiModelProperty
(
"userId"
)
private
Long
userId
;
/**
* 昵称
*/
@NotNull
(
message
=
"昵称不能为空"
)
@ApiModelProperty
(
"昵称"
)
private
String
nickname
;
}
core/src/main/java/com/wecloud/im/user/param/ModifySexParam.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/2/23 15:20
* @Description 修改性别入参
*/
@Data
public
class
ModifySexParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
3340451953818782194L
;
/**
* userId
*/
@NotNull
(
message
=
"userId不可为空"
)
@ApiModelProperty
(
"userId"
)
private
Long
userId
;
/**
* 性别
* @see com.wecloud.im.enums.SexEnum
*/
@NotNull
(
message
=
"性别不可为空不可为空"
)
@ApiModelProperty
(
"性别 1-男 2-女 3-未知"
)
private
Integer
sex
;
}
core/src/main/java/com/wecloud/im/user/param/RegisterSuccessDto.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/2/24 11:26
* @Description 用户注册成功dto
*/
@Data
@AllArgsConstructor
public
class
RegisterSuccessDto
implements
Serializable
{
private
static
final
long
serialVersionUID
=
7813920366165375711L
;
/**
* userId
*/
@ApiModelProperty
(
"userId"
)
private
String
userId
;
}
core/src/main/java/com/wecloud/im/user/param/UserBaseDto.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
param
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author wenzhida
* @Date 2022/2/23 11:27
* @Description 用户基本信息
*/
@Data
public
class
UserBaseDto
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
6070534424163538590L
;
/**
* userId
*/
@ApiModelProperty
(
"userId"
)
private
String
userId
;
@ApiModelProperty
(
"蓝豆号"
)
private
String
idNumber
;
/**
* 性别
* @see com.wecloud.im.enums.SexEnum
*/
@ApiModelProperty
(
"性别 1-男 2-女 3-未知"
)
private
Integer
sex
;
@ApiModelProperty
(
"昵称"
)
private
String
nickname
;
/**
* 头像路径url
*/
@ApiModelProperty
(
"头像路径url"
)
private
String
headPortrait
;
/**
* 与我关系
* @see com.wecloud.im.enums.RelationEnum
*/
@ApiModelProperty
(
"与我关系 1-陌生人 2-好友 3-被我拉黑"
)
private
Integer
relation
;
}
core/src/main/java/com/wecloud/im/user/service/FriendService.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
service
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.friend.param.ImFriendApplyDto
;
import
com.wecloud.im.friend.param.ImFriendBaseDto
;
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
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* @Author wenzhida
* @Date 2022/2/21 17:05
* @Description 用户服务接口
*/
@Service
public
class
FriendService
extends
BaseServiceImpl
<
UserMapper
,
User
>
{
@Autowired
private
ImClientService
imClientService
;
@Autowired
private
ImFriendService
imFriendService
;
@Autowired
private
UserService
userService
;
public
FriendDto
getFriendInfo
(
ImFriendBaseParam
param
)
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
if
(
currentClient
==
null
)
{
throw
new
BusinessException
(
"当前登录用户未找到"
);
}
ImClient
friendClient
=
imClientService
.
getCacheImClient
(
currentClient
.
getFkAppid
(),
param
.
getFriendClientId
());
if
(
friendClient
==
null
)
{
throw
new
BusinessException
(
"朋友信息未找到"
);
}
ImFriendApplyDto
friendInfo
=
imFriendService
.
getFriendInfo
(
currentClient
.
getClientId
(),
friendClient
.
getClientId
());
if
(
friendInfo
==
null
)
{
throw
new
BusinessException
(
"朋友信息未找到"
);
}
User
user
=
userService
.
getOne
(
new
QueryWrapper
<
User
>().
lambda
()
.
in
(
User:
:
getId
,
friendInfo
.
getFriendClientId
())
);
FriendDto
friendDto
=
new
FriendDto
();
BeanUtils
.
copyProperties
(
friendInfo
,
friendDto
);
if
(
user
!=
null
)
{
friendDto
.
setIdNumber
(
user
.
getIdNumber
());
friendDto
.
setHeadPortrait
(
user
.
getHeadPortrait
());
friendDto
.
setNickname
(
user
.
getNickname
());
}
return
friendDto
;
}
/**
* 全量获取好友列表
*/
public
List
<
FriendDto
>
getFriends
()
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
if
(
currentClient
==
null
)
{
throw
new
BusinessException
(
"当前登录用户未找到"
);
}
ImFriendPageParam
pageParam
=
new
ImFriendPageParam
();
pageParam
.
setPageIndex
(
1L
);
pageParam
.
setPageSize
(
Long
.
MAX_VALUE
);
Paging
<
ImFriendBaseDto
>
pageFriends
=
imFriendService
.
getImFriendPageList
(
currentClient
.
getClientId
(),
pageParam
);
List
<
FriendDto
>
friendDtoList
=
Lists
.
newArrayList
();
if
(
pageFriends
==
null
||
CollectionUtils
.
isEmpty
(
pageFriends
.
getRecords
()))
{
return
friendDtoList
;
}
List
<
String
>
friendClientIds
=
pageFriends
.
getRecords
().
stream
().
map
(
ImFriendBaseDto:
:
getFriendClientId
).
collect
(
Collectors
.
toList
());
List
<
User
>
userList
=
userService
.
list
(
new
QueryWrapper
<
User
>().
lambda
()
.
in
(
User:
:
getId
,
friendClientIds
)
);
if
(
CollectionUtils
.
isEmpty
(
userList
))
{
return
friendDtoList
;
}
Map
<
String
,
User
>
userMap
=
Maps
.
newHashMap
();
for
(
User
user
:
userList
)
{
userMap
.
put
(
user
.
getId
().
toString
(),
user
);
}
for
(
ImFriendBaseDto
record
:
pageFriends
.
getRecords
())
{
FriendDto
friendDto
=
new
FriendDto
();
BeanUtils
.
copyProperties
(
record
,
friendDto
);
User
user
=
userMap
.
get
(
record
.
getFriendClientId
());
if
(
user
!=
null
)
{
friendDto
.
setIdNumber
(
user
.
getIdNumber
());
friendDto
.
setHeadPortrait
(
user
.
getHeadPortrait
());
friendDto
.
setNickname
(
user
.
getNickname
());
}
friendDtoList
.
add
(
friendDto
);
}
return
friendDtoList
;
}
/**
* 获取好友列表申请
*/
public
List
<
FriendDto
>
getApplyFriends
()
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
if
(
currentClient
==
null
)
{
throw
new
BusinessException
(
"当前登录用户未找到"
);
}
List
<
ImFriendApplyDto
>
friendInfos
=
imFriendService
.
getApplyFriends
(
currentClient
);
List
<
FriendDto
>
friendDtoList
=
Lists
.
newArrayList
();
if
(
CollectionUtils
.
isEmpty
(
friendInfos
))
{
return
friendDtoList
;
}
List
<
String
>
friendClientIds
=
friendInfos
.
stream
().
map
(
ImFriendBaseDto:
:
getFriendClientId
).
collect
(
Collectors
.
toList
());
List
<
User
>
userList
=
userService
.
list
(
new
QueryWrapper
<
User
>().
lambda
()
.
in
(
User:
:
getId
,
friendClientIds
)
);
if
(
CollectionUtils
.
isEmpty
(
userList
))
{
return
friendDtoList
;
}
Map
<
String
,
User
>
userMap
=
Maps
.
newHashMap
();
for
(
User
user
:
userList
)
{
userMap
.
put
(
user
.
getId
().
toString
(),
user
);
}
for
(
ImFriendApplyDto
record
:
friendInfos
)
{
FriendDto
friendDto
=
new
FriendDto
();
BeanUtils
.
copyProperties
(
record
,
friendDto
);
User
user
=
userMap
.
get
(
record
.
getFriendClientId
());
if
(
user
!=
null
)
{
friendDto
.
setIdNumber
(
user
.
getIdNumber
());
friendDto
.
setHeadPortrait
(
user
.
getHeadPortrait
());
friendDto
.
setNickname
(
user
.
getNickname
());
}
friendDtoList
.
add
(
friendDto
);
}
return
friendDtoList
;
}
}
core/src/main/java/com/wecloud/im/user/service/UserService.java
View file @
01e55a5d
package
com
.
wecloud
.
im
.
user
.
service
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.google.protobuf.ServiceException
;
import
com.wecloud.im.entity.ImClient
;
import
com.wecloud.im.enums.FriendStateEnum
;
import
com.wecloud.im.enums.RelationEnum
;
import
com.wecloud.im.enums.VerifySceneEnum
;
import
com.wecloud.im.friend.entity.ImFriend
;
import
com.wecloud.im.friend.service.ImFriendService
;
import
com.wecloud.im.service.ImClientBlacklistService
;
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
;
import
com.wecloud.utils.SnowflakeUtil
;
import
io.geekidea.springbootplus.framework.common.exception.BusinessException
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -34,6 +49,15 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
@Autowired
private
RedisUtils
redisUtils
;
@Autowired
private
ImClientService
imClientService
;
@Autowired
private
ImFriendService
imFriendService
;
@Autowired
private
ImClientBlacklistService
imClientBlacklistService
;
/**
* 校验手机号码是否可使用
* @param param
...
...
@@ -61,6 +85,7 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
}
User
user
=
new
User
();
user
.
setId
(
SnowflakeUtil
.
getId
());
user
.
setIdNumber
(
this
.
getLandouNo
());
user
.
setPhone
(
param
.
getPhone
());
user
.
setPassword
(
AesUtil
.
encrypt
(
param
.
getPassword
()));
user
.
setCreateTime
(
new
Date
());
...
...
@@ -73,13 +98,19 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
* 用户登录
* @param param
*/
public
String
loginUser
(
UserLoginParam
param
)
{
public
LoginSuccessDto
loginUser
(
UserLoginParam
param
)
{
User
user
=
this
.
getOne
(
new
QueryWrapper
<
User
>().
lambda
()
.
eq
(
User:
:
getPhone
,
param
.
getPhone
()));
if
(
user
==
null
)
{
throw
new
BusinessException
(
"该手机号码还未注册"
);
}
if
(!
param
.
getPassword
().
equals
(
AesUtil
.
decrypt
(
user
.
getPassword
())))
{
throw
new
BusinessException
(
"账户或密码错误"
);
}
return
String
.
valueOf
(
user
.
getId
());
LoginSuccessDto
loginSuccessDto
=
new
LoginSuccessDto
();
BeanUtils
.
copyProperties
(
user
,
loginSuccessDto
);
loginSuccessDto
.
setUserId
(
user
.
getId
().
toString
());
return
loginSuccessDto
;
}
/**
...
...
@@ -124,11 +155,148 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
}
/**
* 查找本人信息
*/
public
UserBaseDto
myInfo
()
{
ImClient
currentClient
=
imClientService
.
getCurentClient
();
User
user
=
this
.
getOne
(
new
QueryWrapper
<
User
>().
lambda
()
.
eq
(
User:
:
getId
,
currentClient
.
getClientId
()));
if
(
user
==
null
)
{
throw
new
BusinessException
(
"账号不存在"
);
}
UserBaseDto
userBaseDto
=
new
UserBaseDto
();
BeanUtils
.
copyProperties
(
user
,
userBaseDto
);
userBaseDto
.
setUserId
(
user
.
getId
().
toString
());
return
userBaseDto
;
}
/**
* 查找用户
* @param param
*/
public
UserBaseDto
findUser
(
FindUserParam
param
)
{
User
user
=
this
.
getOne
(
new
QueryWrapper
<
User
>().
lambda
()
.
eq
(
User:
:
getPhone
,
param
.
getQueryStr
()));
if
(
user
==
null
)
{
throw
new
BusinessException
(
"账号不存在"
);
}
UserBaseDto
userBaseDto
=
new
UserBaseDto
();
BeanUtils
.
copyProperties
(
user
,
userBaseDto
);
userBaseDto
.
setUserId
(
user
.
getId
().
toString
());
userBaseDto
.
setRelation
(
RelationEnum
.
STRANGER
.
getCode
());
// 查询该好友与自己关系: 陌生人、好友、被拉黑名单
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImFriend
imFriend
=
imFriendService
.
getByKey
(
currentClient
.
getClientId
(),
user
.
getId
().
toString
());
if
(
imFriend
!=
null
&&
FriendStateEnum
.
CONFORM
.
getCode
().
equals
(
imFriend
.
getState
()))
{
userBaseDto
.
setRelation
(
RelationEnum
.
FRIEND
.
getCode
());
}
// 查询是否被拉黑
if
(
imClientBlacklistService
.
isBeBlack
(
currentClient
.
getClientId
(),
user
.
getId
().
toString
()))
{
userBaseDto
.
setRelation
(
RelationEnum
.
BE_BLACK
.
getCode
());
}
return
userBaseDto
;
}
/**
* 查找用户
* @param param
*/
public
UserBaseDto
getUserByUserId
(
GetUserParam
param
)
{
User
user
=
this
.
getOne
(
new
QueryWrapper
<
User
>().
lambda
()
.
eq
(
User:
:
getId
,
param
.
getUserId
()));
if
(
user
==
null
)
{
throw
new
BusinessException
(
"账号不存在"
);
}
UserBaseDto
userBaseDto
=
new
UserBaseDto
();
BeanUtils
.
copyProperties
(
user
,
userBaseDto
);
userBaseDto
.
setUserId
(
user
.
getId
().
toString
());
userBaseDto
.
setRelation
(
RelationEnum
.
STRANGER
.
getCode
());
// 查询该好友与自己关系: 陌生人、好友、被拉黑名单
ImClient
currentClient
=
imClientService
.
getCurentClient
();
ImFriend
imFriend
=
imFriendService
.
getByKey
(
currentClient
.
getClientId
(),
user
.
getId
().
toString
());
if
(
imFriend
!=
null
&&
FriendStateEnum
.
CONFORM
.
getCode
().
equals
(
imFriend
.
getState
()))
{
userBaseDto
.
setRelation
(
RelationEnum
.
FRIEND
.
getCode
());
}
// 查询是否被拉黑
if
(
imClientBlacklistService
.
isBeBlack
(
currentClient
.
getClientId
(),
user
.
getId
().
toString
()))
{
userBaseDto
.
setRelation
(
RelationEnum
.
BE_BLACK
.
getCode
());
}
return
userBaseDto
;
}
/**
* 修改头像
* @param param
*/
public
void
modifyHeadPortrait
(
ModifyHeadPortraitParam
param
)
{
User
user
=
this
.
getById
(
param
.
getUserId
());
if
(
user
==
null
)
{
throw
new
BusinessException
(
"查无用户"
);
}
user
.
setHeadPortrait
(
param
.
getHeadPortrait
());
this
.
updateById
(
user
);
}
/**
* 修改昵称
* @param param
*/
public
void
modifyNickname
(
ModifyNicknameParam
param
)
{
User
user
=
this
.
getById
(
param
.
getUserId
());
if
(
user
==
null
)
{
throw
new
BusinessException
(
"查无用户"
);
}
user
.
setNickname
(
param
.
getNickname
());
this
.
updateById
(
user
);
}
/**
* 修改昵称
* @param param
*/
public
void
modifyLandouNo
(
ModifyLandouParam
param
)
{
User
user
=
this
.
getById
(
param
.
getUserId
());
if
(
user
==
null
)
{
throw
new
BusinessException
(
"查无用户"
);
}
User
userByLando
=
this
.
getByLandouNo
(
param
.
getLandouNo
());
if
(
userByLando
==
null
)
{
throw
new
BusinessException
(
"该蓝豆号已被使用,请更换"
);
}
user
.
setIdNumber
(
param
.
getLandouNo
());
this
.
updateById
(
user
);
}
/**
* 修改性别
* @param param
*/
public
void
modifySex
(
ModifySexParam
param
)
{
User
user
=
this
.
getById
(
param
.
getUserId
());
if
(
user
==
null
)
{
throw
new
BusinessException
(
"查无用户"
);
}
user
.
setSex
(
param
.
getSex
());
this
.
updateById
(
user
);
}
/**
* 根据蓝豆号获取用户
* @param landouNo
* @return
*/
public
User
getByLandouNo
(
String
landouNo
)
{
return
this
.
getOne
(
new
QueryWrapper
<
User
>().
lambda
()
.
eq
(
User:
:
getIdNumber
,
landouNo
));
}
/**
* 校验短信验证码
* @param verifyCode
* @param redisKey
*/
p
ublic
void
verifySMSVerifyCode
(
String
verifyCode
,
String
redisKey
)
{
p
rivate
void
verifySMSVerifyCode
(
String
verifyCode
,
String
redisKey
)
{
String
verifyCodeInRedis
=
redisUtils
.
getKey
(
redisKey
);
if
(
verifyCodeInRedis
==
null
||
!
verifyCodeInRedis
.
equals
(
verifyCode
))
{
throw
new
BusinessException
(
"短信验证码不正确"
);
...
...
@@ -136,4 +304,20 @@ public class UserService extends BaseServiceImpl<UserMapper, User> {
redisUtils
.
delKey
(
redisKey
);
}
/**
* 获取可使用蓝豆号
* @return
*/
private
String
getLandouNo
()
{
String
landouNo
;
do
{
landouNo
=
RandomUtil
.
generateRandomStr
(
8
);
User
user
=
this
.
getByLandouNo
(
landouNo
);
if
(
user
==
null
)
{
break
;
}
}
while
(
true
);
return
landouNo
;
}
}
core/src/main/java/com/wecloud/rtc/service/impl/RtcServiceImpl.java
View file @
01e55a5d
...
...
@@ -142,16 +142,13 @@ public class RtcServiceImpl extends UserStateListener implements RtcService {
@Override
public
ApiResult
<
Boolean
>
reject
(
RejectRtcChannelParam
rejectRtcChannelParam
)
{
ImClient
client
=
imClientService
.
getCurentClient
();
// 修改缓存
mangerRtcCacheService
.
leave
(
client
.
getId
(),
rejectRtcChannelParam
.
getChannelId
());
//获取频道内所有client
List
<
String
>
clientListByRtcChannelId
=
mangerRtcCacheService
.
getClientListByRtcChannelId
(
rejectRtcChannelParam
.
getChannelId
());
// 移除自己
clientListByRtcChannelId
.
remove
(
client
.
getId
().
toString
());
for
(
String
toClientId
:
clientListByRtcChannelId
)
{
// ws向接收方发送通知
RtcClientRejectResponse
rtcClientRejectResponse
=
new
RtcClientRejectResponse
();
...
...
@@ -160,6 +157,16 @@ public class RtcServiceImpl extends UserStateListener implements RtcService {
rtcClientRejectResponse
.
setTimestamp
(
System
.
currentTimeMillis
());
wsRtcWrite
.
clientReject
(
rtcClientRejectResponse
,
Long
.
valueOf
(
toClientId
));
}
// 判断频道内是否无其他人了
if
(
CollectionUtils
.
isEmpty
(
clientListByRtcChannelId
))
{
// 移除频道信息
mangerRtcCacheService
.
delChannelInfo
(
rejectRtcChannelParam
.
getChannelId
());
}
else
if
(
clientListByRtcChannelId
.
size
()
==
1
){
// 频道内只有一个人了 -- 删除频道 并将这个人设为离开
mangerRtcCacheService
.
leave
(
Long
.
valueOf
(
clientListByRtcChannelId
.
get
(
0
)),
rejectRtcChannelParam
.
getChannelId
());
mangerRtcCacheService
.
delChannelInfo
(
rejectRtcChannelParam
.
getChannelId
());
}
return
ApiResult
.
ok
(
true
);
}
...
...
core/src/main/java/com/wecloud/utils/RandomUtil.java
0 → 100644
View file @
01e55a5d
package
com
.
wecloud
.
utils
;
/**
* @Author wenzhida
* @Date 2022/2/23 14:57
* @Description 随机工具类
*/
public
class
RandomUtil
{
/**
* 生成短信验证码
* @return
*/
public
static
String
generateVerifyCode
()
{
Integer
verifyCode
=
(
int
)
((
Math
.
random
()
*
9
+
1
)
*
100000
);
return
verifyCode
.
toString
();
}
/**
* 生成随机字符串
* @param length 字符串长度
* @return
*/
public
static
String
generateRandomStr
(
int
length
)
{
String
src
=
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
;
char
[]
m
=
src
.
toCharArray
();
StringBuilder
strSb
=
new
StringBuilder
();
for
(
int
j
=
0
;
j
<
length
;
j
++)
{
char
c
=
m
[(
int
)
(
Math
.
random
()
*
36
)];
strSb
.
append
(
c
);
}
return
strSb
.
toString
();
}
}
core/src/main/resources/mapper/ImFriendMapper.xml
View file @
01e55a5d
...
...
@@ -23,13 +23,13 @@
where friend.client_id = #{clientId} and friend.state = 2
</select>
<select
id=
"get
Unsure
FriendPageList"
resultType=
"com.wecloud.im.friend.param.ImFriendApplyDto"
>
<select
id=
"get
Apply
FriendPageList"
resultType=
"com.wecloud.im.friend.param.ImFriendApplyDto"
>
select
friend.id, client.client_id as friendClientId, friend.friend_name, 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
where friend.client_id = #{clientId} and friend.
state = 1
where friend.client_id = #{clientId} and friend.
client_id_claimer != #{clientId}
</select>
<select
id=
"filterNegativeFriends"
resultType=
"java.lang.String"
>
...
...
docs/db/feature-cluster增量.sql
View file @
01e55a5d
-- 在f
eature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
-- 在f
eature-cluster 2021年12月22日之后,需要执行的的sql增量脚本
...
...
@@ -73,16 +73,20 @@ ALTER TABLE im_conversation ADD COLUMN muted tinyint NOT NULL DEFAULT '1' COMMEN
ALTER
TABLE
im_conversation_members
ADD
COLUMN
muted
tinyint
NOT
NULL
DEFAULT
'1'
COMMENT
'禁言开关 1-未禁言 2-禁言'
;
ALTER
TABLE
im_conversation_members
ADD
COLUMN
`client_id`
varchar
(
200
)
DEFAULT
NULL
COMMENT
'客户方提供的唯一id'
;
ALTER
TABLE
im_client_blacklist
CHANGE
fk_client_id_prevent
client_id_prevent
varchar
(
32
)
DEFAULT
NULL
COMMENT
'拉黑者'
;
ALTER
TABLE
im_client_blacklist
CHANGE
fk_client_id_be_prevent
client_id_be_prevent
varchar
(
32
)
DEFAULT
NULL
COMMENT
'被拉黑'
;
CREATE
TABLE
`im_user`
(
`id`
bigint
NOT
NULL
COMMENT
'主键id'
,
`id_number`
varchar
(
32
)
NOT
NULL
COMMENT
'蓝豆号'
,
`phone`
varchar
(
32
)
DEFAULT
NULL
COMMENT
'手机号码'
,
`id_card_no`
varchar
(
32
)
DEFAULT
NULL
COMMENT
'身份证号码'
,
`email`
varchar
(
32
)
DEFAULT
NULL
COMMENT
'邮箱号码'
,
`password`
varchar
(
32
)
DEFAULT
NULL
COMMENT
'密码'
,
`sex`
tinyint
DEFAULT
NULL
COMMENT
'性别 1-男 2-女
'
,
`sex`
tinyint
DEFAULT
3
COMMENT
'性别 1-男 2-女 3-未知
'
,
`head_portrait`
varchar
(
1000
)
DEFAULT
NULL
COMMENT
'头像'
,
`nickname`
varchar
(
30
)
DEFAULT
NULL
COMMENT
'昵称'
,
`create_time`
timestamp
NULL
DEFAULT
NULL
COMMENT
'创建时间'
,
...
...
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