Giới thiệu dự án
Trong bối cảnh bùng nổ của cuộc Cách mạng Công nghiệp 4.0 và xu hướng chuyển đổi số trong ngành du lịch - lưu trú (Hospitality Tech), nhu cầu tìm kiếm phòng nghỉ linh hoạt theo thời gian thực tăng trưởng với tốc độ hơn 22% mỗi năm tại khu vực Đông Nam Á. Tuy nhiên, thị trường dịch vụ trực tuyến hiện nay đang tồn tại sự phân hóa rõ rệt: các nền tảng OTA (Online Travel Agency) lớn như Booking.com, Agoda hay Traveloka hầu hết tập trung vào phân khúc khách sạn từ trung đến cao cấp. Trong khi đó, phân khúc khách sạn bình dân, nhà nghỉ, nhà trọ và homestay tự phát phục vụ đối tượng sinh viên, dân du lịch bụi (backpackers) hoặc người có thu nhập trung bình lại bị phân mảnh nghiêm trọng. Thông tin phòng trọ thường chỉ được đăng tải rải rác trên các hội nhóm mạng xã hội, diễn đàn thiếu kiểm chứng, không có định vị tọa độ chuẩn xác và thiếu minh bạch về giá cả cũng như chất lượng thực tế.
+-------------------------------------------------------------------------+
| BỐI CẢNH & VẤN ĐỀ |
| - 70%+ khách du lịch trẻ tìm kiếm phòng cận giờ (last-minute booking) |
| - Phân khúc bình dân/nhà trọ thiếu hệ thống dữ liệu tập trung |
| - Over-fetching dữ liệu trên mạng di động băng thông thấp |
+-------------------------------------------------------------------------+
│
▼
+-------------------------------------------------------------------------+
| GIẢI PHÁP HỆ THỐNG |
| 1. Thu thập & chuẩn hóa dữ liệu tự động (Selenium WebDriver) |
| 2. Kiến trúc Backend hiệu năng cao: Spring Boot + MySQL |
| 3. Tối ưu hóa truy vấn Client-Server bằng GraphQL |
| 4. Tích hợp trọn bộ Google Maps Platform (Maps, Places, Directions) |
| 5. Ứng dụng đa nền tảng: Web Responsive + Android Native |
+-------------------------------------------------------------------------+
Đồ án tốt nghiệp "Thiết kế hệ thống tìm kiếm khách sạn, nhà trọ" của nhóm tác giả Trần Quang Huy và Tạ Anh Tú (Khoa Kỹ thuật Điện tử - Viễn thông, Trường Đại học Bách Khoa Hà Nội, dưới sự hướng dẫn của TS. Nguyễn Tiến Hòa) được triển khai nhằm giải quyết trực diện bài toán kết nối cung - cầu trong phân khúc lưu trú bình dân tại Việt Nam.
Hệ thống đặt ra 5 mục tiêu cốt lõi:
- Xây dựng module Data Crawler tự động: Thu thập, trích xuất và chuẩn hóa dữ liệu phòng nghỉ, khách sạn từ các nguồn dữ liệu trực tuyến (điển hình như Trivago) sử dụng Selenium WebDriver.
- Thiết kế kiến trúc Backend đa nhiệm: Xây dựng hệ thống máy chủ trên nền tảng Java Spring Boot kết hợp Spring Security và hệ quản trị cơ sở dữ liệu MySQL, cung cấp API linh hoạt thông qua chuẩn GraphQL.
- Phát triển giao diện Client đa nền tảng: Xây dựng đồng thời giao diện Web Responsive và ứng dụng di động Android Native, tối ưu hóa trải nghiệm người dùng trên mọi kích thước màn hình.
- Tích hợp dịch vụ không gian địa lý (GIS): Khai thác toàn diện Google Maps Platform (Maps API, Places API, Directions API, Geocoding API) để hỗ trợ định vị theo thời gian thực, tự động hoàn thiện địa chỉ và chỉ dẫn đường đi.
- Xây dựng hệ thống quản lý và tương tác cộng đồng: Cung cấp cổng thông tin cho chủ nhà trọ đăng tin cho thuê và module đánh giá, nhận xét (Review & Rating) minh bạch cho khách thuê.
Về phạm vi và giới hạn, hệ thống tập trung dữ liệu tại các đô thị lớn và điểm du lịch trọng điểm tại Việt Nam. Trong giai đoạn này, hệ thống tập trung vào việc tra cứu, định vị, xác thực thông tin và điều hướng, chưa tích hợp cổng thanh toán trực tuyến trung gian (payment gateway).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát các giải pháp công nghệ hiện hữu cho thấy rõ khoảng trống công nghệ và thị trường mà đồ án hướng tới:
| Tiêu chí so sánh |
Nền tảng OTA quốc tế (Traveloka, Booking) |
Trang rao vặt (Chợ Tốt, Batdongsan) |
Hệ thống tìm kiếm Khách sạn - Nhà trọ |
| Phân khúc mục tiêu |
Khách sạn 2 - 5 sao, Resort |
Mọi loại bất động sản |
Khách sạn bình dân, nhà nghỉ, nhà trọ, homestay |
| Cơ chế thu thập dữ liệu |
Đối tác tự đăng ký qua extranet |
Người dùng đăng thủ công |
Tự động crawl (Selenium) + Người dùng đăng tin |
| Giao thức truyền tải API |
RESTful API truyền thống |
RESTful API |
GraphQL API (truy vấn linh hoạt, giảm tải payload) |
| Định vị & Dẫn đường |
Bản đồ cơ bản, không tối ưu lộ trình |
Tọa độ tĩnh, không có routing |
Google Directions + Geocoding thời gian thực |
| Chi phí tích hợp & đặt phòng |
Thu phí hoa hồng cao (15 - 25%) |
Thu phí hiển thị tin VIP |
Miễn phí tiếp cận cho người dùng & chủ trọ |
Áp dụng phương pháp phân loại yêu cầu người dùng theo mô hình MoSCoW:
- Must-Have (Bắt buộc): Tìm kiếm theo tên/địa bàn; định vị GPS hiện tại; xem chi tiết phòng (giá, diện tích, tiện ích); đăng ký/đăng nhập xác thực qua Spring Security; quản lý bài đăng của chủ trọ.
- Should-Have (Nên có): Lọc nâng cao theo khoảng giá; chỉ dẫn lộ trình đường đi ngắn nhất (Directions API); đánh giá/bình luận theo số sao.
- Could-Have (Có thể có): Gợi ý địa điểm du lịch lân cận qua Places Autocomplete; báo cáo tin rác/sai sự thật đến quản trị viên.
- Won't-Have (Chưa triển khai): Cổng thanh toán ký quỹ điện tử; nhắn tin trực tiếp P2P real-time qua WebSockets.
Thiết kế hệ thống
Kiến trúc hệ thống được xây dựng theo mô hình phân tầng hướng dịch vụ (Service-Oriented Architecture), kết hợp chặt chẽ giữa Backend Spring Boot và lớp giao tiếp GraphQL:
+─────────────────────────────────────────────────────────────────────────+
| CLIENT TIER |
| ┌───────────────────────────┐ ┌───────────────────────────┐ |
| │ Web Responsive │ │ Android Mobile App │ |
| │ (HTML5/CSS3/Bootstrap) │ │ (Java, Android SDK) │ |
| └─────────────┬─────────────┘ └─────────────┬─────────────┘ |
+─────────────────┼─────────────────────────────────────┼─────────────────+
│ │
│ HTTPS / GraphQL Queries │
▼ ▼
+─────────────────────────────────────────────────────────────────────────+
| APPLICATION SERVER (BACKEND) |
| ┌───────────────────────────────────────────────────────────────────┐ |
| │ GraphQL Endpoint Layer │ |
| │ (Schema, Types, Resolvers) │ |
| └──────────────────┬───────────────────────────────┬────────────────┘ |
| │ │ |
| ┌──────────────────▼────────┐ ┌────────▼────────────────┐ |
| │ Spring Security Filter │ │ Business Logic │ |
| │ (Auth, CSRF, BCrypt, RBAC)│ │ (Hotel, Post, Review) │ |
| └──────────────────┬────────┘ └────────┬────────────────┘ |
| │ │ |
| ┌──────────────────▼───────────────────────────────▼────────────────┐ |
| │ Data Access Object (Spring Data JPA) │ |
| └──────────────────┬────────────────────────────────────────────────┘ |
+─────────────────────┼───────────────────────────────────────────────────+
│
┌─────────────┴─────────────┬─────────────────────────┐
▼ ▼ ▼
+───────────────+ +───────────────+ +─────────────────+
| DATABASE | | CRAWLER ENGINE| | GOOGLE CLOUD |
| MySQL 5.7 | | Selenium | | Maps, Places, |
| (InnoDB, UTF8)| | WebDriver | | Directions API |
+───────────────+ +───────────────+ +─────────────────+
Chi tiết công nghệ (Technology Stack)
- Backend Framework: Java 8 (OpenJDK 1.8), Spring Boot 2.0.x, Spring Data JPA, Spring Security 5.0.x.
- Data Communication: GraphQL Java Tools 5.x (truy vấn Query & Mutation thay thế REST API truyền thống).
- Database: MySQL 5.7 Community Server (Storage Engine: InnoDB, hỗ trợ Foreign Key Constraints & Transactions).
- Mobile Client: Android SDK (API Level 26: Android 8.0 Oreo), Google Play Services Location & Maps SDK.
- Automation & Crawling: Selenium WebDriver 3.14.x với Headless Chrome Driver.
Thiết kế cơ sở dữ liệu (Database Schema)
Cơ sở dữ liệu bao gồm các bảng quan hệ then chốt: users, roles, user_roles, hotels, posts, reviews.
CREATE TABLE users (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
full_name VARCHAR(100) NOT NULL,
enabled BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE roles (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE user_roles (
user_id BIGINT NOT NULL,
role_id BIGINT NOT NULL,
PRIMARY KEY (user_id, role_id),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE hotels (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT NULL,
price DOUBLE NOT NULL,
area DOUBLE NOT NULL,
latitude DOUBLE NOT NULL,
longitude DOUBLE NOT NULL,
description TEXT,
image_url VARCHAR(500),
INDEX idx_price (price),
INDEX idx_location (latitude, longitude)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE reviews (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT NOT NULL,
hotel_id BIGINT NOT NULL,
star INT CHECK (star >= 1 AND star <= 5),
comment TEXT NOT NULL,
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (hotel_id) REFERENCES hotels(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Thiết kế GraphQL API Schema
Đặc tả GraphQL Schema hỗ trợ truy vấn chính xác trường dữ liệu cần hiển thị, giải quyết triệt để vấn đề Over-fetching và Under-fetching:
type Hotel {
id: ID!
name: String!
address: String!
price: Float!
area: Float!
latitude: Float!
longitude: Float!
description: String
imageUrl: String
reviews: [Review]!
}
type Review {
id: ID!
star: Int!
comment: String!
time: String
user: User!
}
type Query {
searchHotels(keyword: String, minPrice: Float, maxPrice: Float): [Hotel]!
getHotelById(id: ID!): Hotel
}
type Mutation {
createReview(hotelId: ID!, star: Int!, comment: String!): Review!
createPost(title: String!, price: Float!, area: Float!, address: String!): Hotel!
}
Methodology
Dự án được triển khai theo mô hình phát triển phần mềm lặp Agile/Scrum với chu kỳ Sprint 2 tuần, chia làm 5 giai đoạn:
Tuần 1-2: Khởi tạo & Phân tích (UML, CRC Cards, MoSCoW)
Tuần 3-4: Xây dựng Data Pipeline & Crawler (Selenium WebDriver)
Tuần 5-7: Xây dựng Core Backend (Spring Boot, GraphQL, MySQL)
Tuần 8-10: Phát triển Ứng dụng Android & Web Client
Tuần 11-12: Tích hợp Google Maps API, Testing, UAT & Đóng gói
Quản trị rủi ro kỹ thuật:
- Rủi ro 1: Cấu trúc website nguồn thay đổi làm gãy script crawl. Giải pháp: Thiết kế bộ lọc XPath động (Dynamic XPath Fallback) và cơ chế logging chi tiết.
- Rủi ro 2: Vượt hạn mức giới hạn request của Google Maps API. Giải pháp: Caching tọa độ Geocoding vào bảng
hotels trong MySQL ngay khi crawl hoặc khi chủ trọ tạo bài đăng mới.
Implementation và kết quả
Development process
Quá trình lập trình tập trung vào việc tối ưu hóa 3 thành phần cốt lõi:
1. Xây dựng Module Crawl dữ liệu bằng Selenium WebDriver
Hệ thống sử dụng Selenium để điều khiển trình duyệt trích xuất động các thông tin tên, giá phòng, địa chỉ từ DOM:
public class HotelCrawler {
private WebDriver driver;
public void initDriver() {
System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless", "--disable-gpu", "--no-sandbox");
this.driver = new ChromeDriver(options);
}
public List<HotelDTO> crawlHotelList(String targetUrl) {
List<HotelDTO> results = new ArrayList<>();
driver.get(targetUrl);
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='hotel-item']")));
List<WebElement> hotelElements = driver.findElements(By.xpath("//div[@class='hotel-item']"));
for (WebElement element : hotelElements) {
String name = element.findElement(By.xpath(".//span[@class='item-name']")).getText();
String priceStr = element.findElement(By.xpath(".//span[@class='item-price']")).getText();
String address = element.findElement(By.xpath(".//p[@class='item-address']")).getText();
HotelDTO dto = new HotelDTO(name, parsePrice(priceStr), address);
results.add(dto);
}
return results;
}
}
2. Xử lý Geocoding và Direction API
Địa chỉ thu thập được chuẩn hóa tọa độ (lat, lng) thông qua Geocoding API:
GET https://maps.googleapis.com/maps/api/geocode/json?address=Dai+Hoc+Bach+Khoa+Ha+Noi&key=API_KEY
Lộ trình dẫn đường và tính toán khoảng cách/thời gian di chuyển:
GET https://maps.googleapis.com/maps/api/directions/json?origin=21.0056,105.8433&destination=21.0072,105.8425&mode=walking&key=API_KEY
Testing và validation
Hệ thống trải qua các đợt kiểm thử đơn vị (Unit Test với JUnit/Mockito), kiểm thử tích hợp (Integration Test) và kiểm thử hiệu năng tải (Load Testing với JMeter):
| Hạng mục kiểm thử |
Công cụ / Phương pháp |
Kết quả thực tế |
Tiêu chuẩn đạt |
| Code Coverage (Backend) |
JaCoCo |
84.5% Line Coverage |
>= 80% |
| Tốc độ phản hồi GraphQL API |
Postman / Apache JMeter |
Trung bình 115ms (100 req/s) |
< 250ms |
| Thời gian Crawl 100 bản ghi |
Selenium Headless Chrome |
42.6 giây (Song song 4 worker) |
< 60 giây |
| Độ chính xác Geocoding |
Đối soát tọa độ Google Maps |
96.2% địa chỉ khớp chính xác |
>= 95% |
| Dung lượng Payload phản hồi |
So sánh GraphQL vs REST API |
4.2 KB (GraphQL) vs 18.7 KB (REST) |
Giảm > 50% |
Kiểm thử chấp nhận người dùng (UAT) được tiến hành với 45 sinh viên và 10 chủ nhà trọ tại khu vực Hai Bà Trưng, Hà Nội:
- 93.3% người dùng đánh giá giao diện ứng dụng Android trực quan, dễ thao tác.
- 88.9% người dùng hài lòng với tính năng gợi ý chỉ đường thời gian thực.
- 100% bài đăng của chủ nhà trọ được lưu trữ và lập chỉ mục tìm kiếm thành công trong cơ sở dữ liệu.
Kết quả đạt được
Hệ thống đã hoàn thiện 100% các tính năng đề ra theo đề cương nghiên cứu:
- Xây dựng thành công ứng dụng Android chạy mượt mà từ Android 8.0 trở lên, hỗ trợ tìm kiếm theo bán kính vị trí hiện tại (GPS).
- Xây dựng giao diện Web Quản trị và Tra cứu Responsive tương thích hoàn toàn trên Desktop, Tablet và Mobile Web.
- Module GraphQL Server xử lý chính xác các Mutation và Query phức tạp, giảm 77.5% lưu lượng mạng tiêu thụ so với thiết kế RESTful thông thường.
Đổi mới và đóng góp
- Ứng dụng GraphQL thay thế RESTful API: Đồ án là một trong những công trình tiên phong cấp sinh viên tại thời điểm nghiên cứu áp dụng GraphQL vào ứng dụng kết hợp Web-Mobile, giảm thiểu chi phí băng thông 3G/4G cho người dùng di động.
- Quy trình kết hợp Crawler tự động và Crowdsourcing: Hệ thống giải quyết bài toán "Cold Start" (thiếu hụt dữ liệu ban đầu) bằng cách tự động crawl dữ liệu diện rộng từ Trivago, sau đó duy trì tính sống động của dữ liệu thông qua cơ chế cho phép người dùng và chủ trọ tự đăng bài.
- Mô hình hóa hệ thống chuẩn mực (UML Standard): Toàn bộ kiến trúc phần mềm được đặc tả chi tiết từ Use Case Diagram, Activity Diagram, Sequence Diagram, Class Diagram đến thẻ CRC, tạo tiền đề chuẩn hóa cho các dự án phát triển phần mềm quy mô lớn.
Ứng dụng thực tế và triển khai
Kịch bản sử dụng thực tế (Use Cases)
- Kịch bản 1 - Sinh viên nhập học / Người thuê trọ dài hạn: Sinh viên mới lên thành phố sử dụng tính năng lọc theo khoảng giá (< 2.000.000 VNĐ) và khu vực bán kính quanh trường đại học để tìm kiếm phòng trọ kèm đánh giá xác thực từ người thuê trước.
- Kịch bản 2 - Khách du lịch bụi (Phượt thủ): Người du lịch đến địa phương mới mà chưa đặt phòng trước mở ứng dụng Android, hệ thống tự động nhận diện tọa độ GPS hiện tại và liệt kê danh sách các nhà nghỉ, homestay gần nhất trong phạm vi 2km kèm tính năng chỉ đường từng bước (Turn-by-turn Navigation).
- Kịch bản 3 - Chủ kinh doanh nhà nghỉ, nhà trọ: Chủ cơ sở tạo tài khoản, đăng tải hình ảnh thực tế, cập nhật diện tích, mức giá và số điện thoại liên hệ trực tiếp mà không phải chịu chiết khấu hoa hồng trung gian.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Sinh viên/Thuê │ │ Khách du lịch │ │ Chủ nhà trọ/ │
│ dài hạn │ │ (Phượt) │ │ Nhà nghỉ │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Lọc giá thấp │ │ GPS tức thời │ │ Đăng tin miễn │
│ + Quanh trường│ │ + Dẫn đường │ │ phí + Quản lý │
└───────────────┘ └───────────────┘ └───────────────┘
Chiến lược triển khai và mở rộng
- Môi trường triển khai: Backend triển khai trên máy chủ đám mây Ubuntu Server 18.04 LTS, Reverse Proxy với Nginx, tích hợp chứng chỉ bảo mật SSL/TLS (HTTPS).
- Khả năng mở rộng (Scalability): Tách riêng module Selenium Crawler thành Background Microservice độc lập; bổ sung Redis Caching Layer phía trước MySQL để lưu trữ các kết quả tìm kiếm theo khu vực có tần suất truy vấn cao.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Module Selenium Crawler phụ thuộc vào tính ổn định của cấu trúc HTML trang nguồn; nếu website nguồn thay đổi DOM, crawler cần được cập nhật lại bộ định tuyến XPath.
- Hệ thống chưa hỗ trợ đồng bộ hóa dữ liệu ngoại tuyến (Offline Caching) toàn diện khi thiết bị di động mất hoàn toàn kết nối Internet.
Hướng phát triển tương lai
- Tích hợp AI & Machine Learning: Xây dựng hệ thống khuyến nghị thông minh (Recommendation Engine) dựa trên thuật toán lọc cộng tác (Collaborative Filtering), tự động đề xuất phòng trọ phù hợp với thói quen và ngân sách người dùng.
- Xử lý ngôn ngữ tự nhiên (NLP): Phát triển module phân tích sắc thái cảm xúc (Sentiment Analysis) từ các bình luận của người dùng để chấm điểm uy tín tự động cho nhà trọ.
- Cổng thanh toán điện tử: Tích hợp ví điện tử (MoMo, ZaloPay, VNPay) hỗ trợ đặt cọc giữ phòng trực tuyến an toàn.
Đối tượng hưởng lợi
- Sinh viên & Người đi làm thu nhập trung bình: Tiếp cận thông tin nhà trọ, phòng nghỉ giá rẻ minh bạch, tiết kiệm 70% thời gian và công sức tìm kiếm thực địa.
- Lập trình viên & Kỹ sư phần mềm: Cung cấp tài liệu tham khảo thực tế về việc áp dụng kiến trúc GraphQL trên nền tảng Java Spring Boot kết hợp xử lý dữ liệu địa lý Google Maps.
- Chủ hộ kinh doanh nhà trọ nhỏ lẻ: Có kênh tiếp thị số hóa miễn phí, tiếp cận trực tiếp hàng ngàn khách thuê tiềm năng mà không qua môi giới.
- Nhà nghiên cứu học thuật: Cung cấp mô hình phân tích thiết kế hệ thống hoàn chỉnh theo chuẩn UML trong lĩnh vực ứng dụng dịch vụ định vị (LBS - Location Based Services).
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để triển khai và vận hành hệ thống là gì?
- Server: CPU 2 Core, RAM 4GB, Ổ cứng SSD 20GB (Ubuntu Server 18.04+), cài đặt Java JRE 8+, MySQL 5.7+ và Google Chrome Headless.
- Client Web: Trình duyệt hiện đại hỗ trợ HTML5/ES6 (Chrome, Firefox, Safari, Edge).
- Client Mobile: Thiết bị di động chạy hệ điều hành Android phiên bản 8.0 (API Level 26) trở lên, có chip định vị GPS và kết nối Internet.
2. Hệ thống xử lý bài toán quá tải khi lượng người truy cập tăng đột biến như thế nào?
Hệ thống sử dụng cơ chế Connection Pooling của HikariCP trên Spring Boot để tối ưu hóa kết nối cơ sở dữ liệu MySQL. Đối với quy mô lớn hơn, kiến trúc GraphQL cho phép đặt bộ đệm Redis Caching tại tầng Gateway để lưu kết quả các truy vấn phổ biến, giảm 80% tải trực tiếp lên Database.
3. Hệ thống tích hợp với các dịch vụ bên ngoài nào?
Hệ thống tích hợp 4 API chính thuộc Google Maps Platform:
- Google Maps JavaScript API / Android Maps SDK: Hiển thị bản đồ tương tác.
- Google Places API (Autocomplete): Gợi ý địa danh tự động khi nhập từ khóa.
- Google Geocoding API: Chuyển đổi qua lại giữa địa chỉ văn bản và tọa độ GPS.
- Google Directions API: Tính toán lộ trình đường đi và thời gian di chuyển.
4. Chi phí duy trì và bảo trì hệ thống định kỳ bao gồm những gì?
Chi phí vận hành bao gồm: phí thuê máy chủ đám mây (Cloud VPS), phí tên miền (Domain), và hạn mức sử dụng Google Maps API (được miễn phí 200 USD hàng tháng theo chính sách của Google Cloud Platform, đủ đáp ứng cho hơn 28.000 lượt tải bản đồ động).
5. Thời gian hoàn vốn (ROI) dự kiến cho chủ đầu tư thương mại hóa hệ thống?
Nếu thương mại hóa theo mô hình tin đăng nổi bật (Featured Ads) cho chủ trọ và đặt banner quảng cáo dịch vụ địa phương, với quy mô 5.000 người dùng thường xuyên hàng tháng tại một đô thị, hệ thống ước tính đạt điểm hòa vốn và tạo lợi nhuận sau 6 đến 9 tháng vận hành.
Kết luận
Đồ án tốt nghiệp "Thiết kế hệ thống tìm kiếm khách sạn, nhà trọ" đã giải quyết triệt để bài toán kết nối thông tin lưu trú bình dân thông qua việc kết hợp các công nghệ tiên tiến: Java Spring Boot, GraphQL, MySQL, Android Native và hệ sinh thái Google Maps API. Đồ án không chỉ hoàn thành xuất sắc các yêu cầu kỹ thuật về phân tích thiết kế hệ thống theo chuẩn UML mà còn mang lại giá trị thực tiễn cao cho cộng đồng sinh viên, du khách và các chủ hộ kinh doanh phòng trọ tại Việt Nam. Đây là nền tảng vững chắc để tiếp tục mở rộng phát triển thành một giải pháp Smart Tourism & Hospitality hoàn chỉnh trong tương lai.