Bối cảnh và vấn đề nghiên cứu

Trong đời sống đô thị tại Việt Nam, xe ôm là một phương tiện di chuyển phổ biến và đóng vai trò như một phân ngành kinh tế không chính thức trong việc lưu thông hàng hóa và hành khách. Tuy nhiên, mô hình xe ôm truyền thống bộc lộ nhiều bất cập như hiện tượng tiêu cực, ép giá khách hàng, thiếu tính minh bạch và khó tiếp cận do không có kênh liên lạc trực tiếp, an toàn. Trước bối cảnh số hóa và sự phát triển của các nền tảng gọi xe công nghệ, nhu cầu xây dựng một ứng dụng đặt xe nhằm bảo đảm tính an toàn, minh bạch thông tin chuyến đi, tạo sự thuận tiện cho người dùng và nâng cao thu nhập cho tài xế trở nên cấp thiết.

Đồ án tốt nghiệp "Xây dựng ứng dụng đặt xe ALL-WIN" do sinh viên Lê Anh Nhân và Bùi Đức Tiên thực hiện dưới sự hướng dẫn của ThS. Mai Anh Thơ tại Khoa Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh (thời gian thực hiện từ ngày 01/08/2023 đến 01/07/2024). Mục đích chính của đề tài là cung cấp giải pháp di chuyển cá nhân tiện lợi, cho phép người dùng tìm kiếm và đặt xe từ bất kỳ địa điểm nào, đồng thời tạo nền tảng kết nối việc làm cho tài xế và cơ hội kinh doanh cho doanh nghiệp vận tải.

Nhiệm vụ nghiên cứu của đề tài được phân định cụ thể thành hai nhóm:

  1. Nhiệm vụ lý thuyết:

    • Tìm hiểu các công nghệ phát triển ứng dụng bao gồm ReactJS, Spring Framework, Spring Boot, JSON Web Token (JWT), MySQL và chuẩn kiến trúc RESTful API.
  2. Nhiệm vụ thực hành:

    • Ứng dụng Spring Framework để xây dựng các mô-đun chức năng trong hệ thống.
    • Sử dụng Hibernate để quản lý và ghi nhật ký dữ liệu.
    • Ứng dụng JWT để thực hiện xác thực và ủy quyền phân quyền người dùng.
    • Sử dụng hệ quản trị cơ sở dữ liệu quan hệ MySQL trong môi trường phát triển.
    • Sử dụng ReactJS để thiết kế và xử lý giao diện website.
    • Tích hợp cổng thanh toán trực tuyến MoMo và PayOS.
    • Ứng dụng giao thức WebSocket để truyền tải thông tin chat trực tuyến và gửi thông báo theo thời gian thực.

Đối tượng nghiên cứu của đề tài là nhu cầu di chuyển thực tế của người dùng tại các thành phố lớn, mô hình hoạt động của các ứng dụng đặt xe hiện hành, cùng hệ thống công nghệ phần mềm liên quan (Spring Boot, Spring Security, Spring OAuth2, ReactJS, MySQL, RabbitMQ, WebSocket). Phạm vi nghiên cứu tập trung vào việc thiết kế, xây dựng và xử lý các nghiệp vụ cốt lõi của một hệ thống đặt xe công nghệ, đảm bảo an toàn dữ liệu, tính minh bạch về giá cước và lộ trình, cũng như tối ưu hóa khả năng tương tác tức thời giữa khách hàng và tài xế.


Cơ sở lý thuyết và phương pháp

Hệ thống được xây dựng dựa trên các nền tảng công nghệ và khung lý thuyết tiêu chuẩn trong công nghệ phần mềm hiện đại:

  • Spring Boot & Spring Data JPA: Sử dụng Spring Boot để phát triển hệ thống dịch vụ phía máy chủ (Back-end) và microservices nhờ cơ chế tự động cấu hình (Auto config), cấu hình Bean bằng Annotation và máy chủ Tomcat nhúng. Spring Data JPA được sử dụng để quản trị dữ liệu quan hệ theo mô hình Object-Relational Mapping (ORM) thông qua ngôn ngữ truy vấn JPQL (Java Persistence Query Language).
  • Spring Security & Spring OAuth2: Cung cấp cơ chế xác thực (Authentication) và phân quyền (Authorization). Chuẩn OAuth2 được áp dụng để cấp quyền truy cập tài nguyên thông qua mã truy cập (access_token) giữa máy chủ xác thực (Authorization Server) và máy chủ tài nguyên (Resource Server), bảo vệ hệ thống trước các nguy cơ tấn công như clickjacking, giả mạo yêu cầu chéo trang (CSRF) hay cố định phiên.
  • ReactJS & Thư viện giao diện: Xây dựng ứng dụng đơn trang (Single Page Application - SPA) với khả năng cập nhật trạng thái giao diện theo thời gian thực, kết hợp bộ thư viện thành phần giao diện Ant Design và React-Bootstrap.
  • RabbitMQ & WebSocket: RabbitMQ đóng vai trò làm trung gian điều phối tin nhắn (Message Broker) hoạt động trên giao thức AMQP để quản lý hàng đợi thông điệp. Giao thức WebSocket hoạt động trên nền kết nối TCP hai chiều (full-duplex), cho phép máy chủ chủ động truyền tải dữ liệu tức thời đến máy khách phục vụ chức năng chat và thông báo.
  • Android SDK: Hỗ trợ xây dựng ứng dụng di động cho người dùng cuối và tài xế.
  • MySQL: Hệ quản trị cơ sở dữ liệu quan hệ lưu trữ toàn bộ thực thể của hệ thống.

Về phương pháp nghiên cứu, nhóm tác giả đã tiến hành khảo sát hiện trạng thực tế thông qua việc phân tích ưu điểm và nhược điểm của hai nền tảng gọi xe tiêu biểu là Grab và Uber để làm cơ sở định hình yêu cầu hệ thống:

Nền tảng Ưu điểm ghi nhận Nhược điểm ghi nhận
Grab - Đặt xe nhanh chóng qua ứng dụng di động.
- Đa dạng loại hình vận chuyển.
- Hỗ trợ linh hoạt thanh toán qua ứng dụng hoặc tiền mặt.
- Có hệ thống mã khuyến mãi và đánh giá chất lượng tài xế/khách hàng.
- Tỷ lệ chia sẻ doanh thu và chi phí tạo áp lực cho tài xế.
- Thách thức về bảo mật và nguy cơ lộ lọt thông tin cá nhân.
Uber - Đặt xe thuận tiện, hoạt động 24/7.
- Đa dạng hóa dịch vụ vận chuyển.
- Hỗ trợ đa kênh thanh toán (tiền mặt/trực tuyến).
- Cơ chế đánh giá hai chiều minh bạch giữa người dùng và tài xế.
- Tranh cãi liên quan đến an toàn dữ liệu cá nhân.
- Chi phí và độ phức tạp cao trong quản lý, bảo trì đa nền tảng (iOS, Android).

Thiết kế và triển khai hệ thống

Kiến trúc hệ thống

Hệ thống ALL-WIN được tổ chức theo mô hình Máy khách – Máy chủ (Client – Server) với hai thành phần chính:

  1. Phía máy chủ (Back-end Server): Tiếp nhận, xử lý nghiệp vụ, quản lý dữ liệu và điều phối thông tin.
  2. Phía máy khách (Client): Ứng dụng di động và giao diện web dành cho khách hàng, tài xế và quản trị viên.

Quá trình truyền thông dữ liệu trong hệ thống sử dụng đồng thời hai giao thức:

  • Giao thức HTTP: Xử lý các luồng dữ liệu yêu cầu - phản hồi tiêu chuẩn gồm Xác thực người dùng (Authentication), Đặt chuyến xe (Booking) và Tải dữ liệu đa phương tiện (Media).
  • Giao thức TCP / WebSocket: Duy trì kết nối liên tục phục vụ tính năng nhắn tin trực tiếp (Chat) và đẩy thông báo thời gian thực (Notification) qua sự hỗ trợ của RabbitMQ.

Thiết kế cơ sở dữ liệu

Cơ sở dữ liệu MySQL của hệ thống được thiết kế hoàn chỉnh với các bảng dữ liệu chuyên biệt:

  • Phân hệ tài khoản và phân quyền: account, group, permission, permission_group, nation, settings.
  • Phân hệ người dùng và phương tiện: customer, driver, position, driver_vehicle, driver_service, category, service.
  • Phân hệ chuyến xe và đánh giá: booking, booking_detail, rating.
  • Phân hệ tương tác thời gian thực: room, chat_detail, notification.
  • Phân hệ khuyến mãi và tài chính: promotion, promotion_code, promotion_service, wallet, wallet_transaction, request_pay_out.

Cấu trúc cài đặt và triển khai

Hệ thống được phân chia thành các gói mã nguồn độc lập phục vụ cài đặt và vận hành:

  • Cấu hình dịch vụ máy chủ: backend service (xử lý logic nghiệp vụ và kết nối CSDL MySQL, RabbitMQ) và backend socket (xử lý kết nối thời gian thực qua RabbitMQ).
  • Cấu hình giao diện quản trị: Gồm hai bộ mã nguồn giao diện meta-cms và booking-cms được xây dựng bằng ReactJS, tích hợp giao diện điều khiển RabbitMQ Management.

Nội dung chính theo từng chương

CHƯƠNG 1. Kiến trúc hệ thống

Chương này mô tả chi tiết mô hình Client - Server tổng thể, cơ chế điều phối luồng dữ liệu qua HTTP và TCP, cùng cơ sở lý thuyết của các công nghệ nền tảng. Nội dung chương tập trung làm rõ tính năng tự động cấu hình và quản trị quan hệ đối tượng của Spring Data JPA; mô hình phân quyền bảo mật của Spring Security và luồng cấp quyền bằng mã truy cập của Spring OAuth2; khả năng xây dựng giao diện động của ReactJS kết hợp Ant Design và React-Bootstrap; nguyên lý hoạt động của hàng đợi AMQP trong RabbitMQ; cơ chế truyền dữ liệu hai chiều full-duplex của WebSocket và vai trò của hệ quản trị CSDL MySQL.

CHƯƠNG 2. Khảo sát hiện trạng và mô hình hoá yêu cầu

Chương 2 trình bày kết quả phân tích hiện trạng hai ứng dụng Grab, Uber và xác định các yêu cầu của hệ thống ALL-WIN. Yêu cầu phi chức năng đặt ra bao gồm: giao diện thân thiện, tốc độ xử lý nhanh, độ bảo mật cao và khả năng mở rộng, bảo trì thuận tiện.

Về yêu cầu chức năng, hệ thống phân định rõ nhiệm vụ của 4 nhóm tác tử (Actors):

  • Khách hàng: Đăng ký, đăng nhập, đặt lại mật khẩu, quản lý hồ sơ cá nhân, đặt chuyến xe, hủy chuyến xe, định vị vị trí thời gian thực (Real time location tracking), theo dõi lộ trình, xem lịch sử chuyến đi, đánh giá tài xế, nhắn tin văn bản/hình ảnh, xem thông báo, xem khuyến mãi, quản lý ví điện tử và lịch sử giao dịch.
  • Tài xế: Đăng ký hồ sơ, đăng nhập, đặt lại mật khẩu, quản lý hồ sơ cá nhân, nhận chuyến xe, từ chối/hủy chuyến xe gợi ý, theo dõi lộ trình, xem lịch sử chuyến đi, nhắn tin trực tuyến, xem thống kê doanh thu, theo dõi tỷ lệ hoạt động, cấu hình dịch vụ nhận chuyến, quản lý ví và tài khoản ngân hàng liên kết.
  • Quản trị viên cấp cao (Super Admin): Quản lý tài khoản hệ thống, quản lý vai trò và phân quyền nhóm quyền.
  • Quản trị viên (Admin): Quản lý hồ sơ khách hàng, tài xế, quản lý chuyến xe, danh mục loại dịch vụ, dịch vụ, quản lý mã khuyến mãi, tin tức, cài đặt hệ thống, phê duyệt yêu cầu rút tiền, quản lý danh mục phương tiện, xe, tỉnh thành và theo dõi thống kê doanh thu, tỷ lệ hoạt động.

Chương này đặc tả chi tiết 15 Use Case cốt lõi qua bảng đặc tả đầy đủ các trường: Mã UC, Tên UC, Mô tả, Actor, Điều kiện kích hoạt, Tiền điều kiện, Hậu điều kiện, Luồng cơ bản, Luồng thay thế, Luồng ngoại lệ và Quy định nghiệp vụ.

CHƯƠNG 3. Thiết kế phần mềm

Chương 3 trình bày hệ thống sơ đồ thiết kế chi tiết nhằm cụ thể hóa các yêu cầu đã mô hình hóa:

  • Lược đồ tuần tự (Sequence Diagram): Xây dựng 15 lược đồ tuần tự tương ứng với các Use Case chính (Đăng ký, Đăng nhập, Đăng xuất, Quên mật khẩu, Đặt lại mật khẩu, Cập nhật thông tin cá nhân, Xem lịch sử chuyến xe, Đặt chuyến xe, Nhận chuyến xe, Hủy chuyến xe gợi ý, Hủy chuyến xe, Xem danh sách loại dịch vụ, Thêm loại dịch vụ, Chỉnh sửa loại dịch vụ, Xóa loại dịch vụ).
  • Lược đồ lớp và lược đồ thực thể: Thiết kế lược đồ lớp và lược đồ thực thể (ERD) cho hai phân vùng chính: phân vùng xác thực - phân quyền và phân vùng nghiệp vụ toàn hệ thống.
  • Thiết kế giao diện: Thiết kế chi tiết hệ thống màn hình cho ba phân hệ người dùng, bao gồm giao diện khách hàng (chọn điểm đón/đến, chọn phương thức thanh toán, áp dụng khuyến mãi, bản đồ đón khách, ví tiền, nạp/rút tiền qua mã QR), giao diện tài xế (màn hình nhận chuyến, bản đồ đón khách, kết thúc chuyến, thống kê thu nhập, cấu hình dịch vụ) và giao diện trang quản trị CMS (Navigation Bar, dropdown menu, bảng biểu quản lý dữ liệu, chi tiết cấu hình).

CHƯƠNG 4. Cài đặt ứng dụng và kiểm thử

Chương 4 cung cấp hướng dẫn cài đặt và cấu hình môi trường vận hành ứng dụng:

  • Thiết lập cơ sở dữ liệu MySQL và cấu hình tham số kết nối.
  • Thiết lập và quản lý người dùng trên RabbitMQ Management.
  • Cấu hình và chạy các gói mã nguồn backend service và backend socket.
  • Cài đặt thư viện phụ thuộc và thực thi các phân hệ giao diện quản trị meta-cms và booking-cms.
  • Trình bày kế hoạch kiểm thử hệ thống, xác định mục tiêu kiểm thử, tiêu chí kiểm thử và quy trình thực hiện kiểm thử chức năng trên các phân hệ.

Kết quả và đóng góp

Kết quả triển khai chức năng

Đồ án đã xây dựng thành công ứng dụng đặt xe ALL-WIN với đầy đủ các phân hệ chức năng theo đúng thiết kế và mô hình hóa:

Phân hệ người dùng Các chức năng chính đã cài đặt và kiểm thử
Phân hệ Khách hàng - Đăng ký, đăng nhập, đặt lại mật khẩu, quản lý thông tin cá nhân.
- Tìm kiếm địa điểm, đặt chuyến xe, hủy chuyến đi kèm lý do.
- Định vị vị trí theo thời gian thực và theo dõi lộ trình di chuyển.
- Trao đổi thông tin với tài xế qua tin nhắn văn bản và hình ảnh.
- Đánh giá chất lượng chuyến đi sau khi hoàn thành.
- Quản lý ví điện tử: xem số dư, lịch sử giao dịch, nạp tiền qua mã QR, tạo yêu cầu rút tiền.
- Áp dụng mã giảm giá và xem thông báo hệ thống.
Phân hệ Tài xế - Đăng ký tài khoản tài xế (ở trạng thái chờ duyệt), đăng nhập, đổi mật khẩu.
- Nhận cuốc xe, từ chối cuốc, hủy chuyến xe đã nhận.
- Điều hướng và theo dõi lộ trình đón/trả khách.
- Trò chuyện trực tiếp (văn bản, hình ảnh) với khách hàng qua WebSocket.
- Quản lý tài chính: thống kê thu nhập, theo dõi tỷ lệ hoạt động, quản lý ví, nạp/rút tiền về tài khoản ngân hàng.
- Cấu hình dịch vụ nhận chuyến phù hợp.
Phân hệ Quản trị (Admin & Super Admin) - Quản trị người dùng, vai trò và phân quyền truy cập.
- Quản lý trạng thái tài xế, duyệt hồ sơ đăng ký tài xế mới.
- Quản lý danh mục loại dịch vụ, đơn giá, xe và tỉnh thành hoạt động.
- Quản lý khuyến mãi, tin tức và cấu hình hệ thống.
- Tiếp nhận và xử lý các yêu cầu rút tiền từ ví của khách hàng và tài xế.
- Thống kê tổng hợp doanh thu và tỷ lệ hoạt động.

Đóng góp của đề tài

  1. Xây dựng giải pháp kỹ thuật tích hợp: Kết hợp thành công kiến trúc máy chủ Java Spring Boot với các giao thức thời gian thực (WebSocket, AMQP qua RabbitMQ) để giải quyết bài toán đồng bộ dữ liệu vị trí và nhắn tin tức thời trong nghiệp vụ đặt xe.
  2. Thiết kế mô hình dữ liệu quan hệ hoàn chỉnh: Xây dựng cấu trúc CSDL chi tiết gồm hơn 20 bảng thực thể bao quát toàn bộ nghiệp vụ từ quản trị tài khoản, phân quyền, vận hành chuyến xe đến đối soát ví điện tử và giao dịch tài chính.
  3. Hiện thực hóa quy trình thanh toán và bảo mật: Tích hợp thành công phương thức xác thực phân quyền chuẩn OAuth2/JWT và kết nối các dịch vụ thanh toán trực tuyến nội địa (MoMo, PayOS).

Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế: Hệ thống hiện mới tập trung xây dựng, phát triển và xử lý các nghiệp vụ cơ bản của ứng dụng đặt xe trong môi trường phát triển và thử nghiệm; chưa tối ưu hóa toàn diện chi phí và tài nguyên duy trì cho môi trường vận hành thực tế quy mô lớn; một số chức năng nâng cao vẫn đang trong quá trình hoàn thiện.
  • Hướng phát triển: Tiếp thu các góp ý chuyên môn từ hội đồng giảng viên hướng dẫn và phản biện để hoàn thiện các chức năng nâng cao còn dang dở; nghiên cứu giải pháp tối ưu hóa chi phí vận hành hệ thống máy chủ; từng bước nâng cấp và hoàn thiện các tiêu chuẩn kỹ thuật để hướng tới phát hành và ứng dụng thực tế trong đời sống xã hội.

Giá trị tham khảo

Đồ án là tài liệu tham khảo thực nghiệm phù hợp cho sinh viên, học viên chuyên ngành Công nghệ thông tin, Công nghệ phần mềm hoặc các nhà phát triển đang thực hiện các đề tài xây dựng hệ thống thương mại điện tử, dịch vụ theo yêu cầu (On-demand services) hoặc ứng dụng gọi xe (Ride-hailing).

Các nội dung có giá trị tham khảo cụ thể bao gồm:

  • Quy trình phân tích, mô hình hóa yêu cầu phần mềm và đặc tả Use Case chi tiết theo chuẩn UML.
  • Thiết kế cơ sở dữ liệu quan hệ hoàn chỉnh cho bài toán quản lý chuyến đi, hệ thống ví điện tử và quản lý phân quyền người dùng.
  • Mô hình kết hợp giữa kiến trúc RESTful API trên nền Spring Boot với cơ chế điều phối tin nhắn qua RabbitMQ và giao tiếp hai chiều WebSocket.

Câu hỏi thường gặp

1. Hệ thống ALL-WIN sử dụng những giao thức mạng nào để giao tiếp giữa Client và Server?
Hệ thống sử dụng hai giao thức chính: giao thức HTTP dùng cho các tác vụ tiếp nhận yêu cầu và phản hồi thông tin thông thường (như xác thực người dùng, xử lý đặt chuyến xe và truyền tải tệp tin đa phương tiện) và giao thức TCP/WebSocket dùng để duy trì kết nối hai chiều liên tục phục vụ tính năng nhắn tin trực tiếp và đẩy thông báo thời gian thực.

2. Giải pháp phân quyền và xác thực trong hệ thống được xây dựng bằng công nghệ nào?
Hệ thống sử dụng Spring Security kết hợp với giao thức ủy quyền Spring OAuth2 và chuẩn mã hóa JSON Web Token (JWT). Quá trình này xác thực tài khoản qua chuỗi access_token để phân định quyền truy cập giữa các vai trò người dùng (Khách hàng, Tài xế, Quản trị viên, Quản trị viên cấp cao) đối với các tài nguyên trên máy chủ.

3. Cơ chế truyền thông điệp thời gian thực giữa tài xế và khách hàng được xử lý như thế nào?
Hệ thống sử dụng RabbitMQ làm Message Broker dựa trên giao thức AMQP để tiếp nhận, lưu trữ và điều phối tin nhắn vào hàng đợi, kết hợp với giao thức WebSocket trên nền kết nối TCP giúp máy chủ chủ động chuyển tiếp dữ liệu tin nhắn văn bản, tin nhắn hình ảnh và cập nhật trạng thái chuyến đi đến máy khách ngay lập tức mà không cần máy khách gửi yêu cầu thăm dò liên tục.

4. Khách hàng có thể thực hiện những hình thức thanh toán nào trên ứng dụng ALL-WIN?
Khách hàng có thể lựa chọn thanh toán chuyến đi bằng tiền mặt, sử dụng số dư ví điện tử cá nhân tích hợp trên hệ thống hoặc thanh toán trực tuyến thông qua việc tích hợp các dịch vụ cổng thanh toán MoMo và PayOS.

5. Quy trình hủy chuyến xe phía khách hàng được quy định như thế nào trong Use Case?
Khách hàng chọn nút hủy cuốc trên giao diện, hệ thống hiển thị thông báo xác nhận. Sau khi khách hàng xác nhận muốn hủy, hệ thống chuyển sang giao diện nhập lý do (khách hàng có thể nhập lý do thủ công hoặc chọn lý do hệ thống gợi ý). Khi khách hàng chọn xác nhận hủy, hệ thống kiểm tra, cập nhật trạng thái và hiển thị thông báo hủy chuyến thành công.


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng đặt xe ALL-WIN" đã hoàn thành việc nghiên cứu, phân tích và hiện thực hóa một hệ thống phần mềm gọi xe công nghệ đa nền tảng dựa trên kiến trúc phân tầng Client - Server. Hệ thống kết hợp hiệu quả các công nghệ Spring Boot, ReactJS, MySQL, RabbitMQ và WebSocket nhằm giải quyết bài toán kết nối di chuyển an toàn, minh bạch thông tin và tối ưu hóa trải nghiệm người dùng. Kết quả đồ án cung cấp một tài liệu tham khảo có cấu trúc chặt chẽ từ khâu khảo sát hiện trạng, mô hình hóa yêu cầu, thiết kế cơ sở dữ liệu đến triển khai cài đặt và kiểm thử chức năng phần mềm.