feat: add historical data management

This commit is contained in:
wangxuming
2026-07-22 10:18:49 +08:00
parent 66951b4dc3
commit c6044d972c
23 changed files with 3389 additions and 12 deletions

View File

@@ -246,3 +246,154 @@ export interface AdminOverviewDto {
projects: AdminProjectDto[];
active_tickets: AdminActiveTicketDto[];
}
export interface AdminHistoryQuery {
project_id?: string;
from: string;
to: string;
status?: string;
query?: string;
page?: number;
page_size?: number;
}
export interface AdminHistoryTicketDto {
id: string;
project_id: string;
project_name: string;
project_code?: string;
queue_session_id: string;
business_date: string;
ticket_number: string;
ticket_sequence?: number;
party_size: number;
status: TicketStatus;
joined_at?: string | null;
called_at?: string | null;
arrived_at?: string | null;
completed_at?: string | null;
missed_at?: string | null;
terminal_at?: string | null;
wait_seconds?: number | null;
created_by?: string | null;
phone?: string | null;
phone_last4?: string | null;
phone_masked?: string | null;
last_name?: string | null;
honorific?: string | null;
personal_data_status: "AVAILABLE" | "ANONYMIZED" | string;
personal_data_purged_at?: string | null;
history_anonymized_at?: string | null;
batch_id?: string | null;
batch_sequence?: number | null;
batch_position?: number | null;
}
export interface AdminHistoryBatchDto {
id: string;
project_id: string;
project_name: string;
project_code?: string;
queue_session_id: string;
business_date: string;
batch_sequence: number;
revision?: number;
status: string;
call_mode?: "TICKET" | "PEOPLE" | string;
requested_count: number;
ticket_count: number;
people_count: number;
requested_by?: string | null;
called_at?: string | null;
completed_at?: string | null;
ticket_numbers?: string[];
tickets?: AdminHistoryTicketDto[];
}
export interface AdminHistoryPageDto<T> {
items: T[];
page: number;
page_size: number;
total: number;
from: string;
to: string;
}
export interface AdminHistoryHourlyDto {
hour: number;
issued_tickets: number;
issued_people: number;
called_tickets: number;
called_people: number;
}
export interface AdminHistoryPeakHourDto extends AdminHistoryHourlyDto {
rank: number;
}
export interface AdminHistoryDailyDto {
business_date: string;
total_tickets: number;
total_people: number;
called_tickets: number;
completed_tickets: number;
missed_tickets: number;
canceled_tickets: number;
completion_rate: number;
missed_rate: number;
canceled_rate: number;
average_wait_seconds?: number | null;
max_wait_seconds?: number | null;
}
export interface AdminHistoryProjectDto {
project_id: string;
project_name: string;
project_code?: string;
total_tickets: number;
total_people: number;
called_tickets: number;
completed_tickets: number;
missed_tickets: number;
canceled_tickets: number;
completion_rate: number;
missed_rate: number;
canceled_rate: number;
average_wait_seconds?: number | null;
max_wait_seconds?: number | null;
}
export interface AdminHistoryAlertDto {
severity: number;
type: string;
title: string;
detail: string;
project_id: string;
project_name: string;
total_tickets: number;
}
export interface AdminHistorySummaryDto {
from: string;
to: string;
summary: {
total_tickets: number;
total_people: number;
called_tickets: number;
called_people: number;
completed_tickets: number;
completed_people: number;
missed_tickets: number;
canceled_tickets: number;
completion_rate: number;
missed_rate: number;
canceled_rate: number;
average_wait_seconds?: number | null;
max_wait_seconds?: number | null;
};
hourly: AdminHistoryHourlyDto[];
peak_hours?: AdminHistoryPeakHourDto[];
daily?: AdminHistoryDailyDto[];
projects?: AdminHistoryProjectDto[];
alerts?: AdminHistoryAlertDto[];
}