This commit is contained in:
jack ning
2025-11-20 13:54:09 +08:00
parent 61e05082da
commit 0d050df025
3 changed files with 35 additions and 12 deletions

View File

@@ -64,20 +64,35 @@ public class QueueService {
}
@Transactional
public QueueMemberEntity enqueueAgent(ThreadEntity threadEntity, AgentEntity agentEntity, VisitorRequest visitorRequest) {
public QueueMemberEntity enqueueAgent(ThreadEntity threadEntity, AgentEntity agentEntity,
VisitorRequest visitorRequest) {
return enqueueAgentWithResult(threadEntity, agentEntity, visitorRequest).queueMember();
}
@Transactional
public QueueEnqueueResult enqueueAgentWithResult(ThreadEntity threadEntity, AgentEntity agentEntity,
VisitorRequest visitorRequest) {
UserProtobuf agent = agentEntity.toUserProtobuf();
boolean alreadyQueued = queueMemberRestService.findActiveByThreadUid(threadEntity.getUid()).isPresent();
QueueMemberEntity queueMemberEntity = enqueueToQueue(threadEntity, agent, null, QueueTypeEnum.AGENT);
if (!alreadyQueued) {
queueNotificationService.publishQueueJoinNotice(agentEntity, queueMemberEntity);
}
return queueMemberEntity;
return new QueueEnqueueResult(queueMemberEntity, alreadyQueued);
}
@Transactional
public QueueMemberEntity enqueueWorkgroup(ThreadEntity threadEntity, UserProtobuf agent,
WorkgroupEntity workgroupEntity, VisitorRequest visitorRequest) {
return enqueueToQueue(threadEntity, agent, workgroupEntity, QueueTypeEnum.WORKGROUP);
return enqueueWorkgroupWithResult(threadEntity, agent, workgroupEntity, visitorRequest).queueMember();
}
@Transactional
public QueueEnqueueResult enqueueWorkgroupWithResult(ThreadEntity threadEntity, UserProtobuf agent,
WorkgroupEntity workgroupEntity, VisitorRequest visitorRequest) {
boolean alreadyQueued = queueMemberRestService.findActiveByThreadUid(threadEntity.getUid()).isPresent();
QueueMemberEntity queueMemberEntity = enqueueToQueue(threadEntity, agent, workgroupEntity, QueueTypeEnum.WORKGROUP);
return new QueueEnqueueResult(queueMemberEntity, alreadyQueued);
}
@Transactional
@@ -331,6 +346,8 @@ public class QueueService {
return getOrCreateQueue(queueTopic, user.getNickname(), user.getType(), orgUid);
}
public record QueueEnqueueResult(QueueMemberEntity queueMember, boolean alreadyQueued) { }
public record QueueAssignmentResult(String agentUid, String threadUid, String queueMemberUid) { }
private Optional<QueueEntity> findLatestQueue(String queueTopic, String day) {

View File

@@ -225,7 +225,9 @@ public class AgentThreadRoutingStrategy extends AbstractThreadRoutingStrategy {
// 加入队列
log.debug("开始将线程加入队列");
QueueMemberEntity queueMemberEntity = queueService.enqueueAgent(thread, agentEntity, visitorRequest);
QueueService.QueueEnqueueResult enqueueResult = queueService
.enqueueAgentWithResult(thread, agentEntity, visitorRequest);
QueueMemberEntity queueMemberEntity = enqueueResult.queueMember();
// 根据客服状态路由
log.debug("开始根据客服状态进行路由 - 可用状态: {}", agentEntity.isAvailable());
@@ -241,8 +243,8 @@ public class AgentThreadRoutingStrategy extends AbstractThreadRoutingStrategy {
/**
* 路由在线客服
*/
private MessageProtobuf routeOnlineAgent(ThreadEntity thread, AgentEntity agentEntity,
QueueMemberEntity queueMemberEntity) {
private MessageProtobuf routeOnlineAgent(ThreadEntity thread, AgentEntity agentEntity,
QueueMemberEntity queueMemberEntity) {
long startTime = System.currentTimeMillis();
log.info("开始在线客服路由处理 - threadUid: {}, agentUid: {}, agentNickname: {}",
thread.getUid(), agentEntity.getUid(), agentEntity.getNickname());
@@ -336,7 +338,7 @@ public class AgentThreadRoutingStrategy extends AbstractThreadRoutingStrategy {
/**
* 处理排队客服(客服在线但已达到最大接待人数)
*/
private MessageProtobuf handleQueuedAgent(ThreadEntity threadFromRequest, AgentEntity agent,
private MessageProtobuf handleQueuedAgent(ThreadEntity threadFromRequest, AgentEntity agent,
QueueMemberEntity queueMemberEntity) {
long startTime = System.currentTimeMillis();
log.info("开始处理客服排队情况 - threadUid: {}, agentUid: {}, agentNickname: {}",

View File

@@ -406,8 +406,9 @@ public class WorkgroupThreadRoutingStrategy extends AbstractThreadRoutingStrateg
log.debug("使用离线留言接待客服 - agentUid: {}", messageLeaveAgent.getUid());
// 加入队列(用于统计和管理)
UserProtobuf agent = messageLeaveAgent.toUserProtobuf();
QueueMemberEntity queueMemberEntity = queueService.enqueueWorkgroup(thread, agent, workgroup,
visitorRequest);
QueueMemberEntity queueMemberEntity = queueService
.enqueueWorkgroupWithResult(thread, agent, workgroup, visitorRequest)
.queueMember();
// 直接返回离线留言消息
return getOfflineMessage(visitorRequest, thread, messageLeaveAgent, workgroup, queueMemberEntity);
@@ -423,7 +424,9 @@ public class WorkgroupThreadRoutingStrategy extends AbstractThreadRoutingStrateg
log.debug("开始将线程加入工作组队列");
long enqueueStartTime = System.currentTimeMillis();
UserProtobuf agent = agentEntity.toUserProtobuf();
QueueMemberEntity queueMemberEntity = queueService.enqueueWorkgroup(thread, agent, workgroup, visitorRequest);
QueueService.QueueEnqueueResult enqueueResult = queueService
.enqueueWorkgroupWithResult(thread, agent, workgroup, visitorRequest);
QueueMemberEntity queueMemberEntity = enqueueResult.queueMember();
log.info("工作组队列加入完成 - queueMemberUid: {}, 耗时: {}ms", queueMemberEntity.getUid(), System.currentTimeMillis() - enqueueStartTime);
// 处理强制转人工
@@ -634,8 +637,9 @@ public class WorkgroupThreadRoutingStrategy extends AbstractThreadRoutingStrateg
// 加入队列
UserProtobuf robotProtobuf = robotEntity.toUserProtobuf();
QueueMemberEntity queueMemberEntity = queueService.enqueueWorkgroup(thread, robotProtobuf, workgroup,
visitorRequest);
QueueMemberEntity queueMemberEntity = queueService
.enqueueWorkgroupWithResult(thread, robotProtobuf, workgroup, visitorRequest)
.queueMember();
log.info("Robot enqueued to queue: {}", queueMemberEntity.getUid());
// 设置机器人接待状态