Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yd-communication
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
xingmin
yd-communication
Commits
f9b0f3a2
Commit
f9b0f3a2
authored
Jul 30, 2026
by
zhangxingmin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
push
parent
3bec6694
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
23 additions
and
9 deletions
+23
-9
yd-communication-api/src/main/java/com/yd/communication/api/websocket/CoWebSocketServer.java
+23
-9
No files found.
yd-communication-api/src/main/java/com/yd/communication/api/websocket/CoWebSocketServer.java
View file @
f9b0f3a2
...
@@ -540,6 +540,7 @@ public class CoWebSocketServer {
...
@@ -540,6 +540,7 @@ public class CoWebSocketServer {
// --- 操作1:控制权切换(仅顾问可操作) ---
// --- 操作1:控制权切换(仅顾问可操作) ---
if
(
"control_transfer"
.
equals
(
action
))
{
if
(
"control_transfer"
.
equals
(
action
))
{
// 打印开始处理日志,包含当前操作用户类型(owner/participant)
log
.
info
(
"【控制权切换】开始处理,当前用户类型: {}"
,
userType
);
log
.
info
(
"【控制权切换】开始处理,当前用户类型: {}"
,
userType
);
// 校验权限:只有参与者(顾问)才能切换控制权
// 校验权限:只有参与者(顾问)才能切换控制权
...
@@ -549,15 +550,15 @@ public class CoWebSocketServer {
...
@@ -549,15 +550,15 @@ public class CoWebSocketServer {
return
;
return
;
}
}
// 解析顾问切换后的控制权信息
// 从WebSocket消息中解析目标控制权持有者类型(owner/participant)
// 注意:前端可能不传递 holderId 或传递空值,因此不能直接信任
String
newHolderType
=
json
.
get
(
"holderType"
).
asText
();
String
newHolderType
=
json
.
get
(
"holderType"
).
asText
();
String
newHolderId
=
json
.
get
(
"holderId"
).
asText
();
log
.
info
(
"【控制权切换】目标控制者类型: holderType={}"
,
newHolderType
);
log
.
info
(
"【控制权切换】目标控制者: holderType={}, holderId={}"
,
newHolderType
,
newHolderId
);
// 构造控制权切换请求
// 构造控制权切换请求
TransferControlRequest
req
=
new
TransferControlRequest
();
TransferControlRequest
req
=
new
TransferControlRequest
();
req
.
setRoomId
(
roomId
);
req
.
setRoomId
(
roomId
);
//
判断切换后的持有者类型:如果是 owner(客户)则 opType=1(开启客户操作),否则 opType=2(关闭客户操作
)
//
根据目标类型确定操作类型:1=授权客户(owner),2=收回控制权(participant
)
Integer
oprType
=
ControlHolderTypeEnum
.
OWNER
.
getItemValue
().
equals
(
newHolderType
)
?
1
:
2
;
Integer
oprType
=
ControlHolderTypeEnum
.
OWNER
.
getItemValue
().
equals
(
newHolderType
)
?
1
:
2
;
req
.
setOprType
(
oprType
);
req
.
setOprType
(
oprType
);
log
.
info
(
"【控制权切换】操作类型: {}"
,
oprType
);
log
.
info
(
"【控制权切换】操作类型: {}"
,
oprType
);
...
@@ -572,16 +573,29 @@ public class CoWebSocketServer {
...
@@ -572,16 +573,29 @@ public class CoWebSocketServer {
return
;
return
;
}
}
// 广播控制权变更消息给房间内所有用户(包括自己)
// 重新从 Redis(或数据库)获取最新的控制者信息,确保准确性
broadcast
(
roomId
,
message
,
session
);
// 因为服务层已经更新了控制权,此时 Redis 中的值是最新的
log
.
info
(
"【控制权切换】广播消息已发送"
);
RoomRedisInfoDTO
latest
=
sessionService
.
getCurrentController
(
roomId
);
String
correctHolderType
=
latest
.
getControlHolderType
();
String
correctHolderId
=
latest
.
getControlHolderId
();
log
.
info
(
"【控制权切换】最新控制者: holderType={}, holderId={}"
,
correctHolderType
,
correctHolderId
);
// 构造包含正确 holderId 的广播消息,避免前端因空 ID 无法匹配
String
correctMsg
=
String
.
format
(
"{\"action\":\"control_transfer\",\"holderType\":\"%s\",\"holderId\":\"%s\"}"
,
correctHolderType
,
correctHolderId
);
// 广播正确的控制权变更消息给房间内所有用户(包括自己,以便本端也能更新状态)
broadcast
(
roomId
,
correctMsg
,
session
);
log
.
info
(
"【控制权切换】已广播正确的控制权消息: {}"
,
correctMsg
);
// 记录操作日志(用于合规审计)
// 记录操作日志(用于合规审计)
if
(
bizId
!=
null
)
{
if
(
bizId
!=
null
)
{
operationLogService
.
log
(
bizId
,
userId
,
userType
,
userId
,
action
,
message
,
null
,
null
);
operationLogService
.
log
(
bizId
,
userId
,
userType
,
userId
,
action
,
correctMsg
,
null
,
null
);
}
}
log
.
info
(
"控制权切换成功: roomId={}, holder={}:{}"
,
roomId
,
newHolderType
,
new
HolderId
);
log
.
info
(
"控制权切换成功: roomId={}, holder={}:{}"
,
roomId
,
correctHolderType
,
correct
HolderId
);
return
;
return
;
}
}
...
...
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