TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI ĐỒ ÁN TỐT NGHIỆP Xây dựng hệ thống giám sát xe chuyên dùng của ngân hàng NGUYỄN HUY ĐỊNH dinh.nh173016@sis.hust.edu.vn Ngành Kỹ thuật máy tính Chuyên ngành Hệ nhúng và IOT Giảng viên hướng dẫn: TS. Hoàng Văn Hiệp Chữ kí GVHD Khoa: Kỹ thuật máy tính Trường: Công nghệ thông tin và Truyền thông HÀ NỘI, 08/2022 LỜI CẢM ƠN Lời đầu tiên, tôi xin chân thành cảm ơn đến TS. Hoàng Văn Hiệp, đã luôn nhiệt tình giúp đỡ, hướng dẫn tôi trong quá trình thực hiện làm đồ án tốt nghiệp. Tôi cũng xin cảm ơn đến bạn bè, anh chị trên lab Navis, đặc biệt là anh Phạm Quang Hiếu đã luôn trao đổi, đóng góp ý kiến để sản phẩm tôi làm ra được hoàn thiện và tốt nhất. Cuối cùng, tôi xin cảm ơn gia đình, bạn bè đã luôn quan tâm, động viên, tạo điều kiện tốt nhất để tôi có thể hoàn thành đồ án này. i TÓM TẮT NỘI DUNG ĐỒ ÁN Hiện nay, việc vận tải hàng hoá là một việc diễn ra hằng ngày trong cuộc sống. Đặc biệt đối với các đơn vị chuyên trách công việc vận chuyển thì việc giám sát các thiết bị vận chuyển, biết được trạng thái thiết bị, hành trình cũng như lịch sử di chuyển, cụ thể ở đây chính là các xe chuyên dùng là một điều rất quan trọng. Trong khuôn khổ đồ án sẽ đề cập đến một đơn vị vận tải một loại hàng hoá rất đặc thù, đó chính là hệ thống xe chuyên dùng chở tiền trong ngân hàng. Để có thể theo dõi được hoạt động công việc vận chuyển tiền, yêu cầu được đặt ra là phải xây dựng hệ thống giám sát hành trình, thông tin vận chuyển, trạng thái của các thiết bị, lập lịch trình tuyến tường,... để sao cho việc vận chuyển tiền được diễn ra được an toàn và dễ kiểm soát nhất. Để dễ dàng bảo trì và mở rộng, hệ thống giám sát xe chuyên dùng của ngân hàng sẽ được thiết kế theo kiến trúc nhiều dịch vụ nhỏ Microservice, với phần trang web quản lý được xây dựng giao diện bằng công nghệ ReactJs, Asp.Net Core và Sql Server để xây dựng server hệ thống và lưu trữ dữ liệu. i MỤC LỤC CHƯƠNG 1. GIỚI THIỆU ĐỀ TÀI ......................................................... 1 1.1 Đặt vấn đề............................................................................................ 1 1.2 Mục tiêu và phạm vi đề tài..................................................................... 2 1.3 Định hướng giải pháp............................................................................ 2 1.4 Bố cục đồ án ........................................................................................ 3 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU............................. 4 2.1 Khảo sát hiện trạng ............................................................................... 4 2.2 Tổng quan chức năng ............................................................................ 5 2.2.1 Biểu đồ use case tổng quát .......................................................... 5 2.2.2 Biểu đồ use case phân rã............................................................. 6 2.2.3 Quy trình nghiệp vụ ................................................................... 11 2.3 Đặc tả chức năng .................................................................................. 12 2.3.1 Đặc tả use case phân quyền người dùng........................................ 13 2.3.2 Đặc tả use case cập nhật thông tin tuyến trong ngày ...................... 14 2.3.3 Đặc tả use case xem lịch sử chạy tuyến......................................... 14 2.3.4 Đặc tả use case xem lịch sử chạy xe ............................................. 15 2.3.5 Đặc tả use case cập nhật hành trình tuyến mẫu.............................. 16 2.3.6 Đặc tả use case phân công tuyến.................................................. 17 CHƯƠNG 3. CÔNG NGHỆ SỬ DỤNG.................................................... 19 3.1 Frontend .............................................................................................. 19 3.1.1 ReactJs...................................................................................... 19 3.1.2 Ant Design ................................................................................ 20 3.1.3 React Geocode........................................................................... 20 3.1.4 @react-google-maps/api ............................................................. 20 3.2 Backend............................................................................................... 21 3.2.1 ASP.Net core ............................................................................. 21 3.2.2 Microsoft Sql Server .................................................................. 22 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ ....................................... 23 4.1 Thiết kế kiến trúc.................................................................................. 23 4.1.1 Lựa chọn kiến trúc phần mềm ..................................................... 23 4.1.2 Thiết kế tổng quan...................................................................... 25 4.1.3 Thiết kế chi tiết gói .................................................................... 26 4.2 Thiết kế chi tiết..................................................................................... 29 4.2.1 Thiết kế giao diện ...................................................................... 29 4.2.2 Thiết kế API .............................................................................. 31 4.2.3 Thiết kế lớp ............................................................................... 32 4.2.4 Thiết kế cơ sở dữ liệu ................................................................. 36 4.3 Xây dựng ứng dụng............................................................................... 39 4.3.1 Thư viện và công cụ sử dụng....................................................... 39 4.3.2 Kết quả đạt được ........................................................................ 40 4.3.3 Minh họa các chức năng chính .................................................... 41 4.4 Kiểm thử.............................................................................................. 47 4.4.1 Kiểm thử chức năng quản lý người dùng và quyền......................... 47 4.4.2 Kiểm thử chức năng giám sát trực tuyến ....................................... 48 4.4.3 Kiểm thử chức năng quản lý lịch sử ............................................. 48 4.4.4 Kiểm thử chức năng quản lý phân công ........................................ 49 4.4.5 Kiểm thử chức năng quản lý báo cáo............................................ 50 4.5 Triển khai ............................................................................................ 50 iii CHƯƠNG 5. CÁC GIẢI PHÁP VÀ ĐÓNG GÓP NỔI BẬT...................... 52 5.1 Thiết kế phân quyền động...................................................................... 52 5.1.1 Đặt vấn để ................................................................................. 52 5.1.2 Giải quyết vấn đề ....................................................................... 52 5.1.3 Kết quả đạt được ........................................................................ 55 5.2 Nâng cao hiệu năng giao diện người dùng ............................................... 55 5.2.1 Đặt vấn đề ................................................................................. 55 5.2.2 Giải quyết vấn đề ....................................................................... 56 5.2.3 Kết quả đạt được ........................................................................ 57 CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ............................. 58 6.1 Kết luận ............................................................................................... 58 6.2 Hướng phát triển................................................................................... 58 TÀI LIỆU THAM KHẢO......................................................................... 59 PHỤ LỤC................................................................................................. 61 A. Thiết kế cơ sở dữ liệu........................................................................... 61 DANH MỤC HÌNH VẼ Hình 2.1 Hình 2.2 Hình 2.3 Hình 2.4 Hình 2.5 Hình 2.6 Hình 2.7 Hình 2.8 Hình 2.9 Biểu đồ use case tổng quát hệ thống giám xe xe chuyên dụng. Biểu đồ use case phân rã giám sát trưc tuyến. . . . . . . . . . . Biểu đồ use case phân rã quản lý lịch sử. . . . . . . . . . . . . Biểu đồ use case phân rã quản lý thông tin cán bộ và thiết bị. . Biểu đồ use case phân rã quản lý điểm giao dịch và tuyến mẫu. Biểu đồ use case phân rã quản lý báo cáo. . . . . . . . . . . . . Biểu đồ use case phân rã quản lý người dùng và phân quyền. . Biểu đồ quy trình hoạt động chính của hệ thống. . . . . . . . . Biểu đồ hoạt động quy trình nghiệp vụ phân công tuyến. . . . 5 6 7 8 9 10 11 11 12 Hình 4.1 Hình 4.2 Hình 4.3 Hình 4.4 Hình 4.5 Hình 4.6 Kiến trúc tổng quát hệ thống. . . . . . . . . . . . . . Biểu đồ phụ thuộc gói. . . . . . . . . . . . . . . . . Thiết kế chi tiết gói backend. . . . . . . . . . . . . . Thiết kế chi tiết gói frontend. . . . . . . . . . . . . . Thiết kế mockup hệ thống giám sát xe chuyên dùng. Các thành phần giao diện. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 25 26 28 29 30 Hình 4.7 Hình 4.8 Hình 4.9 Hình 4.10 Hình 4.11 Hình 4.12 Hình 4.13 Hình 4.14 Hình 4.15 Hình 4.16 Hình 4.17 Hình 4.18 Thiết kế các lớp thuộc chức năng quản lý phân công tuyến. Biểu đồ trình tự usecase quản lý phân công tuyến. . . . . . Thiết kế các lớp thuộc chức năng quản lý người dùng. . . . Biểu đồ trình tự usecase quản lý phân người dùng. . . . . . Biểu đồ thực thể liên kết (E-R diagram). . . . . . . . . . . Biểu đồ thiết kế cơ sở dữ liệu. . . . . . . . . . . . . . . . . Giao diện giám sát trực tuyến. . . . . . . . . . . . . . . . . Giao diện lịch sử chạy tuyến trực tuyến. . . . . . . . . . . . Giao diện xem hành trình chạy tuyến trực tuyến. . . . . . . Giao diện cập nhật hành trình tuyến đang chạy. . . . . . . . Giao diện quản lý lịch sử. . . . . . . . . . . . . . . . . . . . Giao diện quản lý lịch sử tuyến. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 33 34 35 36 37 41 42 42 43 43 44 Hình 4.19 Hình 4.20 Hình 4.21 Hình 4.22 Giao diện thống kê và quá trình chạy xe. Giao diện quản lý nhóm quyền. . . . . . Giao diện menu của nhóm quyền test. . . Giao diện thêm mới nhóm quyền. . . . . . . . . . . . . 45 45 46 47 Hình 5.1 Hình 5.2 Hình 5.3 Tổng quan giải pháp phân quyền. . . . . . . . . . . . . . . . . 52 Quy trình phân quyền. . . . . . . . . . . . . . . . . . . . . . . 53 Giao diện component danh sách lịch sử. . . . . . . . . . . . . . 56 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v Hình 5.4 Cách thức hoạt động của react-window. . . . . . . . . . . . . . 57 vi DANH MỤC BẢNG BIỂU Bảng 2.1 Bảng 2.2 Bảng 2.3 Bảng 2.4 Bảng 2.5 Bảng 2.6 Đặc tả use case phân quyền người dùng. . . . . . . Đặc tả use case cập nhật thông tin tuyến trong ngày. Đặc tả use case xem lịch sử chạy tuyến. . . . . . . . Đặc tả use case xem lịch sử chạy xe. . . . . . . . . . Đặc tả use case cập nhật hành trình tuyến mẫu. . . Đặc tả use case phân công tuyến. . . . . . . . . . . . . . . . . Bảng 3.1 Các phương thức React Geocode. . . . . . . . . . . . . . . . . 20 Bảng 4.1 Bảng 4.2 Bảng 4.3 Bảng 4.4 Bảng 4.5 Bảng 4.6 Bảng 4.7 Bảng 4.8 Bảng 4.9 Bảng 4.10 Bảng 4.11 Bảng 4.12 Các cấu hình chung của giao diện trang web . . . . Thiết kế chi tiết bảng User. . . . . . . . . . . . . . . Thiết kế chi tiết bảng Scope. . . . . . . . . . . . . . Thiết kế chi tiết bảng Permission. . . . . . . . . . . Thiết kế chi tiết bảng ScopePermission. . . . . . . . Thiết kế chi tiết bảng Unit. . . . . . . . . . . . . . . Thiết kế chi tiết bảng UserUnit. . . . . . . . . . . . Danh sách công cụ và thư viện sử dụng. . . . . . . Danh mục kết quả mã nguồn . . . . . . . . . . . . . Kiểm thử chức năng quản lý quyền và người dùng. . Kiểm thử chức năng giám sát trực tuyến. . . . . . . Kiểm thử chức năng quản lý lịch sử. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 14 15 16 17 18 29 38 38 38 39 39 39 40 41 47 48 49 Bảng 4.13 Kiểm thử chức năng quản lý phân công. . . . . . . . . . . . . 49 Bảng 4.14 Kiểm thử chức năng quản lý báo cáo. . . . . . . . . . . . . . . 50 Bảng 4.15 Danh sách các thiết bị và công cụ triển khai hệ thống. . . . . . 51 Bảng A.1 Thiết kế chi tiết bảng Rfid. . . . . . . . . . . . . . . . . . . . . 61 Bảng A.2 Bảng A.3 Bảng A.4 Bảng A.5 Bảng A.6 Bảng A.7 Bảng A.8 Bảng A.9 Bảng A.10 Thiết kế chi tiết bảng Car. . . . . . . . Thiết kế chi tiết bảng Device. . . . . . Thiết kế chi tiết bảng Member. . . . . . Thiết kế chi tiết bảng History. . . . . . Thiết kế chi tiết bảng Online. . . . . . Thiết kế chi tiết bảng CarReport. . . . Thiết kế chi tiết bảng TransactionPoint. Thiết kế chi tiết bảng SampleRoute. . . Thiết kế chi tiết bảng Segmentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 62 62 63 63 64 64 65 65 vii DANH MỤC TỪ VIẾT TẮT Viết tắt Tên tiếng anh API Application Programming Giao diện lập trình ứng dụng Interface ĐATN HTTP Tên tiếng việt Đồ án tốt nghiệp Hypertext Transfer Proto- Giao thức vận chuyển siêu văn col bản IIS Internet Information Ser- Dịch vụ thông tin Internet, vices giống như một Web Server HTML HyperText Markup Lan- Ngôn ngữ đánh dấu siêu văn guage bản ddl dynamic link library Một thư viện chứa các hàm và mã có thể được sử dụng bởi nhiều chương trình cùng một lúc DOM Document Object Model Mô hình các đối tượng tài liệu OS Operating System Hệ điều hành CPU Central Processing Unit Bộ xử lý trung tâm RAM Random Access Memory Bộ nhớ tạm viii DANH MỤC THUẬT NGỮ Thuật ngữ Ý nghĩa Frontend Lớp giao diện người dùng Backend Lớp truy vấn dữ liệu Use case Ca sử dụng Server Máy chủ Component Thành phần giao diện Token Mã xác thực. Đoạn mã duy nhất chứa thông tin danh tính để xác thực Restful Kiểu thiết kế API bao gồm các phương thức tạo, đọc, cập nhật và xóa Mockup Giả lập trong thiết kế giao diện Token Chuỗi mã hoá Cookie Các tệp được tạo ra khi người dùng truy cập vào website ix CHƯƠNG 1. GIỚI THIỆU ĐỀ TÀI Chương 1 đưa ra những vấn đề thực tế dẫn tới lý do chọn đề tài, tổng quan về hệ thống giám sát xe chuyên dùng của ngân hàng. Sau đó đưa ra mục tiêu và phạm vi của đề tài, định hướng giải pháp và bố cục của đồ án. 1.1 Đặt vấn đề Vận chuyển tiền trong ngân hàng là một vấn đề quan trọng. Bởi tiền là loại hàng hoá đặc thù, dòng tiền được cung cấp đầy đủ giúp cho các giao dịch được tiến hành một cách trôi chảy. Không những vậy, tiền là một hàng hoá có giá trị cao nên việc đảm bảo an toàn đảm bảo an toàn cho việc vận chuyển là rất cần thiết, cũng như đảm bảo an toàn tính mạng cho người lái xe, những người liên quan đến việc vận chuyển tiền nói trên. Giúp tạo ra sự hài lòng, tin tưởng từ phía những người sử dụng tiền, dịch vụ của ngân hàng, dần dần thu hút những khách hàng trung thành. Để thực hiện việc vận chuyển tiền trong ngân hàng, thì mỗi ngân hàng sẽ có các đội xe chuyên dùng cùng các nhân viên phụ trách nhiệm vụ trên. Việc vận chuyển tiền cần được diễn ra sao cho nguồn tiền được đảm bảo an toàn. Do đó, các đội xe và nhân viên phụ trách cần được giám sát để việc vận chuyển được vận hành đúng với các kế hoạch, phân công được đặt ra. Tuy nhiên, việc giám sát vận hành của các tổ vận chuyển trong ngân hàng hầu như vẫn diễn ra thủ công, chưa được quản lý tập trung bằng hệ thống phần mềm. Vì vậy, vấn đề đặt ra là cần có một hệ thống phần mềm quản lý tập trung, giám sát các tổ đội vận chuyển này. Do đó, trong khuôn khổ đồ án, tôi sẽ phát triển ứng dụng website quản lý tập trung, giám sát xe chuyên dùng của ngân hàng. Việc quản lý sẽ được diễn ra một cách tự động nhờ sự hỗ trợ của phần mềm. Ứng dụng được tích hợp Google Map API giúp hỗ trợ các cơ sở, tổ công tác dễ dàng trong việc xác định tuyến đường và tính toán được thời gian làm việc giữa các điểm giao dịch. Ứng dụng đồng thời cũng có thể được áp dụng trong các doanh nghiệp chuyên trách công việc vận chuyển hàng hoá mà cần giám sát các đội xe chuyên dùng của mình. Hệ thống giám sát xe sẽ bao gồm nhiều đơn vị. Mỗi đơn vị lại có danh sách cán bộ và thiết bị riêng của mình. Người sử dụng hệ thống bao gồm hai đối tượng chính: (i) người vận hành có các chức năng chính là quản lý thông tin của cán bộ, thiết bị, báo cáo, tạo lập các điểm giao dịch, tuyến mẫu, phân công tuyến; (ii) người quản trị hệ thống có các chức năng chính như giám sát thiết bị và phân quyền người dùng. Vì vậy, tôi sẽ thiết kế phân quyền hệ thống theo hai hướng chính đó là phân quyền theo nhóm chức năng và phân quyền theo đơn vị được phân công quản lý. 1 CHƯƠNG 1. GIỚI THIỆU ĐỀ TÀI 1.2 Mục tiêu và phạm vi đề tài Để giải quyết các vấn đề đã nêu ở trong mục 1.1, đồ án tốt nghiệp của tôi hướng tới mục tiêu chính đó là phát triển website quản lý, giám sát xe chuyên dùng trong ngân hàng. Website sẽ có giao diện trực quan, dễ sử dụng giúp cho người dùng dễ dàng quản lý, nắm bắt các chức năng chính của hệ thống. Các chức năng chính của website sẽ bao gồm: • Giám sát trạng thái xe trực tuyến. • Xem lại lịch sử tuyến và lịch sử xe. • Quản lý thông tin thiết bị và cán bộ. • Quản lý điểm giao dịch, tuyến mẫu và phân công tuyến. • Xem báo cáo và xuất báo cáo. • Phân quyền và quản lý người dùng. Ngoài ra, website sẽ phân quyền động các đối tượng theo từng hành động và phân quyền sử dụng tài nguyên theo danh sách tài nguyên mà mỗi đơn vị được phân công. 1.3 Định hướng giải pháp Khi xây dựng ứng dụng web ta có một số kiến trúc xây dựng ứng dụng chính: • Monilithic. • Microservice. • Serverless. Dựa trên ưu nhược điểm của từng loại kiến trúc và để dễ dàng cho việc bảo trì, mở rộng và phát triển ứng dụng website, tôi quyết định phát triển ứng dụng theo kiến trúc microservice. Ứng dụng sẽ được chia thành hai phần riêng biệt là backend và frontend, hai phần sẽ giao tiếp, trao đổi dữ liệu với nhau thông qua REST API. Về phía backend, tôi quyết định sử dụng nền tảng ASP.Net core. ASP.Net core là một framework đa nền tảng và chạy trên nhiều hệ điều hành khác nhau: Windows, Linux, MAC OS. Về phía database, tôi quyết định sử dụng Sql Server để lưu trữ dữ liệu, do hai công nghệ ASP.Net core và Sql Server đều được phát triển bởi Microsoft và chúng kết hợp với nhau rất tốt. Về phía frontend, website được xây dựng theo hướng Single Page Application (SPA) giúp hiệu năng trang web đạt được cao hơn. Toàn bộ nội dung trang web sẽ được tải vào lần đầu tiên người dùng truy cập. Vào những lần tiếp theo, trang web sẽ chỉ tải lại những nội dung thay đổi giúp việc tải trang được nhanh hơn. Để xây 2 CHƯƠNG 1. GIỚI THIỆU ĐỀ TÀI dựng ứng dụng theo hướng trên, tôi quyết định sử dụng thử viện ReactJs vì ReactJs có thể phân chia trang web thành các component và có thể tái sử dụng các thành phần này. Ngoài ra tôi còn sử dụng thư viện Ant Design là một thư viện giao diện người dùng đã được thiết kế sẵn các component ReactJs để chúng ta có thể tái sử dụng trong việc thiết kế trang web. Để phân quyền người dùng sử dụng ứng dụng web, hệ thống thực hiện việc phân quyền theo mô hình phân quyền RBCA và phân quyền truy cập các tài nguyên theo đơn vị phụ trách. 1.4 Bố cục đồ án Các phần còn lại của báo cáo đồ án tốt nghiệp sẽ có nội dung như sau. Trong chương 2, tôi sẽ đưa ra các khảo sát và phân tích yêu cầu, nêu ra các chức năng tổng quan và phân rã nhỏ một số chức năng của ứng dụng. Trong chương 3, tôi sẽ nêu ra các công nghệ chính để phát triển hệ thống. Phía frontend sử dụng ReactJs, Antd, @react-google-map-api. Phía backend sử dụng ASP.Net core và Sql Server. Chương 4 sẽ trình bày về thiết kế kiến trúc của hệ thống, thiết kế cơ sở dữ liệu, các quá trình xây dựng, kiểm thử, triển khai hệ thống. Chương 5 sẽ nêu lên những giải pháp đóng góp nổi bật mà tôi đưa ra trong ứng dụng giám sát hệ thống xe chuyên dụng của ngân hàng như thiết kế phân quyền động người dùng. Cuối cùng sẽ là chương 6, tôi sẽ nêu ra các đóng góp chính của đồ án và các phương hướng phát triển sản phẩm trong tương lai. 3 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU 2.1 Khảo sát hiện trạng Hiện nay trên thị trường đã có một số hệ thống giám sát xe chở tiền của ngân hàng, nổi bật nhất là 2 ứng dụng TTAS [1] (phần mềm giám sát hành trình do công ty TNHH TTAS cung cấp), BAGPS [2] (phần mềm giám sát hành trình do công ty TNHH phát triển công nghệ điện tử Bình Anh cung cấp). Ứng dụng TTAS có các chức năng chính như giám sát đóng mở cửa két sắt, cảnh báo khẩn cấp, giám sát các thông tin vị trí, vận tốc, trạng thái tắt mở hay thời gian dừng đỗ của xe, quản lý tài xế, lưu trữ hành trình xe khi mất sóng, lưu trữ lịch sử hành trình xe trong 90 ngày. Ứng dụng BAGPS đã có các tính năng phát triển hơn so với ứng dụng TTAS. Ngoài các tính năng đã nêu ở trên như của ứng dụng TTAS thì BAGPS còn cho xuất các báo cáo theo ngày, tuần, tháng các báo cáo liên quan đến nhiên liệu, hành trình xe... Cả hai ứng dụng trên về cơ bản đều là các ứng dụng giám sát hành trình, có thể áp dụng trong nhiều hệ thống quản trị vận tải chuyên biệt khác nhau. Tuy nhiên trong việc vận chuyển hàng hoá đặc biệt đó là vận chuyển tiền trong ngân hàng thì mới tập trung vào việc giám sát hành trình của các xe vận chuyển, trạng thái xe và các thiết bị trên xe, lưu trữ lịch sử hành trình xe, hai phần mềm trên chưa đưa ra được các chức năng như quản lý điểm giao dịch, tạo tuyến mẫu để so sánh với hành trình thực tế của xe, quản lý các thành viên trong tổ công tác, quản lý danh sách các thiết bị. Từ những phân tích ở trên, tôi sẽ phát triển hệ thống giám sát xe chuyên dùng chở tiền trong ngân hàng với đầy đủ các tính năng đã nêu trong phần mục tiêu và phạm vi đề tài. 4 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU 2.2 Tổng quan chức năng 2.2.1 Biểu đồ use case tổng quát Hình 2.1: Biểu đồ use case tổng quát hệ thống giám xe xe chuyên dụng. Hình 2.1 là biểu đồ use case tổng quát của hệ thống quản lý xe chuyên dùng trong ngân hàng. Hệ thống gồm có hai tác nhân chính đó là Admin (quản trị hệ thống) và Operator (Người vận hành hệ thống). Người vận hành hệ thống có các chức năng giám sát trực tuyến, quản lý lịch sử, quản lý thông tin cán bộ và thiết bị, quản lý điểm giao dịch và tuyến mẫu, phân công tuyến, quản lý báo cáo. Người quản trị hệ thống kế thừa các chức năng của người vận hành hệ thống và có thể quản lý người dùng và các quyền người dùng, quản lý các đơn vị. 5 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU 2.2.2 Biểu đồ use case phân rã a, Biểu đồ use case phân rã giám sát trực tuyến Hình 2.2: Biểu đồ use case phân rã giám sát trưc tuyến. Hình 2.2 là biểu đồ use case phân rã giám sát trực tuyến. Người vận hành có thể xem trạng thái trực tuyến các xe, sửa thông tin các tuyến đang chạy và sắp chạy, xem lịch sử chạy tuyến của các xe. Ngoài ra người vận hành còn có thể quan sát lịch sử di chuyển của xe, chọn thời điểm bắt đầu xem lịch sử. Người quản trị kế thừa các chức năng của người vận hành. 6 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU b, Biểu đồ use case phân rã quản lý lịch sử Hình 2.3: Biểu đồ use case phân rã quản lý lịch sử. Hình 2.3 là biểu đồ use case phân rã quản lý lịch sử. Người vận hành có thể xem lịch sử chạy của tuyến, xem lịch sử chạy của xe. Người quản trị kế thừa các chức năng của người vận hành. 7 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU c, Biểu đồ use case phân rã quản lý thông tin cán bộ và thiết bị Hình 2.4: Biểu đồ use case phân rã quản lý thông tin cán bộ và thiết bị. Hình 2.4 là biểu đồ use case phân rã quản lý thông tin cán bộ và thiết bị. Người vận hành có thể thực hiện các thao thêm, cập nhật, xoá thông tin cán bộ và thiết bị, xem danh sách cán bộ, thiết bị. Người quản trị kế thừa các chức năng của người vận hành. 8 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU d, Biểu đồ use case phân rã quản lý điểm giao dịch, tuyến mẫu Hình 2.5: Biểu đồ use case phân rã quản lý điểm giao dịch và tuyến mẫu. Hình 2.5 là biểu đồ use case phân rã quản lý điểm giao dịch và tuyến mẫu. Người vận hành có thể thực hiện các thao thêm, cập nhật, xoá thông tin điểm giao dịch, tuyến mẫu, thêm bớt các điểm giao dịch vào hành trình của tuyến mẫu, xem danh sách các điểm giao dịch và tuyến mẫu. Người quản trị kế thừa các chức năng của người vận hành. 9 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU e, Biểu đồ use case phân rã quản lý báo cáo Hình 2.6: Biểu đồ use case phân rã quản lý báo cáo. Hình 2.6 là biểu đồ use case phân rã quản lý báo cáo. Người vận hành có thể thực hiện xem báo cáo, lưu báo cáo trên server, tải báo cáo về máy hoặc xem báo cáo định dạng file. Người quản trị kế thừa các chức năng của người vận hành. 10 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU f, Biểu đồ use case phân rã quản lý người dùng và phân quyền Hình 2.7: Biểu đồ use case phân rã quản lý người dùng và phân quyền. Hình 2.7 là biểu đồ use case phân rã quản lý người dùng và phân quyền.Người vận hành có thể thực hiện các thao tác thêm mới, cập nhật, xoá người dùng, phân quyền người dùng, đổi mật khẩu tài khoản người dùng, xem danh sách người dùng. Người quản trị kế thừa các chức năng của người vận hành. 2.2.3 Quy trình nghiệp vụ Quy trình hoạt động chính của hệ thống giám sát xe chuyên dùng sẽ diễn ra như sau. Hình 2.8: Biểu đồ quy trình hoạt động chính của hệ thống. 11 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU Đầu tiên, người dùng sẽ thêm các điểm giao dịch. Khi có các điểm giao dịch, thực hiện tạo lập các tuyến mẫu. Các tuyến mẫu này sẽ được phân công cho các tổ công tác. Khi tổ công tác có phân công, thực hiện giám sát tuyến tại màn hình giám sát. Sau mỗi tuyến được phân công, người dùng có thể xem lại báo cáo về hoạt động của tuyến, xe. Trong quy trình hoạt động trên, thì hoạt động phân công tuyến là quan trọng nhất. Hình 2.9 thể hiện quy trình nghiệp vụ phân công tuyến. Khi người vận hành/ quản trị thực hiện phân công mới, thực hiện chọn danh sách cán bộ tham gia làm nhiệm vụ tuyến được phân công. Hệ thống sẽ kiểm tra xem trong thời gian phân công tuyến mới, cán bộ và thiết bị đã được phân công trong tuyến nào hay chưa. Nếu cán bộ, thiết bị đã được phân công, hệ thống thông báo tới người dùng thông báo cán bộ, thiết bị đã được phân công. Khi đó, người dùng thực hiện chọn cán bộ, thiết bị khác. Nếu cán bộ, thiết bị chưa được phân công trong tuyến nào, hệ thống sẽ tạo phân công mới và gửi thông báo phân công đến cán bộ tham gia. Hình 2.9: Biểu đồ hoạt động quy trình nghiệp vụ phân công tuyến. 2.3 Đặc tả chức năng 12 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU 2.3.1 Đặc tả use case phân quyền người dùng Bảng 2.1: Đặc tả use case phân quyền người dùng. Mã use UC006 case Tên use case Phân quyền người dùng Tác nhân Người quản trị hệ thống Tiền điều kiện Người dùng đã đăng nhập thành công vào hệ thống, đang ở giao diện quản lý tài khoản người dùng Luồng sự kiện chính Luồng sự kiện phát sinh Hậu điều kiện 13 STT 1 2 Thực hiện bởi Người dùng Hệ thống 3 4 5 Người dùng Người dùng Hệ thống 6 Người dùng 7 Hệ thống 8 9 Người dùng Hệ thống 5a Hệ thống 5a Hệ thống 9a Hệ thống 9a Hệ thông Không Hành động Chọn thêm mới tài khoản Hiển thị giao diện thêm mới tài khoản Chọn quyền cho tài khoản mới Chọn tạo tài khoản mới Thông báo tạo tài khoản mới thành công Chọn cập nhật quyền tài khoản hiện có Hiển thị bảng thông tin phân quyền của tài khoản Cập nhật quyền cho tài khoản Thông báo cập nhật quyền thành công Thông báo chưa chọn đơn vị quản lý cho tài khoản Thông báo chưa chọn nhóm quyền quản lý cho tài khoản Thông báo đơn vị quản lý không được để trống Thông báo nhóm quyền không được để trống CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU 2.3.2 Đặc tả use case cập nhật thông tin tuyến trong ngày Bảng 2.2: Đặc tả use case cập nhật thông tin tuyến trong ngày. Mã use UC001 case Tên use case Cập nhật thông tin tuyến trong ngày Tác nhân Người vận hành/ quản trị Tiền điều kiện Người dùng đã đăng nhập thành công vào hệ thống, đang ở giao diện giám sát trực tuyến Luồng sự kiện chính STT 1 Thực hiện bởi Người dùng 2 3 Hệ thống Người dùng 4 5 Người dùng Hệ thống Luồng sự kiện phát sinh 3a Người dùng 5a Hệ thông Hậu điều kiện Không 2.3.3 Hành động Chọn tuyến trong ngày cần cập nhật (tuyến đang chạy và sắp chạy) Hiển thị thông tin tuyến Thực hiện chỉnh sửa thông tin tuyến Chọn cập nhật thông tin tuyến Thông báo cập nhật thông tin tuyến thành công Chỉnh sửa số điểm của hành trình tuyến không thoả mãn số lượng điểm tối thiểu Thông báo số điểm giao dịch thuộc hành trình không thoả mãn Đặc tả use case xem lịch sử chạy tuyến 14 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU Bảng 2.3: Đặc tả use case xem lịch sử chạy tuyến. Mã use UC002 case Tên use case Xem lịch sử chạy tuyến Tác nhân Người vận hành/ quản trị Tiền điều kiện Người dùng đã đăng nhập thành công vào hệ thống, đang ở giao diện quản lý lịch sử STT 1 2 Thực hiện bởi Người dùng Người dùng Hành động Lọc tìm danh sách tuyến Chọn tuyến cần xem lịch sử 3 Hệ thống 4 Người dùng 5 Hệ thống Hiển thị hành trình tuyến và lịch sử chạy thực tế của xe được phân công chạy tuyến Chọn xem hành trình theo thời gian Hiển thị biểu tượng xe di chuyển theo thời gian trên lịch sử chạy Luồng sự kiện phát sinh 3a Hệ thống 5a Hệ thông Hậu Không Luồng sự kiện chính Thông báo không có lịch sử xe chạy của tuyến này Thông báo không có lịch sử chạy xe điều kiện 2.3.4 15 Đặc tả use case xem lịch sử chạy xe CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU Bảng 2.4: Đặc tả use case xem lịch sử chạy xe. Mã use UC003 case Tên use case Xem lịch sử chạy xe Tác nhân Người vận hành/ quản trị Tiền điều kiện Người dùng đã đăng nhập thành công vào hệ thống, đang ở giao diện quản lý lịch sử Luồng sự kiện chính Luồng sự kiện phát sinh Hậu điều kiện 2.3.5 STT 1 Thực hiện bởi Người dùng Hành động Chọn lọc lịch sử chạy xe theo ngày 2 3 Người dùng Hệ thống 4 Người dùng 5 Hệ thống Chọn xem lịch sử Hiển thị lịch sử chạy xe và các cảnh báo Chọn xem hành trình theo thời gian Hiển thị biểu tượng xe di chuyển theo thời gian trên lịch sử chạy 3a Hệ thống 3a Hệ thống 5a Hệ thông Thông báo không có lịch sử chạy xe trong ngày này Thông báo quãng thời gian quá dài, hãy chọn xem lịch sử trong một ngày Thông báo không có lịch sử chạy xe trong ngày đã chọn Không Đặc tả use case cập nhật hành trình tuyến mẫu 16 CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU Bảng 2.5: Đặc tả use case cập nhật hành trình tuyến mẫu. Mã use UC004 case Tên use case Cập nhật hành trình tuyến mẫu Tác nhân Người vận hành/ quản trị Tiền điều kiện Người dùng đã đăng nhập thành công vào hệ thống, đang ở giao diện quản lý tuyến mẫu STT 1 Thực hiện bởi Người dùng Hành động Chọn lọc tuyến mẫu cần cập nhật lịch sử 2 Hệ thống 3 Người dùng 4 5 Người dùng Hệ thống Hiển thị thông tin hành trình của tuyến mẫu Cập nhật danh sách điểm giao dịch của tuyến mẫu Chọn lưu hành trình tuyến mẫu Thông báo cập nhật hành trình tuyến mẫu thành công Luồng sự kiện phát sinh 3a Hệ thống 5a Hệ thông Hậu điều kiện Không Luồng sự kiện chính 2.3.6 17 Thông báo số điểm giao dịch trong hành trình không được nhỏ hơn 2 Thông báo lỗi cập nhật không thành công Đặc tả use case phân công tuyến CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH YÊU CẦU Bảng 2.6: Đặc tả use case phân công tuyến. Mã use UC005 case Tên use case Phân công tuyến Tác nhân Người vận hành/ quản trị Tiền điều kiện Người dùng đã đăng nhập thành công vào hệ thống, đang ở giao diện phân công tuyến Luồng sự kiện chính STT 1 2 Thực hiện bởi Người dùng Hệ thống 3 Người dùng 4 5 Người dùng Hệ thống Luồng sự kiện phát sinh 5a Hệ thống 5a Hệ thông Hậu điều kiện Không Hành động Chọn tạo phân công tuyến mới Hiển thị giao diện phân công tuyến mới Chọn danh sách cán bộ và thiết bị tham gia phân công Chọn lưu phân công tuyến Thông báo tạo phân công tuyến thành công Thông báo cán bộ hoặc thiết bị đã được phân công Thông báo tạo phân công mới không thành công 18 CHƯƠNG 3. CÔNG NGHỆ SỬ DỤNG Chương 2 đã khảo sát và phân tích yêu cầu hệ thống. Trong chương 3 này, tôi sẽ trình bày về các công nghệ sử dụng để phát triển hệ thống giám sát xe chuyên dụng trong ngân hàng. Hệ thống được chia thành hai phần frontend và backend. Phía frontend sử dụng thư viện ReactJs và Ant Design để xây dựng giao diện. Ngoài ra, để hỗ trợ trong việc sử dụng Google Map API, tôi có sử dụng thêm hai thư viện react-geocode và @react-google-maps/api. Phía backend sử dụng công nghệ ASP.Net Core và Microsoft Sql Server để lưu trữ dữ liệu. 3.1 Frontend 3.1.1 ReactJs ReactJs [3] là một thư viện javascript được sử dụng để xây dựng giao diện người dùng cho các ứng dụng chạy trên nền tảng web. React giúp tạo giao diện người dùng dễ tương tác. Các ứng dụng web được viết bằng ReactJs chạy nhanh và đạt được hiệu năng cao. Nguyên nhân là do các ứng dụng ReactJs chỉ cập nhật các phần giao diện có liên quan đến phần dữ liệu bị thay đổi. Dưới đây là một số điểm nổi bật của ReactJs: Component-Based: ứng dụng ReactJs được xậy dựng dựa trên việc liên kết các thành phần (component) nhỏ lại với nhau. Do đó, thay vì phải quan tâm đến việc xây dựng cả một giao diện lớn hoàn chỉnh, chúng ta sẽ quan tâm đến việc xây dựng các component nhỏ (ví dụ như một nút bấm, một select box, một menubar. . . ), rồi ghép nối chúng lại với nhau để được một giao diện hoàn chỉnh. Điều đó giúp việc thực hiện và gỡ lỗi chương trình trở nên dễ dàng hơn. React sử dụng JSX (javascript XML), là một loại cú pháp javascript mở rộng, giúp trộn các đoạn mã HTML vào trong mã javascript, thay vì việc phải nối chuỗi các đoạn HTML lại với nhau. JSX cũng được tối ưu trong quá trình biên dịch, do đó khi chạy nó cũng sẽ nhanh hơn khi viết với file javascript thông thường. ReactJs sử dụng luồng dữ liệu một chiều (one-way binding), khác với các framework javascript khác như angular, sử dụng luồng dữ liệu hai chiều (two-way binding). Dữ liệu sẽ được truyền theo một chiều từ component cha đến các component con. Điều này cũng giúp chúng ta kiểm soát luồng dữ liệu một cách tốt hơn. ReactJs sử dụng Virtual DOM. Virtual DOM tồn tại và ánh xạ song song với DOM thật. Khi có dữ liệu bị thay đổi, Virtual DOM sẽ lấy trạng thái ngay trước đó và so sánh với trạng thái hiện tại, xem những phần nào bị thay đổi và chỉ thực hiện cập nhật giao diện liên quan đến những phần bị thay đổi đó. Do đó, ứng dụng web 19 CHƯƠNG 3. CÔNG NGHỆ SỬ DỤNG được viết bằng ReactJs chạy nhanh và đạt được hiệu năng cao. 3.1.2 Ant Design 3.1.3 React Geocode Một trong những thao tác quan trọng nhất khi làm việc với Goolge Map API là chuyển từ địa chỉ cụ thể sang toạ độ địa lý và ngược lại. Việc này giúp ích trong việc thiết kế một số chức năng trong hệ thống giám sát xe chuyên dùng của ngân hàng như: từ việc biết toạ độ địa lý hiện tại của xe ta sẽ hiển thị địa chỉ hiện tại của xe trên màn hình, thêm toạ độ của điểm giao dịch bằng cách nhập địa chỉ cụ thể của điểm giao dịch đó... React Geocode [4] chính là thư viện giúp xử lý những công việc đó. Thư viện này sử dụng Google Maps Geocoding API, một API giúp xử lý công việc chuyển đổi giữa toạ độ và địa chỉ nêu trên. Để làm việc với API này thì cần có API key. Dưới đây là một số phương thức thư viện React Geocode cung cấp. Bảng 3.1: Các phương thức React Geocode. STT tên phương thức Mô tả 1 setApiKey Chỉ định key để sử dụng Google Map Geocode API 2 setLanguage Chỉ định ngôn ngữ để phân tích cú pháp khi chuyển đổi, mặc định là tiếng anh 3 setRegion Chỉ định khu vực để phân tích cú pháp khi chuyển đổi 4 setLocationType Chỉ định định dạng của địa chỉ sau khi đã chuyển đổi 5 enableDebug Chỉ định cho phép ghi log 6 fromLatLng Chuyển đổi từ toạ độ địa lý thành địa chỉ, đầu vào là cặp kinh độ, vĩ độ 7 fromAddress Chuyển đổi từ địa chỉ cụ thể sang toạ độ địa lý, đầu vào là địa chỉ cụ thể 3.1.4 @react-google-maps/api Thư viện @react-google-maps/api [5] cung cấp các component react có sẵn để làm việc với Google Map API một cách dễ dàng. Sau đây là một số component chính được sử dụng để phát triển hệ thống giám sát xe chuyên dùng trong ngân hàng. • Google Map: component giúp hiển thị bản đồ. 20 CHƯƠNG 3. CÔNG NGHỆ SỬ DỤNG • Marker: component đánh dấu các điểm chỉ định lên bản đồ. Biểu tượng đánh dấu có thể dùng các biểu tượng có sẵn của Google Map hoặc ảnh. Component này được sử dụng để đánh dấu vị trí các xe và điểm giao dịch trên bản đồ. • InfoBox: component được sử dụng để hiển thị các thông tin chú thích thêm cho Marker khi nhấn vào biểu tượng của Marker. Component này được sử dụng để hiển thị thông tin chi tiết các điểm giao dịch trên bản đồ. • DirectionRender: component giúp hiển thị tuyến đường đi giữa các điểm chỉ định trên bản đồ. Component này được sử dụng để hiển thị đường đi của tuyến mẫu trên bản đồ. • DirectionService: component này được dùng để bọc component DirectionRender, đầu vào là danh sách các điểm cần định tuyến đường đi, kết quả trả về là tuyến đường giữa các điểm và component DirectionRender sẽ lấy kết quả đó để hiển thị đường đi. • Polyline: component hỗ trợ việc kẻ đường thẳng giữa các điểm trên bản đồ. Đầu vào sẽ là danh sách kinh độ, vĩ độ giữa các điểm. Component này được sử dụng để vẽ đường đi, lịch sử chạy của các xe. • AutoComplete: component này là một ô nhập liệu, khi nhập địa chỉ sẽ hiển thị danh sách các địa điểm gợi ý bên dưới và toạ độ tương ứng của các địa điểm này. Component này được sử dụng để nhập thông tin của các điểm giao dịch. 3.2 Backend 3.2.1 ASP.Net core ASP.Net core [6] là một framework mã nguồn mở, đa nền tảng giúp xây dựng các ứng dụng hiện đại, hỗ trợ kết nối đám mây, internet. Với ASP.Net core chúng ta có thể: • Xây dựng các ứng dụng web, app, IOT hoặc các ứng dụng di động. • Sử dụng các công cụ phát triển trên cả ba nền tảng Windows, Linux, MacOS. • Triển khai trên môi trường đám mây. • Chạy trên nền tảng .Net core. Một số đặc điểm nổi bật của ASP.NET core: • Thống nhất việc xây dựng giao diện và web APIs. • Dễ dàng triển khai test. • Razor Pages giúp xây dựng giao diện dễ dàng và hiệu quả hơn. • Blazor giúp có thể lồng các đoạn mã javascript vào trong các đoạn mã C#. 21 CHƯƠNG 3. CÔNG NGHỆ SỬ DỤNG Chia sẻ logic giữa server và client, tất cả được viết bằng ngôn ngữ C#. • Phát triển ứng dụng đa nền tảng. • Mã nguồn mở và cộng đồng rộng lớn. • Hỗ trợ Remote Procedure Call (RPC) sử dụng gRPC. • Tích hợp sẵn các cấu hình cho việc triển khai trên môi trường đám mây. • Tích hợp sẵn Dependence Injection. • ... 3.2.2 Microsoft Sql Server Microsoft Sql Server [7] là một hệ quản trị cơ sở dữ liệu quan hệ được phát triển bởi Microsoft. Là một máy chủ cơ sở dữ liệu, nó là một sản phẩm phần mềm có chức năng chính là lưu trữ và truy xuất dữ liệu theo yêu cầu của các ứng dụng phần mềm khác. Có thể chạy trên cùng một máy tính hoặc trên một máy tính khác trên mạng (bao gồm cả Internet). Microsoft tiếp thị ít nhất một chục phiên bản Microsoft Sql Server khác nhau, nhắm vào các đối tượng khác nhau và cho khối lượng công việc khác nhau, từ các ứng dụng máy đơn nhỏ đến các ứng dụng Internet lớn có nhiều người dùng đồng thời. Hai công nghệ ASP.Net Core và Microsoft Sql Server đều được phát triển bởi Miccrosoft. Do đó, tôi quyết định sử dụng hai công nghệ trên để phát triển backend vì chúng kết hợp với nhau rất tốt, có cộng đỗ hỗ trợ rộng lớn, dễ dàng tìm được sự hỗ trợ khi gặp lỗi trong quá trình phát triển chương trình. 22 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Trong các chương trước, tôi đã khảo sát, phân tích yêu cầu và tìm hiểu các công nghệ liên quan đến việc phát triển phần mềm. Chong chương 4 này, tôi sẽ trình bày tổng quan kiến trúc hệ thống, thiết kế chi tiết hệ thống cũng như kết quả đạt được, kiểm thử và triển khai hệ thống. 4.1 Thiết kế kiến trúc 4.1.1 Lựa chọn kiến trúc phần mềm Để có thể dễ dàng trong việc phát triển, triển khai, bảo trì ứng dụng, tôi quyết định phát triển ứng dụng theo kiến trúc Microservice. Microservice là kiến trúc thiết kế phần mềm, chia phần mềm thành nhiểu dịch vụ nhỏ, độc lập với nhau, làm giảm sự trùng lặp, tăng sự gắn kết và dễ dàng kết nối giữa các bộ phận thông qua giao thức RESTful API, do đó làm cho các thành phần của hệ thống tổng thể dễ hiểu hơn, dễ mở rộng hơn và dễ thay đổi hơn. Dưới đây là một số ưu điểm của microservie. • Linh động trong việc chọn công nghệ để triển khai các service, do đó các service sẽ dễ dàng phát triển, thử nghiệm, triển khai. • Dễ dàng bảo trì do mỗi service là độc lập. • Tăng hiệu suất phát triển, mỗi service được phát triển độc lập, không phụ thuộc vào service khác. • Khả năng mở rộng theo chiều ngang, giúp các service luôn sẵn sàng đáp ứng. • ... Bên cạnh đó thì thiết kế ứng dụng theo kiến trúc Microservice vẫn còn tồn tại những nhược điểm sau: • Quá trình triển khai sẽ phức tạp do mỗi service được thiết kế khác nhau. • Đòi hỏi phải tính toán độ lớn của service, nếu không nó sẽ trở thành nguyên khối nếu quá lớn, hoặc chia quá nhỏ thì sẽ có quá nhiều service gây khó khăn trong việc quản lý. • Bảo mật với mỗi service. • ... Từ các phân tích trên, ứng dụng giám sát xe chuyên dùng trong ngân hàng sẽ có kiến trúc như sau: 23 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Hình 4.1: Kiến trúc tổng quát hệ thống. Hình 4.1 mô tả kiến trúc tổng quát của hệ thống. Hệ thống bao gồm các thành phần chính: (i) thành phần giao diện được người dùng truy cập thông qua web browser, (ii) hệ thống giám sát xe chuyên dùng, (iii) service nhận thông tin từ thiết bị và cập nhật vào cơ sở dữ liệu (bao gồm các thông tin trạng thái trực tuyến, lịch sử, cảnh báo...), (iv) service thực hiện chức năng trích xuất báo cáo. Người dùng sẽ sử dụng web browser truy cập vào giao diện giám sát xe chuyên dùng. Thành phần giao diện sẽ gửi yêu cầu lấy dữ liệu từ hệ thống giám sát xe chuyên dùng. Hệ thống giám sát xe chuyên dùng sẽ xác thực và phân quyền người dùng để truy cập vào cơ sở dữ liệu lấy dữ liệu tương ứng trả về cho thành phần giao diện. Service nhận thông tin từ thiết bị sẽ cập nhật thông tin vào cơ sở dữ liệu. Hệ thống giám sát sẽ lấy dữ liệu này để gửi và hiển thị trạng thái trực tuyến, lịch sử, cảnh báo của xe lên thành phần giao diện. Service trích xuất báo cáo sẽ trích xuất thông tin từ lịch sử. trạng thái xe, thiết bị và lưu vào cơ sở dữ liệu. Hệ thống giám sát sẽ lấy dữ liệu này để hiển thị báo cáo tổng hợp. 24 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ 4.1.2 Thiết kế tổng quan Hình 4.2: Biểu đồ phụ thuộc gói. Hình 4.2 là biểu đồ thể hiện sự phụ thuộc gói. Trong đó các gói có vai trò như sau. Thành phần giao diện: • Gói Components chứa các thành phần giao diện. • Gói Configs chứa các thông tin cấu hình của phần mềm. • Gói Stores chứa thông tin lưu trữ các trạng thái của giao diện phần mềm. • Gói Handle chứa các hàm xử lý logic cho giao diện. • Gói Utils chứa các hàm tiện ích. • Gói DTOs chứa các lớp định nghĩa các đối tượng sử dụng chung. Thành phần server: • Gói Controlers chứa các hàm xử lý logic và trả về dữ liệu. • Gói Services chứa các hàm làm việc với cơ sở dữ liệu. • Gói Repositories chứa các định nghĩa hàm xử lý dữ liệu và kết quả trả về. • Gói Models chứa các lớp định nghĩa các bảng trong cơ sở dữ liệu. • Gói Utils chứa các hàm tiện ích. • Gói Middlewares chứa các hàm xử lý trung gian giữa yêu cầu người dùng và 25 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ controler. 4.1.3 Thiết kế chi tiết gói Hình 4.3: Thiết kế chi tiết gói backend. 26 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Hình 4.3 mô tả thiết kế chi tiết các gói trong backend server quản lý xe chuyên dùng. Trong đó các gói controllers sẽ gọi các gói trong service để lấy dữ liệu. Các gói trong service sẽ thực thi các gói trong repositories đã được định nghĩa các hàm với kết quả trả về. Các hàm này sử dụng các gói trong models để làm việc với các dữ liệu trong cơ sở dữ liệu. Các gói trong services sẽ sử dụng các hàm tiện ích trong gói utils. 27 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Hình 4.4: Thiết kế chi tiết gói frontend. Hình 4.3 mô tả thiết kế chi tiết các gói trong giao diện quản lý xe chuyên dùng. Các thành phần trong gói component là các thành phần chung nhất, trong đó sẽ có chứa các component con liên quan đến nhau (Ví dụ trong thành phần History sẽ có chứa các component như History, HistoryList) 28 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ 4.2 Thiết kế chi tiết 4.2.1 Thiết kế giao diện a, Thiết kế mockup Hình 4.5: Thiết kế mockup hệ thống giám sát xe chuyên dùng. Hình 4.5 miêu tả thiết kế mockup của giao diện giám sát xe chuyên dùng. Giao diện có giao diện gồm 3 phần chính đó là Header, Sidebar, Content. Trong đó có hai phần cố định đó là Header và SideBar, chỉ có phần content nội dung sẽ thay đổi theo các chức năng mà người dùng chọn. Toàn bộ giao diện trang web được sử dụng chung cấu hình như bảng 4.1. Bảng 4.1: Các cấu hình chung của giao diện trang web Thuộc tính Cấu hình Độ phân giải HD (1280x720), Full HD (1920x1080) màn hình Màu nền Xám nhạt (#f4f6f9) Màu lỗi Đỏ (#ff4d4f) Màu thành công Xanh lá (#2fd351) Font chữ Sans-serif Font chữ đậm 600 Bo góc 1px Xem tiếp ở trang sau 29 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Bảng 4.1 – Các cấu hình chung – Tiếp theo Màu viền Xám (#797979) Vị trí hiển thị Phía trên bên phải màn hình thông báo b, Các thành phần giao diện Hình 4.6: Các thành phần giao diện. Hình 4.6 miêu tả các thành phần giao diện. Đầu tiên khi truy cập ứng dụng, nếu chưa đăng nhập, người dùng sẽ được điều hướng sang trang đăng nhập, nếu đã đăng nhập rồi thì sẽ chuyển hướng sang trang bảng điều khiển. Trang bảng điều khiển gồm 3 thành phần chính đó là phần Navbar (có các điều hướng để chuyển nội dung của phần content), Header (Chứa một vài menu nhỏ như đăng xuất, chỉnh sửa thông tin. . . ) và Content (Hiển thị các nội dung chính của trang điều khiển). 30 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ 4.2.2 Thiết kế API Thành phần frontend và backend giao tiếp với nhau thông qua REST API. API được thiết kế đường dẫn theo nguyên tắc: / + (Tên resoure) (Để ở danh từ số nhiều) + / + (Định danh) (Sử dụng trong trường hợp muốn lấy, cập nhật hoặc xoá một đối tượng theo định danh). Các API cùng đường dẫn phân biệt với nhau bằng phương thức (GET, POST, PUT, DELETE, PATCH). Các nhóm resource gồm có: user (người dùng), unit (đơn vị), permission (quyền), scope (nhóm quyền), car (xe), device (thiết bị), member (cán bộ), rfid (thẻ định danh rfid), online (trạng thái trực tuyến của xe), history (lịch sử), transaction point (điểm giao dịch), route (tuyến mẫu), segmentation (phân công), report (báo cáo). Ví dụ API với resource là car: • Lấy danh sách xe: GET /cars. • Thêm thông tin xe mới: POST /cars. • Sửa thông tin xe với ID là 1: PUT /cars/1. • Xoá xe với ID là 1: DELETE /cars/1. 31 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ 4.2.3 Thiết kế lớp a, Thiết kế lớp thuốc chức năng quản lý phân công Hình 4.7: Thiết kế các lớp thuộc chức năng quản lý phân công tuyến. 32 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Hình 4.8: Biểu đồ trình tự usecase quản lý phân công tuyến. Hình 4.8 mô tả các thao tác quản lý phân công tuyến từ khi tạo phân công tuyến mới đến giám sát phân công tuyến trực tuyến. Đầu tiên người dùng sẽ tạo phân công tuyến mới ở giao diện phân công tuyến. Sau đó, người dùng sẽ vào giao diện quản lý trực tuyến. Ở giao diện quản lý trực tuyến sẽ hiển thị các phân công tuyến đang chạy và sắp chạy trong ngày. Người dùng có thể thực hiện thay đổi tuyến đường đi, thời gian khởi hành và kết thúc của các phân công tuyến đang chạy và sắp chạy. 33 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ b, Thiết kế lớp thuộc chức năng quản lý người dùng Hình 4.9: Thiết kế các lớp thuộc chức năng quản lý người dùng. 34 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Hình 4.10: Biểu đồ trình tự usecase quản lý phân người dùng. Hình 4.10 mô tả các thao tác quản lý người dùng từ việc lập tài khoản cho đến việc đăng nhập vào hệ thống. Đầu tiên tài khoản người dụng sẽ được tạo ở giao diện quản lý người dùng. Sau đó, tài khoản sẽ được chỉnh sửa quyền, nhóm quyền và đơn vị quản lý. Sau khi được chỉnh sửa quyền và đơn vị quản lý, người dùng sẽ thực hiện đăng nhập vào hệ thống. Nếu đăng nhập thành công, mã token sẽ được trả lại và lưu vào cookie của trình duyệt, phục vụ thao tác phân quyền khi gọi API, người dùng được chuyển hướng đến các giao diện quản lý. Nếu đăng nhập thất bại thì đưa ra thông báo và người dùng thực hiện đăng nhập lại. 35 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ 4.2.4 Thiết kế cơ sở dữ liệu Hình 4.11: Biểu đồ thực thể liên kết (E-R diagram). Hình 4.11 là biểu đồ thực thể liên kết biểu thị các thực thể chính của hệ thống. Mỗi người (user) dùng sẽ quản lý một số đơn vị (unit) và thuộc một nhóm quyền (scope). Một nhóm (scope) quyền sẽ có nhiều quyền (permission). Một đơn vị (unit) sẽ quản lý bao gồm nhiều xe (car). Mỗi xe gồm các thiết bị (device) được định danh bởi mã IMEI. Một đơn vị (unit) quản lý nhiều cán bộ (member). Cán bộ (member) sẽ có 3 loại chính đó là: lái xe, chủ hàng, kỹ thuật viên ATM. Cán bộ (member) và xe (car) được định danh bằng 1 thẻ rfid duy nhất. Một đơn vị (unit) sẽ có nhiều điểm giao dịch (transaction point) và nhiều tuyến mẫu (sample route). Mỗi tuyến mẫu (sample route) là một danh sách các điểm giao dịch (transaction point). Một đơn vị (unit) sẽ có nhiều phân công tuyến (segmentation). Mỗi phân công tuyến (segmentation) bao gồm một tuyến mẫu (sample route), 1 xe (car) và 3 cán bộ (member) bao gồm: lái xe, chủ hàng và kỹ thuật viên ATM. Xe (car) sẽ có nhiều lịch sử (history), một trạng thái trực tuyến (online) và nhiều báo cáo (report) 36 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Hình 4.12: Biểu đồ thiết kế cơ sở dữ liệu. . Các bảng dưới đây sẽ mô tả cấu trúc chi tiết các bảng của cơ sở dữ liệu 37 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Bảng 4.2: Thiết kế chi tiết bảng User. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của người dùng UserName varchar(20) Có Tên đăng nhập Password varchar(MAX) Có Mật khẩu (Lưu chuỗi băm) Status bit Có Trạng thái hoạt động ScopeId int Không Id của nhóm quyền . Bảng 4.3: Thiết kế chi tiết bảng Scope. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của nhóm quyền Name nvarchar(255) Có Tên nhóm quyền AllowedRoutes nvarchar(255) Có Danh sách các giao diện được phép truy cập . Bảng 4.4: Thiết kế chi tiết bảng Permission. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của quyền Resource nvarchar(255) Có Tên tài nguyên Url varchar(50) Có Đường dẫn API Method varchar(10) Có Phương thức gọi API Action nvarchar(255) Có Đặc tả hành động Filter varchar(10) Không Đối tượng lọc FilterValue varchar(MAX) Không Giá trị lọc . 38 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Bảng 4.5: Thiết kế chi tiết bảng ScopePermission. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id định danh Allowed bit Có Có cho phép truy cập quyền Filter varchar(MAX) Không Các giá trị lọc PermissionId int Có Id của quyền ScopeId int Có Id của nhóm quyền . Bảng 4.6: Thiết kế chi tiết bảng Unit. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của đơn vị Name nvarchar(255) Có Tên đơn vị . Bảng 4.7: Thiết kế chi tiết bảng UserUnit. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id định danh UnitId int Có Id của đơn vị UserId int Có Id của người dùng . 4.3 Xây dựng ứng dụng 4.3.1 Thư viện và công cụ sử dụng Trong quá trình xây dựng ứng dụng giám sát xe chuyên dùng, tôi có sử dụng các công cụ, ngôn ngữ lập trình, thư viện được liệt kê ở trong bảng 4.8 dưới đây. 39 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Bảng 4.8: Danh sách công cụ và thư viện sử dụng. Mục đích Công cụ Địa chỉ URL IDE lập trình backend Visual Studio https://visualstudio .microsoft.com/ IDE lập trình fron- Visual Studio Code https://code.visuals tend tudio.com/ Ngôn ngữ lập trình C# backend https://docs.microso ft.com/en-us/dotnet /csharp/ Công nghệ backend ASP.NET core https://docs.microso ft.com/en-us/aspnet /core/ Công nghệ frontend ReactJs https://reactjs.org/ Lưu trữ dữ liệu Sql Server https://www.microsof t.com/en-us/sql-ser ver/ Thư viện tạo file PDF DinkToPdf cho backend https://github.com/r dvojmoc/DinkToPdf Thư viện xử lý thời Moment gian cho frontend https://momentjs.com / Thư viện giao diện Ant Design React https://ant.design/ Thư viện quản lý Redux trạng thái cho ứng dụng React https://redux.js.org / Thư viện cung cấp @react-googlecác React component masp/api xử lý về Google Map https://react-googl e- maps- api- docs.ne tlify.app/ Thư viện xử lý chuyển react-geocode https://github.com/s đổi giữa địa điểm và toạ độ hukerullah/react-geo code#readme/ . 4.3.2 Kết quả đạt được Sau khi thực hiện đồ án, tôi đã thực hiện xây dựng được được hệ thống giám sát xe chuyên dùng của ngân hàng với đầy đủ các chức năng đặt ra trong mục tiêu 40 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ đồ án. Các chức năng chính có thể kể đến như: (i) quản lý tài nguyên bao gồm cán bộ, thiết bị, điểm giao dịch và xây dựng tuyến mẫu, (ii) phân công và giám sát hệ thống xe trực tuyến, (iii) quản lý lịch sử tuyến và lịch sử chạy xe, (iv) quản lý báo cáo của hệ thống xe, (v) phân quyền động người sử dụng hệ thống thông qua các hành động và đơn vị quản lý. Bảng dưới đây sẽ liệt kê chi tiết các thông tin về ứng dụng. Bảng 4.9: Danh mục kết quả mã nguồn Mục Frontend Backend Số dòng code(nghìn) 10,2 4,3 Số lớp (file) 97 112 Số gói (Package/ Folder) 12 1 Dung lượng mã nguồn(MB) 1.13 0.2 Dung lượng đóng gói(MB) 9.31 17 . 4.3.3 Minh họa các chức năng chính a, Chức năng giám sát trực tuyến Hình 4.13: Giao diện giám sát trực tuyến. Hình 4.13 là giao diện giám sát trực tuyến. Màn hình hiển thị các thành phần như: danh sác trạng thái các xe quản lý phía bên trái, phần bản đồ hiển thị ví trí các xe và tuyến đường chạy ở chính giữa, danh sách các tuyến đang chạy và sắp chạy ở phía bên phải màn hình. Khi nhấn vào một tuyến đang chạy, bản đồ sẽ hiển 41 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ thị tuyến đường của tuyến mẫu, vị trí hiện tại của xe được phân công, lịch sử chạy tuyến của xe từ khi khởi hành đến thời điểm hiện tại như hình 4.14 . Hình 4.14: Giao diện lịch sử chạy tuyến trực tuyến. Ngoài ra chúng ta còn thể xem hành trình chạy tuyến theo thời gian của xe để xác định xem xe có chạy theo đúng như thời gian được phân công. Để xem lịch sử hành trình, nhấn chọn vào mục lịch sử chạy xe và nhấn chọn nút chức năng bắt đầu. Chức năng được miêu tả ở hình. Hình 4.15: Giao diện xem hành trình chạy tuyến trực tuyến. Các tuyến đang chạy cũng có thể cập nhật hành trình bằng cách nhấn vào biểu tượng dấu cộng bên cạnh mã tuyến đang chạy. Khi đó một bảng thông tin của tuyến đang chạy sẽ hiện ra và chúng ta có thể thực hiện cập nhật hành trình tuyến. 42 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Hình 4.16: Giao diện cập nhật hành trình tuyến đang chạy. b, Chức năng quản lý lịch sử Hình 4.17: Giao diện quản lý lịch sử. Hình 4.17 là giao diện quản lý lịch sử. Màn hình bao gồm các thành phần chính như: bản đồ hiển thị tuyến đường ở chính giữa màn hình, bảng chọn xem lịch sử tuyến và lịch sử xe ở phía bên trái, các thông tin thống kê và lịch sử chạy xe theo thời gian ở phía bên phải ở phía bên phải. Người dùng chọn xem lịch sử chạy tuyến bằng cách chọn tìm danh sách các tuyến theo ngày và nhấn vào dòng hiển thị tuyến trên bảng danh sách tuyến. Khi đó trên bản đồ sẽ hiển thị tuyến đường của tuyến mẫu và lịch sử chạy tuyến của xe được phân công như hình 4.18. 43 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Hình 4.18: Giao diện quản lý lịch sử tuyến. Tương tự đối với lịch sử chạy của xe. Người dùng chọn thời điểm bắt đầu và kết thúc xem lịch sử của xe chỉ định. Bản đồ sẽ hiển thị lịch sử chạy của xe theo thời gian bắt đầu và kết thúc đã chọn. Khi xem lịch sử, bảng phía bên phải sẽ hiển thị một số thông tin thống kê như tốc độ trung bình, tốc độ tối thiểu, tốc độ tối đa và quãng đường chạy của xe. Phía dưới bảng thống kê là lịch sử chạy của xe theo thời gian. Có thể theo dõi quá trình chạy bằng cách nhấn nút chức năng bắt đầu. 44 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Hình 4.19: Giao diện thống kê và quá trình chạy xe. c, Chức năng quản lý nhóm quyền Hình 4.20: Giao diện quản lý nhóm quyền. Hình 4.20 là giao diện quản lý nhóm quyền. Màn hình hiển thị danh sách các nhóm quyền ở phía bên tay trái. Bên phải màn hình là danh sách các quyền mà người dùng có thể cập nhật cho nhóm quyền, hệ thống đồng thời cũng sẽ phân quyền ở phía giao diện đối với từng nhóm quyền cụ thể. 45 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Như hình 4.20 đã miêu tả, nhóm quyền test được phân quyền truy cập trên giao diện vào hai giao diện là giám sát và quản lý lịch sử. Hình 4.21 miêu tả danh sách các giao diện mà nhóm quyền test có thể truy cập sau khi đăng nhập. Hình 4.21: Giao diện menu của nhóm quyền test. Người dùng có thể thêm nhóm quyền mới bằng cách chọn nút chức năng thêm nhóm quyền, khi đó một cửa sổ thêm nhóm quyền sẽ hiển thị. Tại đây người dùng có thể chọn các quyền cho nhóm quyền mới. 46 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Hình 4.22: Giao diện thêm mới nhóm quyền. 4.4 Kiểm thử Phương pháp kiểm thử sử dụng: kiểm thử hộp đen. 4.4.1 Kiểm thử chức năng quản lý người dùng và quyền Bảng 4.10: Kiểm thử chức năng quản lý quyền và người dùng. Test case Đầu vào Đầu ra mong muốn Kết quả Đổi mật khẩu Tạo mật khẩu mới Người dùng có thể Đạt cho người dùng đăng nhập với mật khẩu mới Cập nhật danh sách Danh sách đơn vị Người dùng truy cập Đạt đơn vị quản lý của mới được tài nguyên trong tài khoản các đơn vị quản lý Cập nhật nhóm Nhóm quyền mới quyền của tài khoản Tạo tài khoản mới Thông khoản tin Tài khoản truy cập Đạt API theo các quyền của nhóm quyền mới tài Người dùng có thể Đạt đăng nhập với tài khoản mới Xem tiếp ở trang sau 47 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Bảng 4.10 – Kiểm thử chức năng quản lý quyền người dùng – Tiếp theo Xoá tài khoản 4.4.2 Tài khoản đang sử Người dùng không Đạt dụng đăng nhập được tài khoản đã bị xoá Kiểm thử chức năng giám sát trực tuyến Bảng 4.11: Kiểm thử chức năng giám sát trực tuyến. Test case Đầu vào Đầu ra mong muốn Kết quả Xem danh sách và Tài khoản đã được Hiển thị danh sách và Đạt vị trí các xe trực phân công quản lý vị trí các xe thuộc tuyến một số đơn vị quản lý của đơn vị được phân công Chỉnh sửa tuyến Có tuyến đang Phân công tuyến được Đạt đường các phân chạy và sắp chạy cập nhật tuyến đường công tuyến đang chạy và sắp chạy Hiển thị vị trí cụ Toạ độ của xe thể của một xe Hiển thị thông tin vị Đạt trí Xem lịch sử chạy Có thông tin lịch sử Hiển thị biểu tượng Đạt của xe theo thời chạy tuyến xe chạy theo thời gian gian của các tuyến trên bản đồ đang chạy Xem lịch sử chạy Không có thông tin Thông báo không có Đạt của xe theo thời lịch sử chạy tuyến lịch sử chạy tuyến của gian của các tuyến xe đang chạy 4.4.3 Kiểm thử chức năng quản lý lịch sử 48 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Bảng 4.12: Kiểm thử chức năng quản lý lịch sử. Test case Đầu vào Đầu ra mong muốn Kết quả Xem lịch sử chạy Có lịch sử chạy Hiển thị tuyến mẫu và Đạt tuyến tuyến của xe lịch sử chạy tuyến của xe Xem lịch sử chạy Không có lịch sử Hiển thị tuyến mẫu và Đạt tuyến chạy tuyến của xe thông báo không có lịch sử chạy tuyến của xe Xem lịch sử chạy Có lịch sử chạy của Hiển thị đường đi lịch Đạt xe xe sử chạy của xe Xem lịch sử chạy Không có lịch sử Thông báo không có Đạt xe chạy của xe lịch sử chạy của xe Xem lịch sử chạy Có lịch sử chạy của Hiển thị biểu tượng Đạt xe theo thời gian xe xe di chuyển theo thời gian trên lịch sử đường đi Xem lịch sử chạy Không có lịch sử Thông báo không có Đạt xe theo thời gian chạy của xe lịch sử chạy xe 4.4.4 Kiểm thử chức năng quản lý phân công Bảng 4.13: Kiểm thử chức năng quản lý phân công. Test case Đầu vào Đầu ra mong muốn Tạo phân công mới Điền thiêú thông Thông tin trường báo Kết quả thiếu Đạt Tạo phân công mới Cán bộ và thiết bị Thông báo cán bộ và Đạt đã được phân công thiết bị đã được phân công Tạo phân công mới Điền đủ thông tin Tạo mới thành công Đạt Chỉnh sửa tuyến Thay đổi danh sách Tuyến đường của Đạt đường phân công điểm giao dịch phân công thay đổi Xem tiếp ở trang sau 49 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Bảng 4.13 – Kiểm thử chức năng quản lý phân công – Tiếp theo Chỉnh sửa thông Thông tin phân Thông báo cập nhật Đạt tin phân công công được thay đổi thành công và thông tin phân công được cập nhật 4.4.5 Kiểm thử chức năng quản lý báo cáo Bảng 4.14: Kiểm thử chức năng quản lý báo cáo. Test case Đầu vào Xem báo cáo dạng Có dữ liệu báo cáo bảng Đầu ra mong muốn Kết quả Hiển thị báo cáo dạng Đạt bảng Xem báo cáo dạng Không có dữ liệu Thông báo không có Đạt bảng báo cáo dữ liệu báo cáo Tạo file báo cáo Bảng hiển thị báo Báo cáo được lưu trên Đạt PDF và mở xem cáo có dữ liệu server và mở xem trong trang mới trong trang mới cho người dùng Tạo file báo cáo Bảng hiển thị báo Thông báo không có Đạt PDF và mở xem cáo không có dữ dữ liệu xuất báo cáo trong trang mới liệu Tạo file báo cáo Bảng hiển thị báo Lưu báo cáo trên Đạt PDF và tải về máy cáo có dữ liệu server và tải về máy người dùng Tạo file báo cáo Bảng hiển thị báo Thông báo không có Đạt PDF và tải về máy 4.5 cáo không có dữ dữ liệu xuất báo cáo liệu Triển khai Bảng 4.15 dưới đây liệt kê ra một số yêu cầu khi triển khai ứng dụng và kết quả thử nghiệm. 50 CHƯƠNG 4. THỰC NGHIỆM VÀ ĐÁNG GIÁ Bảng 4.15: Danh sách các thiết bị và công cụ triển khai hệ thống. Thành phần Yêu cầu Kết quả thử nghiệm Giao diện người dùng OS: windows, CPU: 2.6GHz RAM: 16G Nền tảng: Nodejs WebServer: IIS Chạy ổn định Server backend OS: windows, CPU: 2.6GHz RAM: 16G Nền tảng: .Net WebServer: IIS Chạy ổn đỉnh Để triển khai các dịch vụ, đối với phía server, mã nguồn sẽ được đóng gói thành các file ddl. Còn đối với phía giao diện người dùng, mã nguồn sẽ được đóng gói thành một file HTML truy cập duy nhất là index.html và các file javascript có dạng main.*.js. Các mã nguồn đã được đóng gói sẽ được đẩy lên IIS để chạy thành ứng dụng. 51 CHƯƠNG 5. CÁC GIẢI PHÁP VÀ ĐÓNG GÓP NỔI BẬT Trong chương này, tôi sẽ trình bày chi tiết các giải pháp và đóng góp nổi bật trong quá trình thực hiện đồ án mà trong các chương trước chưa được làm rõ. Cụ thể ở đây, tôi sẽ nêu ra 2 đóng góp nổi bật nhất đó là thiết kế phân quyền động người dùng và nâng cao hiệu năng giao diện người dùng. 5.1 Thiết kế phân quyền động 5.1.1 Đặt vấn để Hệ thống giám sát xe chuyên dùng bao gồm nhiều nghiệp vụ, chức năng khác nhau, cũng như giám sát, quản lý thông tin của nhiều đơn vị khác nhau bao gồm các thông tin như: cán bộ, thiết bị, lịch sử, báo cáo, điểm giao dịch, tuyến mẫu, phân công. Vì vậy, yêu cầu đặt ra là cần phải có phân quyền đến từng người dùng cụ thể trong hệ thống. Cụ thể việc phân quyền người dùng được thiết kế như thế nào tôi sẽ trình bày trong mục 5.1.2. 5.1.2 Giải quyết vấn đề Hình 5.1: Tổng quan giải pháp phân quyền. Hệ thống sẽ quản lý nhiều đơn vị. Mỗi đơn vị lại có danh sách cán bộ và thiết bị quản lý riêng. Vì vậy, việc phân quyền sẽ được thực hiện theo hai hướng: (1) phân quyền theo đơn vị mà tài khoản người dùng được phân quản lý và (2) phân quyền theo nhóm quyền của tài khoản người dùng. Như đã mô tả trong hình 5.1, mỗi thiết bị sẽ thuộc quyền quản lý của một đơn vị duy nhất (đồng thời đối với cán bộ). Một tài khoản người dùng sẽ được quyền quản lý nhiều đơn vị. Về mặt phân quyền theo nhóm quyền, mỗi nhóm quyền sẽ có các quyền khác nhau trong việc thực hiện các nghiệp vụ của hệ thống. Mỗi tài khoản người dùng sẽ chỉ thuộc một nhóm quyền duy nhất. 52 CHƯƠNG 5. CÁC GIẢI PHÁP VÀ ĐÓNG GÓP NỔI BẬT Hình 5.2: Quy trình phân quyền. Hình 5.2 thể hiện quy trình phân quyền của hệ thống. Khi người dùng gửi yêu cầu truy cập tài nguyên, token sẽ được đính kèm trong header của http request. Token này được trả về và lưu trữ trên trình duyệt người dùng khi người dùng thực hiện thao tác đăng nhập, có chứa các thông tin chính như userId (định danh của người dùng), scopeId (định danh của nhóm quyền), expired (thời gian hết hạn của token). Authorize middleware sẽ có chức năng kiểm tra xem token của người dùng có hợp lệ hay không. Nếu token hợp lệ, middlware này sẽ tiếp tục thực hiện kiểm tra quyền truy cập tài nguyên đã được lưu trong cơ sở dữ liệu. Nếu không sẽ trả về mã response status code là 401 Unauthorize (không có quyền truy cập). Như đã trình bày ở trong phần 4.2.4, ta có 2 bảng phục vụ chức năng phân quyền theo nhóm quyền đó là Permission và ScopePermission. Cụ thể, xét nội dung của một bản ghi trong bảng Permisison: { " Id " : 1 , " Url " : " / api / r e p o r t s " , " Resource " : { " name " : " R e p o r t " , " d i s p l a y N a m e " : "Bá o c á o " }, " Method " : "POST " , " A c t i o n " : "Xuấ t b á o c á o " " F i l t e r " : " body " , " FilterValue ": [ { " f i e l d ": " reportType " , " d i s p l a y N a m e " : " Lo ạ i b á o c á o " , " value ": [ { 53 CHƯƠNG 5. CÁC GIẢI PHÁP VÀ ĐÓNG GÓP NỔI BẬT " valueName " : " R e p o r t D r i v e r " , " d e s c r i p t i o n " : "Bá o c á o l á i xe " }, { " valueName " : " R e p o r t C a r " , " d e s c r i p t i o n " : "Bá o c á o xe " }, { " valueName " : " ReportKmCar " , " d e s c r i p t i o n " : "Bá o c á o Km t h e o xe " } ] } ] } Quyền trên có các thông tin như sau: • Id của quyền là 1 • Đường dẫn truy cập API là "/api/reports". • Tài nguyên truy cập là "báo cáo". • Phương thức của http request là "POST". • Hành động là "xuất báo cáo". • Đối tượng lọc là "body"của request. • Trường lọc bao gồm một trường là reportType (loại báo cáo). Đối với trường reportType, ta có thể truy vấn với các giá trị ReportDriver (báo cáo lái xe), ReportCar (báo cáo xe), ReportKmCar (báo cáo số Km theo xe). Xét đến nội dung của một bản ghi bảng ScopePermission có nội dung như sau: { " Id " : 1 , " Allowed " : t r u e , " F i l t e r ": ’[ { " f i e l d ": " reportType " , " d i s p l a y N a m e " : " Lo ạ i b á o c á o " , " value ": [ { " valueName " : " R e p o r t C a r " , " d e s c r i p t i o n " : "Bá o c á o xe " }, { 54 CHƯƠNG 5. CÁC GIẢI PHÁP VÀ ĐÓNG GÓP NỔI BẬT " valueName " : " ReportKmCar " , " d e s c r i p t i o n " : "Bá o c á o Km t h e o xe " } ] } ]’ " PermissionId ": 1 , " ScopeId " : 2 } Nhóm quyền trên là nhóm quyền vận hành (operator: có id là 2), có các cài đặt quyền đối với quyền có id là 1 như sau: • Được phép truy cập với quyền có id là 1. • Được phép lọc với trường reportType (Loại báo cáo) và có thể lọc với các giá trị là ReportCar (báo cáo xe), ReportKmCar (báo cáo số Km theo xe). Tổng kết lại, đối với nghiệp vụ xuất báo cáo, ta có thể xuất 3 loại báo cáo chính là báo cáo lái xe, báo cáo xe và báo cáo số Km theo xe. Nhóm quyền vận hành được phép thực hiện nghiệp vụ xuất báo cáo và chỉ được xuất 2 loại báo cáo là báo cáo xe và báo cáo số Km theo xe. Trong trường hợp mà quyền không định nghĩa đối tượng lọc và các trường lọc thì sẽ chỉ xét được phép thực hiện hay không. Sau khi đã thực hiện xem người dùng có quyền thực hiện truy vấn API trên hay không, nếu người dùng không được phép truy cập, server sẽ trả về mã 401 UnAuthorize (không được phép truy cập). Nếu người dùng được phép truy cập, Authorize Middleware sẽ trích xuất thông tin nhóm quyền từ header của request người dùng. Từ nhóm quyền đó ta sẽ lấy được danh sách các đơn vị người dùng quản lý. Thông tin danh sách này sẽ được thêm vào http request và phục vụ cho việc phân quyền truy cập tài nguyên theo đơn vị quản lý. 5.1.3 Kết quả đạt được Sau khi xây dựng theo thiết kế, server đã phân quyền người dùng thành công đối với nhóm quyền được chỉ định và tài nguyên theo đơn vị quản lý. 5.2 Nâng cao hiệu năng giao diện người dùng 5.2.1 Đặt vấn đề Như đã trình bày trong mục 3.1.1, ReactJs sẽ chỉ render lại những phần thay đổi. Tuy nhiên, nếu component render lại, những component con trong nó cũng sẽ render lại theo. Nếu lượng dữ liệu render lại ít, hiệu năng sẽ không ảnh hưởng nhiều, nhưng nếu dữ liệu render lại nhiều thì sẽ ảnh hưởng lớn đến hiệu năng và trải nghiệm người dùng. Đặc biệt, trong hệ thống giám sát xe, ta làm việc rất nhiều 55 CHƯƠNG 5. CÁC GIẢI PHÁP VÀ ĐÓNG GÓP NỔI BẬT với toạ độ, đường đi, lịch sử của xe đều là những dữ liệu khá lớn. Vì vậy vấn đề cần giải quyết là làm giảm thiểu tối đa việc render lại giao diện trên những component liên quan đến việc xử lý những dữ liệu trên. 5.2.2 Giải quyết vấn đề a, Sử dụng React.memo React.memo là một higher component (HOC). Higher-order component (HOC) là một kỹ thuật nâng cao trong React được sử dụng trong việc sử dụng lại các component. HOCs không là một phần trong React API. Một cách cụ thể, một higherorder component là một hàm và nó nhận đối số là một component và trả về một component mới. Một react componet được đặc trưng bởi state và props. Có thể hiểu component giống như một function, còn state và props là các tham số đầu vào và trả về các thành phần trên giao diện. React.memo giúp cho component tránh được việc rerender lại bằng việc so sánh props của chúng với props lần trước đó, nếu không có gì thay đổi, component sẽ không phải thực hiện việc render lại. Việc này giúp tăng performance đáng kể đối với các component thực hiện việc vẽ đường đi trên bản đồ, bởi vì dữ liệu đầu vào của các component vẽ đường đi là danh sách các toạ độ trên bản đồ, một đường đi có thể chứa tới vài chục nghìn toạ độ như vậy. b, Sử dụng thư viện react-window Tôi đã tuỳ biến thư viện này để xây dựng component danh sách lịch sử của xe theo thời gian. Hình 5.3: Giao diện component danh sách lịch sử. Lịch sử chạy xe bao gồm rất nhiều bản ghi, do việc ghi lại lịch sử cần diễn ra liên tục. Thiết kế ghi lại lịch sử xe trong hệ thống là cứ mỗi năm giây sẽ ghi lại một lần. Do đó, nếu thực hiện xem lịch sử chạy của xe trong một ngày có thể lên tới hơn 17 nghìn bản ghi, trong vài ngày sẽ là vài chục nghìn bản ghi. Khi thực hiện xem 56 CHƯƠNG 5. CÁC GIẢI PHÁP VÀ ĐÓNG GÓP NỔI BẬT lịch sử theo thời gian, khi tới mốc thời gian nào, dòng lịch sử đó sẽ được bôi đậm và di chuyển đến dòng đó. Do đó component danh sách lịch sử sẽ thực hiện việc render lại liên tục khi chúng ta xem lịch sử theo thời gian. Vì vậy ở đây tôi đã tuỳ biến thư viện react-window để tránh việc render lại quá nhiều này. Hình 5.4: Cách thức hoạt động của react-window. Hình 5.4 miêu tả cách thức hoạt động của react-window. React-window sẽ không render toàn bộ dữ liệu trong danh sách mà chỉ liệt kê ra số lượng các phần tử đủ để hiển thị trong khung màn hình. React-window cho chúng ta chỉ định chiều cao của khung bao quanh các phần tử và chiều cao mỗi phần tử, từ đó có thể xác định ra có bao nhiêu phần tử trong một khung màn hình. Ví dụ, trong khung màn hình hiển thị được 8 phần tử, react-window sẽ tính toán số lượng phần tử dự bị phía trên và phía dưới để khi người dùng scroll lên hoặc xuống thì sẽ lấy những phần tử đó để hiển thị ra màn hình mà không phải hiển thị toàn bộ danh sách. Như vậy, danh sách các phần tử được render lại sẽ chỉ bao gồm các phần tử hiển thị lên giao diện và các phần tử dự bị phục vụ cho việc scroll, ít hơn rất nhiều so với việc render lại toàn bộ danh sách. 5.2.3 Kết quả đạt được Trước khi tuỳ biến thư viện react-window, khi thực hiện chức năng xem lịch sử chạy theo thời gian của xe, màn hình giao diện xảy ra hiện tượng chạy rất chậm. Sau khi tuỳ biến, chức năng trên đã chạy ổn định và không gặp phải hiện tượng trên. 57 CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 6.1 Kết luận Sau quá trình thực hiện đồ án tốt nghiệp, tôi đã xây dựng được hệ thống giám sát xe chuyên dùng trong ngân hàng với các chức năng chính và mục tiêu đã đặt ra, đồng thời thực hiện phân quyền động người sử dụng hệ thống. Để phát triển hệ thống giám sát xe chuyên dùng, tôi đã thực hiện tìm hiểu, phân tích các hệ thống đang có trên thị trường, đồng thời từ nghiệp vụ của hệ thống mà xây dựng các tính năng chính cho sản phẩm cuối cùng. Các chức năng của hệ thống đã được hoàn thiện. Tuy nhiên, so sánh với các hệ thống đang có thì các chức năng vẫn chưa được hoàn thiện thực sự tốt. Từ các yêu cầu của hệ thống, tôi đã thực hiện được việc phân quyền động người dùng. Người dùng trong hệ thống được phân quyền qua hai hướng chính: (i) phân quyền theo hành động cửa người dùng theo nhóm quyền, (ii) phân quyền truy cập tài nguyên của hệ thông thông quá đơn vị được phân công quản lý. Thông quá quá trình làm đồ án, tôi đã học hỏi được rất nhiều kiến thức, kinh nghiệm. Đó là kỹ năng phân tích, thiết kế, xây dựng hệ thống, lập kế hoạch thời gian hoàn thành theo từng mốc cụ thể, kỹ năng tự tìm hiểu, viết báo cáo ... Đây là những kỹ năng vô cùng cần thiết để làm việc sau này. 6.2 Hướng phát triển Hệ thống giám sát xe chuyên dùng của ngân hàng đang được hoàn thiện, phát triển và cải tiến trong tương lai. Hệ thống tập trung phần lớn làm việc với các thành phần trên bản đồ. Do đó, trước hết tôi sẽ tập trung hoàn thiện và cải tiến giao diện để nâng cao trải nghiệm của người dùng. Sau đó, tôi sẽ thực hiện nâng cao khả truy suất của hệ thống để có thể gửi phản hồi dữ liệu nhanh hơn tới người dùng, đồng thời thực hiện xử lý các thao tác dữ liệu nặng ở phía cơ sở dữ liệu bằng các sử dụng procedure để giảm tải việc tính toán cho server. 58 TÀI LIỆU THAM KHẢO [1] Internet source, TTAS - Thiết bị định vị. url: http : / / www. ttas . vn/ (urlseen 29/07/2022). [2] Internet source, BAGPS - Giám sát hành trình số 1 Việt Nam. url: https: //bagps.vn/ (urlseen 29/07/2022). [3] Internet source, React - A JavaScript library for building user interfaces. url: https://reactjs.org/ (urlseen 29/07/2022). [4] Internet source, React-geocode - A module to transform a description of a location into geographic coordinates. url: https://github.com/shukerullah/ react-geocode#readme (urlseen 29/07/2022). [5] Internet source, @react-google-maps/api - react library that provides component working with google map. url: https://react-google-mapsapi-docs.netlify.app/ (urlseen 29/07/2022). [6] Internet source, ASP.Net core. url: https://docs.microsoft.com/ en-us/aspnet/core/ (urlseen 29/07/2022). [7] Internet source, Microsoft Sql Server. url: https://www.microsoft. com/en-us/sql-server/ (urlseen 29/07/2022). 59 PHỤ LỤC 60 A. Thiết kế cơ sở dữ liệu Bảng A.1: Thiết kế chi tiết bảng Rfid. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id định danh thẻ Rfid CardNumber varchar(100) Có Mã thẻ Description nvarchar(255) Không Mô tả thẻ ActivationTime datetime Không Ngày kích hoạt thẻ Type int Có Loại thẻ Isdistributed bit Có Trạng thái đã được gán Status bit Có Trạng thái hoạt động thẻ UnitId int Có Id của đơn vi . Bảng A.2: Thiết kế chi tiết bảng Car. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của xe LiscensePlate varchar(20) Có Biển số xe Type nvarchar(50) Không Loại xe NumberCamera int Có Số lượng camera FirstCamPo int Có Vị trí camera trước FirstCamRotation int Có Góc qay camera thứ nhất SecondCamRotation int Có Góc quay camera thứ hai Fuel int Có Nhiên liệu sử dụng LimitedSpeed int Có Giới hạn tốc độ UnitId int Có Id của đơn vị RfidId int Không Id của thẻ Rfid DriverId int Không Id của lái xe . 61 PHỤ LỤC A. THIếT Kế Cơ Sở Dữ LIệU Bảng A.3: Thiết kế chi tiết bảng Device. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của thiết bị DeviceNumber varchar(20) Có Mã thiết bị IMEI varchar(20) Có Mã định danh IMEI Phone varchar(11) Có Số điện thoại MobileCarrier int Có Nhà mạng sử dụng ActivationTime datetime Không Ngày kích hoạt AllowUpdate bit Có Cho phép cập nhật Status bit Có Trạng thái hoạt động UnitId int Có Id của đơn vị CarId int Không Id của xe . Bảng A.4: Thiết kế chi tiết bảng Member. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của cán bộ Avata varchar(50) Không Ảnh đại diện EmployeeCode varchar(20) Có Mã cán bộ Name varchar(50) Có Tên cán bộ Sex int Có Giới tính Type int Có Chức vụ Phone varchar(11) Không Số điện thoại Email varchar(50) Không Địa chỉ email Status bit Có Trạng thái làm việc UnitId int Có Id của đơn vị . 62 PHỤ LỤC A. THIếT Kế Cơ Sở Dữ LIệU Bảng A.5: Thiết kế chi tiết bảng History. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của lịch sử Cam1ImgPath varchar(255) Không Địa chỉ xem camera thứ nhất Cam2ImgPath varchar(255) Không Địa chỉ xemc camera thứ hai AppVersion varchar(50) Không Phiên bản ứng dụng RecieveTime datetime Có Thời gian nhận bản tin lịch sử DeviceTime datetime Có Thời gian trên thiết bị EngineOn int Có Trạng thái hoạt động của xe StrongBoxOpen int Có Trạng thái két an toàn IsSos bit Có Trạng thái cảnh báo GpsLat float Có Vĩ độ theo Gps GpsLng float Có Kinh độ theo Gps NetworkLat float Có Vĩ độ theo network NetworkLng float Có Kinh độ theo network CarId int Có Id của xe . Bảng A.6: Thiết kế chi tiết bảng Online. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của trạng thái trực tuyến Cam1ImgPath varchar(255) Không Địa chỉ xem camera thứ nhất Cam2ImgPath varchar(255) Không Địa chỉ xemc camera thứ hai AppVersion varchar(50) Không Phiên bản ứng dụng RecieveTime datetime Có Thời gian nhận bản tin trạng thái DeviceTime datetime Có Thời gian trên thiết bị EngineOn int Có Trạng thái hoạt động của xe StrongBoxOpen int Có Trạng thái két an toàn IsSos bit Có Trạng thái cảnh báo GpsLat float Có Vĩ độ theo Gps GpsLng float Có Kinh độ theo Gps Xem tiếp ở trang sau 63 PHỤ LỤC A. THIếT Kế Cơ Sở Dữ LIệU Bảng A.6 – Thiết kế chi tiết bảng Online – Tiếp theo NetworkLat float Có Vĩ độ theo network NetworkLng float Có Kinh độ theo network CarId int Có Id của xe . Bảng A.7: Thiết kế chi tiết bảng CarReport. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của báo cáo TotalKm float Có Tổng Km đi TotalFuel float Có Tổng nhiên liệu sử dụng RunningTime int Có Thời gian chạy OpenStrongBox int Có Số lần mở két sắt Conflict int Có Số lần đụng độ RouteDeviation int Có Số lần lệch tuyến TimeDeviation int Có Số lần lệch thời gian ReportTime date Có Ngày báoc cáo CarId int Có Id của xe . Bảng A.8: Thiết kế chi tiết bảng TransactionPoint. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của điểm giao dịch PointCode varchar(50) Có Mã điểm giao dịch PointName nvarchar(255) Có Tên điểm giao dịch Type int Có Loại điểm giao dịch Address varchar(MAX) Có Địa chỉ Longtitude float Có Kinh độ Latitude float Có Vĩ độ Contact nvarchar(50) Không Người liên hệ Phone varchar(11) Không Số điện thoại liên hệ Fax varchar(255) Không Địa chỉ fax liên hệ Xem tiếp ở trang sau 64 PHỤ LỤC A. THIếT Kế Cơ Sở Dữ LIệU Bảng A.8 – Thiết kế chi tiết bảng TransactionPoint – Tiếp theo UnitId int Có Id của đơn vị . Bảng A.9: Thiết kế chi tiết bảng SampleRoute. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của tuyến mẫu RouteCode varchar(50) Có Mã tuyến mẫu Type int Có Loại tuyến Route string Có Danh sách các điểm giao dịch Direction varchar(MAX) Có Đường đi Wayback varchar(MAX) Có Đường quay về AutoTurnBack bit Có Tự động quay về điểm bắt đầu BeginTime time Có Thời gian bắt đầu OverTimeAllowed int Có Quá thời gian cho phép Tolerance int Có Quá quãng đường cho phép Distance float Có Quãng đường dự tính ArrivalTime int Có Thời gian dự tính UnitId int Có Id của đơn vị . Bảng A.10: Thiết kế chi tiết bảng Segmentation. Tên trường Kiểu dữ liệu Bắt buộc Mô tả Id int Có Id của phân công BeginTime time Có Thời điểm bắt đầu EndTime time Có Thời điểm kết thúc BeginDate date Có Ngày bắt đầu EndDate date Có Ngày kết thúc Day string Có Các ngày trong tuần Control bit Có Cho phép điều khiển Sms bit Có Cho phép gửi thông báo EditedRoute varchar(MAX) Không Tuyến đường chỉnh sửa Xem tiếp ở trang sau 65 PHỤ LỤC A. THIếT Kế Cơ Sở Dữ LIệU Bảng A.10 – Thiết kế chi tiết bảng Segmentation – Tiếp theo UnitId int Có Id của đơn vị CarId int Có Id của xe DriverId int Có Id của lái xe TreasurerId int Có Id của chủ hàng AtmTechnicanId int Có Id của kỹ thuật viên ATM RouteId int Có Id của tuyến mẫu . 66