Hệ thống Quản lý Khách sạn Thông minh
Đồ án Khoa học Máy tính
🎓 Chuyên ngành: Khoa học Máy tính
💻 Ngành: Công nghệ Thông tin
🏛️ Trường: Đại học Mỏ - Địa chất
📅 Năm học: 2024-2025
Hệ thống quản lý khách sạn toàn diện được xây dựng trên nền tảng Spring Boot, tích hợp các công nghệ hiện đại:
✨ Tính năng nổi bật:
- 🤖 Tích hợp AI (Gemini 2.0) hỗ trợ khách hàng thông minh
- 💳 Đa dạng phương thức thanh toán (PayPal, ZaloPay)
- 🔒 Bảo mật cao cấp với JWT & SSL/TLS
- ⚡ Hiệu suất tối ưu với Redis caching
- 📧 Gửi email tự động thông báo & xác nhận
- 🎯 Kiến trúc phân tầng rõ ràng, dễ mở rộng
| Công nghệ | Phiên bản | Mô tả |
|---|---|---|
| Spring Boot | 3.4.2 | Framework chính |
| Spring Security | Latest | Bảo mật và xác thực |
| Spring Data JPA | Latest | Quản lý dữ liệu |
| Spring WebFlux | Latest | Reactive programming |
| OAuth2 Resource Server | Latest | OAuth2 authentication |
- MySQL 8.0+ - Cơ sở dữ liệu quan hệ chính
- Redis - Caching và quản lý session
- JWT (JSON Web Token) v0.11.5 - Xác thực dựa trên token
jjwt-api,jjwt-impl,jjwt-jackson
- Jasypt v3.0.5 - Mã hóa thông tin nhạy cảm
- SSL/TLS - HTTPS với keystore.jks
- PayPal SDK v1.14.0 - Thanh toán quốc tế
- ZaloPay API - Cổng thanh toán Việt Nam
- Spring AI v1.0.0 - Tích hợp OpenAI
- Gemini 2.0 Flash - AI model cho chatbot
- Lombok v1.18.36 - Giảm boilerplate code
- MapStruct v1.5.5 - Object mapping tự động
- Jackson - Xử lý JSON
- Apache HttpComponents v4.5.14 - HTTP client
- Apache Commons Codec v1.15 - HMAC-SHA256
- Spring Retry v2.0.7 - Retry logic
- JavaParser v3.25.4 - Phân tích Java code
- Thymeleaf - Template engine
- Spring Mail - Dịch vụ email
- Java 21 - Ngôn ngữ lập trình
- Maven 3.6+ - Build tool
- Spring Boot DevTools - Hot reload
- Docker - Container hóa
☕ Java 21 hoặc cao hơn
📦 Maven 3.6+
🗄️ MySQL 8.0+
🐳 Docker (cho Redis)
🌐 Ngrok (cho webhook callback)
CREATE DATABASE hotel_database_management;# Pull Redis image
docker pull redis:latest
# Chạy Redis container
docker run --name hotel-redis -p 6379:6379 -d redis:latest
# Kiểm tra Redis đang chạy
docker ps
# Test kết nối Redis
docker exec -it hotel-redis redis-cli ping
# ✅ Output: PONGBước 1: Tải Ngrok
- 🌐 Truy cập: https://ngrok.com/download
- 📥 Tải phiên bản Windows (ngrok.exe)
Bước 2: Cài đặt vào thư mục
# Tạo thư mục (nếu chưa có)
mkdir C:\ngrok
# Copy file ngrok.exe vào C:\ngrok\
# ✅ Đường dẫn cuối cùng: C:\ngrok\ngrok.exeBước 3: Cấu hình Ngrok authtoken (chỉ cần làm 1 lần)
# Mở Command Prompt
cd C:\ngrok
# 1. Đăng ký tài khoản: https://dashboard.ngrok.com/signup
# 2. Lấy authtoken: https://dashboard.ngrok.com/get-started/your-authtoken
# 3. Cấu hình authtoken
ngrok config add-authtoken YOUR_AUTH_TOKEN✨ Lưu ý: Dự án đã có script tự động! Bạn chỉ cần đảm bảo
ngrok.exeở đúng vị tríC:\ngrok\ngrok.exeScript sẽ tự động:
- 🚀 Khởi động ngrok trên port 8443
- 🔗 Lấy public URL từ ngrok API
- 📝 Cập nhật
callback-urltrongapplication.yaml- 🌍 Set biến môi trường
NGROK_URL
Tạo file src/main/resources/application-secret.yaml:
spring:
mail:
username: your-email@gmail.com
password: your-app-password
datasource:
username: root
password: your-mysql-password
paypal:
client-id: your-paypal-client-id
client-secret: your-paypal-client-secret
zalo-pay:
app-id: your-zalopay-app-id
key1: your-zalopay-key1
key2: your-zalopay-key2
callback-url: https://YOUR-NGROK-URL/zalopay/callback
jwt:
signerKey: your-secret-key-at-least-32-characters# Tạo keystore.jks (nếu chưa có)
keytool -genkeypair -alias myssl -keyalg RSA -keysize 2048 \
-storetype JKS -keystore keystore.jks -validity 3650 \
-storepass YOUR_PASSWORD -keypass YOUR_PASSWORD
# Copy keystore.jks vào src/main/resources/Cập nhật password trong application.yaml:
server:
ssl:
key-store-password: YOUR_PASSWORD
key-password: YOUR_PASSWORD🔑 Lấy API key từ: https://makersuite.google.com/app/apikey
Cập nhật trong application.yaml:
spring:
ai:
openai:
api-key: "YOUR_GEMINI_API_KEY"mvn clean installdocker start hotel-redis🎯 Cách 1: Sử dụng Maven
mvn spring-boot:run🎯 Cách 2: Chạy JAR file
java -jar target/HotelSystemManagement-0.0.1-SNAPSHOT.jar🎯 Cách 3: Chạy script batch (khởi động cả ngrok)
.\scripts\start-ngrok.bat✅ Script sẽ tự động:
- 🚀 Khởi động ngrok trên port 8443
- 🔗 Lấy public URL và cập nhật vào
application.yaml - 🌍 Thiết lập biến môi trường
NGROK_URL
🌐 Ứng dụng sẽ chạy tại: https://localhost:8443
mvn jasypt:encrypt-value -Djasypt.encryptor.password=YOUR_MASTER_PASSWORD \
-Djasypt.plugin.value="value-to-encrypt"spring:
datasource:
password: ENC(encrypted-value-here)java -jar target/HotelSystemManagement-0.0.1-SNAPSHOT.jar \
--jasypt.encryptor.password=YOUR_MASTER_PASSWORDHotelSystemManagement/
├── 📁 .idea/ # IntelliJ IDEA config
├── 📁 .mvn/ # Maven wrapper
├── 📁 .vscode/ # VS Code config
├── 📁 scripts/
│ └── 📜 start-ngrok.ps1 # PowerShell script tự động ngrok
├── 📁 src/
│ ├── 📁 main/
│ │ ├── 📁 java/
│ │ │ └── 📁 com.humg.HotelSystemManagement/
│ │ │ ├── 📁 configs/
│ │ │ │ ├── ⚙️ AppConfig.java
│ │ │ │ ├── ⚙️ ApplicationInitConfig.java
│ │ │ │ ├── ⚙️ CorsConfig.java
│ │ │ │ ├── ⚙️ JacksonConfig.java
│ │ │ │ └── ⚙️ RetryConfig.java
│ │ │ ├── 📁 exceptions/
│ │ │ │ ├── 📁 enums/
│ │ │ │ ├── 📁 exceptions/
│ │ │ │ └── 🚨 GlobalExceptionHandler.java
│ │ │ ├── 📁 modules/
│ │ │ │ ├── 👤 admin_service/
│ │ │ │ ├── 🤖 ai_service/
│ │ │ │ ├── 🔐 auth_service/
│ │ │ │ ├── 📅 booking_service/
│ │ │ │ ├── 👥 customer_service/
│ │ │ │ ├── 📧 email_service/
│ │ │ │ ├── 👔 employee_service/
│ │ │ │ ├── 🎁 hotel_offer_service/
│ │ │ │ ├── 💳 payment_service/
│ │ │ │ ├── 💾 redis_service/
│ │ │ │ └── 🏠 room_service/
│ │ │ ├── 📁 utils/
│ │ │ │ ├── 📁 enums/
│ │ │ │ ├── 📁 interfaces/
│ │ │ │ │ ├── 🔌 APIResponse.java
│ │ │ │ │ └── 🔤 NormalizeString.java
│ │ │ │ └── ⚡ HotelSystemManagementApplication.java
│ │ └── 📁 resources/
│ │ ├── 📁 static/ # CSS, JS, images
│ │ ├── 📁 templates/
│ │ │ ├── 📧 booking-confirmation.html
│ │ │ └── 📧 otp-email.html
│ │ ├── ⚙️ application.yaml
│ │ ├── 🔒 application-secret.yaml
│ │ └── 🔐 keystore.jks
│ └── 📁 test/
│ └── 📁 java/
│ └── 📁 com.humg.HotelSystemManagement/
│ ├── ✅ HotelSystemManagementApplicationTests.java
│ └── ✅ JasyptDecryptorTest.java
├── 📁 target/ # Build output
├── 📄 .gitattributes
├── 📄 .gitignore
├── 📄 HELP.md
├── 📄 HotelSystemManagement.iml
├── 🐧 mvnw # Maven wrapper (Unix)
├── 🪟 mvnw.cmd # Maven wrapper (Windows)
├── 📦 pom.xml
├── 📄 qodana.yaml
├── 📖 README.md
└── 🚀 start-app.bat # Script khởi động ứng dụng
Dự án được tổ chức theo Kiến trúc phân tầng (Layered Architecture) với 11 modules độc lập:
| Module | Icon | Chức năng |
|---|---|---|
| admin_service | 👤 | Quản lý admin và phân quyền hệ thống |
| ai_service | 🤖 | Tích hợp AI (Gemini) cho chatbot & hỗ trợ |
| auth_service | 🔐 | Xác thực, phân quyền và JWT token |
| booking_service | 📅 | Quản lý đặt phòng và lịch trình |
| customer_service | 👥 | Quản lý thông tin khách hàng |
| email_service | 📧 | Gửi email thông báo tự động |
| employee_service | 👔 | Quản lý nhân viên khách sạn |
| hotel_offer_service | 🎁 | Quản lý ưu đãi và khuyến mãi |
| payment_service | 💳 | Xử lý thanh toán (PayPal, ZaloPay) |
| redis_service | 💾 | Cache và quản lý session |
| room_service | 🏠 | Quản lý phòng và loại phòng |
PowerShell script trong thư mục
scripts/
Chức năng:
- ✅ Kiểm tra
ngrok.exetạiC:\ngrok\ngrok.exe - 🚀 Khởi động ngrok tunnel port 8443 (background)
- 🔗 Lấy HTTPS URL từ API (http://localhost:4040/api/tunnels)
- 📝 Tự động cập nhật
callback-urltrongapplication.yaml - 🌍 Set biến môi trường
NGROK_URL
Script khởi động trong thư mục root
Chức năng:
- 🔗 Tự động gọi
start-ngrok.ps1 - ⚡ Khởi động Spring Boot application
Base URL:
https://localhost:8443
POST /auth/login - Đăng nhập
POST /auth/register - Đăng ký tài khoản
POST /auth/refresh - Làm mới token
POST /payment/paypal/create - Tạo thanh toán PayPal
POST /payment/zalopay/create - Tạo thanh toán ZaloPay
POST /zalopay/callback - ZaloPay webhook callback
# Kiểm tra Redis container
docker ps -a
# Xem logs
docker logs hotel-redis
# Restart container
docker restart hotel-redis# Script tự động khởi động lại ngrok khi chạy app
# Hoặc khởi động thủ công:
.\scripts\start-ngrok.bat
# Chạy trực tiếp PowerShell:
powershell -ExecutionPolicy Bypass -File .\scripts\start-ngrok.ps1💡 Lưu ý: Callback URL sẽ tự động cập nhật trong
application.yaml
- ✅ Đảm bảo
keystore.jkstrongsrc/main/resources/ - ✅ Kiểm tra password trong
application.yaml - ✅ Chấp nhận self-signed certificate trên browser
- ✅ Kiểm tra MySQL service đang chạy
- ✅ Verify username/password trong
application-secret.yaml - ✅ Đảm bảo database đã được tạo
MADE BY HOÀNG BÌNH ĐỊNH