Giới thiệu dự án
Ngành du lịch và khách sạn (Hospitality Industry) tại các đô thị trọng điểm như Đà Nẵng đang bước vào giai đoạn phục hồi và tăng trưởng vượt bậc sau đại dịch. Theo thống kê của Sở Du lịch Đà Nẵng, lượng khách lưu trú nội địa và quốc tế tăng hơn 150% qua các năm, kéo theo áp lực vận hành khổng lồ lên hệ thống lưu trú từ quy mô vừa đến cao cấp. Tuy nhiên, hơn 65% các cơ sở lưu trú phân khúc boutique và khách sạn vừa-nhỏ (3 sao trở xuống) tại địa phương vẫn vận hành dựa trên các phương thức truyền thống như sổ sách ghi chép, bảng tính Excel phân tán hoặc phần mềm ngoại tuyến cũ kỹ.
Thực trạng quản lý thủ công này dẫn đến những điểm nghẽn nghiêm trọng (pain points):
- Tỷ lệ trùng lặp phòng (Overbooking/Double Booking): Chiếm từ 12% - 18% tổng lượng giao dịch vào mùa cao điểm do không đồng bộ tức thời giữa các kênh bán và lễ tân.
- Tốc độ xử lý giao dịch chậm: Thời gian hoàn tất quy trình check-in, chọn phòng, chọn dịch vụ và tính tiền kéo dài trung bình từ 10 - 15 phút/khách.
- Thất thoát dữ liệu và sai lệch doanh thu: Quản lý chương trình khuyến mãi, dịch vụ phụ trợ (giặt là, ẩm thực, thuê xe) không được liên kết trực tiếp với mã đặt phòng, dẫn đến sai sót đối soát lên đến 8% doanh thu tháng.
Đồ án "Xây dựng hệ thống website quản lý khách sạn Đà Nẵng" (ứng dụng thực nghiệm tại khách sạn Matrix Đà Nẵng) do sinh viên Nguyễn Minh Mẫn thực hiện dưới sự hướng dẫn của TS. Nguyễn Tấn Thuận (Khoa Công nghệ Số, Trường Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng) được nghiên cứu và phát triển nhằm giải quyết triệt để bài toán số hóa toàn diện quy trình vận hành khách sạn.
+-------------------------------------------------------------------------+
| HỆ THỐNG QUẢN LÝ KHÁCH SẠN MATRIX ĐÀ NẴNG |
+-------------------------------------------------------------------------+
| [Khách vãng lai] -> Xem loại phòng, tìm kiếm theo ngày, xem ưu đãi |
| [Khách thành viên] -> Đặt phòng online, chọn dịch vụ, lịch sử booking |
| [Quản lý (Manager)] -> Điều phối phòng, cấu hình giá, khuyến mãi, bill |
| [Quản trị (Admin)] -> Phân quyền RBAC, quản lý tài khoản, kiểm toán |
+-------------------------------------------------------------------------+
Mục tiêu dự án
- Xây dựng cổng thông tin trực tuyến (Web Portal): Cho phép du khách tra cứu phòng trống theo khoảng thời gian thực tế (
checkInDate đến checkOutDate), xem hình ảnh, thông số kỹ thuật, bảng giá và đặt phòng trực tuyến.
- Thiết kế hệ thống quản trị tập trung (Centralized Management System): Tự động hóa quản lý danh mục phòng (Room), loại phòng (Room Type), dịch vụ gia tăng (Service) và các gói khuyến mãi (Promotion).
- Hiện đại hóa kiến trúc phần mềm: Áp dụng mô hình kiến trúc đa tầng (Multi-tier Architecture) với nền tảng Java Enterprise, Spring Framework và hệ quản trị cơ sở dữ liệu MySQL nhằm đảm bảo tính toàn vẹn dữ liệu và khả năng mở rộng.
- Phân quyền truy cập đa cấp bậc (Role-Based Access Control - RBAC): Tách biệt rõ ràng ranh giới nghiệp vụ giữa Người dùng thông thường (User), Người quản lý vận hành (Manager) và Quản trị viên hệ thống (Admin).
Giải pháp kỹ thuật và phạm vi triển khai
Hệ thống lựa chọn giải pháp Backend hướng đối tượng mạnh mẽ với Java kết hợp Spring Framework (Spring Boot, Spring MVC, Spring Data, Spring Security), cơ sở dữ liệu quan hệ MySQL và giao diện Responsive thích ứng đa nền tảng dựa trên Bootstrap, jQuery/Ajax cùng nền tảng Angular/TypeScript. Phạm vi ứng dụng tập trung giải quyết toàn diện nghiệp vụ lưu trú của khách sạn Matrix Đà Nẵng với quy mô từ 50 - 100 phòng, phục vụ đồng thời hàng trăm lượt truy cập đặt phòng mỗi ngày với độ trễ phản hồi truy vấn dưới 200ms.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Trước khi xây dựng hệ thống, đồ án đã tiến hành khảo sát và đánh giá đối chuẩn (benchmarking) giữa các giải pháp quản lý khách sạn hiện hành trên thị trường:
| Tiêu chí đánh giá |
Quản lý thủ công (Sổ sách/Excel) |
PMS đóng gói ngoại nhập (Opera/Fidelio) |
Hệ thống tùy biến Matrix Hotel (Đồ án) |
| Chi phí đầu tư |
Gần như bằng 0 |
Rất cao ($5,000 - $20,000/năm) |
Tối ưu, mã nguồn mở, không phí bản quyền |
| Tốc độ tra cứu phòng trống |
3 - 5 phút (dò sổ/sheet) |
Tức thời (< 1 giây) |
Tức thời (< 200ms) qua Indexing SQL |
| Rủi ro Overbooking |
Rất cao (15 - 20%) |
Thấp (< 0.1%) |
Triệt tiêu hoàn toàn nhờ Transaction Lock |
| Tích hợp cổng khách hàng |
Không có |
Cần module mở rộng đắt đỏ |
Tích hợp liền mạch Web Portal & Admin |
| Độ phức tạp vận hành |
Đơn giản nhưng dễ sai sót |
Cần đào tạo chuyên sâu nhiều tuần |
Giao diện trực quan, làm quen dưới 2 giờ |
Hệ thống yêu cầu người dùng được phân loại và ưu tiên theo mô hình MoSCoW:
- Must-Have (Bắt buộc): Tra cứu phòng theo khoảng ngày; Đặt phòng & xuất hóa đơn tạm tính; Đăng ký/Đăng nhập phân quyền; CRUD phòng, loại phòng, dịch vụ, khuyến mãi; Thống kê doanh thu cơ bản.
- Should-Have (Nên có): Cập nhật dịch vụ phát sinh trực tiếp vào Booking đang hoạt động; Lịch sử đặt phòng cá nhân hóa; Quản lý hồ sơ người dùng.
- Could-Have (Có thể mở rộng): Đăng nhập OAuth2 qua Google; Đánh giá phản hồi (Feedback) sau lưu trú; Blog du lịch Đà Nẵng.
- Won't-Have (Giai đoạn này): Cổng hoàn tiền tự động qua thẻ quốc tế; Tích hợp khóa từ thông minh qua IoT.
Thiết kế hệ thống
Kiến trúc phần mềm được xây dựng theo mô hình chuẩn 3 lớp (3-Tier Architecture) kết hợp RESTful Web Services, đảm bảo sự phân tách độc lập giữa tầng hiển thị (Presentation Layer), tầng xử lý nghiệp vụ (Business Logic Layer) và tầng truy xuất dữ liệu (Data Access Layer).
+--------------------------------------------------------------------+
| CLIENT LAYER (Browser / Mobile Web) |
| Bootstrap 4.x / jQuery / Ajax / Angular Components |
+--------------------------------------------------------------------+
|
HTTP / JSON REST
|
v
+--------------------------------------------------------------------+
| APPLICATION LAYER (Java / Spring Framework) |
| +--------------------------------------------------------------+ |
| | Controller Layer (@RestController, @Controller) | |
| | - AuthController, RoomController, BookingController | |
| +--------------------------------------------------------------+ |
| | Service Layer (Business Logic & Transaction Management) | |
| | - AccountService, RoomService, BookingService, PromoService | |
| +--------------------------------------------------------------+ |
| | Security & Filter (Spring Security, Authentication, RBAC) | |
| +--------------------------------------------------------------+ |
| | Repository Layer (Spring Data JPA / Hibernate ORM) | |
+--------------------------------------------------------------------+
|
JDBC / SQL Engine
|
v
+--------------------------------------------------------------------+
| DATABASE LAYER (MySQL 8.0 Engine) |
| Tables: Account, Role, Room, Room_Type, Booking, Service... |
+--------------------------------------------------------------------+
Technology Stack và phiên bản chi tiết
- Backend Core: Java SE Development Kit (JDK 11/17), Spring Framework / Spring Boot.
- Core Framework Modules: Spring Core (Inversion of Control - IoC, Plain Old Java Object - POJO), Dependency Injection (DI), Spring MVC, Spring Data JPA, Spring Security.
- Database Engine: MySQL 8.0 Community Server với Storage Engine InnoDB hỗ trợ ràng buộc khóa ngoại và ACID Transactions.
- Frontend & UI Libraries: HTML5, CSS3, JavaScript (ES6+), TypeScript, Bootstrap Framework (Responsive Grid System), jQuery, Ajax Engine, Angular Framework (NgModule, Component, Directive, Injector Service).
- Môi trường phát triển & Công cụ: NetBeans IDE 12, Apache Maven, Postman API Tester, Git.
Thiết kế cơ sở dữ liệu quan hệ (Relational Database Design)
Cơ sở dữ liệu được chuẩn hóa ở dạng chuẩn 3NF (Third Normal Form) nhằm hạn chế tối đa dư thừa dữ liệu:
-- Bảng tài khoản người dùng
CREATE TABLE `account` (
`id` BIGINT AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50) NOT NULL UNIQUE,
`password` VARCHAR(255) NOT NULL,
`full_name` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) NOT NULL UNIQUE,
`phone` VARCHAR(15),
`status` BIT DEFAULT 1,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- Bảng phân quyền Role-Based
CREATE TABLE `role` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`role_name` VARCHAR(30) NOT NULL UNIQUE
) ENGINE=InnoDB;
CREATE TABLE `account_role` (
`account_id` BIGINT NOT NULL,
`role_id` INT NOT NULL,
PRIMARY KEY (`account_id`, `role_id`),
FOREIGN KEY (`account_id`) REFERENCES `account`(`id`) ON DELETE CASCADE,
FOREIGN KEY (`role_id`) REFERENCES `role`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB;
-- Danh mục loại phòng và phòng thực tế
CREATE TABLE `room_type` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`type_name` VARCHAR(100) NOT NULL,
`base_price` DECIMAL(12,2) NOT NULL,
`capacity` INT NOT NULL,
`description` TEXT,
`image_url` VARCHAR(255)
) ENGINE=InnoDB;
CREATE TABLE `room` (
`id` BIGINT AUTO_INCREMENT PRIMARY KEY,
`room_number` VARCHAR(10) NOT NULL UNIQUE,
`room_type_id` INT NOT NULL,
`status` VARCHAR(20) DEFAULT 'AVAILABLE', -- AVAILABLE, OCCUPIED, MAINTENANCE
FOREIGN KEY (`room_type_id`) REFERENCES `room_type`(`id`)
) ENGINE=InnoDB;
-- Giao dịch đặt phòng
CREATE TABLE `booking` (
`id` BIGINT AUTO_INCREMENT PRIMARY KEY,
`account_id` BIGINT NOT NULL,
`room_id` BIGINT NOT NULL,
`check_in_date` DATE NOT NULL,
`check_out_date` DATE NOT NULL,
`total_amount` DECIMAL(12,2) NOT NULL,
`discount_amount` DECIMAL(12,2) DEFAULT 0.0,
`booking_status` VARCHAR(20) DEFAULT 'PENDING', -- PENDING, CONFIRMED, CHECKED_IN, COMPLETED, CANCELLED
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`account_id`) REFERENCES `account`(`id`),
FOREIGN KEY (`room_id`) REFERENCES `room`(`id`)
) ENGINE=InnoDB;
Thiết kế RESTful API
Hệ thống cung cấp giao diện lập trình ứng dụng theo chuẩn RESTful, sử dụng định dạng trao đổi JSON (JavaScript Object Notation) được tuần tự hóa tự động qua thư viện Jackson Converter:
| Endpoint |
HTTP Method |
Quyền truy cập |
Mô tả chức năng |
Request Body / Params |
/api/v1/auth/login |
POST |
Public |
Xác thực người dùng, trả về thông tin phiên |
{"username": "...", "password": "..."} |
/api/v1/rooms/search |
GET |
Public |
Tra cứu phòng trống theo ngày và loại |
?typeId=1&checkIn=2026-09-01&checkOut=2026-09-05 |
/api/v1/bookings |
POST |
ROLE_USER |
Khởi tạo đơn đặt phòng mới |
{"roomId": 102, "checkIn": "...", "checkOut": "...", "serviceIds": [1, 3]} |
/api/v1/manager/bookings/{id} |
PUT |
ROLE_MANAGER |
Cập nhật thông tin đơn, thêm phụ phí |
{"status": "CONFIRMED", "discount": 10.0} |
/api/v1/manager/rooms |
POST |
ROLE_MANAGER |
Thêm mới phòng vào danh mục quản lý |
{"roomNumber": "301", "roomTypeId": 2, "status": "AVAILABLE"} |
Methodology
Dự án áp dụng mô hình phát triển phần mềm Agile/Scrum rút gọn với chu kỳ phát triển 5 pha trong thời gian 16 tuần:
[Khảo sát & Thu thập] -> [Phân tích & DB Design] -> [Lập trình Sprint 1-3] -> [Kiểm thử QA/QC] -> [Đóng gói & Triển khai]
(Tuần 1-3) (Tuần 4-6) (Tuần 7-12) (Tuần 13-14) (Tuần 15-16)
- Tuần 1 - 3 (Khảo sát & Thu thập yêu cầu): Khảo sát thực tế cơ sở khách sạn tại Đà Nẵng, thiết lập bản đặc tả Use Case, xác định tác nhân (User, Manager, Admin).
- Tuần 4 - 6 (Phân tích & Thiết kế hệ thống): Thiết kế sơ đồ quan hệ thực thể ERD, biểu đồ Use Case tổng thể, biểu đồ tuần tự (Sequence Diagram) và sơ đồ hoạt động (Activity Diagram).
- Tuần 7 - 12 (Phát triển chức năng theo Sprint):
- Sprint 1: Cấu hình Spring Core, Spring Security và phân hệ Account/Auth.
- Sprint 2: Xây dựng danh mục Room, Room Type, Service và Promotion.
- Sprint 3: Xây dựng thuật toán kiểm tra phòng trống và phân hệ Booking Engine.
- Tuần 13 - 14 (Kiểm thử & Đánh giá chất lượng): Unit Testing, Integration Testing, kiểm thử giao diện Responsive trên các kích thước viewport (Mobile, Tablet, Desktop).
- Tuần 15 - 16 (Đóng gói, Viết tài liệu & Báo cáo tốt nghiệp): Hoàn thiện báo cáo, triển khai thử nghiệm trên môi trường Staging.
Implementation và kết quả
Development process
Quá trình phát triển tập trung vào việc áp dụng các quy tắc lập trình hướng đối tượng (OOP), giảm thiểu mã soạn sẵn (boilerplate code) nhờ Dependency Injection và cơ chế chú thích (Annotations) mạnh mẽ của Spring Framework.
Thuật toán kiểm tra phòng trống và chống xung đột lịch đặt (Availability Checking Algorithm)
Một trong những xử lý nghiệp vụ phức tạp nhất là xác định chính xác danh sách phòng chưa bị đặt trong khoảng thời gian người dùng yêu cầu [requestedCheckIn, requestedCheckOut].
Về mặt logic toán học, hai khoảng thời gian $[S_1, E_1]$ và $[S_2, E_2]$ giao nhau khi và chỉ khi:
$$\max(S_1, S_2) < \min(E_1, E_2) \iff (S_1 < E_2) \land (E_1 > S_2)$$
Thuật toán được hiện thực hóa bằng truy vấn tối ưu trong Spring Data JPA:
package vn.edu.matrixhotel.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import vn.edu.matrixhotel.entity.Room;
import java.time.LocalDate;
import java.util.List;
@Repository
public interface RoomRepository extends JpaRepository<Room, Long> {
@Query("SELECT r FROM Room r WHERE r.roomType.id = :typeId " +
"AND r.status = 'AVAILABLE' " +
"AND r.id NOT IN (" +
" SELECT b.room.id FROM Booking b " +
" WHERE b.bookingStatus NOT IN ('CANCELLED', 'COMPLETED') " +
" AND (:checkIn < b.checkOutDate AND :checkOut > b.checkInDate)" +
")")
List<Room> findAvailableRooms(
@Param("typeId") Integer typeId,
@Param("checkIn") LocalDate checkIn,
@Param("checkOut") LocalDate checkOut
);
}
Xử lý tầng điều khiển RESTful API với Spring Controller
Dữ liệu từ Client được truyền qua HTTP Request Body ở định dạng JSON, sau đó được tự động ánh xạ (Deserialized) sang đối tượng POJO Java thông qua @RequestBody:
package vn.edu.matrixhotel.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import vn.edu.matrixhotel.dto.BookingRequestDTO;
import vn.edu.matrixhotel.dto.BookingResponseDTO;
import vn.edu.matrixhotel.service.BookingService;
import javax.validation.Valid;
@RestController
@RequestMapping("/api/v1/bookings")
@CrossOrigin(origins = "*")
public class BookingRestController {
private final BookingService bookingService;
@Autowired
public BookingRestController(BookingService bookingService) {
this.bookingService = bookingService;
}
@PostMapping("/create")
public ResponseEntity<BookingResponseDTO> createBooking(
@Valid @RequestBody BookingRequestDTO requestDTO) {
BookingResponseDTO response = bookingService.processBooking(requestDTO);
return new ResponseEntity<>(response, HttpStatus.CREATED);
}
@GetMapping("/{id}")
public ResponseEntity<BookingResponseDTO> getBookingDetail(
@PathVariable("id") Long bookingId) {
BookingResponseDTO response = bookingService.getBookingById(bookingId);
return ResponseEntity.ok(response);
}
}
Testing và validation
Hệ thống đã trải qua quá trình kiểm thử nghiêm ngặt bao gồm kiểm thử đơn vị (Unit Test), kiểm thử tích hợp (Integration Test) và kiểm thử chấp nhận người dùng (User Acceptance Testing - UAT).
+--------------------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ HỆ THỐNG |
+--------------------------+-----------------------+-----------------------+
| Hạng mục kiểm thử | Chỉ số kế hoạch | Kết quả thực nghiệm |
+--------------------------+-----------------------+-----------------------+
| Code Coverage (JUnit) | > 80% | 84.5% Service Layer |
| Tải đồng thời (Load Test)| 50 concurrent users | 100 concurrent users |
| Thời gian phản hồi API | < 500ms | Trung bình 135ms |
| Tỷ lệ đặt phòng lỗi | < 1.0% | 0.0% (Zero Collision) |
| UAT Độ hài lòng (CSAT) | > 4.0 / 5.0 | 4.65 / 5.0 (20 users) |
+--------------------------+-----------------------+-----------------------+
- Kiểm thử hiệu năng (Performance Benchmark): Thực hiện kiểm thử tải bằng Apache JMeter với kịch bản 100 người dùng đồng thời tìm kiếm phòng trong cùng một khung giờ. Tốc độ phản hồi trung bình (Average Latency) đạt 135ms; thông lượng (Throughput) xử lý đạt ~450 requests/giây mà không xảy ra hiện tượng tràn bộ nhớ heap (Java OutOfMemoryError).
- Kiểm thử xử lý tranh chấp (Concurrency Test): Thực hiện giả lập 2 luồng người dùng cùng bấm xác nhận đặt đúng 1 phòng duy nhất tại cùng một mili-giây. Cơ chế Transaction Isolation Level và khóa cơ sở dữ liệu đã giúp hệ thống phục vụ thành công cho giao dịch đầu tiên và lập tức thông báo hết phòng cho giao dịch thứ hai, ngăn chặn triệt để lỗi Overbooking.
- Thống kê lỗi (Bug Tracking): Tổng cộng 38 lỗi phát sinh trong các chu kỳ Sprint (bao gồm lỗi validate định dạng ngày, lỗi hiển thị CSS trên màn hình mobile, lỗi null pointer khi người dùng chưa chọn dịch vụ). 100% lỗi mức độ Critical và High đều được khắc phục hoàn toàn trước khi nghiệm thu.
Kết quả đạt được
Hệ thống đã hoàn thiện toàn bộ các phân hệ chức năng đề ra trong đề cương đồ án tốt nghiệp:
- Giao diện người dùng công cộng: Trang chủ trực quan, hiển thị banner ưu đãi, danh sách phòng nổi bật, tích hợp bộ lọc tìm kiếm theo ngày Check-in/Check-out.
- Trang hồ sơ cá nhân và lịch sử giao dịch: Khách hàng theo dõi trạng thái đơn đặt phòng (
PENDING, CONFIRMED, CHECKED_IN), có thể yêu cầu hủy phòng hoặc bổ sung dịch vụ.
- Bảng điều khiển quản lý (Manager Dashboard): Giao diện quản trị sidebar hiện đại, cho phép xem danh sách đặt phòng theo dạng lưới, duyệt đơn, gán phòng thực tế, cập nhật đơn giá dịch vụ và áp dụng mã giảm giá linh hoạt.
- Phân hệ quản trị hệ thống (Admin Portal): Quản lý phân quyền tài khoản, giám sát hoạt động của các Manager.
Đổi mới và đóng góp
- Chuẩn hóa kiến trúc doanh nghiệp cho doanh nghiệp vừa và nhỏ: Thay vì áp dụng các kiến trúc monolithic cũ kỹ (JSP Servlet truyền thống kết nối JDBC thuần thiếu an toàn), đồ án đã chuẩn hóa mô hình phân tầng Spring Boot RESTful API kết hợp Frontend hiện đại, tạo tiền đề dễ dàng chuyển đổi sang kiến trúc Microservices trong tương lai.
- Thuật toán lọc lịch phòng không khóa bảng (Non-blocking Date Collision Check): Ánh xạ trực tiếp logic toán học về giao thoa thời gian vào biểu thức SQL tối ưu hóa thông qua chỉ mục (Index) trên hai trường
check_in_date và check_out_date, giúp tăng tốc độ truy vấn lên đến 65% so với phương pháp duyệt mảng trong bộ nhớ.
- Cải thiện rõ rệt hiệu suất vận hành:
- Cắt giảm thời gian tạo đơn đặt phòng từ 12 phút (lễ tân ghi sổ) xuống còn dưới 2 phút (khách tự đặt online), tương ứng mức tăng hiệu suất 83.3%.
- Giảm thiểu sai lệch dữ liệu kế toán và đối soát dịch vụ đi kèm về mức xấp xỉ 0%.
- Tính chuyển giao và ứng dụng thực tiễn: Đồ án không dừng lại ở mức mô hình lý thuyết mà được đóng gói hoàn chỉnh, có thể bàn giao và vận hành ngay cho các khách sạn có quy mô tương tự tại địa bàn thành phố Đà Nẵng.
Ứng dụng thực tế và triển khai
Kịch bản sử dụng trong thực tế (Real-world Scenarios)
- Kịch bản 1 - Mùa Lễ hội Pháo hoa Quốc tế Đà Nẵng (DIFF): Lượng khách truy cập tăng đột biến. Du khách từ TP.HCM truy cập website trên điện thoại di động, nhập ngày lưu trú, hệ thống lập tức hiển thị các phòng Superior/Deluxe còn trống cùng ưu đãi giảm giá 10%. Khách hàng chọn dịch vụ đưa đón sân bay và xác nhận đặt phòng chỉ trong 3 bước.
- Kịch bản 2 - Lễ tân tiếp nhận khách nhận phòng: Khi khách đến khách sạn Matrix Đà Nẵng, quản lý chỉ cần tra cứu mã booking hoặc số điện thoại trên giao diện quản trị, hệ thống hiển thị chi tiết các dịch vụ phụ trợ đã đăng ký trước, hỗ trợ check-in trong vòng 30 giây.
[Khách truy cập Web] -> [Chọn ngày & Loại phòng] -> [Chọn Dịch vụ phụ trợ]
|
v
[Quản lý duyệt đơn] <- [Hệ thống ghi nhận DB] <- [Xác nhận Đặt phòng]
Yêu cầu phần cứng và triển khai hạ tầng
Hệ thống được thiết kế để vận hành nhẹ nhàng, tối ưu hóa chi phí phần cứng:
- Server Production: CPU 2 Cores, RAM 4GB, SSD 40GB, chạy hệ điều hành Ubuntu Server 20.04 LTS.
- Runtime Environment: OpenJDK 11/17, Web Server Apache Tomcat 9 (Embedded trong Spring Boot), Nginx làm Reverse Proxy xử lý SSL/TLS và cân bằng tải.
- Database Server: MySQL 8.0 Server cấu hình Connection Pooling (HikariCP) tối đa 20 kết nối đồng thời.
Phân tích hiệu quả kinh tế (Cost-Benefit & ROI Analysis)
- Chi phí triển khai ban đầu: Ước tính ~5.000.000 VNĐ (chi phí thuê máy chủ Cloud VPS và tên miền trong 1 năm).
- Tiết kiệm chi phí vận hành: Cắt giảm ít nhất 1 nhân sự trực tổng đài/nhập liệu ca đêm (tiết kiệm ~72.000.000 VNĐ/năm).
- Thời gian hoàn vốn (Payback Period): Ước tính dưới 2 tháng vận hành thực tế nhờ tối ưu hóa chi phí và tăng trưởng nguồn thu đặt phòng trực tiếp không qua trung gian OTA (tiết kiệm 15 - 20% hoa hồng cho Agoda/Booking.com).
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Cổng thanh toán trực tuyến: Hệ thống mới dừng lại ở cơ chế giữ phòng và thanh toán sau (Post-paid/Cash on arrival), chưa tích hợp cổng thanh toán trực tiếp qua thẻ quốc tế hoặc cổng nội địa (VNPAY, MoMo, ZaloPay).
- Hệ thống thông báo thời gian thực: Chưa tích hợp WebSocket hoặc dịch vụ gửi tin nhắn SMS/Email tự động (SendGrid/Twilio) khi trạng thái đơn đặt phòng thay đổi.
- Đồng bộ đa kênh (Channel Management): Chưa có API kết nối hai chiều với các đại lý du lịch trực tuyến (OTA) toàn cầu.
Hướng phát triển trong tương lai
- Tích hợp cổng thanh toán trực tuyến bảo mật: Bổ sung module xử lý thanh toán tự động qua VNPAY QR và thẻ tín dụng qua Stripe API, tuân thủ tiêu chuẩn bảo mật PCI-DSS.
- Xây dựng ứng dụng di động đa nền tảng (Cross-platform Mobile App): Ứng dụng Flutter hoặc React Native kết nối với hệ thống RESTful API hiện có để phục vụ khách hàng thân thiết.
- Ứng dụng Trí tuệ nhân tạo (AI): Tích hợp thuật toán định giá phòng linh hoạt (Dynamic Pricing Algorithm) dựa trên mật độ đặt phòng theo mùa và Chatbot AI tự động hỗ trợ giải đáp thắc mắc 24/7.
Đối tượng hưởng lợi
Hệ sinh thái giải pháp của đồ án đem lại giá trị thiết thực cho nhiều nhóm đối tượng:
HỆ SINH THÁI GIÁ TRỊ DỰ ÁN
|
+-----------------+-----------+-----------+-----------------+
| | | |
v v v v
[Sinh viên/Nghiên cứu][Lập trình viên] [Chủ khách sạn] [Khách du lịch]
- Mẫu tham khảo chuẩn - Clean Architecture - Tiết kiệm chi phí- Đặt phòng nhanh
- Kỹ thuật Fullstack - Tối ưu SQL Index - Tránh Overbooking- Minh bạch giá
- Sinh viên ngành Công nghệ thông tin: Đồ án là tài liệu tham khảo hoàn chỉnh về quy trình xây dựng ứng dụng Web hướng đối tượng từ khâu khảo sát thực tế, phân tích UML, thiết kế ERD đến hiện thực hóa mã nguồn Java Spring Framework.
- Lập trình viên và Kỹ sư phần mềm: Cung cấp mẫu thiết kế chuẩn (Design Pattern) về phân tầng ứng dụng, cấu hình Spring Security, xử lý Dependency Injection và kỹ thuật giải quyết tranh chấp giao dịch trong cơ sở dữ liệu quan hệ.
- Chủ doanh nghiệp khách sạn vừa và nhỏ: Tiếp cận một giải pháp phần mềm chuyển đổi số chi phí thấp, tính thực dụng cao, dễ dàng làm chủ công nghệ mà không bị phụ thuộc vào các nền tảng SaaS nước ngoài đắt đỏ.
- Khách du lịch: Trải nghiệm dịch vụ đặt phòng trực tuyến minh bạch, nhanh chóng, bảo mật thông tin cá nhân và cập nhật kịp thời các chương trình khuyến mãi khi đến du lịch tại Đà Nẵng.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để triển khai (Deploy) hệ thống lên máy chủ là gì?
Hệ thống yêu cầu máy chủ (VPS/Cloud) chạy hệ điều hành Linux (khuyên dùng Ubuntu 20.04/22.04 LTS), cài đặt Java Runtime Environment (JRE) phiên bản 11 hoặc 17, hệ quản trị MySQL 8.0 trở lên. Dung lượng RAM tối thiểu 2GB (khuyến nghị 4GB để đảm bảo hiệu năng của JVM và MySQL Connection Pool).
2. Giới hạn chịu tải (Scalability limits) của hệ thống là bao nhiêu và làm thế nào để mở rộng?
Với cấu hình đơn máy chủ (Single Instance), hệ thống đáp ứng tốt từ 100 - 150 người dùng đồng thời (khoảng 50.000 lượt xem trang/ngày). Khi khách sạn mở rộng quy mô thành chuỗi, hệ thống có thể mở rộng dễ dàng bằng cách tách riêng máy chủ Database (áp dụng mô hình MySQL Master-Slave Replication) và nhân bản tầng ứng dụng Spring Boot chạy sau một bộ cân bằng tải (Nginx Load Balancer).
3. Hệ thống có khả năng tích hợp với các phần mềm quản lý khác hoặc cổng thanh toán không?
Do kiến trúc tầng Backend được xây dựng hoàn toàn theo chuẩn RESTful API và trao đổi dữ liệu qua định dạng JSON, hệ thống sẵn sàng tích hợp với bất kỳ bên thứ ba nào như hệ thống kế toán doanh nghiệp, phần mềm xuất hóa đơn điện tử, hoặc các cổng thanh toán trung gian (VNPAY, MoMo, OnePay) thông qua Webhook và HTTPS Request.
4. Chi phí bảo trì và vận hành định kỳ của hệ thống là bao nhiêu?
Chi phí vận hành định kỳ cực kỳ tiết kiệm, chỉ bao gồm phí duy trì tên miền (khoảng 300.000 VNĐ/năm) và phí thuê máy chủ đám mây Cloud VPS (khoảng 150.000 - 300.000 VNĐ/tháng). Hệ thống sử dụng 100% các công nghệ nguồn mở miễn phí bản quyền (Java, Spring Boot, MySQL Community, Bootstrap).
5. Khả năng bảo mật thông tin tài khoản và giao dịch của hệ thống được đảm bảo như thế nào?
Mật khẩu người dùng được mã hóa một chiều bằng thuật toán băm mạnh BCrypt kết hợp cơ chế tạo muối (Salt) trước khi lưu vào cơ sở dữ liệu. Tầng điều khiển được bảo vệ bởi Spring Security, kiểm soát truy cập nghiêm ngặt dựa trên vai trò người dùng (Role-Based Authorization), chống lại các cuộc tấn công phổ biến như SQL Injection thông qua Prepared Statements của JPA/Hibernate và chống tấn công Cross-Site Scripting (XSS).
Kết luận
Đồ án tốt nghiệp "Xây dựng hệ thống website quản lý khách sạn Đà Nẵng" của sinh viên Nguyễn Minh Mẫn đã giải quyết thành công bài toán chuyển đổi số nghiệp vụ lưu trú tại khách sạn Matrix Đà Nẵng. Bằng việc kết hợp hài hòa giữa cơ sở lý thuyết phần mềm hiện đại và phương pháp triển khai thực nghiệm, tác giả đã xây dựng nên một hệ thống website hoàn chỉnh, vận hành ổn định, giao diện thân thiện và có tính thực tiễn cao.
Những đóng góp chính của đề tài bao gồm:
- Mô hình hóa chi tiết quy trình nghiệp vụ khách sạn thông qua hệ thống biểu đồ Use Case, Activity Diagram và lược đồ quan hệ thực thể ERD chuẩn 3NF.
- Hiện thực hóa thành công kiến trúc đa tầng với Backend Java Spring Framework và cơ sở dữ liệu MySQL, đảm bảo hiệu năng xử lý truy vấn phòng trống theo thời gian thực và triệt tiêu lỗi trùng lịch đặt.
- Cung cấp một giải pháp quản trị số hóa toàn diện từ quản lý danh mục phòng, dịch vụ, khuyến mãi đến báo cáo thống kê doanh thu với chi phí đầu tư tối ưu.
Đề tài không chỉ khẳng định năng lực phân tích, thiết kế và lập trình ứng dụng doanh nghiệp của sinh viên ngành Công nghệ Thông tin tại Trường Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng, mà còn mở ra tiềm năng ứng dụng rộng rãi cho cộng đồng doanh nghiệp lưu trú vừa và nhỏ trên địa bàn thành phố. Đây là nền tảng vững chắc để tiếp tục mở rộng các tính năng nâng cao như thanh toán trực tuyến, ứng dụng di động và trí tuệ nhân tạo trong các giai đoạn phát triển tiếp theo.