PHẦN MỞ ĐẦU 1. TÍNH CẤP THIẾT CỦA ĐỀ TÀI Xe ôm là một phương tiện di chuyển phổ biến ở Việt Nam. Tuy nhiên, việc sử dụng xe ôm là một vấn đề phức tạp. Nghề xe ôm truyền thống đã tồn tại trong nhiều năm và đã trở thành một phân ngành kinh tế không chính thức.
Việc sử dụng xe ôm truyền thống gặp phải nhiều vấn đề như lọc lừa, “hét” giá khách hàng. Cùng với đó là việc người dùng tiếp cận với tài xế xe truyền thống một cách khó khăn khi không có kênh liên lạc trực tiếp và an toàn. Tuy nhiên, nghề xe ôm cũng đóng góp không nhỏ trong việc lưu thông hàng hoá cũng như con người trong xã hội, trở thành một phân ngành kinh tế không chính thức. Vì vậy nhu cầu về một ứng dụng đặt xe để có những đảm bảo an toàn, minh bạch, thuận tiện cho khách hàng, cùng với đó là nâng cao thu nhập cho tài xế là rất cần thiết.
MỤC ĐÍCH CỦA ĐỀ TÀI Mục đích chính của việc xây dựng ứng dụng đặt xe là cung cấp một giải pháp hiệu quả và tiện lợi cho việc di chuyển cá nhân trong thời đại số hóa. Thông qua ứng dụng này, người dùng có thể dễ dàng tìm kiếm và đặt xe từ bất kỳ địa điểm nào, tận hưởng sự linh hoạt, an toàn và tiết kiệm thời gian trong việc di chuyển từ điểm A đến điểm B. Đồng thời, ứng dụng đặt xe cũng tạo ra cơ hội việc làm cho các tài xế và cơ hội kinh doanh cho doanh nghiệp vận tải, tạo nền tảng cho sự phát triển của ngành công nghiệp vận chuyển và tạo thu nhập cho nhiều người. CÁCH TIẾP CẬN VÀ PHƯƠNG PHÁP NGHIÊN CỨU 3.
Đối Tượng Nghiên Cứu Để hoàn thiện đề tài này, chúng em tiến hành nghiên cứu nhu cầu di chuyển của người dùng trong thực tế ở các thành phố lớn, đông đúc và từ sự phát triển của các ứng dụng đặt xe trong nước nói riêng và nước ngoài nói chung. Đồng thời em cũng nghiên cứu các công nghệ để có thể xây dựng ứng dụng hoàn chỉnh nhất, bao gồm: - Spring Framework và các modules của nó trong ngôn ngữ lập trình Java và RESTful API để xây dựng một số chức năng cho ứng dụng. - Thư viện React của ngôn ngữ lập trình JavaScript để thiết kế và xây dựng giao diện cho người dùng - Cơ sở dữ liệu MySQL để lưu trữ dữ liệu cho hệ thống. 16 - Spring Security và Spring OAuth để bảo mật cho hệ thống trong đăng nhập, đăng ký, tạo phân quyền và vai trò cho người dùng, … 3.
Phạm Vi Nghiên Cứu Ở đề tài này, nhóm em 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, không chỉ đơn thuần gói gọn trong việc tạo thuận tiện khi đặt xe giữa tài xế và khách hàng mà bên cạnh đó còn chú trọng vào việc đảm bảo tính minh bạch về thông tin của chuyến xe và đảm bảo an toàn cho khách hàng, hỗ trợ khách hàng và tài xế trao đổi thông tin một cách nhanh chóng và chính xác trong hệ thống. KẾT QUẢ DỰ KIẾN ĐẠT ĐƯỢC Trong quá trình hoàn thiện đề tài, chúng em dự kiến sẽ đạt được những kết quả sau: - Xây dựng ứng dụng đặt xe với những chức năng cơ bản như đã đề cập trong đề cương chi tiết. - Xây dựng được giao diện người dùng thân thiện, dễ sử dụng. - Sử dụng được những chức năng bảo mật để tăng cường bảo mật cho hệ thống.
- Sử dụng được những dịch vụ bên thứ ba để hệ thống hoàn thiện và tốt hơn. - Sử dụng các dịch vụ vận hành và học cách tối ưu hoá chi phí cho việc duy trì môi trường vận hành trong thực tế. Ý NGHĨA KHOA HỌC VÀ THỰC TIỄN Sau khi hoàn thiện đề tài, chúng em sẽ tiếp tục rèn luyện, tiếp thu những đóng góp của thầy cô hướng dẫn cũng như phản biện để thực hiện triển khai những chức năng nâng cao, còn dang dở cũng như phát triển hệ thống lên một bước phát triển mới để có thể phát hành thực tế trong cuộc sống. Khi đề tài chúng em được áp dụng vào thực tế, khách hàng sẽ có một lựa chọn trong các ứng dụng đặt xe của họ, dựa vào những chức năng linh hoạt có được từ ứng dụng.
17 PHẦN NỘI DUNG CHƯƠNG 1. Kiến trúc hệ thống Hình 1. Kiến trúc hệ thống Kiến trúc hệ thống bao gồm 2 thành phần chính: - BACK – END (Server). Hệ thống được thiết kế theo dạng Client – Server (máy chủ – máy khách) bao gồm một máy chủ và nhiều máy khách kết nối đến máy chủ đó.
Quá trình giao tiếp giữa Client – Server của hệ thống xảy ra như sau: - Máy Client sẽ gửi yêu cầu đến máy Server và đợi phản hồi từ nó. - Sử dụng hai giao thức HTTP và TCP: • TCP (Chat/Nofitication) là giao thức hai chiều cho phép việc truyền tải dữ liệu giữa server và client mà không cần phải có yêu cầu từ client trước đó. Khi kết nối được thiết lập, cả server và client đều có khả năng gửi dữ liệu đến bên kia một cách tự do. 18 • Khi máy Server tiếp nhận yêu cầu từ máy Client, nó sẽ tạo ra một kết nối tới máy Client thông qua HTTP (Authentication, Booking, Media).
Sau đó, Server sẽ xử lý yêu cầu và trả lại những thông tin cần thiết về máy Client. - Máy Client tiếp nhận thông tin phản hồi và xử lý trên UI. Công nghệ sử dụng 1. Sping Boot Java Spring Boot là một giải pháp giúp xây dựng ứng dụng và microservices sử dụng Spring Framework nhanh và dễ dàng hơn với các đặc điểm: - Auto config: tự động cấu hình thay cho bạn, chỉ cần bắt đầu code và chạy.
- Xây dựng các bean dựa trên annotation thay vì XML. - Server Tomcat được nhúng ngay trong file JAR build ra, chỉ cần chạy ở bất kì đâu java chạy được. Các ưu điểm này hoạt động cùng với nhau để đưa ra một công cụ cho phép ta xây dựng ứng dụng Spring cơ bản nhanh và dễ dàng. Spring Data JPA Spring Boot JPA là một bản ghi chi tiết của Java để quản lý dữ liệu quan hệ trong các ứng dụng Java.
JPA tuân theo Object-Relational Mapping (ORM). Nó là một tập hợp các interface. Nó sử dụng ngôn ngữ truy vấn hướng đối tượng độc lập nền tảng JPQL (Java Persistence Query Language). Spring Data JPA Tính năng hỗ trợ: - Là một repository mạnh mẽ và object-mapping abstraction tùy chỉnh.
- Hỗ trợ cho cross-store persistence. Tức là một entity có thể được lưu trữ một phần trong MySQL và Neo4j (Hệ thống quản lý cơ sở dữ liệu đồ thị). 19 - Tự động tạo các truy vấn từ ngay chính tên các phương thức truy vấn. - Các lớp dựa vào tên miền cung cấp các thuộc tính cơ bản.
- Hỗ trợ kiểm tra quản lý minh bạch. - Khả năng tích hợp mã repository tùy chỉnh. Dễ dàng tích hợp với Spring Framework với namespace tùy chỉnh. Spring Security Spring Security là một framework tập trung vào việc cung cấp cả xác thực và ủy quyền cho các ứng dụng Java.
Spring Security Các tính năng: - Hỗ trợ toàn diện và có thể mở rộng cho cả Xác thực và Ủy quyền - Bảo vệ chống lại các cuộc tấn công như cố định phiên, clickjacking, giả mạo yêu cầu chéo trang, v. - Tích hợp Servlet API Tích hợp tùy chọn với Spring Web MVC 1. Spring OAuth2 OAuth2 hay Open Authentication là phương thức chứng thực để các ứng dụng có thể chia sẻ tài nguyên cho nhau mà không cần chia sẻ thông tin tài khoản (username và password). OAuth2 đảm nhận 2 việc Authentication (Xác thực người dùng) và Authorization (Ủy quyền truy cập vào tài nguyên).
Luồng hoạt động: 20 Hình 4. Sơ đồ hoạt động cơ bản của phương thức OAuth2 (1) Application gửi yêu cầu ủy quyền truy cập vào Resource Server. (2) Nếu User ủy quyền cho phép Application truy cập vào tài nguyên, thì sẽ nhận được một "giấy ủy quyền" từ User. (3) Application gửi thông tin đăng nhập kèm theo "giấy ủy quyền" tới Authorization Server.
(4) Nếu thông tin gửi đi từ Application là hợp lệ, Authorization Server sẽ trả về một đoạn chuỗi gọi là access_token. (5) Application muốn truy cập tài nguyên của Resource Server thì phải gửi yêu cầu kèm theo đó là chuỗi access_token vừa nhận được. (6) Nếu access_token hợp lệ, Resource Server sẽ trả về tài nguyên mà Application đang yêu cầu. ReactJs ReactJS là một thư viện JavaScript mở rộng và duy trì bởi Facebook để xây dựng giao diện người dùng (UI) cho các ứng dụng web đơn trang (Single Page Applications - SPAs).
Nó đã trở thành một trong những thư viện phổ biến nhất để phát triển giao diện người dùng linh hoạt và hiệu quả. Mục tiêu chính của React là phát triển những ứng dụng với tốc độ xử lý nhanh chóng và trải nghiệm người dùng cao. Một trong những tính năng chính khiến React khác biệt so với các thư viện giao diện người dùng khác là khả năng hiển thị và phản ánh các thay đổi theo thời gian thực, làm cho thư viện này trở nên lý tưởng để xây dựng các ứng dụng web động. Ant Design Ant Design là tập hợp các components của React được xây dựng theo chuẩn thiết kế của Ant UED Team.
Tương tự như chuẩn Material Design, Ant cung cấp hầu hết các component thông dụng trong ứng dụng web hiện đại, như Layout, Button, Icon, DatePicket, v.v…Bên cạnh đó Ant cũng có những component riêng thú vị, như LocaleProvider cho phép bạn thay đổi ngôn ngữ trên toàn ứng dụng. React Bootstrap React-Bootstrap cung cấp sẵn một bộ các React component với look-and-feel của Twitter Bootstrap component từ đó giúp việc tạo dựng UI cho React app dễ dàng hơn bao giờ hết. Ví dụ khi ta mô tả một button nhỏ, text là “Something”, click event trigger hàm callback “someCallback”. Android SDK SDK viết tắt của Software Development Kit là các công cụ và phần mềm dùng để phát triển ứng dụng thông qua một nền tảng nhất định.
Theo đó, SDK cung cấp các thư viện, tài liệu, mẫu template, sample code, debugging, documentation hoặc các tài liệu bổ sung,… để nhà phát triển có thể tích hợp thêm vào phần mềm/ứng dụng của mình. Đa phần chúng thường là chức năng hiển thị quảng cáo, push notification,… 1. RabbitMQ RabbitMQ là một Message Broker sử dụng giao thức AMQP để phục vụ cho hoạt động trao đổi tin nhắn giữa các ứng dụng với nhau. RabbitMQ được hiểu như một người vận chuyển các message và quản lý những tin nhắn trên hàng đợi.
RabbitMQ hoạt động như một bưu điện trung chuyển. Nhiệm vụ của nó là chờ người bán hàng mang hàng đến bưu cục và vận chuyển nó đến tay khách hàng. Khi một người có nhu cầu gửi thông tin, họ sẽ đẩy tin nhắn vào Message broker.