Sistem antrian digital real-time untuk layanan perbankan

Layar yang dipasang di ruang tunggu nasabah, menampilkan nomor yang sedang dilayani dan nomor yang menunggu secara real-time.
Dashboard operator untuk memanggil nasabah, mengelola antrian, dan memantau semua loket secara bersamaan.
Halaman kios mandiri bagi nasabah untuk memilih layanan dan mengambil nomor antrian.
| Fitur | Deskripsi |
|---|---|
| π‘ Real-Time Updates | Semua perubahan antrian langsung tersinkron ke seluruh klien via SignalR WebSocket |
| π Voice Announcement | Pengumuman suara otomatis menggunakan Web Speech API (Bahasa Indonesia) saat nomor dipanggil |
| π§ Multi-Service | Mendukung 7 jenis layanan perbankan dengan kode tiket unik masing-masing |
| π₯οΈ Queue Display | Layar publik yang menampilkan nomor sedang dilayani dan antrian menunggu |
| ποΈ Admin Panel | Operator dapat memanggil, melayani, menyelesaikan, atau melewati antrian |
| π« Self-Service Kiosk | Nasabah dapat mengambil nomor antrian sendiri tanpa bantuan petugas |
| πΎ State Persistence | State antrian tersimpan di database β aman dari restart server |
| β‘ In-Memory Performance | State di-cache di memori untuk performa broadcast real-time yang optimal |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENTS β
β β
β [Queue Display] [Admin Panel] [Ambil Nomor Kiosk] β
ββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββ
β WebSocket (SignalR) + HTTP REST
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Queue.API (ASP.NET Core 10) β
β β
β ββββββββββββββββ βββββββββββββββββββββββββββββββββββββ β
β β QueueHub β β QueueController (REST API) β β
β β (SignalR) β β GET /api/queue/new-queue β β
β β β β GET /api/queue/get-queues β β
β ββββββββ¬ββββββββ ββββββββββββββββ¬βββββββββββββββββββββ β
β β β β
β ββββββββββββ¬ββββββββββββββββ β
β βΌ β
β ββββββββββββββββββββββββ β
β β QueueStateService β β Singleton In-Memory β
β β (SemaphoreSlim) β Thread-Safe State β
β ββββββββββββ¬ββββββββββββ β
β β β
β ββββββββββββΌββββββββββββ β
β β AppDbContext (EF) β β SQL Server Persistence β
β ββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Teknologi | Versi | Peran |
|---|---|---|
| ASP.NET Core | .NET 10 | Web framework & REST API |
| ASP.NET SignalR | 10.0 | Real-time WebSocket communication |
| Entity Framework Core | 10.0 | ORM & database migrations |
| SQL Server | β | Persistent storage |
| OpenAPI | Built-in | API documentation |
| Teknologi | Versi | Peran |
|---|---|---|
| Vue.js | 3.5 | UI Framework (Composition API) |
| TypeScript | ~6.0 | Type-safe development |
| Pinia | 3.0 | State management |
| Vue Router | 5.0 | Client-side routing |
| @microsoft/signalr | 10.0 | SignalR client connection |
| Vite | 8.0 | Build tool & dev server |
| Web Speech API | Native | Text-to-speech voice announcement |
| Kode | Layanan | Contoh Tiket |
|---|---|---|
| A | Teller | A001 |
| C | Customer Service | C001 |
| K | Kredit | K001 |
| I | Investasi | I001 |
| P | Priority Banking | P001 |
| F | Trade Finance | F001 |
| S | Safe Deposit Box | S001 |
- .NET 10 SDK
- Node.js 20+
- SQL Server (LocalDB / Express / Full)
cd Queue.APIEdit appsettings.Development.json dan sesuaikan connection string:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=QueueDB;Trusted_Connection=True;"
}
}Jalankan migrasi dan start server:
dotnet ef database update
dotnet runAPI akan berjalan di
https://localhost:7xxxatauhttp://localhost:5xxx
cd Queue.UI
npm install
npm run devFrontend akan berjalan di
http://localhost:5173
| URL | Halaman |
|---|---|
http://localhost:5173/ |
Queue Display (Layar Publik) |
http://localhost:5173/take |
Ambil Nomor (Kiosk) |
http://localhost:5173/admin |
Admin Panel (Operator) |
| Event | Payload | Keterangan |
|---|---|---|
QueueUpdate |
QueueUpdatePayload |
Update penuh state antrian |
QueueCalled |
QueueCalledPayload |
Nomor baru dipanggil ke loket |
Announcement |
string |
Pesan pengumuman teks bebas |
| Method | Parameter | Keterangan |
|---|---|---|
AddQueue |
queueNumber, serviceName |
Tambah nomor antrian baru |
CallNext |
counterName, serviceName |
Panggil nomor berikutnya |
CallSpecific |
queueNumber, counterName, serviceName |
Panggil nomor tertentu |
CompleteQueue |
queueNumber, counterName |
Selesaikan pelayanan |
SkipQueue |
queueNumber |
Lewati / skip nomor |
SendAnnouncement |
message |
Kirim pengumuman ke semua layar |
Queue/
βββ Queue.API/ # ASP.NET Core Backend
β βββ Controllers/
β β βββ QueueController.cs # REST API endpoints
β βββ Hubs/
β β βββ QueueHub.cs # SignalR real-time hub
β βββ Services/
β β βββ QueueStateService.cs # Singleton in-memory state
β β βββ QueueStateInitializer.cs # DB β Memory loader on startup
β βββ Models/
β β βββ Queue.cs # Entity model
β β βββ ActivityLog.cs # Activity log model
β βββ Data/
β β βββ AppDbContext.cs # EF Core DB context
β βββ Shared/
β β βββ AppEnum.cs # Service types, statuses, ticket prefixes
β βββ Migrations/ # EF Core database migrations
β
βββ Queue.UI/ # Vue 3 Frontend
βββ src/
βββ views/
β βββ QueueDisplay.vue # Layar antrian publik
β βββ TakeQueueView.vue # Kios ambil nomor
β βββ AdminView.vue # Panel operator
βββ stores/
β βββ queue.ts # Pinia: real-time queue state
β βββ admin.ts # Pinia: admin / counter state
βββ services/
β βββ signalrService.ts # SignalR connection & event handlers
βββ composables/
βββ useVoice.ts # Web Speech API TTS composable
Nasabah Sistem Operator
β β β
βββ Pilih Layanan βββββββΊβ β
β βββ Buat Tiket (DB) βββββββΊβ
βββ Terima Nomor βββββββββββ Broadcast QueueUpdate ββ
β β β
β [Menunggu] βββ CallNext() βββββββββββββ
β βββ QueueCalled Event ββββββΊβ
βββ π Suara Panggil ββββββ Broadcast ke Display βββΊβ
β β β
βββ Menuju Loket βββββββββ β
β βββ CompleteQueue() ββββββββ
β βββ Broadcast QueueUpdate ββΊβ
β [Selesai] β β
Dibangun sebagai portofolio proyek full-stack menggunakan teknologi modern untuk sistem antrian perbankan berbasis web real-time.
β Jika proyek ini bermanfaat, berikan bintang!


