Bối cảnh và vấn đề nghiên cứu
Khóa luận tốt nghiệp "Xây dựng hệ thống website và ứng dụng bán vé xe khách sử dụng ASP.NET Core 5" được thực hiện bởi sinh viên Lê Hoàng Nguyên (MSSV: 19520182) và Nguyễn Lê Vĩnh (MSSV: 19520355), thuộc Khoa Khoa học và Kỹ thuật Thông tin, Trường Đại học Công nghệ Thông tin – Đại học Quốc gia TP. Hồ Chí Minh, dưới sự hướng dẫn của ThS. Võ Ngọc Tân vào năm 2022.
Bối cảnh thực tiễn của đề tài diễn ra trong giai đoạn hậu đại dịch Covid-19, khi các hoạt động giao thông vận tải bước vào giai đoạn "bình thường hóa". Nhu cầu di chuyển liên tỉnh của người dân tăng cao, đặc biệt trong các dịp lễ tết, gây áp lực lớn lên công tác điều hành tại các bến xe và doanh nghiệp vận tải hành khách. Phương thức quản lý và bán vé truyền thống bộc lộ hạn chế trong việc kiểm soát dữ liệu hành khách, đồng thời gây khó khăn cho người mua trong khâu chọn chỗ và theo dõi lịch trình. Cùng với đó, bối cảnh pháp lý đặt ra yêu cầu mới khi Thông tư 78/2021/TT-BTC của Bộ Tài chính quy định các doanh nghiệp phải chuyển đổi sang sử dụng hóa đơn điện tử có mã của cơ quan thuế từ ngày 01/07/2022, đòi hỏi quy trình xuất vé và quản lý doanh thu phải được tin học hóa.
Khảo sát thực trạng các hệ thống hiện hành (gồm website xe khách Hoàng Thùy, VeXeRe và FutaBus của xe khách Phương Trang) chỉ ra các điểm nghẽn chính:
- Dữ liệu tìm kiếm điểm đi và điểm đến bị cố định theo danh mục tỉnh/thành phố lớn, không hỗ trợ tìm kiếm ở các cấp hành chính chi tiết hơn (đường, phường, xã, huyện) để gợi ý các trạm dừng lân cận theo cự ly thực tế.
- Thiếu cơ chế cập nhật trạng thái ghế ngồi theo thời gian thực (real-time) tại thời điểm khách thao tác, dẫn đến xung đột khi nhiều người cùng chọn một vị trí ghế trong giờ cao điểm.
- Giao diện người dùng ở một số hệ thống chưa tối ưu responsive, gây lỗi vỡ khung điều hướng khi hiển thị trên các kích thước màn hình khác nhau.
Mục tiêu và nhiệm vụ nghiên cứu của đề tài gồm:
- Nghiên cứu quy trình nghiệp vụ bán vé, quản lý bến bãi và điều độ chuyến xe dựa trên thực thể Bến xe Miền Đông mới.
- Thiết kế và xây dựng hệ thống website bán vé xe khách trên nền tảng ASP.NET Core 5, Bootstrap 5 và cơ sở dữ liệu SQL Server, kết hợp lưu trữ hình ảnh trên Firebase.
- Ứng dụng ElasticSearch để xử lý bài toán quét và gợi ý các trạm dừng lân cận dựa trên tọa độ vị trí mong muốn của hành khách.
- Triển khai SignalR nhằm đồng bộ hóa trạng thái ghế ngồi theo thời gian thực giữa các máy khách, hạn chế xung đột giữ chỗ.
- Xây dựng cơ chế bảo mật, phân quyền tài khoản qua JSON Web Token (JWT) và mã hóa mật khẩu bằng giải thuật SHA512 kết hợp chuỗi ngẫu nhiên (salt).
- Tích hợp API dịch vụ bên thứ ba (Viettel, VNPT) nhằm tạo vé và hóa đơn điện tử đáp ứng quy chuẩn pháp lý.
Đối tượng và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: Hệ thống phần mềm website bán vé xe khách điện tử và các kỹ thuật xử lý dữ liệu liên quan.
- Phạm vi nghiên cứu: Nghiên cứu nghiệp vụ điều hành và bán vé tại Bến xe Miền Đông mới (TP. Hồ Chí Minh), khảo sát các hệ thống vé xe trực tuyến tại Việt Nam trong năm 2022.
Cơ sở lý thuyết và phương pháp
Khóa luận dựa trên các nền tảng công nghệ, mô hình lý thuyết và quy chuẩn kỹ thuật sau:
- Nền tảng ASP.NET Core 5: Framework mã nguồn mở phía máy chủ sử dụng ngôn ngữ C#, vận hành theo mô hình MVC (Model-View-Controller). Nền tảng này hỗ trợ kiến trúc phân tán microservices, khả năng mở rộng hệ thống (scalability), tích hợp sẵn công cụ Razor Engine để kết xuất giao diện HTML và tương thích tốt với thư viện SignalR.
- ElasticSearch Engine: Công cụ tìm kiếm phân tán dựa trên kiến trúc RESTful. Các bản ghi dữ liệu (document) được đánh chỉ mục (index) giúp tăng tốc độ truy vấn. ElasticSearch cung cấp kiểu dữ liệu địa lý
geopoint, cho phép tính toán khoảng cách và quét các trạm dừng trong một bán kính xác định dựa trên cặp tọa độ vĩ độ và kinh độ.
- Thư viện SignalR: Giải pháp truyền thông thời gian thực của Microsoft dành cho ASP.NET Core. Cơ chế hoạt động dựa trên việc thiết lập kết nối liên tục (pipeline) giữa máy khách và đối tượng trung tâm (Hub) tại máy chủ, cho phép máy chủ chủ động gọi ngược phương thức và đẩy trạng thái ghế về máy khách mà không cần máy khách gửi yêu cầu thăm dò (polling).
- Google Maps API: Tích hợp hai dịch vụ Autocomplete API và Place Details API để dự đoán chuỗi ký tự nhập và trả về tọa độ địa lý tương ứng của hơn 200 triệu địa điểm. Hệ thống tận dụng gói định mức 200 USD miễn phí hàng tháng (tương đương 10.000 yêu cầu) từ nhà cung cấp.
- Cơ chế xác thực JSON Web Token (JWT) và băm mật khẩu: Xác thực người dùng bằng chuỗi token gồm 3 phần: Header (thuật toán HS256), Payload (các claims: sub, name, iat, exp, issuer) và Signature (chữ ký tạo bằng HMACSHA256 kết hợp khóa bí mật
secret key). Thời hạn hiệu lực của access token là 15 phút, kết hợp mã làm mới (refresh_pass) có thời hạn 10 phút. Mật khẩu người dùng được lưu trữ dưới dạng băm qua giải thuật SHA512 sau khi ghép nối với chuỗi ký tự ngẫu nhiên (salt).
- Nguồn dữ liệu và lưu trữ: Hệ quản trị cơ sở dữ liệu quan hệ MS SQL Server được sử dụng để quản lý các bảng giao dịch cần đảm bảo tính toàn vẹn (ACID transaction); dịch vụ đám mây Firebase lưu trữ tệp hình ảnh; máy chủ ElasticSearch lưu bản sao dữ liệu trạm dừng/điểm dừng để phục vụ tìm kiếm tọa độ.
Phương pháp nghiên cứu thực tế:
- Phương pháp phân tích – tổng hợp: Thu thập, đối sánh tính năng và giao diện của các hệ thống bán vé thực tế trên thị trường (VeXeRe, FutaBus, Xe khách Hoàng Thùy).
- Phương pháp phân tích thiết kế hướng đối tượng: Lập sơ đồ ca sử dụng (Use Case), mô tả chi tiết các tác nhân (actor), đặc tả luồng xử lý và thiết kế mô hình thực thể quan hệ (ERD).
- Phương pháp thực nghiệm phần mềm: Cài đặt hệ thống dịch vụ API, xây dựng cơ sở dữ liệu và thử nghiệm tích hợp các thành phần SignalR, ElasticSearch, Google Maps API trên môi trường máy chủ cục bộ.
Thiết kế và triển khai
Hệ thống được thiết kế theo mô hình Client - Server kết hợp kiến trúc MVC (Model-View-Controller) trên nền ASP.NET Core 5. Trong mô hình này, Controller tiếp nhận yêu cầu từ người dùng, thao tác với Model để xử lý nghiệp vụ và truy xuất cơ sở dữ liệu, sau đó truyền dữ liệu sang View. View sử dụng Razor Engine để biên dịch các mã giao diện kết hợp dữ liệu thành định dạng HTML hoàn chỉnh gửi về máy khách.
+---------------+ Yêu cầu HTTP / JWT +----------------------------+
| Trình duyệt | --------------------------------> | MÁY CHỦ ỨNG DỤNG |
| (Client/UI) | <-------------------------------- | ASP.NET Core 5 |
| Bootstrap 5 | Dữ liệu HTML / JSON / SignalR | (Controller - View Razor) |
+---------------+ +----------------------------+
^ | | |
| Kết nối Pipeline Real-time | Model | Model | Model
v v v v
+---------------+ +------------+ +----------+ +---------------+
| SignalR Hub | | MS SQL | | Firebase | | ElasticSearch |
| (Server-side)| | Server | | (Images) | | (Geopoint) |
+---------------+ +------------+ +----------+ +---------------+
Phân tích Tác nhân (Actor) và Ca sử dụng (Use Case)
Hệ thống xác định 6 tác nhân tham gia tương tác, được phân quyền thông qua các nhóm chức năng cụ thể:
| STT |
Tác nhân (Actor) |
Mục tiêu và vai trò trong hệ thống |
| 1 |
Bến xe |
Quản trị toàn bộ hệ thống: quản lý nhà xe, kế hoạch lưu thông, quầy bán vé, người dùng và thống kê doanh thu toàn bến. |
| 2 |
Nhà xe |
Quản lý phương tiện, lịch trình chạy xe, đăng ký kế hoạch lưu thông với bến và theo dõi doanh thu của doanh nghiệp. |
| 3 |
Nhân viên bán vé |
Thao tác bán vé trực tiếp cho hành khách tại các quầy vé được phân bổ trong bến xe. |
| 4 |
Khách hàng |
Đăng ký, đăng nhập tài khoản, tìm kiếm chuyến xe, thực hiện đặt giữ chỗ, thanh toán và tra cứu lịch sử mua vé. |
| 5 |
Lơ xe |
Sử dụng chức năng quét mã QR trên vé điện tử để thực hiện thủ tục kiểm tra (check-in) cho hành khách khi lên xe. |
| 6 |
Hệ thống |
Tương tác tự động với API của các bên thứ ba (Viettel, VNPT, Google Maps) để lấy dữ liệu bản đồ và xuất vé điện tử. |
Hệ thống thiết lập 14 ca sử dụng (Use Case) chính từ UC01 đến UC14 nhằm đáp ứng toàn bộ quy trình nghiệp vụ:
UC01 - Quản lý nhà xe: Thêm, sửa, xóa thông tin hồ sơ doanh nghiệp vận tải.
UC02 - Quản lý kế hoạch: Lưu trữ, tra cứu và phê duyệt kế hoạch chạy xe (ngày chạy, số chuyến, tuyến đường) của các nhà xe.
UC03 - Quản lý quầy bán vé: Quản lý danh mục quầy vé tại bến và phân bổ quyền khai thác quầy cho từng nhà xe.
UC04 - Quản lý người dùng: Thêm, xóa, sửa và phân quyền tài khoản (quản trị bến, nhà xe, nhân viên soát vé, nhân viên bán vé, khách hàng).
UC05 - Quản lý doanh thu: Thống kê, xuất báo cáo doanh thu theo mốc thời gian (tháng, quý, năm) cho từng nhà xe hoặc toàn bến.
UC06 - Quản lý xe: Quản lý danh mục phương tiện (thông tin xe, biển số, loại xe) của doanh nghiệp vận tải.
UC07 - Quản lý chuyến xe: Khởi tạo và điều chỉnh các chuyến xe chạy thực tế dựa trên kế hoạch đã được bến xe phê duyệt (gán xe, tài xế, lơ xe).
UC08 - Bán vé tại quầy: Cho phép nhân viên xuất vé cho khách mua trực tiếp, chỉ được thao tác trên chuyến xe thuộc nhà xe được phân quầy.
UC09 - Đăng nhập / Đăng ký: Xác thực tài khoản người dùng, cấp phát token bảo mật.
UC10 - Mua vé xe: Hành khách tìm kiếm tuyến, chọn ngày đi, chọn vị trí ghế trên sơ đồ xe và hoàn tất thanh toán.
UC11 - Quản lý vé xe: Tra cứu danh sách các vé xe điện tử đã đặt trong lịch sử tài khoản.
UC12 - Kiểm tra vé xe: Đọc thông tin vé thông qua cơ chế quét mã QR để đối soát hành khách.
UC13 - Đăng ký kế hoạch: Nhà xe tạo mới và nộp kế hoạch vận hành lên ban quản lý bến thông qua biểu mẫu trực tuyến hoặc tệp mẫu Excel.
UC14 - Tạo vé điện tử: Hệ thống gọi API dịch vụ ngoài để sinh mã hóa đơn/vé điện tử có mã xác thực.
Thiết kế Cơ sở dữ liệu
Hệ thống xây dựng mô hình cơ sở dữ liệu quan hệ hoàn chỉnh gồm 42 bảng dữ liệu lưu trữ trên SQL Server, bao quát các nhóm thực thể:
- Địa giới và hạ tầng tuyến:
TINH, HUYEN, XA, DIADIEM, TRAMDUNG, TUYENDUONG, CHITIET_TUYENDUONG.
- Hồ sơ doanh nghiệp và phương tiện:
NHAXE, THUONGHIEU, LOAIXE, XE, SODOXE.
- Kế hoạch và điều độ:
KEHOACH, CHITIET_KEHOACH, CHUYENXE.
- Bến bãi và phân phối:
QUAYBAN, PHANQUAYBAN.
- Phân quyền và tài khoản:
LOAINGUOIDUNG, NGUOIDUNG, QUYEN, PHANQUYEN.
- Chính sách giá và giao dịch:
GIAVE, HOAHONGVE, HOADON, VEXE.
Cơ chế kỹ thuật chuyên biệt
- Thuật toán quét trạm dừng (ElasticSearch): Dữ liệu các trạm dừng được gán nhãn tọa độ vĩ độ và kinh độ. Khi người dùng nhập địa chỉ cụ thể, Google Maps API trả về tọa độ điểm đi/đến. Hệ thống chuyển đổi dữ liệu này thành truy vấn bán kính
geopoint trên ElasticSearch để lọc ra danh sách các trạm dừng khả dụng trong phạm vi quy định, từ đó kết nối với bảng TUYENDUONG để hiển thị chuyến xe phù hợp. Nhằm kiểm soát chi phí API, hệ thống ưu tiên tìm kiếm địa chỉ trong bảng dữ liệu cục bộ trước; chỉ khi kết quả trả về ít hơn 5 mới gọi API ngoài và lưu bổ sung vào hệ thống, đồng thời điều hướng đường dẫn sang ứng dụng Google Maps thay vì nhúng trực tiếp bản đồ.
- Cơ chế cập nhật ghế ngồi thời gian thực (SignalR): Mỗi khi khách hàng nhấn chọn hoặc hủy chọn ghế trên sơ đồ xe, một thông điệp sự kiện được truyền tới Hub SignalR trên máy chủ. Máy chủ lập tức phát sóng (broadcast) trạng thái thay đổi tới toàn bộ các máy khách khác đang mở cùng chuyến xe, khóa tạm thời vị trí ghế trên giao diện người dùng khác nhằm triệt tiêu xung đột chọn trùng ghế.
- Cơ chế xác thực phiên và phân quyền: Sử dụng mô hình Access Token (thời hạn 15 phút) lưu tại client và mã làm mới
refresh_pass (thời hạn 10 phút) lưu tại cơ sở dữ liệu. Khi Access Token hết hạn, client gửi token kèm refresh_pass để máy chủ đối soát và cấp phát token mới mà không bắt buộc người dùng đăng nhập lại.
Nội dung chính theo từng chương
Bố cục khóa luận được trình bày trong 5 chương chính:
Chương 1. Giới thiệu
Chương mở đầu xác định tính cấp thiết của đề tài trong giai đoạn phục hồi kinh tế hậu dịch Covid-19 và sự cần thiết của việc tuân thủ Thông tư 78/2021/TT-BTC. Tác giả phân tích các bất cập trong quản lý bến bãi truyền thống, xác lập đối tượng nghiên cứu là hệ thống website bán vé xe khách, khảo sát thực tế tại Bến xe Miền Đông mới. Mục tiêu trọng tâm là ứng dụng công nghệ để giải quyết bài toán tìm kiếm trạm dừng thông minh và đồng bộ hóa trạng thái đặt ghế theo thời gian thực. Bố cục thực hiện của khóa luận được phân chia thành 5 chương tuần tự.
Chương 2. Cơ sở lý thuyết
Chương này tập trung trình bày các nền tảng kỹ thuật và giải pháp công nghệ được lựa chọn trong quá trình xây dựng đồ án:
- Phân tích ưu điểm của framework ASP.NET Core 5 (ngôn ngữ C#) so với NodeJS về tính tổ chức mã nguồn, khả năng bảo trì hệ thống lâu dài, năng lực phân tách microservices và hỗ trợ tích hợp sẵn SignalR.
- Trình bày nguyên lý hoạt động của nền tảng Google Maps API (Autocomplete và Place Details), chính sách hạn mức 200 USD/tháng của Google, cùng giải pháp bộ đệm (cache) trong cơ sở dữ liệu để hạn chế chi phí phát sinh.
- Phân tích cơ chế hoạt động của ElasticSearch Engine, giải thích lý do chỉ sử dụng ElasticSearch cho việc tìm kiếm dữ liệu trạm dừng theo tọa độ (
geopoint) mà không dùng cho giao dịch bán vé do công cụ này không hỗ trợ cơ chế transaction và rollback.
- Mô tả mô hình kết nối liên tục (pipeline) thông qua Hub của SignalR phục vụ truyền nhận dữ liệu hai chiều.
- Trình bày chi tiết cấu trúc của JSON Web Token (Header, Payload, Signature), quy trình cấp phát - làm mới token (
refresh_pass), và cơ chế bảo mật mật khẩu bằng giải thuật SHA512 kết hợp chuỗi ngẫu nhiên (salt).
Chương 3. Phân tích và thiết kế hệ thống
Đây là chương nội dung có dung lượng lớn nhất trong khóa luận, bao gồm các hạng mục khảo sát và thiết kế chi tiết:
- Khảo sát hiện trạng: Đánh giá ưu - nhược điểm về giao diện và chức năng đặt vé của 3 website: VeXeRe, FutaBus và Xe khách Hoàng Thùy.
- Phân tích yêu cầu: Xác lập các yêu cầu chức năng và phi chức năng cho ba nhóm đối tượng gồm người dùng mua vé, nhân viên vận hành bến/nhà xe và người quản trị hệ thống.
- Thiết kế tổng thể: Xây dựng mô hình hoạt động kết hợp giữa MVC, cơ sở dữ liệu SQL Server, kho ảnh Firebase và máy chủ tìm kiếm ElasticSearch.
- Đặc tả Use Case: Xây dựng danh mục 6 tác nhân (Bến xe, Nhà xe, Nhân viên bán vé, Khách hàng, Lơ xe, Hệ thống) và 14 ca sử dụng tổng quát. Cung cấp các sơ đồ phân rã và bảng đặc tả chi tiết cho từng ca sử dụng: Quản lý nhà xe (UC01), Quản lý kế hoạch (UC02), Quản lý quầy vé (UC03), Quản lý người dùng (UC04), Quản lý doanh thu (UC05), Quản lý xe (UC06), Quản lý chuyến xe (UC07), Bán vé tại quầy (UC08), Đăng ký/Đăng nhập (UC09), Mua vé xe (UC10), Quản lý vé xe (UC11).
- Thiết kế dữ liệu: Trình bày sơ đồ thực thể liên kết và mô tả cấu trúc chi tiết của 42 bảng dữ liệu trong hệ thống, chỉ rõ các khóa chính (PK), khóa ngoại (FK) và ràng buộc toàn vẹn.
Chương 4. Kết quả xây dựng hệ thống website bán vé
Chương 4 minh chứng kết quả hiện thực hóa các phân tích, thiết kế thành sản phẩm website vận hành thực tế. Nội dung trình bày giao diện và luồng xử lý của các màn hình chức năng chính:
- Màn hình tìm kiếm chuyến xe cho phép nhập điểm xuất phát, điểm đến chi tiết và thời gian khởi hành.
- Giao diện kết quả tìm kiếm tích hợp các bộ lọc theo loại xe, khoảng giá, giờ khởi hành và gợi ý trạm dừng gần nhất.
- Giao diện sơ đồ xe trực quan hiển thị vị trí ghế trống, ghế đang có người chọn (đồng bộ qua SignalR) và thao tác đặt chỗ.
- Phân hệ quản trị dành cho Bến xe và Nhà xe: giao diện quản lý danh mục xe, lập kế hoạch chuyến, phân bổ quầy bán vé và bảng theo dõi, thống kê doanh thu bán vé theo thời gian thực.
- Phân hệ bán vé trực tiếp tại quầy dành cho nhân viên bến xe.
Chương 5. Kết luận và hướng phát triển
Chương tổng kết đánh giá mức độ hoàn thành so với các mục tiêu nghiên cứu ban đầu. Tác giả chỉ ra các điểm đã giải quyết được về mặt nghiệp vụ bến bãi, công nghệ thời gian thực và quản trị cơ sở dữ liệu, đồng thời vạch ra các hướng hoàn thiện hệ thống trong các giai đoạn tiếp theo.
Kết quả và đóng góp
Khóa luận đã hoàn thành các nội dung kỹ thuật và đóng góp thực tiễn theo đúng các yêu cầu đề ra:
- Hiện thực hóa quy trình nghiệp vụ bến xe điện tử: Xây dựng một hệ thống website thương mại điện tử chuyên ngành vận tải hành khách hoàn chỉnh, mô phỏng chính xác mô hình vận hành của Bến xe Miền Đông mới với sự phân tách quyền hạn rõ ràng giữa Ban quản lý bến, các doanh nghiệp nhà xe, nhân viên bán vé và khách hàng.
- Giải quyết bài toán tìm kiếm địa điểm chi tiết: Khắc phục nhược điểm của các hệ thống vé xe hiện nay (vốn chỉ cho phép chọn tỉnh/thành phố) bằng cách kết hợp Google Maps API và truy vấn bán kính
geopoint trên ElasticSearch. Hệ thống cho phép người dùng nhập địa chỉ cấp đường, xã, phường và tự động đề xuất các chuyến xe có trạm dừng lân cận phù hợp.
- Triển khai thành công tính năng thời gian thực: Áp dụng SignalR Hub để giải quyết triệt để bài toán xung đột đặt ghế (concurrency) trong giờ cao điểm, giúp các máy khách đồng bộ trạng thái sơ đồ ghế ngồi tức thì mà không cần tải lại trang.
- Thiết kế cơ sở dữ liệu quan hệ quy mô lớn: Xây dựng cấu trúc dữ liệu chặt chẽ gồm 42 bảng quan hệ trên SQL Server, đáp ứng đầy đủ chu trình từ quản lý địa giới, phương tiện, nhân sự, lịch trình, bán vé đến phân chia hoa hồng và xuất hóa đơn điện tử.
- Đảm bảo tính tương thích và bảo mật hệ thống: Giao diện được thiết kế responsive trên nền Bootstrap 5, tương thích với các thiết bị truy cập; quy trình xác thực được bảo vệ bằng JWT với cơ chế cấp lại qua
refresh_pass (10 phút) và mật khẩu được băm an toàn qua thuật toán SHA512 kết hợp Salt.
| Tiêu chí |
Các hệ thống khảo sát (VeXeRe, FutaBus, Hoàng Thùy) |
Hệ thống xây dựng trong khóa luận |
| Tra cứu điểm đi/đến |
Cố định theo danh sách Tỉnh/Thành phố lớn |
Nhập địa chỉ chi tiết (đường/xã/huyện), tự động quét trạm dừng theo tọa độ (geopoint) |
| Đồng bộ trạng thái ghế |
Không hỗ trợ giữ ghế thời gian thực, dễ lỗi khi trùng thao tác |
Đồng bộ trạng thái ghế ngồi tức thì giữa các máy khách qua SignalR Hub |
| Kiến trúc dữ liệu tìm kiếm |
Cơ sở dữ liệu quan hệ truyền thống |
Phân tách: SQL Server xử lý transaction, ElasticSearch xử lý tìm kiếm tọa độ trạm |
| Đáp ứng quy chuẩn hóa đơn |
Triển khai riêng biệt tùy từng nhà xe |
Tích hợp sẵn luồng gọi API tạo vé/hóa đơn điện tử theo Thông tư 78/2021 |
| Cơ chế xác thực tài khoản |
Session truyền thống hoặc cơ bản |
JSON Web Token (HS256, hạn 15 phút) kết hợp refresh_pass (10 phút), SHA512 + Salt |
Hạn chế và hướng nghiên cứu tiếp
Khóa luận ghi nhận một số hạn chế và định hướng phát triển cụ thể dựa trên nội dung báo cáo:
-
Hạn chế:
- Hệ thống vẫn phụ thuộc vào nguồn dữ liệu của Google Maps API để phân giải địa chỉ ban đầu. Mặc dù đã có cơ chế lưu trữ đệm nội bộ để giảm thiểu yêu cầu khi kết quả lớn hơn hoặc bằng 5, chi phí sử dụng dịch vụ bản đồ vẫn có thể tăng cao nếu quy mô truy vấn của người dùng vượt quá hạn mức miễn phí 200 USD/tháng.
- Khóa luận mới tập trung hoàn thiện và triển khai kiểm thử chi tiết trên nền tảng website; mục tiêu xây dựng ứng dụng di động cho khách hàng và tài xế bằng Xamarin mới dừng lại ở mức độ nghiên cứu, đề xuất trong định hướng tổng thể ban đầu.
- Cơ chế đồng bộ ghế qua SignalR được triển khai trên máy chủ đơn lẻ, chưa giải quyết bài toán phân tán kết nối (SignalR Backplane với Redis) khi hệ thống cần mở rộng phục vụ lượng truy cập đồng thời đột biến.
-
Hướng nghiên cứu tiếp:
- Xây dựng hoàn chỉnh ứng dụng di động đa nền tảng (sử dụng Xamarin hoặc các công nghệ tương đương) dành riêng cho hành khách đặt vé và nhân viên lơ xe quét mã QR check-in trực tiếp.
- Tối ưu hóa cơ sở dữ liệu nội bộ về địa điểm và trạm dừng nhằm giảm tối đa sự phụ thuộc vào Google Maps API.
- Tách các dịch vụ xử lý thành kiến trúc vi dịch vụ (microservices) độc lập và ứng dụng giải pháp hàng đợi thông điệp để nâng cao năng lực chịu tải trong các dịp cao điểm lễ tết.
Giá trị tham khảo
Báo cáo khóa luận là tài liệu tham khảo có giá trị học thuật và kỹ thuật thực hành cho các nhóm đối tượng sau:
- Sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm: Là tài liệu mẫu về quy trình phân tích và thiết kế phần mềm hoàn chỉnh theo mô hình hướng đối tượng, từ khâu khảo sát hiện trạng, xây dựng Use Case, thiết kế cơ sở dữ liệu quan hệ phức tạp (42 bảng) đến hiện thực hóa mã nguồn trên nền ASP.NET Core 5 MVC.
- Lập trình viên và người nghiên cứu phát triển web: Cung cấp giải pháp triển khai thực tế cho bài toán truyền thông thời gian thực bằng SignalR, kỹ thuật tích hợp ElasticSearch để xử lý dữ liệu địa lý (
geopoint), và cơ chế bảo mật phiên làm việc phân tán sử dụng JSON Web Token kèm mã làm mới (refresh_pass).
- Phần nội dung đáng tham khảo nhất:
- Mục thiết kế ca sử dụng và các bảng đặc tả Use Case chi tiết tại Chương 3.
- Thiết kế lược đồ cơ sở dữ liệu 42 bảng tại Mục 3.6 và 3.7.
- Mô hình kết hợp giữa SQL Server (đảm bảo tính toàn vẹn giao dịch) và ElasticSearch (tối ưu hóa tốc độ tìm kiếm trạm dừng) tại Chương 2 và Chương 3.
Câu hỏi thường gặp
1. Hệ thống giải quyết bài toán tìm kiếm chuyến xe khác biệt gì so với các website bán vé hiện hành như VeXeRe hay FutaBus?
Các hệ thống hiện hành buộc người dùng phải chọn điểm đi và điểm đến theo danh mục tỉnh/thành phố cố định có sẵn. Hệ thống trong khóa luận cho phép người dùng nhập địa chỉ chi tiết ở các cấp nhỏ hơn (đường, phường, xã, huyện). Hệ thống sử dụng Google Maps API để lấy tọa độ, sau đó dùng công cụ ElasticSearch quét các trạm dừng lân cận nằm trong bán kính xác định so với tọa độ nhập vào, từ đó truy xuất và đề xuất các chuyến xe có lộ trình đi qua các trạm dừng đó.
2. Vì sao nhóm tác giả không lưu toàn bộ dữ liệu hệ thống vào ElasticSearch mà phải kết hợp song song với MS SQL Server?
Do ElasticSearch không hỗ trợ cơ chế quản lý giao dịch (transaction) và hoàn tác (rollback). Đối với nghiệp vụ bán vé, việc thêm/hủy ghế và cập nhật trạng thái thanh toán diễn ra liên tục, đòi hỏi kiểm soát chặt chẽ tính toàn vẹn để tránh xung đột khi nhiều người cùng đặt ghế. Ngoài ra, việc ElasticSearch phải đánh chỉ mục lại toàn bộ thuộc tính mỗi khi thêm/sửa/xóa sẽ làm chậm tốc độ ghi. Do đó, SQL Server được dùng để quản lý giao dịch mua vé và dữ liệu cốt lõi, còn ElasticSearch chỉ lưu bản sao dữ liệu trạm dừng (ít thay đổi) nhằm phục vụ tìm kiếm nhanh theo tọa độ.
3. Cơ chế đồng bộ hóa trạng thái ghế ngồi theo thời gian thực được thiết kế như thế nào?
Hệ thống sử dụng thư viện SignalR của ASP.NET Core. Khi máy khách mở trang đặt vé của một chuyến xe, một kết nối liên tục (pipeline) được duy trì với SignalR Hub tại máy chủ. Bất kỳ thao tác chọn hoặc giữ ghế nào từ một máy khách sẽ kích hoạt máy chủ phát tín hiệu cập nhật trạng thái ghế đến tất cả các máy khách khác đang kết nối vào cùng chuyến xe, giúp ngăn chặn tình trạng khách chọn trùng ghế đã có người giữ.
4. Khóa luận áp dụng cơ chế xác thực và bảo mật mật khẩu người dùng theo quy chuẩn nào?
Hệ thống sử dụng JSON Web Token (JWT) với thuật toán HMACSHA256 để xác thực và phân quyền cho mỗi yêu cầu gửi lên máy chủ. Access token có thời hạn sử dụng là 15 phút, đi kèm mật mã làm mới (refresh_pass) có hiệu lực trong vòng 10 phút. Đối với dữ liệu mật khẩu, hệ thống không lưu dạng thô mà ghép nối mật khẩu với một chuỗi ký tự ngẫu nhiên (salt), sau đó mã hóa một chiều bằng giải thuật băm SHA512 trước khi lưu vào cơ sở dữ liệu.
5. Giải pháp nào được áp dụng để kiểm soát chi phí sử dụng Google Maps API?
Để không vượt quá định mức 200 USD miễn phí hàng tháng (tương đương 10.000 requests) của Google, hệ thống áp dụng hai giải pháp: thứ nhất, khi người dùng tìm kiếm địa điểm, hệ thống sẽ ưu tiên truy vấn trong cơ sở dữ liệu nội bộ trước, chỉ khi kết quả tìm thấy ít hơn 5 mới gọi đến Google Maps API và lưu lại kết quả đó; thứ hai, đối với tính năng chỉ đường từ vị trí người dùng đến trạm dừng, hệ thống mở liên kết điều hướng sang trang Google Maps ngoài thay vì nhúng trực tiếp bản đồ vào website.
Kết luận
Khóa luận tốt nghiệp của sinh viên Lê Hoàng Nguyên và Nguyễn Lê Vĩnh đã giải quyết trọn vẹn yêu cầu xây dựng hệ thống website bán vé xe khách điện tử dựa trên bài toán vận hành của Bến xe Miền Đông mới. Đề tài kết hợp thành công nền tảng ASP.NET Core 5, thư viện truyền thông thời gian thực SignalR và công cụ tìm kiếm địa lý ElasticSearch để tháo gỡ hai điểm nghẽn lớn trong các hệ thống vé xe hiện hữu: tìm kiếm chuyến xe theo trạm dừng lân cận vị trí chi tiết và triệt tiêu xung đột chọn ghế trong giờ cao điểm. Với thiết kế cơ sở dữ liệu 42 bảng chặt chẽ cùng kiến trúc bảo mật JWT chuẩn hóa, công trình cung cấp nguồn tài liệu kỹ thuật có giá trị ứng dụng cao cho việc nghiên cứu và phát triển phần mềm trong lĩnh vực giao thông vận tải hành khách.