mirror of
https://gitee.com/270580156/weiyu.git
synced 2025-12-30 10:52:26 +00:00
update
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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: {}",
|
||||
|
||||
@@ -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());
|
||||
|
||||
// 设置机器人接待状态
|
||||
|
||||
Reference in New Issue
Block a user