From e95dd187c98d78e99ae2e53e99593b6011c7ae47 Mon Sep 17 00:00:00 2001 From: jack ning Date: Fri, 21 Nov 2025 12:58:29 +0800 Subject: [PATCH] update --- .../bytedesk/service/queue/QueueEntity.java | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/modules/service/src/main/java/com/bytedesk/service/queue/QueueEntity.java b/modules/service/src/main/java/com/bytedesk/service/queue/QueueEntity.java index 665f0f2879..4cc9d6c463 100644 --- a/modules/service/src/main/java/com/bytedesk/service/queue/QueueEntity.java +++ b/modules/service/src/main/java/com/bytedesk/service/queue/QueueEntity.java @@ -15,6 +15,7 @@ package com.bytedesk.service.queue; import com.bytedesk.core.base.BaseEntity; import com.bytedesk.core.thread.enums.ThreadTypeEnum; +import com.bytedesk.core.utils.BdDateUtils; import com.bytedesk.service.queue_member.QueueMemberEntity; import jakarta.persistence.*; @@ -26,6 +27,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import lombok.experimental.SuperBuilder; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.List; @@ -99,27 +101,30 @@ public class QueueEntity extends BaseEntity { public List getThreadsCountByHour() { List threadsCountByHour = new ArrayList<>(); for (int i = 0; i < 24; i++) { - // 读取workgroupQueueMembers.thread.created 按照24小时分组,统计每个分组的数量 final int hour = i; - int count = workgroupQueueMembers != null - ? (int) workgroupQueueMembers.stream().filter(member -> member.getThread() != null - && member.getThread().getCreatedAt().getHour() == hour).count() - : 0; - // 读取agentQueueMembers.thread.created 按照24小时分组,统计每个分组的数量 - count += agentQueueMembers != null - ? (int) agentQueueMembers.stream().filter(member -> member.getThread() != null - && member.getThread().getCreatedAt().getHour() == hour).count() - : 0; - // 读取robotQueueMembers.thread.created 按照24小时分组,统计每个分组的数量 - count += robotQueueMembers != null - ? (int) robotQueueMembers.stream().filter(member -> member.getThread() != null - && member.getThread().getCreatedAt().getHour() == hour).count() - : 0; + int count = countThreadsCreatedInHour(workgroupQueueMembers, hour); + count += countThreadsCreatedInHour(agentQueueMembers, hour); + count += countThreadsCreatedInHour(robotQueueMembers, hour); threadsCountByHour.add(count); } return threadsCountByHour; } + private int countThreadsCreatedInHour(List members, int hour) { + if (members == null) { + return 0; + } + // Align every timestamp to the display timezone before extracting the hour bucket + return (int) members.stream() + .filter(member -> member.getThread() != null && member.getThread().getCreatedAt() != null) + .filter(member -> { + ZonedDateTime displayTime = member.getThread().getCreatedAt() + .withZoneSameInstant(BdDateUtils.getDisplayZoneId()); + return displayTime.getHour() == hour; + }) + .count(); + } + /** * 获取当天请求服务总人数(当前分配的排队号码) */