KIẾN TRÚC MULTITENANCY VÀ ĐỀ XUẤT MÔ HÌNH TỔNG THỂ HỆ THỐNG
Tổng quan về Multitenancy
Multitenancy là kiến trúc phần mềm cho phép một ứng dụng hoạt động trên một server, phục vụ nhiều người dùng (hay còn gọi là "tenant") một cách độc lập Mỗi tenant có thể truy cập và sử dụng ứng dụng theo cách riêng của mình mà không làm ảnh hưởng đến các tenant khác.
Kiến trúc Multitenancy cho phép phần mềm được tùy chỉnh cho từng "tenant", bao gồm các cấu hình, cài đặt, trải nghiệm người dùng và dữ liệu riêng biệt Điều này giúp mỗi tenant thiết lập ứng dụng theo cách riêng, đồng thời đảm bảo các thuộc tính phi chức năng được đáp ứng hiệu quả.
Kiến trúc này thường được sử dụng để phát triển các ứng dụng trên nền tảng Cloud và kết hợp với SaaS, giúp phục vụ một lượng lớn người dùng mà không bị giới hạn bởi vị trí địa lý.
Những lợi ích của kiến trúc Multitenancy [5]:
Khả năng mở rộng của kiến trúc này cho phép nhà cung cấp dễ dàng tăng số lượng người dùng (tenant) mà không cần phát triển lại ứng dụng từ đầu hoặc triển khai riêng lẻ cho từng tenant, giúp tránh những khó khăn do môi trường triển khai không đồng nhất.
Nhà cung cấp có khả năng dễ dàng thực hiện các bản nâng cấp và vá lỗi để bổ sung tính năng mới nhờ vào việc sử dụng một bộ source chuẩn cho ứng dụng Điều này giúp giảm thiểu chi phí nâng cấp và bảo trì so với phương pháp phân phối ứng dụng truyền thống trước đây.
Giám sát và điều khiển hoạt động của ứng dụng là yếu tố quan trọng trong kiến trúc này, giúp nhà cung cấp dễ dàng theo dõi các Tenant, phát hiện sự cố và khắc phục nhanh chóng Hơn nữa, khả năng can thiệp vào hoạt động của các Tenant khi cần thiết cũng mang lại lợi ích lớn trong quá trình quản lý ứng dụng.
Các tenant có khả năng dễ dàng điều chỉnh và thay đổi một số cài đặt theo sự cho phép của nhà cung cấp, chẳng hạn như giao diện và các nghiệp vụ liên quan.
Giảm chi phí phát triển, triển khai và bảo trì ứng dụng là một lợi ích nổi bật khi các tenant sử dụng trực tiếp ứng dụng trên Cloud Server của nhà cung cấp.
Các hướng tiếp cận xây dựng kiến trúc Multitenancy
2.2.1 Một Instance duy nhất của ứng dụng và nhiều database:
Với cách tiếp cận này, chỉ có một instance ứng dụng hoạt động liên tục, cho phép nhận diện và truy xuất dữ liệu theo từng tenant dựa trên các tham số được lưu trữ trong Catalog, một cơ sở dữ liệu chung cho tất cả các tenant.
Hình 2.1 Mô hình hướng tiếp cận 1 instance nhiều Database Ưu điểm của cách tiếp cận này là:
- Chỉ một ứng dụng chạy duy nhất nên sẽ tiết kiệm tài nguyên hơn
- Dữ liệu của các tenant độc lập với nhau nên bảo mật, an toàn hơn
- Dễ bảo trì, nâng cấp đồng loạt các Tenant
Việc chỉ có một phiên bản duy nhất của ứng dụng yêu cầu hệ thống phải tương thích với tất cả các Tenant, bao gồm cả những Tenant có cấu trúc cơ sở dữ liệu khác nhau và các yêu cầu nghiệp vụ riêng biệt Điều này làm cho quá trình phát triển ứng dụng trở nên phức tạp hơn rất nhiều.
- Khi instance của hệ thống gặp trục trặc có thể dẫn đến nguy cơ tất cả các Tenant đồng loạt sẽ không sử dụng được ứng dụng
- Đòi hỏi phần cứng cao
2.2.2 Hướng xây dựng cùng chung các table nhưng khác Schema:
Với phương pháp này, ứng dụng chỉ chạy một instance duy nhất, cho phép các tenant tương tác với nó Tất cả dữ liệu được truy xuất từ một cơ sở dữ liệu duy nhất, nhưng mỗi tenant sẽ có một schema riêng biệt, được đặt tên theo quy tắc mà nhà phát triển quy định, ví dụ như tenant1_product, tenant2_product.
Hình 2.2 Hướng tiếp cận 1 Instance, 1 Database, nhiều Schema [6] Ưu điểm của hướng tiếp cận này:
- Dễ dàng xây dựng với quy mô nhỏ, cấu trúc cơ sở dữ liệu (số lượng bảng, các mối quan hệ) đơn giản
- Chi phí vận hành và đòi hỏi cấu hình phần cứng thấp hơn
- Mỗi tenant có thể thay đổi cấu trúc bảng mà không ảnh hưởng đến các tenant khác
- Khó backup-restore nếu như mỗi tenant có sự cố
- Mức độ bảo mật của dữ liệu từng tenant ở mức trung bình
- Khó mở rộng về sau
2.2.3 Hướng tiếp cận 1 Instance, 1 database chung cho tất cả Tenant:
Với phương pháp này, chúng ta chỉ cần phát triển một ứng dụng duy nhất và sử dụng một cơ sở dữ liệu chung cho tất cả các Tenant Dữ liệu của từng Tenant sẽ được phân loại thông qua quyền truy cập và các ràng buộc quan hệ giữa các bảng trong cơ sở dữ liệu.
Hình 2.3 Mô hình hướng tiếp cận 1 instance, 1 database chung [6] Ưu điểm của hướng này:
- Giảm thiểu gánh nặng về phần cứng
- Có thể phục vụ nhiều tenant
- Dễ dàng cập nhật hệ thống vì tất cả mọi tenant điều được thừa hưởng như nhau
- Bảo mật dữ liệu kém, nếu để lộ thông tin thì tenant này có thể lấy thông tin của tenant khác
Khi cập nhật và thay đổi cấu trúc cơ sở dữ liệu (CSDL) hoặc nghiệp vụ, tất cả các tenant đều bị ảnh hưởng Điều này có thể dẫn đến sự dư thừa cho những tenant không có nhu cầu sử dụng hoặc có thể thay đổi nghiệp vụ, gây ra sự sai lệch trong quá trình hoạt động.
- Khó thay đổi bảo trì, mở rộng về sau, chỉ thích hợp với số lượng tenant nhỏ
Để xây dựng một ứng dụng và cơ sở dữ liệu phù hợp với mọi yêu cầu, cần phải đầu tư nhiều vào chất lượng và tính năng, dẫn đến chi phí phát triển cao và độ phức tạp tăng lên.
- Khó backup, restore dữ liệu cho riêng từng Tenant
2.2.4 Hướng tiếp cận phân mảnh dữ liệu (Sharding data):
Với phương pháp này, cơ sở dữ liệu được chia thành các mảnh nhỏ (hay còn gọi là shard) và phân bố trên nhiều máy chủ Dữ liệu sẽ được lưu trữ vào các mảnh phù hợp đã được phân chia theo quy ước từ trước.
Phương pháp này giúp giảm số lượng dòng trên bảng, dẫn đến chỉ số index nhỏ hơn, từ đó tối ưu hóa tốc độ truy xuất dữ liệu và cải thiện hiệu suất hệ thống khi nhiều Tenant cùng tương tác với ứng dụng.
Hình 2.4 Hướng tiếp cận Data Sharding [6]
Hướng tiếp cận này có ưu điểm:
- Tốc độ truy xuất dữ liệu lớn, hiệu năng của cả hệ thống được nâng cao đáng kể
- Khi một shard gặp sự cố có thể kéo theo cả hệ thống ngừng hoạt động
- Việc quản lý rất phức tạp và tốn kém do phải quản lý các Shard trên nhiều Server
- Việc backup, restore cũng trở nên khó khăn hơn
Việc truy vấn dữ liệu ngày càng trở nên phức tạp do yêu cầu kiểm tra nhiều điều kiện, ràng buộc và liên kết hơn để thu thập thông tin chính xác.
Bài toán quản lý đề cập đến mức độ phát sinh dữ liệu không lớn và ứng dụng triển khai trong phạm vi nội bộ Nhóm nghiên cứu phân tích các phương pháp xây dựng hệ thống Multitenancy, đánh giá ưu và nhược điểm của từng phương pháp Cuối cùng, nhóm quyết định áp dụng phương pháp 1 Instance, 1 database chung cho tất cả Tenant do tính dễ triển khai và khả năng cập nhật hệ thống thuận tiện.
INTERNET OF THINGS
Tổng quan về Internet of things
3.1.1 Định nghĩa Internet of things
Thuật ngữ “Internet of Things” (IoT) đã trở nên quen thuộc trong lĩnh vực công nghệ, với ảnh hưởng sâu rộng tới cuộc sống và xã hội Mặc dù IoT đã tồn tại từ nhiều thập kỷ trước, nhưng phải đến năm 1999, Kevin Ashton, nhà khoa học sáng lập Trung tâm Auto-ID tại MIT, mới chính thức đưa ra cụm từ này Ông cũng là người thiết lập các tiêu chuẩn toàn cầu cho RFID và nhiều loại cảm biến khác, góp phần quan trọng vào sự phát triển của IoT.
Mạng lưới vạn vật kết nối Internet (IoT) là một hệ sinh thái nơi mỗi đồ vật và con người đều có định danh riêng, cho phép truyền tải và trao đổi thông tin qua một mạng duy nhất mà không cần tương tác trực tiếp IoT phát triển từ sự hội tụ của công nghệ không dây, vi cơ điện tử và Internet, tạo thành một tập hợp các thiết bị có khả năng kết nối lẫn nhau, với Internet và thế giới bên ngoài để thực hiện các nhiệm vụ cụ thể.
Internet vạn vật (IoT) đơn giản là hệ thống các thiết bị có khả năng kết nối với nhau thông qua các phương thức như Wi-Fi, mạng viễn thông băng rộng (3G, 4G), Bluetooth, ZigBee và hồng ngoại Các thiết bị này có thể bao gồm điện thoại thông minh, máy pha cà phê, máy giặt, tai nghe, bóng đèn và nhiều thiết bị khác, tạo nên một mạng lưới kết nối thông minh và tiện lợi.
IoT có những đặc tính cơ bản sau:
Tính kết nối liên thông trong IoT cho phép mọi thiết bị kết nối với nhau thông qua mạng lưới thông tin và cơ sở hạ tầng liên lạc tổng thể Điều này tạo ra một hệ sinh thái thông minh, nơi các thiết bị có thể trao đổi dữ liệu và tương tác hiệu quả hơn, nâng cao khả năng vận hành và quản lý.
Hệ thống IoT cung cấp dịch vụ liên quan đến "Things", bao gồm bảo vệ sự riêng tư và đảm bảo tính nhất quán giữa Physical Thing và Virtual Thing Để thực hiện điều này, cả công nghệ phần cứng và phần mềm cần phải được cải tiến.
Các thiết bị trong Internet of Things (IoT) có tính không đồng nhất do sự khác biệt về phần cứng và mạng Tuy nhiên, nhờ vào sự liên kết giữa các mạng, các thiết bị từ các mạng khác nhau vẫn có thể tương tác và giao tiếp hiệu quả với nhau.
Các thiết bị tự động có khả năng thay đổi linh hoạt trạng thái, chẳng hạn như chuyển từ chế độ ngủ sang thức dậy, kết nối hoặc ngắt kết nối, thay đổi vị trí và tốc độ Hơn nữa, số lượng thiết bị có thể tự động thay đổi cũng rất đa dạng.
Quy mô lớn của các thiết bị kết nối sẽ tạo ra một mạng lưới khổng lồ, với số lượng thiết bị quản lý và giao tiếp vượt xa số máy tính hiện có trên Internet Lượng thông tin được truyền tải giữa các thiết bị này sẽ lớn hơn rất nhiều so với thông tin do con người truyền đạt.
3.1.2 Xu hướng của Internet of things
3.1.2.1 Toàn cảnh thị trường IoT Đại dịch COVID-19 toàn cầu đã gây nhiều ảnh hưởng xấu đến thị trường thế giới nói chung và thị trường Internet of Things (IoT) nói riêng Tuy nhiên, thị trường IoT vẫn đang phát triển bất chấp tác động COVID-19 đối với chuỗi cung ứng
Theo dự báo của IoT Analytics, số lượng thiết bị IoT kết nối toàn cầu sẽ tăng 9%, đạt 12,3 tỷ kết nối hoạt động vào năm 2021 Dự kiến, con số này sẽ vượt 27 tỷ kết nối IoT vào năm 2025.
Hình 3.1 Dự báo thị trường IoT toàn cầu
Số lượng thiết bị IoT thực tế năm 2020 đạt 11,3 tỷ, giảm 3,4% so với dự báo 11,7 tỷ vào giữa năm Dự báo tổng số thiết bị IoT vào năm 2025 cũng giảm xuống 27,1 tỷ, giảm 12,29% so với 30,9 tỷ dự kiến vào năm 2020 Mặc dù số liệu thực tế năm 2020 không đạt như dự báo, thị trường IoT toàn cầu vẫn ghi nhận sự tăng trưởng so với năm 2019.
Từ những số liệu trên có thể thấy được tầm quan trọng và sự phát triển mạnh mẽ của IoT trên tất cả các lĩnh vực trong đời sống
2.1.2.2 Ứng dụng của Internet of Things:
Hình 3.2 Ứng dụng của IOT
Ngành chế tạo có thể đạt được lợi thế cạnh tranh thông qua việc áp dụng giám sát dây chuyền sản xuất, cho phép thực hiện bảo trì chủ động trên thiết bị khi cảm biến phát hiện lỗi sắp xảy ra.
Cảm biến có khả năng đo lường khi sản lượng sản xuất bị ảnh hưởng, giúp các nhà sản xuất nhanh chóng kiểm tra độ chính xác của thiết bị hoặc tạm ngừng sản xuất cho đến khi được sửa chữa Nhờ vào cảnh báo từ cảm biến, các công ty có thể giảm chi phí hoạt động, nâng cao thời gian hoạt động và cải thiện quản lý hiệu suất tài sản.
Ngành công nghiệp ô tô đang tận dụng các ứng dụng IoT để mang lại lợi ích đáng kể, không chỉ trong quy trình sản xuất mà còn trong việc giám sát tình trạng của xe Các cảm biến IoT có khả năng phát hiện lỗi thiết bị trước khi chúng xảy ra trên các phương tiện đang lưu thông, giúp cảnh báo chi tiết cho người lái xe, từ đó nâng cao sự an toàn và hiệu suất hoạt động của xe.
Thông qua dữ liệu thu thập từ các ứng dụng IoT, các nhà sản xuất và cung cấp ô tô có thể nắm bắt thông tin quan trọng để duy trì hiệu suất xe và thông báo cho chủ xe về tình trạng và thông tin cần thiết.
Ứng dụng của Internet of things trong lĩnh vực giao thông vận tải
Ứng dụng IoT trong ngành giao thông vận tải đang được triển khai rộng rãi trên toàn cầu, với mức độ và quy mô khác nhau tùy thuộc vào điều kiện cụ thể của từng khu vực Sự đổi mới này nhằm nâng cao tính tự động hóa và thông minh, đáp ứng nhu cầu thiết yếu về di chuyển và vận chuyển trong cuộc sống hàng ngày của con người.
Hệ thống giao thông kết nối vận hành trên nền tảng IoT đang phát triển mạnh mẽ nhờ vào sự tiến bộ của các công nghệ như công nghệ thông tin, truyền thông, nhận dạng và cảm biến Sự xuất hiện của các công nghệ mới như điện toán đám mây và trí tuệ nhân tạo (AI) hứa hẹn sẽ mang lại cuộc cách mạng cho ngành giao thông vận tải Các công nghệ thành phần chủ yếu trong kết nối giao thông vận tải bao gồm những công nghệ tiên tiến này.
Công nghệ nhận dạng qua tần số vô tuyến (RFID) đang tạo ra bước đột phá trong ngành giao thông vận tải Bằng cách sử dụng sóng vô tuyến, RFID tự động xác định và theo dõi các đối tượng trong hệ thống giao thông, cung cấp thông tin theo thời gian thực Các thẻ RFID được gắn vào phương tiện, đèn giao thông, đèn chiếu sáng, và hàng hóa vận chuyển, giúp nâng cao hiệu quả quản lý và an toàn giao thông.
Công nghệ cảm biến đã phát triển với nhiều loại cảm biến khác nhau, cho phép thu thập và cung cấp thông tin đa dạng về các đối tượng trong hệ thống giao thông theo thời gian thực Các thông tin này bao gồm nhiệt độ, ánh sáng môi trường, kích thước, tốc độ, màu sắc phương tiện, cũng như sức khỏe của người lái xe.
Hệ thống camera giám sát (CCTV - Closed Circuit Television) sử dụng các camera để cung cấp hình ảnh và video theo thời gian thực Người dùng có thể xem và điều khiển hệ thống này từ xa, giúp tăng cường an ninh và giám sát hiệu quả cho các khu vực cần bảo vệ.
Hệ thống CCTV bao gồm từ 39 trung tâm trở lên, kết nối các camera đặt tại những vị trí quan trọng để giám sát tình trạng giao thông theo thời gian thực Hệ thống này cung cấp hình ảnh và video, giúp theo dõi tốc độ xe, cảnh báo xe đi sai đường và phát hiện các vi phạm giao thông.
Hệ thống liên lạc hiện nay chủ yếu bao gồm các công nghệ không dây toàn cầu như Wi-Fi, mạng viễn thông 3G, 4G, LTE và GSM, cùng với các phương thức truyền thông tần số vô tuyến như UHF và VHF.
Hệ thống định vị toàn cầu (GPS) và hệ thống thông tin địa lý (GIS) đóng vai trò quan trọng trong việc xác định vị trí và hành trình của xe cộ Chúng giúp theo dõi tốc độ giao thông, mật độ lưu thông trên các tuyến đường cụ thể, tìm kiếm lộ trình qua bản đồ, cũng như đo quãng đường đã di chuyển và xác định vị trí hàng hóa đang được vận chuyển.
Công nghệ IoT có thể được áp dụng vào nhiều lĩnh vực như quản lý phương tiện giao thông công cộng và vận tải doanh nghiệp Trong quản lý phương tiện vận tải, IoT giúp giám sát và điều phối phương tiện, cung cấp cảnh báo về các thông số quan trọng như mức nhiên liệu, áp suất lốp và thời gian dừng đỗ Nhóm nghiên cứu của chúng em sẽ tập trung vào việc ứng dụng IoT thông qua hộp đen, tìm hiểu cách kết nối và giao tiếp với hộp đen để cải thiện quản lý và giám sát phương tiện vận tải doanh nghiệp.
Ứng dụng hộp đen trong hệ thống quản lý phương tiện giao thông vận tải 39
Hộp đen GPS là thiết bị lắp trên xe để giám sát hành trình di chuyển và lưu trữ dữ liệu vận hành Thiết bị này hiện đang được trang bị trên nhiều loại phương tiện giao thông, giúp theo dõi và quản lý hiệu quả quá trình di chuyển.
Hộp đen hiện nay được thiết kế nhỏ gọn với kích thước khoảng 4 x 10cm và có lớp vỏ kim loại chắc chắn, giúp bảo vệ nó khỏi hư hại trong các vụ tai nạn nhờ khả năng chống va đập và sốc Ngoài ra, nhiều loại hộp đen ô tô còn có khả năng hoạt động trong các điều kiện khắc nghiệt, như áp suất cao lên đến 227 kg/6,5 cm2 và nhiệt độ tối đa 80 độ C.
Hình 3.3 Hình ảnh hộp đen Cấu tạo của hộp đen gồm:
Chíp định vị GPS là một thành phần thiết yếu trong hộp đen ô tô, mang lại khả năng theo dõi và xác định vị trí xe Nhờ công nghệ định vị toàn cầu tiên tiến, chíp GPS có khả năng ghi nhận chính xác tọa độ của xe trên bản đồ vệ tinh.
Ăng-ten GSM là một thành phần thiết yếu trong các thiết bị định vị và giám sát, giúp kết nối hộp đen ô tô với sóng GPS Nó đảm bảo sự ổn định trong việc truyền dữ liệu đến máy chủ, cho phép các hoạt động giám sát diễn ra liên tục và thường xuyên.
Hình 3.4 Ăng-ten hộp đen
Bộ vi xử lý (CPU) là một thành phần quan trọng trong các thiết bị điện tử, đặc biệt là trong hộp đen ô tô, vì nó thu thập và xử lý dữ liệu từ các cảm biến trong quá trình vận hành của xe.
Bộ phận hiển thị và cảnh báo trên xe cung cấp thông tin chi tiết về tình trạng xe như vận tốc, mức nhiên liệu và quãng đường di chuyển Khi xe vượt quá tốc độ cài sẵn, hệ thống sẽ phát ra tiếng còi để cảnh báo người lái Hộp đen có chức năng lưu trữ và giám sát tất cả thông tin hành trình của xe trong quá trình tham gia giao thông.
- Thông tin của xe và lái xe như: biển số xe, trọng tải, giấy phép lái xe…
- Định vị vị trí của xe
- Xác định được vận tốc, quãng đường đi lại của xe
- Hiển thị thông tin về địa điểm, vị trí dừng, đỗ xe
- Quản lý lượng tiêu thụ nhiên liệu
Kết nối qua camera giám sát giúp quản lý số hành khách và theo dõi tài xế hiệu quả hơn Việc lắp đặt hộp đen cho phương tiện giao thông đang trở nên phổ biến và cần thiết, đặc biệt trong ngành vận tải Nhóm đã quyết định sử dụng hộp đen AT38-4G của Công Ty Cổ Phần Ứng Dụng Bản Đồ Việt (VIETMAP JSC) với các thông số kỹ thuật phù hợp để thực hiện đề tài này.
Hình 3.5 Thông số kỹ thuật hộp đen AT38-4G
3.3.2 Thông tin truy xuất hộp đen AT38-4G Để truy xuất được các thông tin lưu trữ trong hộp đen, VIETMAP đã cung cấp các API hỗ trợ giao tiếp với hộp đen như sau:
- API lấy danh sách xe của user: API lấy thông tin của xe được lưu trữ trong hộp đen
Request https://client- api.quanlyxe.vn/v3/tracking/getvehicles?apikey=[a pi-key] Apikey
Id Plate ActualPlate GroupId GroupName VehicleTypeId VehicleTypeName Vin
BrandName ProductYear MaxSpeed FuelPer100km FuelPerIdleHour
Bảng 1 Thông tin API lấy thông tin xe
- API lấy thông tin GPS hiện tại của xe: API cho phép truy xuất vào hộp đen để lấy vị trí tại thời điểm tức thời của xe
Request https://client-api.quanlyxe.vn/v3/tracking/
GetVehicleStatus?plate=[plate]&apikey=[api-key] plate apikey
"Address": "P.Trung Hòa, Q.Cầu Giấy, TP.Hà Nội",
"Url": "http://quanlyxe.vn/Online?id=0&token=test"
Y Status Speed Heading EventId Distance Driver LicenseNo Sensors Address Url
Bảng 2 Bảng mô tả API lấy thông tin GPS hiện tại của xe
API cho phép truy xuất thông tin GPS của xe từ hộp đen trong một khoảng thời gian nhất định, giúp người dùng nắm bắt dữ liệu lưu trữ quan trọng về vị trí và hành trình của xe.
Request https://client- api.quanlyxe.vn/v3/tracking/getvehiclehistory?id=[v3- id]&from=[from]&to=[to]&apikey=[api-key]
"Address": "1210, 2 Bế Văn Cấm, P.Tân Kiểng, Q.7,
Y Status Speed Heading DriverName LicenseNo Address Sensors Distane
"Address": "1210, 2 Bế Văn Cấm, P.Tân Kiểng, Q.7,
Bảng 3 Bảng mô tả thông tin API lấy GPS của xe trong một đoạn thời gian
- API lấy báo cáo hành trình: API lấy thông tin di chuyển của xe trong một khoảng thời gian
Request https://client-api.quanlyxe.vn/v3/tracking/
GetVehicleTripReport?apikey=[api- key]&vehicles=[vehicles]&from=[from]&to=[to]&apikey=[a pi-key]
"Address": "23 Trần Nguyên Hãn, X.Mỹ Phong, TP.Mỹ Tho,
VehicleId Group Plate IdNo Driver FromTim e ToTime Address
Dựa trên thông tin từ hộp đen qua các API của VIETMAP, nhóm đã phát triển nhiều chức năng hữu ích Đầu tiên, tính năng theo dõi vị trí phương tiện được xây dựng bằng cách sử dụng API GPS Thứ hai, nhóm đã tạo ra chức năng xem lại lộ trình di chuyển trong một khoảng thời gian, cho phép so sánh với báo cáo của tài xế để đưa ra cảnh cáo phù hợp cho người quản lý Cuối cùng, các tính năng bổ sung như xem trước lộ trình di chuyển và đề xuất vị trí tìm kiếm cho tài xế và người điều động xe cũng đã được phát triển.
THỰC HIỆN XÂY DỰNG HỆ THỐNG
Các chức năng cần xây dựng trong hệ thống
4.1.1.1 Quản trị vai trò người dùng:
- Xem danh sách các vai trò hiện có trong hệ thống
- Xây dựng danh mục các quyền truy cập có trong hệ thống
- Xây dựng chức năng thêm mới, chỉnh sửa vai trò người dung như: tên vai trò, phần phối các quyền truy cập tương ứng với vai trò
- Xem danh sách người có trong hệ thống, có chức năng phân trang khi dữ liệu lớn, cho phép xuất file excel danh sách người dung khi cần thiết
- Xây dựng chức năng thêm mới, chỉnh sửa thông tin người dùng gồm các thông tin: Họ tên, địa chỉ, số điện thoại, vai trò, cơ cấu tổ chức
- Xem thông tin chi tiết của người dùng
- Cho phép tìm kiếm người dùng theo vai trò, quyền truy cập, họ tên của người dùng
4.1.1.3 Quản trị giờ làm việc
- Xem danh sách giờ làm việc của tenant
- Xây dựng chức năng thêm mới, chỉnh sửa giờ làm việc gồm các thông tin: giờ bắt đầu, giờ kết thúc làm việc
- Xem danh sách xe có trong tenant, có chức năng phân trang khi dữ liệu lớn
Xây dựng chức năng cho phép thêm mới và chỉnh sửa thông tin xe, bao gồm các dữ liệu quan trọng như biển số xe, tên xe, nhà cung cấp, ngày nghỉ, giờ làm việc, số km/tháng, phí cơ bản, phí ngoài giờ, phí ngày lễ, phí vượt km, phí lưu đêm, tài xế và trạng thái xem của người dùng chính.
- Xây dựng chức năng tìm kiếm theo tên xe, số xe, số điện thoại tài xế, nhà cung cấp xe
Cho phép xuất file excel khi cần thiết
4.1.1.5 Quản trị ngày lễ/tết
Xây dựng chức năng xếp mới ngày lễ/tết bao gồm các thông tin như tên, mô tả, ngày bắt đầu và ngày kết thúc Hệ thống sẽ sử dụng ngày lễ/tết để tính toán chi phí cho tài xế khi làm việc vào những ngày đặc biệt này.
- Xem danh sách các ngày lễ/tết, cho phép xóa ngày lễ/tết trên danh mục
4.1.1.6 Quản trị phương tiện vận tải
- Xây dựng danh sách các yêu cầu điều động xe và có chức năng phân trang với dữ liệu lớn
- Xây dựng danh sách các yêu cầu điều động xe dưới dạng lịch Cho phép xem danh sách theo dòng thời gian, ngày, tháng, năm
Xây dựng chức năng cho phép người dùng thêm mới và chỉnh sửa yêu cầu điều động, bao gồm các thông tin quan trọng như địa điểm đón, địa điểm thả xuống, người yêu cầu, mục đích yêu cầu, thời gian sử dụng và loại xe được điều động.
- Cho phép tra cứu thông tin yêu cầu điều động theo tên xe, số xe, tài xế, người yêu cầu, ngày yêu cầu
- Cho phép xem thông tin chi tiết của một yêu cầu điều động
- Xây dựng chức năng xem lộ trình di chuyển của phương tiện
- Xây dựng chức năng xuất báo cáo, cho phép xuất file excel theo thời gian và xe
4.1.2.1 Danh sách yêu cầu điều động
- Xem danh sách các yêu cầu điều động của xe do tài xế quản lý, có chức năng phân trang với dữ liệu lớn
- Cho phép cập nhật yêu cầu điều động gồm các thông tin: Thời gian thực đi, số km bắt đầu, số km kết thúc
- Xây dựng chức năng xem lộ trình di chuyển của yêu cầu điều động
- Xây dựng chức năng xuất file báo cáo chi tiết các yêu cầu của xe do tài xế quản lý theo thời gian
4.1.4.1 Yêu cầu điều động xe
- Xây dựng chức năng tạo yêu cầu điều động, gợi ý vị trí điều động dựa trên thông tin nhập vào
- Xây dựng chức năng xuất báo cáo, cho phép xuất file excel theo thời gian và xe
- Xây dựng chức năng xuất file báo báo chi tiết
- Xây dựng chức năng báo cáo chi phí
Xây dựng hệ thống quản lý phương tiện vận tải
Sau khi nghiên cứu và đánh giá các bộ thư viện cũng như framework hỗ trợ xây dựng website, nhóm đã quyết định lựa chọn kết hợp Angular với Asp.net Core làm nền tảng phát triển website.
Angular cung cấp một cấu trúc rõ ràng để phát triển các tính năng cho ứng dụng, cho phép tích hợp dễ dàng các dependency như HTTP và Router bằng cách thêm chúng vào constructor của class khi cần thiết.
Mô hình MVVM mang lại lợi thế cho Angular trong việc phát triển ứng dụng client-side, với ba yếu tố chính cần chú ý: giao diện người dùng, mã nguồn điều khiển giao diện và mô hình dữ liệu cho giao diện.
Angular được viết bằng Typescript trên nền tảng Javascript nên nếu đã biết về
JS thì tiếp cận với Angular rất dễ dàng Project Angular của framework tích hợp sẵn thư viện Primeface để viết Html nhanh hơn
Angular với MVVM phân biệt hoàn toàn rõ ràng các yếu tố trên nhờ mô hình MVVM:
Phần giao diện (view) trong một template được định nghĩa bằng HTML cho một component cụ thể, có thể là toàn bộ Layout hoặc bất kỳ phần nào trong Layout đó.
● Model được định nghĩa như là các thuộc tính của component class Có thể hiểu là dữ liệu, dựa vào đó để phần View sử dụng để thực thi
View/model là một lớp quản lý đồng thời cả view và model, chịu trách nhiệm truy xuất dữ liệu và thực hiện các tương tác của người dùng trên giao diện.
Với việc ứng dụng các điểm tích cực của các thành phần trên, Angular khiến việc phát triển ứng dụng trở nên dễ dàng và hiệu quả hơn
Sơ đồ hoạt động của Asp.net core và Angular
Hình 4.1 Sơ đồ hoạt động của ASP.NET và Angular
Một dự án Angular được thiết kế để triển khai độc lập với phần backend của Asp.net Core, tạo ra một ứng dụng HTML+CSS đơn giản có khả năng hoạt động trên mọi hệ điều hành và máy chủ web.
Hình 4.2 Sơ đồ Angular solution
Root chịu trách nhiệm Bootstrap ứng dụng
- AccountModule cung cấp các phương thức đăng nhập, đăng ký, xác thực hai yếu tố, quên mật khẩu…
- AppModule chứa hai thành phần con Main và Admin trong đó:
● AdminModule: chứa các thành phần phục vụ quản trị website như Người dùng, quyền, đa ngôn ngữ, cài đặt…
● MainModule: là nơi chứa các component phát triển ứng dụng
Thiết kế hệ thống
4.3.1 Thiết kế Cơ sở dữ liệu cho hệ thống:
Hệ thống được thiết kế theo kiến trúc Multitenancy, do đó, tất cả các bảng dữ liệu đều có trường Tenant_Id Trường này giúp quản lý dữ liệu hiệu quả cho từng tenant khác nhau.
Danh sách các ý nghĩa các tiền tố của các phân hệ trong CSDL:
STT Tiền tố Ý nghĩa Ghi chú
1 DM_ Phân hệ các trường danh mục chung
2 SYS_ Các bảng liên quan đến hệ thống
Bảng 4 Danh sách các tiền tổ của các phân hệ
Danh sách các bảng dữ liệu trong hệ thống quản trị:
STT Tên bảng Ý nghĩa Ghi chú
1 SYS_CarType Bảng lưu trữ thông tin các loại xe quản lý
2 SYS_CodeMasters Bảng lưu trữ thông tin các trường khởi tạo
3 SYS_Prefix Lưu trữ các tiền tố của ID của các bảng để phát sinh tự động
4 SYS_Schedule Bảng lưu trữ thông tin thời gian sử dụng xe
5 SYS_WorkHour Bảng lưu trữ thông tin giờ làm việc hành chính của xe
6 DM_Booking Bảng lưu trữ thông tin đặt xe của user
7 DM_Car Bảng lưu trữ thông tin xe
8 DM_Holiday Bảng lưu trữ thông tin ngày lễ
9 DM_MileageHistory Bảng lưu trữ các thông tin số kilometres đầu cuối của xe
10 DM_Vendor Bảng lưu trữ thông tin danh mục nhà cung cấp xe
Bảng 5 Danh sách các bảng dữ liệu của các phân hệ 4.3.2 Mô hình thiết kế cơ sở dữ liệu
Hình 4.3 Mô hình Class Diagram
4.3.3 Mô tả chi tết cơ sở dữ liệu
Giá trị Kiểu dữ liệu Mô tả
DeletionTime DATETIME2 Thời gian xóa
IsActive BIT Trạng thoái hoạt động
IsDeleted BIT Trạng thái xóa
LastModificationTime DATETIME2 Thời gian chỉnh sửa cuối LastModifierUserId BIGINT User chỉnh sửa cuối
Name NVARCHAR Tên hiển thị Tenant
Bảng 6 Bảng thông tin tenant
Giá trị Kiểu dữ liệu Mô tả
CreationTime DATETIME2 Thời gian tạo User
CreatorUserId BIGINT ID User tạo
DeleterUserId BIGINT ID User xóa
DeletionTime DATETIME2 Thời gian xóa
EmailAddress NVARCHAR Địa chỉ Email
IsActive BIT Trạng thái hoạt động của User
56 isDeleted BIT Trạng thái xóa của User
LastModificationTime DATETIME2 Thời gian chỉnh sửa lần cuối
LockoutEndDateUtc DATETIME2 Thời gian User bị khóa
Password NVARCHAR Mật khẩu User
PhoneNumber NVARCHAR Số điện thoại User
TenantId BIGINT Id Tenant của User
UserName NVARCHAR Tên đăng nhập User
Bảng 7 Bảng thông tin người dùng
Giá trị Kiểu dữ liệu Mô tả
Id BIGINT ID định danh của nhóm quyền
CreationTime DATETIME2 Thời gian tạo nhóm quyền
CreatorUserId BIGINT ID User tạo nhóm quyền
DeletionTime DATETIME2 Thời gian xóa nhóm quyền
DisplayName NVARCHAR Tên nhóm quyền hiển thị isDeleted BIT Trạng thái xóa của nhóm quyền
Thời gian chỉnh sửa lần cuối của nhóm quyền
ID User chỉnh sửa lần cuối của nhóm quyền
TenantId BIGINT ID Tenant của nhóm quyền
Bảng 8 Bảng nhóm quyền người dùng
Giá trị Kiểu dữ liệu Mô tả
Id BIGINT ID định danh quyền và người dùng
CreatorUserId BIGINT ID người dùng tạo quyền
RoleId BIGINT ID nhóm quyền
UserId BIGINT ID định danh của người dùng
Bảng 9 Bảng quyền người dùng
Giá trị Kiểu dữ liệu Mô tả
Id INT ID định danh của ngôn ngữ
CreationTime DATETIME2 Thời gian tạo ngôn ngữ
CreatorUserId DATETIME2 ID người dùng tạo ngôn ngữ
DeleterUserId BIGINT ID người dùng xóa ngôn ngữ
DeletionTime DATETIME2 Thời gian xóa ngôn ngữ
DisplayName NVARCHAR Tên ngôn ngữ hiển thị
Icon NVARCHAR Hình ảnh Icon hiển thị
IsDeleted BIT Trạng thái xóa của ngôn ngữ
LastModificationTime DATETIME2 Thời gian chỉnh sửa lần cuối ngôn ngữ LastModifierUserId BIGINT ID user chỉnh sửa ngôn ngữ lần cuối
Name NVARCHAR Tên ngôn ngữ
TenantId INT ID Tenant sử dụng ngôn ngữ
Trạng thái không hoạt động của ngôn ngữ
Giá trị Kiểu dữ liệu Mô tả
Id BIGINT ID định danh văn bản ngôn ngữ
CreationTime DATETIME2 Thời gian tạo văn bản của ngôn ngữ CreatorUserId BIGINT ID người dùng tạo văn bản ngôn ngữ
[Key] NVARCHAR Từ khóa văn bản ngôn ngữ
LanguageName NVARCHAR Tên loại ngôn ngữ
LastModificationTime DATETIME2 Thời gian chỉnh sửa lần cuối
LastModifierUserId BIGINT ID người dùng chỉnh sửa lần cuối
TenantId INT ID Tenant sử dụng văn bản ngôn ngữ
Value NVARCHAR Giá trị thể hiện của ngôn ngữ
Bảng 11 Bảng văn bản ngôn ngữ
Giá trị Kiểu dữ liệu Mô tả
Id NVARCHAR ID định danh xe
TenantId INT ID Tenant sử dụng xe
DriverId BIGINT ID tài xế sử dụng xe
CarPlate NVARCHAR Biển số xe
MileagePerMonth BIGINT Số kilometres xe chạy hàng tháng
Basicfee BIGINT Phí cơ bản của xe
OverTimeFee BIGINT Phí xe chạy ngoài giờ làm việc
HolidayFee BIGINT Phí xe chạy trong ngày lễ
Phí xe khi chạy vượt số kilometes hàng tháng
OverNightFee BIGINT Phí qua khi xe chạy qua đêm
CreationTime DATETIME2 Thời gian tạo xe
CreatorUserId BIGINT ID người dùng tạo xe
Thời gian lần cuối chỉnh sửa thông tin xe
ID người dùng lần cuối chỉnh sửa thông tin xe
IsDeleted BIT Trạng thái xóa của xe
DeleterUserId BIGINT ID người dùng xóa xe
DeletionTime DATETIME2 Thời gian xóa xe
MainUserId BIGINT ID người dùng chính của xe
VendorId BIGINT ID nhà cung cấp xe
CarTypeId BIGINT ID loại xe
WorkHourId BIGINT ID loại thời gian hoạt động của xe
IsActive BIT Trạng thái hoạt động của xe
Danh sách người dùng được phép điều động xe
Bảng 12 Bảng thông tin xe
Giá trị Kiểu dữ liệu Mô tả
Id NVARCHAR ID định danh nhà cung cấp xe
VendorName NVARCHAR Tên nhà cung cấp xe
Address NVARCHAR Địa chỉ nhà cung cấp xe
Introduction NVARCHAR Mô tả về nhà cung cấp xe
CreationTime DATETIME2 Thời gian tạo nhà cung cấp xe
CreatorUserId DATETIME2 ID người dùng tạo nhà cung cấp xe
Bảng 13 Bảng thông tin nhà cung cấp xe
Giá trị Kiểu dữ liệu Mô tả
Id BIGINT ID loại giờ làm việc của xe
StartTime TIME Thời gian bắt đầu làm việc trong ngày
EndTime TIME Thời gian kết thúc làm việc trong ngày
Bảng 14 Bảng thông tin thời gian làm việc trong hệ thống
Giá trị Kiểu dữ liệu Mô tả
Id BIGINT ID loại xe theo ngày làm việc
WorkingDay NVARCHAR Ngày làm việc của xe
MaxDayOfTheMonth INT Số ngày làm việc trong tháng
DayOff NVARCHAR Ngày nghỉ trong tuần
Bảng 15 Bảng thông tin giờ làm việc của xe
Giá trị Kiểu dữ liệu Mô tả
Id NVARCHAR ID định danh phiếu điều động xe
TenantId INT ID Tenant phiếu điều động xe
CarId BIGINT ID loại xe hoạt động
CreationTime DATETIME2 Thời gian tạo phiếu điều động xe CreatorUserId BIGINT ID người dùng tạo phiếu điều động xe
IsDeleted BIT Trạng thái xóa của phiếu điều động
DeleterUserId BIGINT ID người dùng xóa phiếu điều động DeletionTime DATETIME2 Thời gian xóa phiếu điều động
VehicleUserId BIGINT ID người dùng sử dụng xe
Usage NVARCHAR Mục đích sử dụng xe
NumberOfNights INT Số lần qua đêm
DropOffId NVARCHAR ID vị trí đón
PickUpId NVARCHAR ID vị trí trả khách
Bảng 16 Bảng thông tin điều đồng động xe
Giá trị Kiểu dữ liệu Mô tả
ID NVARCHAR ID vị trí x REAL Vĩ độ của vị trí y REAL Kinh độ của vị trí
Label NVARCHAR Mô tả vị trí
Bảng 17 Bảng thông tin vị trí xe
Giá trị Kiểu dữ liệu Mô tả
StartDate DATETIME2 Thời gian đón khách
EndDate DATETIME2 Thời gian trả khách
BookingId NVARCHAR ID phiếu điều động
Bảng 18 Bảng cập nhật thông tin cho tài xế
Giá trị Kiểu dữ liệu Mô tả
Id INT ID chi tiết phiếu điều động
BookingId NVARCHAR ID phiếu điều động
StartTime DATETIME2 Thời gian tài xế khởi hành
EndTime DATETIME2 Thời gian tài xế đến nơi
Bảng 19 Bảng chi tiết phiếu điều động xe
Giá trị Kiểu dữ liệu Mô tả
OriginalMileage BIGINT Số kilometres tài xế nhập lúc khởi hành AfterJourneyMileage BIGINT Số kilometres tài xế nhập lúc trả khách StartDate DATIME2 Thời gian tài xế đón khách
EndDate DATIME2 Thời gian tài xế trả khách
TollAndParkingFee BIGINT Phí đỗ xe
TripInformationId NVARCHAR ID phiếu điều động
NumberOfNights INT Số lần chạy qua đêm
TotalMileage BIGINT Tổng số kilometres theo dữ liệu tài xế
Tổng số kilometres theo dữ liệu từ hộp đen
Bảng 20 Bảng chi tiết di chuyển của xe
Giá trị Kiểu dữ liệu Mô tả
Id NVARCHAR ID định danh ngày lễ
TenantId INT ID Tenant áp dụng ngày lễ
HolidayName NVARCHAR Tên ngày lễ
StartDayOff DATETIME2 Thời gian bắt đầu ngày lễ
EndDayOff DATETIME2 Thời gian bắt đầu ngày lễ
CreatorUserId BIGINT ID người dùng tạo ngày lễ
CreationTime DATETIME2 Thời gian tạo ngày lễ
IsDeleted BIT Thời gian xóa ngày lễ
DeleterUserId BIGINT ID người dùng xóa ngày lễ
HolidayDescription NVARCHAR Mô tả về ngày lễ
Hiện thực các chức năng trên Framework đã xây dựng
Các chức năng của từng phân hệ sẽ được phát triển dựa trên nền tảng Framework đã được thiết lập Kiến trúc chương trình của hệ thống sẽ được xây dựng theo cách nhất quán và hiệu quả.
- Các Module chức năng trên giao diện: Các module giao diện ứng với từng phân hệ trong hệ thống quản trị
Web API bao gồm các Controller chịu trách nhiệm xử lý nghiệp vụ cho từng phân hệ, đồng thời sử dụng các lớp ánh xạ dữ liệu trong Views và ViewModels để kết nối giữa giao diện quản trị và cơ sở dữ liệu.
- Cơ sở dữ liệu: Chứa các bảng lưu dữ liệu của các phân hệ đã phân tích như trên
Hình 4.4 Kiến trúc chương trình cho hệ thống quản trị các Tenant
4.4.2 Xây dựng Framework chuẩn cho hệ thống:
4.4.2.1 Áp dụng Net Core và Design Pattern vào Framework Back-end của hệ thống
Framework NET Core là một công cụ mã nguồn mở do Microsoft phát triển, giúp xây dựng ứng dụng đa nền tảng Nó nổi bật với kiến trúc module, cho phép tích hợp dễ dàng các thư viện mới thông qua Dependency Injection (cài đặt qua NuGet), và có khả năng triển khai trên nhiều hệ điều hành như Windows, Linux, và MacOS Ngoài ra, NET Core còn nhận được sự hỗ trợ từ Microsoft và cộng đồng mã nguồn mở.
Kiến trúc phần core xử lý backend của dự án được thiết kế dựa trên mô hình 3 lớp kết hợp với kiến trúc client-server và MVC Toàn bộ logic được tích hợp vào mô hình 3 lớp nhằm mục đích tái sử dụng mã nguồn phía server một cách hiệu quả.
Hình 4.5 Kiến trúc core Back-end
Project.Model Chứa các lớp Doman Entities của dự án (tất cả các thực thể)
Utilizing the Entity Framework Code First approach, this article discusses the integration of data access layers with stored procedures to enhance application performance and maintainability By combining Entity Framework with stored procedures, developers can optimize data operations while ensuring easier management of the application.
Project.Common Chứa tiện ích dùng chung cho hệ thống
Project.Service Chứa Service xử lý Business logic
Bảng 22 Cấu trúc Project Back-end quản trị hệ thống
Hình 4.6 Kiến trúc N-LAYER trong xây dựng API
Utilizing design patterns such as Repository and Dependency Injection, along with ASP.NET Identity for user authentication, AutoMapper for data mapping, and Web API for creating RESTful APIs, facilitates seamless mobile deployment The Repository pattern serves as an intermediary layer between the data access layer and the business layer In a project utilizing Entity Framework with ASP.NET Core, the Data layer encompasses the DbContext classes and entity classes, while the business logic layer handles the project's operational logic Implementing the Repository pattern enhances architectural flexibility, simplifies unit testing, improves code maintainability, and centralizes data processing and business logic.
Dự án yêu cầu một phương pháp hiệu quả để tạo ra tất cả các repository logic tại cùng một vị trí Để thao tác với toàn bộ các class entity, cần thiết phải tạo ra chỉ một repository duy nhất Giải pháp cho vấn đề này là áp dụng Generic Repository Pattern, mang lại lợi ích cho việc đảm bảo các lập trình viên sử dụng chung một mẫu thiết kế thống nhất.
Sử dụng Generic trong lập trình không chỉ tăng cường tính thống nhất mà còn giảm thiểu lỗi phát sinh Hơn nữa, Generic giúp giảm thiểu sự trùng lặp mã nguồn, từ đó tạo điều kiện thuận lợi cho việc bảo trì trong tương lai.
Hình 4.7 Mô hình Reposistory Pattern [7] Đăng nhập quản trị người dùng với ASP.NET Identity:
- Tạo ra cơ chế đăng nhập khi đăng nhập thành công sẽ tạo ra 1 token gửi về cho client Angular
Mỗi yêu cầu gửi lên cần phải bao gồm token trong header Chúng ta sử dụng localStorageModule để lưu trữ token, và khi người dùng đăng xuất, token sẽ bị xóa Nếu không có token, người dùng sẽ được xem là chưa đăng nhập.
Hình 4.8 Mô hình hoạt động ASP.NET Identity [8]
Để tải menu theo vai trò người dùng trong Angular, chúng ta cần sử dụng một chuỗi JSON dạng Gson Quá trình này bao gồm việc kiểm tra quyền hạn của người dùng và ánh xạ các đối tượng từ Web API để có thể tạo ra menu động một cách hiệu quả.
4.4.2.2 Áp dụng Angular 11 vào xây dựng Framework Front-end:
Angular 11 là 1 framework phát triển trên nền JavaScript của Google, kế thừa các đặc điểm của AngularJS và phát triển một phương thức tiếp cận việc xây dựng ứng dụng hoàn toàn mới, phương pháp hướng Component Với các điểm mạnh như là một framework đa nền tảng, tập trung hơn vào các ứng dụng di động (cải thiện performace, giao diện), sử dụng Dependency Injection với code đơn giản hơn, hoạt động tốt với ECMAScript và các ngôn ngữ khác để biên dịch JavaScript, cơ chế two- way-biding (Khi model thay đổi thì view sẽ thay đổi theo và ngược lại)
Hình 4.9 Cấu trúc chương trình Front- end
Giải thích về 1 số thành phần trong cấu trúc thư mục:
- Thư mục account: thư mục chứa “moudules” và “component” cho chức năng đăng ký, đăng nhập, quên mật khẩu, xác thực… của ứng dụng
- Thư mục app: chứa toàn bộ “moudules” và “component” cho các chức năng liên quan đến nghiệp vụ của hệ thống
- Thư mục assets: thư mục chứa các file ảnh, css, custom JavaScipt của ứng dụng
- Thư mục environment: thư mục giúp chúng ta định nghĩa các tập tin cấu hình để chạy ứng dụng trên nhiều môi trường khác nhau
Thư mục shared: chưa các component, service, directive và pipes dùng chung trên các modules
- Tập tin favicon.ico: chứa icon của ứng dụng
- Tập tin Index.html: layout chính của dự án
- Tập tin main.ts: chứa code bootrapping của ứng dụng
- Tập tin polyfill.ts: dùng để định nghĩa các chuẩn để ứng dụng có thể chạy trên nhiều trình duyệt
- Tập tin style.css: định nghĩa style css cho ứng dụng
- Tập tin tsconfig.json: cấu hình để biên dịch typescript
- Editorconfig: chứa cấu hình liên quan đến editor để chỉnh sửa souce code như: indent_size, max_line_lenght
- Angular-cli.json: tập tin chứa cấu hình cho Angular CLI, giúp build ứng dụng Angular
- Package-lock.json: tập tin cấu hình cho các Node.js module dependencies
- Package.json: tập tin cấu hình cho Node.js module dependencies.
Kiến trúc chương trình của hệ thống
- Controllers: Chứa các API xử lý các yêu cầu về khởi tạo, chuyển trạng thái và phân phối Plugin đến Tenant
- Models: Chứa các lớp ánh xạ dữ liệu
- ViewModels: Chứa các lớp Mapping dữ liệu đặc biệt từ Client gửi đến
- Data: Chứa các lớp xử lý kết nối đến hệ quản trị MySQL của VPS
- Các tập tin cấu hình: Chứa các đối số cho hệ thống hoạt động
- Thư viện kết nối VPS: Các thư viện kết nối SSh đến Server Linux
Xây dựng các tính năng liên quan đến bản đồ
Để phát triển các tính năng liên quan đến bản đồ, nhóm sẽ tận dụng dịch vụ bản đồ từ Google trên nền tảng Google Cloud Platform (GCP).
Hình 4.11 Các dịch vụ liên quan đến bản đồ do Google cung cấp
ViewModels Các tập tin cấu hình Thư viện kết nối đến VPS
Trong phạm vi đề tài nhóm sẽ sử dụng:
Maps JavaScript API là dịch vụ cho phép bạn tùy chỉnh bản đồ bằng nội dung và hình ảnh riêng, hiển thị trên các trang web Để sử dụng Maps JavaScript API, bạn cần thiết lập dự án trong Google Cloud Console và kích hoạt API này trên trang chủ Google Cloud Platform.
Hình 4.12 Đăng ký dự án trên trang Google Cloud Console
Hình 4.13 Kích hoạt dịch vụ Maps JavaScript API
Các sản phẩm của Google Maps Platform được bảo vệ khỏi việc sử dụng trái phép thông qua việc hạn chế các lệnh gọi API bằng cách yêu cầu thông tin xác thực phù hợp Những thông tin xác thực này, dưới dạng khóa API, là chuỗi ký tự duy nhất liên kết tài khoản thanh toán Google với dự án và API hoặc SDK cụ thể Để sử dụng dịch vụ của Google, người dùng cần ít nhất một khóa API liên kết với dự án, do đó, việc đăng ký khóa API trên trang Google Cloud Console là cần thiết.
Hình 4.14 Màn hình đăng ký sử dụng dịch vụ Maps JavaScript API
KẾT QUẢ ĐẠT ĐƯỢC
Quản trị tenant
- Hiển thị danh sách các tenant có trong hệ thống
- Cho phép tạo mới tenant
Hình 5.1 Màn hình quản lý tenant
Hình 5.2 Màn hình tạo mới tenant
Quản trị vai trò
- Hiển thị danh sách các vai trò có trong hệ thống
- Cho phép tạo vai trò mới
- Phân quyền cho truy cập tương ứng với các vai trò
- Cho phép chỉnh sửa hoặc xóa vai trò
Hình 5.3 Màn hình quản lý vai trò người dùng
Hình 5.4 Màn hình tạo tên vai trò mới
Hình 5.5 Màn hình phân quyền cho vai trò mới
Hình 5.6 Màn hình chỉnh sửa thông tin vai trò
Màn hình quản trị người dùng
- Hiển thị danh sách người dùng có trong hệ thống, có phân trang với dữ liệu lớn
- Xây dựng tính năng tạo người dùng mới
- Admin hệ thống có quyền đăng nhập vào các tài khoản của người dùng
- Cho phép chỉnh sửa thông tin người dùng
Hình 5.7 Màn hình quản lý danh sách người dùng
Hình 5.9 Màn hình nhập thông tin người dùng mới
Hình 5.10 Màn hình chọn vai trò người dùng
Màn hình quản trị ngôn ngữ
- Mặc định hệ thống có 2 ngôn ngữ là: tiếng Anh và tiếng Việt
- Cho phép thêm mới và chỉnh sửa từ ngữ trong danh sách quản lý
Hình 5.11 Màn hình danh sách ngôn ngữ
Hình 5.12 Màn hình chỉnh sửa ngôn ngữ
Màn hình đăng nhập
Chức năng đăng nhập tài khoản quản trị cho phép người dùng truy cập và thao tác với các phân hệ của hệ thống quản trị Hệ thống hỗ trợ tính năng ghi nhớ đăng nhập và cho phép người dùng thay đổi ngôn ngữ hiển thị trên màn hình đăng nhập.
Hình 5.13 Màn hình đăng nhập trang quản trị Tenant
Vai trò và quyền hạn
Hệ thống gồm 3 loại tài khoản/vai trò mặc định:
- Quản trị viên (Data_Admin)
Tài khoản Data_Admin mặc định tất cả các quyền của User và có thêm 3 quyền quản lý gồm: Xe, Nhà cung cấp, ngày lễ
Tài khoản User mặc định có các quyền:
- Xem và quản lý các phiếu điều động
- Xem lịch phiếu điều động
- Xem báo cáo (chi tiết và chi phí)
Hình 5.14 Quản trị dữ liệu của quyền admin
Hình 5.15 Màn hình quyền User 5.6.3 Vai trò Driver
Tài khoản Driver mặc định có các quyền:
- Nhật ký công-tơ-mét – Tài xế nhập km hằng tháng của xe
- Tài xế chỉ được cập nhật các thông tin về xe của mình
Hệ thống sẽ hiển thị cảnh báo "Trường Pick Up phải có độ dài tối đa" dưới ô nhập liệu khi người dùng nhập quá số ký tự cho phép trong các trường thông tin như Textbox và Textarea.
- Định dạng ngày dd/mm/yyyy
Hình 5.16 Màn hình nhật ký công-tơ-mét
- Xem danh mục đặt lịch: Tài xế chỉ có quyền thêm các thông tin: số km bắt đầu, số km kết thúc, phí cầu đường, …
Hình 5.17 Màn hình danh sách đặt lịch của quyền Driver
- Xem trước quãng đường di chuyển của mỗi lịch đặt
Hình 5.18 Màn hình xem trước quãng đường di chuyển
Hình 5.19 Màn hình xem lịch đặt xe
- Xem báo cáo (Chi tiết)
Màn hình quản lý dữ liệu
Data_Admin sẽ có các mục tương ứng với các quyền quản lý dữ liệu mặc định
- (1): Hộp văn bản tìm kiếm: Nhập giá trị cần tìm kiếm và nhấn enter hoặc nhấn nút tìm kiếm bên trái
- (2): Bộ chọn tìm kiếm (bộ lọc nâng cao): Hiển thị các trường thông tin để thực hiện tìm kiếm chi tiết
Hình 5.22 Bộ lọc nâng cao
5.7.2 Màn hình khởi tạo xe
Hình 5.23 Nút thêm mới xe
Khi nhấn vào nút thêm mới sẽ hiển thị biểu mẫu gồm các trường cần thiết để cung cấp đầy đủ những thông tin của xe
Hình 5.24 Màn hình khởi tạo xe
Yêu cầu nhập đủ thông tin cho các trường được yêu cầu (các trường có dấu
Khi nhập sai thông tin hoặc không nhập, hệ thống sẽ hiển thị thông báo lỗi Sau khi tạo xe thành công, xe vừa tạo sẽ xuất hiện trong danh sách Người dùng có thể hủy quá trình tạo mới bằng cách nhấn nút Hủy bỏ hoặc quay về danh sách.
5.7.3 Màn hình chỉnh sửa xe
Trong danh sách xe, nhấn chọn xe (tối đa 1 xe), sau khi chọn nút chỉnh sửa sẽ được kích hoạt
Sau khi chọn chỉnh sửa, màn hình chỉnh sửa thông tin sẽ xuất hiện Sau khi hoàn tất việc chỉnh sửa thông tin cần thiết, bạn hãy nhấn nút lưu để lưu lại thông tin Nếu không muốn lưu, bạn có thể hủy bỏ chỉnh sửa bằng cách nhấn nút hủy bỏ hoặc quay lại danh sách.
Hình 5.26 Màn hình chỉnh sửa thông tin xe 1
Hình 5.27 Màn hình chỉnh sửa thông tin xe 2 5.7.4 Xóa xe
Chọn các xe muốn xóa và nút xóa sẽ được kích hoạt
Cho phép xuất file excel với tất cả các xe quản lý
Hình 5.29 Xuất file excel danh sách xe 5.7.6 Lịch đặt xe:
Khi vào danh mục lịch đặt xe, admin, user, driver có thể thấy được tất cả các booking theo các cách sau:
- Xem theo ngày hiện tại hoặc trong khoảng thời gian
Hình 5.30 Màn hình xem lịch đặt xe theo ngày
Hình 5.31 Màn hình xem lịch đặt xe theo tuần
Hình 5.32 Màn hình xem lịch đặt xe theo tháng 5.7.7 Màn hình điều động xe
Khi người dùng vào mục điều động xe và nhấn nút "thêm mới", một biểu mẫu sẽ xuất hiện với các trường thông tin cần thiết để hoàn tất yêu cầu điều động xe Sau khi yêu cầu được tạo thành công, nó sẽ hiển thị trong danh sách điều động của người dùng, quản trị viên và tài xế được yêu cầu.
Quy tắc chung và rang buộc: Ẩn các lệnh điều động đã hoàn thành theo thời gian đề nghị sử dụng
Các tài xế chỉ có thể nhìn thấy các lệnh điều động của chính họ Không được nhìn thấy các lệnh điều động khác khi tìm kiếm
Người sử dụng chỉ được nhìn thấy các lệnh điều động do chính họ tạo Không được nhìn thấy các lệnh điều động khác khi tìm kiếm
Hệ thống sẽ hiển thị cảnh báo “The field Pick Up must be at maximum length” dưới ô nhập liệu nếu người dùng nhập quá số ký tự cho phép trong các trường thông tin (Textbox + Textarea) Định dạng ngày cần tuân thủ là dd/mm/yyyy.
Trong trường hợp có thay đổi, người dùng có quyền chỉnh sửa lệnh điều động
Người dùng chỉ có thể chỉnh sửa lệnh điều động của mình.
Danh mục quản lý ngày lễ
Chức năng giúp Admin cập nhật ngày lễ theo từng năm
Cho phép tạo mới và chỉnh sửa thông tin ngày lề
Ràng buộc và quy tắc chung:
+ Đạnh dạng ngày dd/mm/yyyy
+ Chỉ tài khoản Admin có quyền truy cập
Hình 5.34 Màn hình quản lý danh sách ngày lễ
Xuất file báo cáo
Hình 5.36 Màn hình xuất file báo cáo
Người quản lý có quyền xuất báo cáo chi tiết và báo cáo chi phí từ ngày đến ngày của các xe mà mình quản lý
Khi người dùng đăng nhập, các báo cáo sẽ được xuất theo đơn vị của tài khoản Tài xế chỉ có quyền truy cập vào Báo cáo chi tiết liên quan đến xe của mình.
Báo cáo chi tiết cung cấp thông tin về lịch trình điều động xe trong một tháng, bao gồm thời gian xuất phát, thời gian đến, quãng đường di chuyển và thời gian di chuyển.
Hình 5.37 Báo cáo chi tiết của xe màn hình 1
Hình 5.38 Báo cáo chi tiết của xe màn hình 2 5.9.2 Báo cáo chi phí
Báo cáo chi phí cung cấp thông tin chi tiết về thời gian làm việc của xe, bao gồm cả thời gian hành chính và thời gian làm thêm ngoài giờ Những dữ liệu này sẽ được sử dụng để tính toán lương cho tài xế lái xe một cách chính xác.
Hình 5.39 Báo cáo chi phí của xe