From 15fe731db8d40bd00a50cabc0143f1faed08c788 Mon Sep 17 00:00:00 2001 From: jack ning Date: Thu, 20 Feb 2025 13:46:26 +0800 Subject: [PATCH] update modules/ticket: add 1 mod 2 del 1 files --- .../statistic/TicketStatisticRequest.java | 52 ++++++++++++++++-- .../statistic/TicketStatisticResponse.java | 54 +++++++++++++++++-- .../TicketStatisticRestSpecification.java | 25 --------- .../TicketStatisticSpecification.java | 44 +++++++++++++++ 4 files changed, 144 insertions(+), 31 deletions(-) delete mode 100644 modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticRestSpecification.java create mode 100644 modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticSpecification.java diff --git a/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticRequest.java b/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticRequest.java index 70c68521c9..9348ac2d7a 100644 --- a/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticRequest.java +++ b/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticRequest.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-01-16 14:58:40 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-02-20 12:51:09 + * @LastEditTime: 2025-02-20 13:46:20 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -21,6 +21,52 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) public class TicketStatisticRequest extends BaseRequest { - private String content; - private String author; + + // 基本统计 + private long totalTickets; // 总工单数 + private long openTickets; // 开放工单数 + private long closedTickets; // 已关闭工单数 + private long unreadTickets; // 未读工单数 + + // 状态统计 + private long newTickets; // 新建工单数 + private long claimedTickets; // 已认领工单数 + private long unclaimedTickets; // 已退回工单数 + private long processingTickets; // 处理中工单数 + private long pendingTickets; // 待处理工单数 + private long holdingTickets; // 挂起工单数 + private long reopenedTickets; // 重新打开工单数 + private long resolvedTickets; // 已解决工单数 + private long escalatedTickets; // 已升级工单数 + + // 优先级统计 + private long criticalTickets; // 紧急工单数 + private long highTickets; // 高优先级工单数 + private long mediumTickets; // 中优先级工单数 + private long lowTickets; // 低优先级工单数 + + // 时间统计 + private double averageResolutionTime; // 平均解决时间(小时) + private double averageFirstResponseTime; // 平均首次响应时间(分钟) + private long slaBreachCount; // SLA违反次数 + private double slaComplianceRate; // SLA达标率(%) + + // 工作组统计 + private String workgroupUid; // 工作组ID + private long workgroupTickets; // 工作组工单数 + private double workgroupResolutionRate; // 工作组解决率(%) + + // 处理人统计 + private String assigneeUid; // 处理人ID + private long assigneeTickets; // 处理人工单数 + private double assigneeResolutionRate; // 处理人解决率(%) + + // 客户满意度 + private double customerSatisfactionRate; // 客户满意度(%) + private long satisfiedTickets; // 满意工单数 + private long unsatisfiedTickets; // 不满意工单数 + + // 时间范围 + private LocalDateTime statisticStartTime; // 统计开始时间 + private LocalDateTime statisticEndTime; // 统计结束时间 } \ No newline at end of file diff --git a/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticResponse.java b/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticResponse.java index cf4757d2d6..c2f9f54424 100644 --- a/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticResponse.java +++ b/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticResponse.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2025-01-16 14:58:40 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-02-20 12:51:27 + * @LastEditTime: 2025-02-20 13:46:09 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -13,6 +13,8 @@ */ package com.bytedesk.ticket.statistic; +import java.time.LocalDateTime; + import com.bytedesk.core.base.BaseResponse; import lombok.Data; @@ -21,6 +23,52 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) public class TicketStatisticResponse extends BaseResponse { - private String content; - private String author; + + // 基本统计 + private long totalTickets; // 总工单数 + private long openTickets; // 开放工单数 + private long closedTickets; // 已关闭工单数 + private long unreadTickets; // 未读工单数 + + // 状态统计 + private long newTickets; // 新建工单数 + private long claimedTickets; // 已认领工单数 + private long unclaimedTickets; // 已退回工单数 + private long processingTickets; // 处理中工单数 + private long pendingTickets; // 待处理工单数 + private long holdingTickets; // 挂起工单数 + private long reopenedTickets; // 重新打开工单数 + private long resolvedTickets; // 已解决工单数 + private long escalatedTickets; // 已升级工单数 + + // 优先级统计 + private long criticalTickets; // 紧急工单数 + private long highTickets; // 高优先级工单数 + private long mediumTickets; // 中优先级工单数 + private long lowTickets; // 低优先级工单数 + + // 时间统计 + private double averageResolutionTime; // 平均解决时间(小时) + private double averageFirstResponseTime; // 平均首次响应时间(分钟) + private long slaBreachCount; // SLA违反次数 + private double slaComplianceRate; // SLA达标率(%) + + // 工作组统计 + private String workgroupUid; // 工作组ID + private long workgroupTickets; // 工作组工单数 + private double workgroupResolutionRate; // 工作组解决率(%) + + // 处理人统计 + private String assigneeUid; // 处理人ID + private long assigneeTickets; // 处理人工单数 + private double assigneeResolutionRate; // 处理人解决率(%) + + // 客户满意度 + private double customerSatisfactionRate; // 客户满意度(%) + private long satisfiedTickets; // 满意工单数 + private long unsatisfiedTickets; // 不满意工单数 + + // 时间范围 + private LocalDateTime statisticStartTime; // 统计开始时间 + private LocalDateTime statisticEndTime; // 统计结束时间 } \ No newline at end of file diff --git a/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticRestSpecification.java b/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticRestSpecification.java deleted file mode 100644 index 28aa79846f..0000000000 --- a/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticRestSpecification.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * @Author: jackning 270580156@qq.com - * @Date: 2025-02-20 12:53:16 - * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-02-20 12:53:19 - * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk - * Please be aware of the BSL license restrictions before installing Bytedesk IM – - * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. - * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE - * contact: 270580156@qq.com - * - * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. - */ -package com.bytedesk.ticket.statistic; - -import org.springframework.data.jpa.domain.Specification; - -public class TicketStatisticRestSpecification { - - public static Specification buildSpecification(TicketStatisticRequest request) { - return (root, query, criteriaBuilder) -> { - return criteriaBuilder.equal(root.get("orgUid"), request.getOrgUid()); - }; - } -} diff --git a/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticSpecification.java b/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticSpecification.java new file mode 100644 index 0000000000..bc12cec589 --- /dev/null +++ b/modules/ticket/src/main/java/com/bytedesk/ticket/statistic/TicketStatisticSpecification.java @@ -0,0 +1,44 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-02-20 12:53:16 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-02-20 13:45:33 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.ticket.statistic; + +import java.util.ArrayList; +import java.util.List; + +import jakarta.persistence.criteria.Predicate; +import org.springframework.data.jpa.domain.Specification; + +import com.bytedesk.core.base.BaseSpecification; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class TicketStatisticSpecification extends BaseSpecification { + + public static Specification search(TicketStatisticRequest request) { + log.info("request: {}", request); + return (root, query, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + predicates.addAll(getBasicPredicates(root, criteriaBuilder, request.getOrgUid())); + + // workgroupUid + if (StringUtils.hasText(request.getWorkgroupUid())) { + predicates.add(criteriaBuilder.equal(root.get("workgroupUid"), request.getWorkgroupUid())); + } + + // + return criteriaBuilder.and(predicates.toArray(new Predicate[0])); + }; + } +}