Hệ thống Smart Queue Booking System là ứng dụng web full-stack hiện đại dành cho việc đặt lịch vé số điện tử và quản lý hàng chờ thời gian thực tại các trung tâm dịch vụ, bệnh viện, ngân hàng hoặc cơ quan hành chính.
Hệ thống được thiết kế theo kiến trúc RESTful API với Backend xây dựng trên Spring Boot 3 (Java 21) và Frontend xây dựng trên React 19 (TypeScript, Vite, Tailwind CSS).
- Xem danh mục dịch vụ: Tra cứu thông tin dịch vụ, thời gian thực hiện trung bình.
- Đặt vé số điện tử (Virtual Ticket Booking): Đặt vé hàng chờ theo ngày, hệ thống tự động cấp số thứ tự (
queueNumber) và mã vé duy nhất (bookingCode:BK-S{serviceId}-{YYYYMMDD}-{queueNumber}). - Tính toán thời gian chờ tự động: Hiển thị thời gian bắt đầu dự kiến (
estimatedStartTime) và số người đang chờ phía trước (remainingAhead). - Quản lý vé: Theo dõi danh sách vé đang chờ/đang phục vụ và hủy vé trực tiếp.
- Bảng điều khiển quầy (Dispatch Controller): Chọn dịch vụ phục vụ và gọi lượt tiếp theo (Call Next Customer) theo nguyên tắc FIFO.
- Cập nhật trạng thái lượt phục vụ: Hoàn thành lượt (
Complete) hoặc bỏ qua vé vắng mặt (Skip/Cancel). - Bảng chỉ số KPI thời gian thực: Theo dõi số lượt đang phục vụ, số lượt chờ, lượt hoàn thành và lượt hủy trong ngày.
- Quản lý danh mục dịch vụ (Service Management): Thêm mới, chỉnh sửa thông tin, bật/tắt trạng thái hoạt động của dịch vụ.
- Quản lý người dùng: Tra cứu và quản lý thông tin các tài khoản trong hệ thống.
- Xem nhật ký hệ thống (Audit Logs): Theo dõi lịch sử thao tác của nhân viên và khách hàng.
- Bảo mật: Phân quyền chi tiết dựa trên vai trò (Role-Based Access Control - RBAC) với Spring Security 6 và JWT (JSON Web Token).
- Tối ưu truy vấn SQL: Sử dụng
JOIN FETCHngăn chặn sự cố N+1 Query, đánh chỉ mục B-tree Indexes trên các trường tra cứu chính. - Xử lý lỗi tập trung: Ghi nhận và phản hồi thông báo lỗi nghiệp vụ rõ ràng qua
GlobalExceptionHandler.
- Core Framework: Java 21 (LTS), Spring Boot 3.3.5
- Security: Spring Security 6, JWT (
jjwt 0.12.6), BCrypt Password Encoder - Database & ORM: Spring Data JPA, Hibernate 6, H2 In-Memory Database (cho Dev) / MySQL Support
- Documentation: Springdoc OpenAPI / Swagger UI
- Build Tool: Maven
- Core Library: React 19, TypeScript, Vite
- Styling: Tailwind CSS v4, Lucide React (Icons)
- State & Data Fetching: TanStack React Query v5, Zustand, Axios
- Form & Validation: React Hook Form, Zod
- Notification: React Hot Toast
project 2/
├── src/main/java/com/smartqueue/
│ ├── config/ # Cấu hình CORS, Swagger, DataLoader
│ ├── controller/ # REST Controllers (Auth, Booking, Queue, Service, Audit)
│ ├── dto/ # Data Transfer Objects (Request/Response)
│ ├── entity/ # JPA Entities (User, Service, Queue, Booking, AuditLog)
│ ├── exception/ # Custom Exceptions & GlobalExceptionHandler
│ ├── repository/ # Spring Data JPA Repositories
│ ├── security/ # JwtAuthenticationFilter, JwtService, UserDetailsService
│ └── service/ # Business Logic Services & Implementations
│
├── frontend/ # React Vite Frontend Application
│ ├── src/
│ │ ├── components/ # UI Layout & Reusable Components
│ │ ├── lib/ # Axios Config & Utilities
│ │ ├── pages/ # Pages (UserDashboard, StaffDashboard, AdminDashboard, Auth Pages)
│ │ └── types/ # TypeScript Types & Interfaces
│ ├── package.json
│ └── vite.config.ts
│
├── performance_optimization.md # Tài liệu phân tích và tối ưu hiệu năng DB/JVM
├── run-project.bat # Script tự động khởi chạy cả Backend & Frontend
└── pom.xml # Maven Build Configuration
- Java Development Kit (JDK): Java 21 trở lên.
- Node.js: v18.x trở lên & npm.
Chạy file batch tự động mở 2 cửa sổ terminal cho Backend và Frontend:
double-click vào file: run-project.batMở cửa sổ Terminal tại thư mục gốc dự án:
# Đặt biến môi trường JAVA_HOME (nếu chưa cấu hình)
set JAVA_HOME=C:\Program Files\Java\jdk-21
# Khởi chạy ứng dụng Spring Boot
.\mvnw.cmd spring-boot:run- Server Backend chạy tại:
http://localhost:8080/api - Trang tài liệu OpenAPI Swagger UI:
http://localhost:8080/api/swagger-ui.html
Mở một cửa sổ Terminal khác tại thư mục frontend:
cd frontend
npm install
npm run dev- Giao diện web chạy tại:
http://localhost:3000
Hệ thống được cấu hình tự động tạo dữ liệu mẫu khi khởi chạy (DataLoader):
| Vai Trò | Mật Khẩu | Quyền Hạn | |
|---|---|---|---|
| Quản trị viên (Admin) | admin@example.com |
Password123! |
Toàn quyền quản lý dịch vụ, người dùng, audit logs |
| Nhân viên quầy (Staff) | staff@example.com |
Password123! |
Điều phối quầy, gọi số tiếp theo, hoàn thành/bỏ qua lượt |
| Khách hàng (User) | user@example.com |
Password123! |
Đặt vé, hủy vé, xem danh sách chờ thời gian thực |
Tham khảo chi tiết phân tích tối ưu hiệu năng cơ sở dữ liệu, đánh chỉ mục (Index) và giải pháp chống lỗi N+1 Query tại file performance_optimization.md.