TỔNG QUAN VỀ ĐỀ TÀI
N HU CẦU THỰC TẾ CỦA ĐỀ TÀI
Trong bối cảnh nền kinh tế đang phát triển mạnh mẽ, đời sống người dân cũng được cải thiện, thói quen ăn mặc và xu hướng thời trang trở thành vấn đề được quan tâm Sự gia tăng nhanh chóng của các shop vừa và nhỏ đã tạo ra nhu cầu cần thiết cho các ứng dụng thương mại điện tử hỗ trợ các shop khởi nghiệp, giúp họ phát triển bền vững.
Các chủ shop luôn tìm kiếm ứng dụng độc đáo để khẳng định thương hiệu và cạnh tranh hiệu quả Tuy nhiên, việc phát triển ứng dụng đáp ứng nhu cầu này không hề đơn giản Nhận thấy thách thức này, nhóm đã quyết định tập trung vào lĩnh vực thương mại điện tử, nhằm tạo ra giải pháp khác biệt cho các shop nhỏ và vừa, những đơn vị chiếm tỷ lệ lớn trong ngành thời trang.
C ÁC DỰ ÁN ĐỐI THỦ
Phần mềm Sapo hiện nay nổi bật với ưu điểm lớn nhất là ứng dụng công nghệ hiệu quả, giúp hỗ trợ quản lý và bán hàng đa kênh Nó cho phép đồng bộ đơn hàng từ nhiều kênh khác nhau, bao gồm website, Facebook và các sàn thương mại điện tử.
Phần mềm nổi bật với tính năng tích hợp đơn vị vận chuyển, cho phép đơn hàng được xử lý và chuyển ngay lập tức đến các đối tác vận chuyển Điều này giúp chủ shop rút ngắn quy trình giao hàng và theo dõi trạng thái đơn hàng một cách chính xác.
Phần mềm Sapo phân tách rõ ràng giữa màn hình bán hàng tại cửa hàng và bán hàng trực tuyến, giúp tối ưu hóa các tính năng và thông tin chuyên môn cho từng kênh Điều này cho phép người dùng dễ dàng báo cáo riêng biệt về hóa đơn và doanh thu, đồng thời đo lường hiệu quả giữa hai kênh online và offline.
Chúng tôi cung cấp nhiều phương thức thanh toán linh hoạt, bao gồm thanh toán bằng tiền mặt, chuyển khoản ngân hàng, quẹt thẻ, COD, thanh toán bằng điểm, và gần đây nhất là hình thức thanh toán qua QR Code.
Giao diện phần mềm Sapo mặc dù thu hút nhưng menu có quá nhiều mục, gây khó khăn cho người dùng mới trong việc ghi nhớ Hơn nữa, sự phong phú với hơn 20 loại báo cáo có thể khiến người mới cảm thấy bối rối; do đó, cần xem xét việc loại bỏ hoặc ẩn bớt những báo cáo không thực sự cần thiết.
Phần mềm Sapo cung cấp tính năng phân quyền cho nhân viên dựa trên vai trò và chi nhánh, tuy nhiên, thao tác của nhân viên trong trang tính hiện tại vẫn chưa ổn định và cần được cải tiến.
+ Phần mềm phù hợp với đa số ngành nghề, như thời trang, tạp hoá, siêu thị, mỹ phẩm, điện tử… cả bán buôn và bán lẻ.
Kiotviet là giải pháp lý tưởng cho các doanh nghiệp và chủ shop chuyên bán hàng tại cửa hàng và quản lý nhiều chi nhánh Nếu bạn không có kế hoạch mở rộng sang bán hàng online, Kiotviet sẽ đáp ứng tốt nhu cầu quản lý và kinh doanh của bạn.
Phần mềm Kiotviet cho phép phân quyền chi tiết cho từng tài khoản, giúp nhân viên có thể xóa hoặc sửa đơn hàng nếu được cấp quyền, mà không nhất thiết phải là tài khoản chủ cửa hàng.
Kiotviet cung cấp một màn hình duy nhất cho cả bán hàng online và tại cửa hàng, giúp người dùng dễ dàng làm quen với quy trình tạo đơn bán hàng mà không cần phải học nhiều giao diện khác nhau.
+ Bán hàng ngay cả khi mất kết nối Internet.
Phần mềm Kiot Viet chủ yếu hỗ trợ các cửa hàng bán hàng offline, nhưng khi doanh nghiệp phát triển, việc chuyển sang kinh doanh online trở nên cần thiết Điều này có thể tạo ra khó khăn trong việc quản lý và báo cáo, bởi vì không thể phân tách rõ ràng giữa doanh thu từ cửa hàng và doanh thu từ kênh online, dẫn đến việc khó đo lường hiệu quả của từng kênh bán hàng.
Việc phân quyền chi tiết cho từng tài khoản có thể tạo ra khó khăn trong việc kiểm soát, đặc biệt khi nhân viên thiếu trung thực và có ý định gian lận.
Phần mềm Kiot Viet hiện có giao diện quản trị chưa thực sự hiện đại và thân thiện, với bố cục phức tạp Các báo cáo chưa được trình bày một cách trực quan và thiếu các báo cáo chuyên sâu Ngoài ra, giao diện quản lý trên điện thoại cũng không hiển thị tốt như trên máy tính.
+Phần mềm không hỗ trợ bán hàng online và không kết nối với vận chuyển nếu shop có nhu cầu ship hàng.
+ Bên cạnh đó, các phương thức thanh toán của Kiotviet cũng mới hỗ trợ 3 hình thức là tiền mặt, thẻ và chuyển khoản.
Dịch vụ chăm sóc khách hàng và hỗ trợ kỹ thuật có phần chậm chạp, có thể do lượng khách hàng đông đảo, dẫn đến việc tiếp cận thông tin và xử lý vấn đề bị ảnh hưởng.
Đ ỐI TƯỢNG NGHIÊN CỨU
- Khoá luận này hướng đến nghiên cứu các đối tượng sau:
+ Giao diện: Quy tắc thiết kế F-layout, quy tắc phối màu mono.
+ Thuật toán: Thuật toán gợi ý sản phẩm Content-based và CollaborativeFiltering.
- Đối tượng trong phạm vị đề tài hướng đến:
+ Những doanh nghiệp, nhà bán hàng trong và ngoài nước.
+ Người tiêu dùng trong nước và quốc tế.
P HẠM VI NGHIÊN CỨU
- Ứng dụng Ecommerce được nhóm xây dựng bằng ngôn ngữ Flutter trên môi trường Android/iOS và Server được xây dựng bằng ngôn ngữ Java.
- Tìm hiểu về hệ thống gợi ý sản phẩm đối với 2 phương pháp: Content-based method, Collaborative filtering method dựa trên các khía cạnh:
Triển khai và đánh giá độ chính xác của từng phương pháp dựa trên dữ liệu thử nghiệm là bước quan trọng Hệ thống gợi ý sản phẩm sẽ được áp dụng vào ứng dụng Ecommerce nhằm cung cấp gợi ý sản phẩm phù hợp cho người dùng.
P HƯƠNG PHÁP NGHIÊN CỨU
- Cách tiếp cận: ứng dụng được xây dựng dựa theo mô hình BloC trên nền tảng Android.
- Nhóm đã sử dụng các phương pháp nghiên cứu:
+ Phương pháp đọc tài liệu.
+ Phương pháp phân tích các ứng dụng TMĐT hiện có.
CƠ SỞ LÝ THUYẾT
F LUTTER
Flutter là một công cụ phát triển ứng dụng đa nền tảng do Google cung cấp, cho phép các lập trình viên xây dựng ứng dụng cho Android, iOS, Web và Desktop chỉ với một mã nguồn chung.
- Các đặc điểm của Flutter:
Xây dựng ứng dụng đa nền tảng cho phép phát triển trên nhiều hệ thống khác nhau như Android, iOS, web và desktop, chỉ với một mã nguồn chung.
Flutter Hot Reload giúp các nhà phát triển tăng tốc quá trình phát triển ứng dụng bằng cách cho phép thử nghiệm và xây dựng giao diện người dùng một cách nhanh chóng Ngoài ra, công cụ này cũng hỗ trợ việc thêm tính năng và sửa lỗi dễ dàng, giúp tiết kiệm thời gian và nâng cao hiệu quả làm việc.
Xây dựng giao diện người dùng đẹp mắt và thân thiện với người dùng bằng cách sử dụng các tiện ích Material Design và Cupertino tích hợp sẵn của Flutter Với API chuyển động phong phú và khả năng cuộn tự nhiên mượt mà trên nhiều nền tảng, bạn sẽ tạo ra trải nghiệm tuyệt vời cho người dùng.
Flutter's modern and reactive framework simplifies the creation of user interfaces by offering a rich collection of platforms, layouts, and widgets Tackle challenging UI issues with its powerful and flexible APIs designed for 2D graphics, animations, gestures, effects, and more.
Flutter cho phép bạn tận dụng mã Java, Swift và ObjC hiện có, giúp ứng dụng của bạn trở nên sống động hơn thông qua việc truy cập các API của nền tảng, SDK của bên thứ ba và mã native trên cả iOS và Android.
Flutter là một nền tảng phát triển ứng dụng thống nhất, cung cấp công cụ và thư viện giúp biến ý tưởng thành hiện thực trên cả iOS và Android Đây là lựa chọn lý tưởng cho những ai chưa có kinh nghiệm phát triển di động, cho phép xây dựng ứng dụng đẹp mắt một cách nhanh chóng và dễ dàng Đồng thời, Flutter cũng hỗ trợ các nhà phát triển iOS và Android có kinh nghiệm trong việc tối ưu hóa giao diện ứng dụng của họ.
2.2.2 Tại sao sử dụng Flutter?
Flutter là một framework mã nguồn mở, giúp các nhà phát triển nhanh chóng và dễ dàng xây dựng ứng dụng gốc cho cả iOS và Android.
Flutter sử dụng tính năng “Stateful Hot Reload” và “Hot Restart” để lưu giữ trạng thái và cập nhật các thay đổi mà không cần phải thực hiện lại quá trình Gradle build Điều này giúp giảm đáng kể thời gian phát triển sản phẩm.
Flutter features a unique mechanism known as "Everything is a widget," which simplifies the process for developers to create, modify, and manage user interfaces efficiently.
- Hiện nay, Flutter đang rất được ưa chuộng với các developer bởi sự linh hoạt, đơn giản và nhanh chóng trong việc phát triền sản phẩm.
J AVA S PRING
2.3.1 Giới thiệu về Java Spring
Spring là một Framework phát triển ứng dụng Java phổ biến, được hàng triệu lập trình viên tin dùng Framework này hỗ trợ tạo ra các ứng dụng có hiệu suất cao, dễ dàng kiểm thử và cho phép tái sử dụng mã nguồn hiệu quả.
- Spring nhẹ và trong suốt (nhẹ: kích thước nhỏ, version cơ bản chỉ khoảng 2MB; trong suốt: hoạt động một cách trong suốt với lập trình viên)
- Spring là một mã nguồn mở, được phát triển, chia sẻ và có cộng đồng người dùng rất lơn.
- Spring Framework được xây dựng dựa trên 2 nguyên tắc design chính là:
Dependency Injection và Aspect Oriented Programming.
Spring cung cấp những tính năng cốt lõi để phát triển ứng dụng Java Desktop, mobile và Java Web Mục tiêu chính của Spring là đơn giản hóa quá trình phát triển các ứng dụng J2EE thông qua mô hình POJO (Plain Old Java Object).
H Ê ̣ QUA ̉ N TRI ̣ CSDL M Y S QL
- Spring framework hỗ trợ POJO Vì vậy, bạn sẽ không bao giờ cần đến EJB
Enterprise Java Beans are often utilized within other frameworks Due to the implementation of POJO, this framework is notably lightweight, as it does not require any additional interfaces.
Spring Framework được thiết kế với cấu trúc tổ chức tốt và tính linh hoạt cao, giúp người dùng dễ dàng sử dụng mà không gặp khó khăn Mặc dù có nhiều lớp (class) và gói (package), Spring vẫn giữ được sự đơn giản và hiệu quả trong quá trình phát triển ứng dụng.
Spring Framework cung cấp một giao diện quản lý giao dịch tin cậy, được thiết kế để hỗ trợ cả giao dịch cục bộ và giao dịch toàn cầu.
- Bạn có thể lập trình và kiểm thử một ứng dụng với Spring framework rất đơn giản và dễ dàng.
- Spring dễ tích hợp với các Framework khác.
- Tính Module mạnh mẽ Nó cung cấp nhiều module như: Spring Core, Spring AOP, Spring IoC, Spring MVC, Spring JDBC, Spring ORM, Spring Transitions.
2.3 Hệ quản trị csdl MySql
Hình 2.3: Sự phát triển và độ phổ biến của MySQL2.3.1 Giới thiệu MySQL
MySQL là một hệ quản trị cơ sở dữ liệu nhanh chóng và dễ sử dụng, tương thích với các công nghệ hiện đại như C#, Java và PHP Được phát triển bởi công ty MySQL AB tại Thụy Điển vào năm 2004, MySQL đã trải qua nhiều lần thay đổi chủ sở hữu và cuối cùng được Oracle mua lại vào năm 2010.
2.3.2 Tại sao sử dụng MySQL
- Nó khá phổ biến với giới lập trình viên bởi:
+ MySQL là mã nguồn mở, hoàn toàn miễn phí khi sử dụng.
+ MySQL sử dụng form chuẩn thuộc hệ SQL.
+ MySQL dễ dàng xử lý ngay cả trên các tập dữ liệu lớn.
+ MySQL hỗ trợ giao dịch nhanh Giao dịch ACID (Atomic-Consistent-Isolated- Durable) hoàn thiện
Hình 2.4: Google Firebase Cloud 2.4.1 Khái niệm Firebase
- Firebase là một dịch vụ cơ sở dữ liệu thời gian thực hoạt động trên nền tảng đám
Firebase, ra mắt vào năm 2014 và được Google mua lại vào năm 2016, đã chứng kiến sự tăng trưởng ấn tượng từ 110.000 lên 470.000 nhà phát triển Sự phổ biến của Firebase đến từ khả năng giúp nhà phát triển xây dựng hệ thống Client – Server một cách hiệu quả, giảm thiểu đáng kể công sức và chi phí cho phía Server.
2.4.2 Chức năng chính của Google Firebase
- Realtime Database – Cơ sở dữ liệu thời gian thực
Firebase lưu trữ dữ liệu dưới dạng JSON và đồng bộ hóa cơ sở dữ liệu theo thời gian thực cho tất cả người dùng Điều này hỗ trợ xây dựng hệ thống đa nền tảng, cho phép tất cả người dùng cùng chia sẻ một cơ sở dữ liệu duy nhất Hơn nữa, Firebase tự động cập nhật dữ liệu mỗi khi có sự thay đổi, mang lại trải nghiệm mượt mà và hiệu quả.
- Firebase Authentication – Hệ thống xác thực của Firebase
Firebase cho phép tích hợp dễ dàng các công nghệ xác thực từ các nền tảng lớn như Google và Facebook, cũng như hỗ trợ xây dựng hệ thống xác thực tùy chỉnh cho ứng dụng trên mọi nền tảng như Android và iOS.
Firebase Storage cho phép lưu trữ nhiều loại dữ liệu như tệp tin, hình ảnh và video một cách đơn giản Hơn nữa, nó tích hợp tính năng bảo mật của Google, giúp việc tải lên và tải về dữ liệu trong các ứng dụng Firebase trở nên thuận tiện hơn.
Firebase cung cấp dịch vụ Cloud Messaging, một giải pháp đa nền tảng cho phép người dùng gửi tin nhắn miễn phí và nhận thông điệp theo thời gian thực.
2.4.3 Lợi ích của Google Firebase
- Triển khai ứng dụng cực nhanh
Firebase giúp lập trình viên tiết kiệm thời gian trong việc xây dựng, phát triển và đồng bộ cơ sở dữ liệu nhờ vào các API tự động và nhanh chóng Hơn nữa, Firebase còn hỗ trợ việc phát triển ứng dụng đa nền tảng một cách dễ dàng.
Quá trình đăng ký và đăng nhập vào ứng dụng sẽ trở nên tiện lợi và dễ dàng hơn nhờ vào các hệ thống xác thực mà Firebase cung cấp.
Firebase hoạt động trên nền tảng đám mây, đảm bảo bảo mật dữ liệu và kết nối giữa client và server qua giao thức SSL Việc phân quyền người dùng cũng được cải thiện, cho phép chỉ những người có quyền mới có khả năng chỉnh sửa dữ liệu, nhờ vào cú pháp JavaScript đơn giản.
- Tính linh hoạt và khả năng mở rộng
Firebase cung cấp cho các nhà phát triển khả năng xây dựng server riêng, hỗ trợ hiệu quả trong việc quản lý Hệ quản trị cơ sở dữ liệu NoSQL của Firebase giúp việc mở rộng các bảng và trường trở nên linh hoạt, tùy thuộc vào nhu cầu của lập trình viên.
PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
K IẾN TRÚC HỆ THỐNG
Hình 3.1: Sơ đồ kiến trúc hệ thống
M Ô HÌNH PHÂN RÃ CHỨC NĂNG
Hình 3.2: Sơ đồ phân rã chức năng
Mô hình phân rã chức năng giúp xác định rõ ràng phạm vi các chức năng được xây dựng và phát triển trong ứng dụng Nó cung cấp cho người sử dụng cái nhìn tổng thể về các chức năng có trong ứng dụng thông qua biểu diễn phân rã theo thứ bậc đơn giản.
M Ô HÌNH USECASE
Hình 3.3.1: Sơ đồ use case tổng quát 3.3.2 Danh sách các Actor
STT Tên Actor Ý nghĩa/Ghi Chú
1 Khách hàng 2.4.1.1 Là người xem sản phẩm của shop
2.4.1.2 Thêm sản phẩm vào mục yêu thích nếu thích sản phẩm
2.4.1.3 Thêm sản phẩm vào giỏ hàng nếu có ý định mua 2.4.1.4 Mua sản phẩm nếu đã quyết định 2.4.1.5 Đánh giá sản phẩm khi đã nhận được hàng, để cho khách hàng khác cân nhắc
2 admin 2.4.1.6 Kiểm suyệt các sản phẩm nếu có hàng mới
2.4.1.7 Quản lý thu nhập 2.4.1.8 Quản lý tồn kho 2.4.1.9 Quản lý đơn hàng 2.4.1.10 Cập nhật trạng thái vận chuyển hàng 2.4.1.11 Hỗ trợ khách hàng
3.3.3 Danh sách các Use Case
STT Tên use case Ý nghĩa
1 Use case Mức tổng quát Đưa ra các actor có trong hệ thống quản lý, và chức năng chính của mỗi actor.
2 Use case Chưa đăng nhập Đánh giá mức độ yêu thích ứng dụng của người dùng (quyết định tiếp tục sự dụng ứng dụng hay không)
3 Use case Đăng nhập Yêu cầu đăng nhập để xác thực trong ứng dụng
4 Use case Quản lý người dùng
Quản lý người dùng để ứng dụng hoạt động tốt hơn (đảm bảo tính công bằng)
5 Use case Quản lý danh mục sản phẩm
Quản lý các danh mục sản phẩm hàng hóa (thêm, sửa, xóa danh mục)
6 Use case Quản lý sản phẩm
Quản lý sản phẩm (thêm, sửa, xóa sản phẩm)
7 Use case Quản lý đơn hàng
Quản lý đơn hàng (sửa đơn hàng, hủy, duyệt đơn hàng)
8 Use case Quản lý quảng cáo
Quản lý các mục quảng cáo (thêm, sửa, xóa) viết ứng dụng
10 Use case Xem bài viết Xem bài viết
11 Use case Lưu bài viết Thêm, xóa bài viết vào mục lưu trữ
12 Use case Đặt nhắc nhở xem bài viết
Thêm nhắc nhở để xem lại bài viết vào thời gian khác
13 Use case Quản lý địa chỉ giao hàng
Thêm, xóa, sửa địa chỉ giao hàng
14 Use case Quản lý giỏ hàng
Quản lý giỏ hàng (thêm, xóa, sửa sản phẩm trong giỏ hàng)
15 Use case Xem tình trạng đơn hàng
Theo dõi tình trạng đơn hàng
16 Use case Tìm kiếm sản phẩm
Tìm kiếm sản phẩm theo từ khóa
17 Use case Xem sản phẩm
Xem chi tiết thông tin sản phẩm
18 Use case Quản lý sản phẩm yêu thích
Quản lý danh mục sản phẩm yêu thích (thêm, xóa khỏi danh mục)
19 Use case Đánh giá sản phẩm Đánh giá của khách hàng về sản phẩm
20 Use case Đặt hàng sản phẩm
Khách hàng đặt hàng sản phẩm của MyStore
21 Use case Chat Khách hàng liên lạc với người bán
22 Use case Thống kê doanh thu
Xem thống kê doanh thu trong khoảng thời gian
23 Use case Liên hệ admin
Liên hệ với admin hệ thống Bảng 3.3.2 Danh sách các Actor 3.3.4 Đặc tả Use Case
3.3.4.1 Đặc tả Use case Đăng nhập Đổi mật khẩu
Tên Use Case Đăng nhập
Mô tả Chức năng đăng nhập của người dùng
Người thực hiện Khách hàng, admin Điều kiện trước xử lí Màn hình ở screen đăng nhập
Sau khi xử lý, người dùng có thể đăng nhập thành công và được hiển thị trang profile cùng với các chức năng yêu thích, đơn hàng và thông tin cá nhân Ngược lại, nếu đăng nhập thất bại, hệ thống sẽ thông báo rằng mẫu khẩu hiện tại không đúng.
Thông báo đăng nhập không thành công
Ngoại lệ(Exception) Nếu username và password không thỏa validate , nút đăng nhập sẽ bị disable
Dòng sự kiện chính 1 Hệ thống hiển thị màn hình đăng nhập.
2 Khách hàng nhập username và mật khẩu mới.
Dòng sự kiện khác 1 Hệ thống kiểm tra nhập username, mật khẩu có chính xác hay không.
2 Thông báo lỗi hoặc chuyển sang màn hình Home3.3.4.2 Đặc tả Usecase Quản lý giỏ hàng
Tên Use Case Quản lý giỏ hàng
Mô tả Xem, sửa, xóa các item trong giỏ hàng, thanh toán
Người thực hiện Khách hàng Điều kiện trước xử lí Màn hình ở screen Giỏ hàng
Sau xử lí(sau Use-case) 1 Cập nhật , xóa thông tin Giỏ hàng
Dòng sự kiện chính 1 Hệ thống hiển thị màn hình Giỏ hàng.
2 Khách hàng click vào các button thêm hoặc giảm số lượng của item để điều chỉnh số lượng, hoặc nhấn button dấu X để xóa item
3 Chọn các Item cần tương tác để xóa,sửa.
Dòng sự kiện khác 1 Có thể tích chọn các item cần tương tác để đặt hàng, thanh toán 3.3.4.3 Đặc tả Usecase xem tình trạng đơn hàng
Tên Use Case Xem đơn hàng
Mô tả Xem các đơn hàng đã đặt và xem tình trạng đơn hàng
Người thực hiện Khách hàng Điều kiện trước xử lí Màn hình ở screen đơn hàng của tôi
Sau xử lí(sau Use-case)
Dòng sự kiện chính 1 Click vào các tab “Đã xóa”,”Đã giao”,”Đang giao”,… để lựa chọn loại đơn hàng muốn xem.
2 Chọn đơn hàng cần xem
Dòng sự kiện khác 1 Có thể chọn đặt lại đơn hàng hoặc xóa ,hủy các đơn hàng được phép xóa 3.3.4.4 Đặc tả Usecase Tìm kiếm sản phẩm
Tên Use Case Tìm kiếm sản phẩm
Mô tả Tìm kiếm các sản phẩm theo filter, giá ,danh mục,…
Người thực hiện Khách hàng Điều kiện trước xử lí Màn hình ở screen search hoặc các screen product có filter
Sau xử lí(sau Use-case) 1 Màn hình hiển thị các sản phẩm liên quan tới các option đã chọn hoặc điền
2 Có thể thực hiện các thao tác xem, bỏ vào giỏ hàng , đối với sản phẩm
Dòng sự kiện chính 1 Click vào button “kính lúp” để search theo key word rồi nhập keyword
2 Click vào Filter để lựa chọn các mục muốn
3 Lựa chọn xong nhấn Ok để tiến hành search sản phẩm
3.3.4.5 Đặc tả Usecase Quản lý sản phẩm yêu thích
Tên Use Case Quản lý sản phẩm yêu thích
Mô tả Kiểm tra lại các sản phẩm yêu thích để tiến hành đặt hàng hoặc xóa khỏi sản phẩm yêu thích
Người thực hiện Khách hàng Điều kiện trước xử lí Màn hình ở Screen Yêu thích
Sau xử lí(sau Use-case) 1 Chọn sản phẩm yêu thích và thêm vào giỏ hàng, xem chi tiết sản phẩm
Dòng sự kiện chính 1 Hiển thị các sản phẩm đã yêu thích
2 Nhấn vào icon trái tim để hủy yêu thích sản phẩm
3.3.4.6 Đặc tả Usecase Đánh giá sản phẩm
Tên Use Case Đánh giá sản phẩm
Mô tả Đánh giá các sản phẩm đã giao
Người thực hiện Khách hàng Điều kiện trước xử lí Màn hình ở xem đơn hàng Đã giao
Sau xử lí(sau Use-case)
Ngoại lệ(Exception) Các sản phẩm đã đánh giá sẽ không hiển thị button đánh giá
Dòng sự kiện chính 1 Hiển thị các đơn hàng đã giao.
2 Nhấn vào đơn hàng muốn đánh giá.
3 Chọn button đánh giá bên góc phải các sản phẩm
4 Sheet lựa chọn star và đánh giá bằng hình ảnh, text hiển thị.
5 Sau khi chọn và điền xong Nhấn Đánh giá
3.3.4.7 Đặc tả Usecase đặt mua hàng
Mô tả Đặt hàng từ giỏ hàng
Người thực hiện Khách hàng Điều kiện trước xử lí Màn hình ở Screen Giỏ Hàng
Sau xử lí(sau Use-case) Thông báo đặt hàng thành công hoặc thất bại
Cập nhật dữ liệu đơn hàng vào database
Ngoại lệ(Exception) Các sản phẩm đã hết số lượng tồn kho hoặc vượt quá số lượng sẽ không thể đặt hàng
Dòng sự kiện chính 1 Hiển thị các sản phẩm trong giỏ hàng
2 Chọn các sản phẩm muốn đặt hàng.
3 Xem số tiền và nhấn Đặt hàng.
4 Hiển thị màn hình thanh toán
5 Chọn các option thanh toán,giao hàng,…
6 Nhấn thanh toán để đặt hàng
Mô tả Chat với các shop hoặc admin
Người thực hiện Khách hàng, admin Điều kiện trước xử lí Màn hình ở Screen thông tin shop
Sau xử lí(sau Use-case)
Dòng sự kiện chính 1 Hiển thị thông tin của shop.
2 Nhấn vào icon “Tin nhắn “ để chat với shop đã chọn
3 Màn hình nhắn tin hiển thị
4 Nhập message , hoặc hình ảnh
Dòng sự kiện khác 1 Các user khi có tin nhắn mới sẽ nhận được thông báo từ app.
2 Cách tiếp cận khác để chat, là nhấn vào icon chat trên thanh công cụ và lựa chọn đối tượng chat đã có lịch sử chat trước đó
T HIẾT KẾ DỮ LIỆU
3.4.2 Mô tả chi tiết các loại dữ liệu trong mô hình
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
USERNAME VARCHAR(255) Primary key Tên đăng nhập
PASSWORD VARCHAR(255) Not null Mật khẩu
USER_ID INT FOREIGN KEY Id của user
TINYINT(1) Not null Mã trạng thái
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT Primary key Mã attribute
NAME VARCHAR(255) Not null Tên attribute
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT Primary key MÃ ITEM
CART_ID INT MÃ CART
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT Primary key MÃ CART
PRODUCT_ID INT MÃ PRODUCT
USER_ID INT MÃ USER
AMOUNT INT SỐ LƯỢNG
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID INT Primary key MÃ CART
PARENT_ID INT FOREIGN KEY MÃ CATEGORY
VARCHAR(200) TÊN TRÊN ĐƯỜNG DẪN
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
CATEGORY_ID INT FOREIGN KEY MÃ CATEGORY
PRODUCT_ID INT FOREIGN KEY MÃ PRODUCT
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID VARCHAR(45) Primary key MÃ COMMENT
PARENT_ID VARCHAR(45) MÃ COMMENT
USER_ID INT FOREIGN KEY MÃ USER
TIME_CREATED TIMESTAMP THỜI ĐIỂM TẠO
TIME_UPDATED TIMESTAMP THỜI ĐIỂM
PRODUCT_ID INT FOREIGN KEY MÃ PRODUCT
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
ID VARCHAR(45) Primary key MÃ IMAGE
LINK VARCHAR(255) ĐƯỜNG DẪN
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
IMAGE_ID VARCHAR(45) FOREIGN KEY MÃ HÌNH ẢNH
PRODUCT_ID INT FOREIGN KEY MÃ SẢN PHẨM
The table structure includes several key fields for product management The primary key, identified as "id," is of type integer The "MÃ SẢN PHẨM" (Product Code) is represented as "name" with a varchar data type, allowing for up to 255 characters The "admin_id" serves as a foreign key linking to the administrator responsible for the product The pricing details are captured with "price" and "final_price," both defined as decimal types with a precision of 12 and scale of 2 Additionally, "promotion_percent" indicates any discounts available, while "is_promotion" is a tiny integer flagging promotional status The "description" and "short_description" fields provide detailed and concise product information, respectively The "weight" field records the product's weight as an integer, and "quantity" tracks available stock Finally, "img_url" serves as a foreign key for the product's image link, limited to 45 characters.
ẢNH shop_free_shipping tinyint(1) MIỄN PHÍ SHIP order_count int SỐ LƯỢNG ĐÃ
ORDER rating_star_id int FOREIGN KEY MÃ RATING
The STAR stock status is represented as a tinyint(1), indicating inventory availability The category is defined by a varchar(50) field, while SKU and user SKU are both stored as varchar(45) The is_free_ship field, also a tinyint(1), denotes whether free shipping is offered Additionally, the is_event field indicates if there is a special event associated with the product Lastly, the record_status is represented as a tinyint(1), serving as a status code for the record.
Tên trường Kiểu dữ liệu Ràng buộc Mô tả id int Primary key MÃ
RATINGSTAR star1 int SỐ LƯỢNG
STAR 1 star2 int SỐ LƯỢNG
STAR 2 star3 int SỐ LƯỢNG
STAR 3 star4 int SỐ LƯỢNG
Star5 int SỐ LƯỢNG
The table structure includes several key fields: 'id' as the primary key, 'product_id' and 'user_id' as foreign keys representing the product and user respectively, 'comment' for storing user feedback, 'star' for rating, and timestamps 'time_created' and 'time_updated' to track the creation and update times of each entry.
Tên trường Kiểu dữ liệu Ràng buộc Mô tả
User_id int Primary key Mã user products Varchar(255) List Mã sản phẩm
1 _id ObjectID Mã sản phẩm
3 stock_status Boolean trạng thái hàng
4 review [ObjectID] Mảng đánh gía sản phẩm
5 attribute [ObjectID] Mảng thuộc tính
6 name String Tên sản phẩm
7 product_code Int Mã số của sản phẩm
8 record_status Boolean Show hoặc ẩn sản phẩm
9 option_amount [ObjectID] Các option của sản phẩm
10 img_url String ảnh đại diện
11 price Int Giá gốc sản phẩm
12 promotion_percent Int Phần trăm giảm giá
13 final_price Int Giá sau khi giảm giá
14 description String Mô tả sản phẩm
15 total_review Int Tổng review
16 order_count Int Tổng đặt hàng
18 short_description String Mô tả ngắn về sản phẩm
19 rating_star ObjectID Mã đánh giá sao
20 category_id ObjectID Mã danh mục
21 categories String Mã text danh mục
22 is_freeship Boolean có freeship không
The table structure includes several key fields: the primary key 'id' is an integer, while 'name' is a varchar of up to 255 characters representing the shop's name The 'logo' field is a foreign key with a maximum length of 45 characters for the shop's logo The 'good_review_percen' is a float indicating the percentage of positive reviews, and 'score' is an integer representing the shop's rating The 'phone_number' field, also a varchar of 45 characters, stores the shop's contact number The 'warehouse_city' field is a varchar of 45 characters for the city of the warehouse, and 'is_certified' is a tinyint indicating certification status The 'user_id' is an integer foreign key linked to the user, while 'email' is a varchar of 255 characters The 'record_status' is a tinyint that indicates the status of the record, with 'time_created' and 'time_updated' as timestamps for creation and last update, respectively.
HIỆN THỰC ỨNG DỤNG MUA SẮM THỜI TRANG
T ỔNG QUAN VỀ ỨNG DỤNG E COMMERCE
- Ứng dụng Ecommerce là ứng dụng để ngừoi dùng mua sắm tất cả các loại sản phẩm được bán hiện nay.
- Ứng dụng được xây dựng trên mobile nên thuận tiện cho người dùng sử dụng ở mọi nơi.
Màu sắc chủ đạo của ứng dụng quản lý khách sạn là xanh và trắng, mang lại cảm giác dịu mát và thư thái cho người dùng Sự kết hợp này không chỉ giúp đầu óc thoải mái mà còn nâng cao hiệu quả làm việc Bên cạnh đó, ứng dụng còn có các giao diện chính phục vụ cho nhu cầu mua sắm thời trang.
Giao diện xem chi tiết sản phẩm
Giao diện thông tin cá nhân
Đ ẶC TẢ GIAO DIỆN CỦA ỨNG DỤNG
4.2.3 Giao diện danh mục4.2.3.1 Danh mục level 1
4.2.8 Giao diện thông tin Profile
4.2.9 Giao diện chi tiết sản phẩm
4.2.10 Giao diện lọc sản phẩm
ÁP DỤNG RECOMMEND SYSTEM
P HƯƠNG PHA ́ P THƯ ̣ C HIÊ ̣ N
+ rui: dự đoán của người dùng u trên item i trên tập kiểm tra
+ r ^ ui: dự đoán của người dùng u trên item i theo thuật toán gợi ý.
Hình 5.2.1.a Ví dụ rating bài hát
Hệ thống gợi ý bài hát sử dụng ma trận tiện ích, trong đó người dùng đánh giá các bài hát từ 0 đến 5 sao Các ô có dấu '?' với nền màu xám thể hiện dữ liệu chưa có trong cơ sở dữ liệu Để hoạt động hiệu quả, các hệ thống gợi ý cần phải tự động điền các giá trị này.
Trong ví dụ này, có 6 người dùng A, B, C, D, E, F và 5 bài hát, với các ô màu xanh thể hiện đánh giá từ 0 (không thích) đến 5 (rất thích) Những ô màu xám có dấu ‘?’ là những ô chưa có dữ liệu Nhiệm vụ của Hệ thống Gợi ý là dự đoán giá trị cho các ô màu xám này, từ đó cung cấp gợi ý cho người dùng Do đó, Hệ thống Gợi ý cũng được coi là một bài toán Hoàn thiện Ma trận.
Trong ví dụ đơn giản này, có hai thể loại nhạc rõ ràng: ba bài đầu là nhạc Bolero và hai bài sau là nhạc Thiếu nhi Dựa trên dữ liệu này, có thể suy luận rằng A và B yêu thích nhạc Bolero, trong khi C, D, E và F thích nhạc Thiếu nhi Hệ thống gợi ý nên đề xuất bài "Cỏ úa" cho B, "Vùng lá me bay" cho A, và "Em yêu trường em" cho D và E.
F Giả sử chỉ có hai thể loại nhạc này, khi có một bài hát mới, ta chỉ cần phân lớp nó vào thể loại nào, từ đó đưa ra gợi ý với từng người dùng.
- Content-Based Recommendations dựa trên ý tưởng trên để thực hiện gợi ý theo từng feature của item.
In content-based systems, which rely on the attributes of each item, it is essential to create a profile for every item, represented mathematically as a feature vector In straightforward scenarios, this feature vector is directly extracted from the item itself For instance, consider the various features of a song that can be utilized in recommendation systems.
1 Ca sĩ Cùng là bài Thành phố buồn nhưng có người thích bản của Đan Nguyên, có người lại thích bản của Đàm Vĩnh Hưng.
2 Nhạc sĩ sáng tác Cùng là nhạc trẻ nhưng có người thích Phan Mạnh Quỳnh, người khác lại thích MTP.
3 Năm sáng tác Một số người thích nhạc xưa cũ hơn nhạc hiện đại.
4 Thể loại Điều này thì chắc rồi, Quan họ và Bolero sẽ có thể thu hút những nhóm người khác nhau.
- Có rất nhiều yếu tố khác của một bài hát có thể được sử dụng Ngoại trừ Thể
Trong ví dụ ở Hình 5.2.1, chúng ta đã đơn giản hóa bài toán bằng cách xây dựng một vector đặc trưng hai chiều cho mỗi bài hát, trong đó chiều thứ nhất thể hiện mức độ Bolero và chiều thứ hai thể hiện mức độ Thiếu nhi Các vector đặc trưng cho mỗi bài hát được ký hiệu là x1, x2, x3, x4, x5, và được trình bày dưới dạng hàng trong hình minh họa bên dưới.
The task of finding the model θii for each user can be viewed as a Regression problem when ratings are a continuous range or a Classification problem when ratings are specific cases, such as like/dislike The training data used to build each model θii consists of pairs of (item profile, ratings) corresponding to items rated by that user Filling in the missing values in the Utility matrix involves predicting outputs for unrated items by applying the model θii The choice between Regression and Classification models depends on the application, with a simple example being the Linear model.
Regression với regularization, tức Ridge Regression.
- Để giải thích cụ thể cho mô hình tuyến tính trên, chúng ta có ví dụ sau sử dụng
Giả sử chúng ta có thể xây dựng một mô hình cho từng người dùng, được biểu diễn bằng vector cột hệ số wi và bias bn Nhờ đó, mức độ quan tâm của người dùng đối với một sản phẩm có thể được tính toán thông qua một hàm tuyến tính.
+ (Chú ý rằng xm là một vector hàng, wn là một vector cột.)
Xét một người dùng thứ n bất kỳ, nếu coi tập huấn luyện là tập hợp các thành phần đã được điền của yn, ta có thể xây dựng hàm mất mát tương tự như Ridge Regression.
Thành phần thứ hai trong công thức là hạng mục regularization, với λ là tham số dương Cần lưu ý rằng regularization thường không áp dụng cho bias bn Trong thực tế, trung bình cộng của lỗi thường được sử dụng, và do đó, hàm mất mát Ln được điều chỉnh lại.
In this context, "sn" refers to the total number of items rated by user n In other words, it represents the sum of the elements in the nth column of the rating matrix, indicating whether items have been rated or not.
+ Các bạn đã thấy loss function này quen chưa?
Biểu thức hàm mất mát chỉ phụ thuộc vào các item đã được đánh giá, do đó có thể được rút gọn bằng cách xác định ^yn là vector con của y, được tạo ra từ các thành phần khác dấu ? ở cột thứ n, tức là các item đã được user thứ n đánh giá Điều này cho phép ta trích xuất các hàng tương ứng với các item đã được user thứ n đánh giá.
+ trong đó, en là vector cột chứa sn phần tử 1.
+ Đây chính xác là hàm mất mát của Ridge Regression Cặp nghiệm wn,bn có thể được tìm qua Stochastic Gradient Descent (SGD), hoặc Mini-batch GD.
+ Trong python có thể sử dụng class Ridge trong sklearn.linear_model.
- Công việc quan trọng nhất phải làm trước tiên trong User-user Collaborative
Để thực hiện lọc, cần xác định sự tương đồng giữa hai người dùng Dữ liệu duy nhất có sẵn là ma trận Utility YY, do đó, sự tương đồng này được xác định dựa trên các cột tương ứng của hai người dùng trong ma trận Ví dụ minh họa có thể thấy trong Hình 1.
Hình 5.2.2.a minh họa ma trận tiện ích dựa trên đánh giá sao của người dùng cho một mục Hành vi của người dùng u0 tương đồng hơn với u1 so với các người dùng u2, u3, u4, u5 và u6 Do đó, có thể dự đoán rằng u0 sẽ quan tâm đến mục i2 vì u1 cũng thể hiện sự quan tâm đến mục này.
Giả sử có bảy người dùng từ u0 đến u6 và năm mục từ i0 đến i4, trong đó các giá trị trong mỗi ô vuông thể hiện số sao mà mỗi người dùng đã đánh giá cho mục, với giá trị cao hơn biểu thị mức độ quan tâm lớn hơn Các dấu hỏi chấm đại diện cho các giá trị mà hệ thống cần tìm kiếm Độ tương đồng giữa hai người dùng ui và uj được ký hiệu là sim(ui,uj).
Á P DU ̣ NG VA ̀ O DƯ ̃ LIÊ ̣ U MÂ ̃ U VƠ ́ I P YTHON
số nearest neighbors là k=2 Các bước thực hiện là:
Xác định các users đã rated i1, đó là u0,u3,u5.
Xác định similarities của u1 với các users này ta nhận được 0.83,−0.40,−0.23 Hai (k=2) giá trị lớn nhất là 0.83 và −0.23 tương ứng với u0 và u5.
Xác định các normalized ratings của u0,u5 cho i1, ta thu được hai giá trị lần lượt là 0.75 và 0.5.
Việc chuyển đổi các giá trị ratings đã chuẩn hóa sang thang điểm 5 có thể được thực hiện bằng cách cộng các cột trong ma trận Y với giá trị rating trung bình của từng người dùng, như đã thể hiện trong Hình 2a.
Hệ thống quyết định các sản phẩm nào nên được gợi ý cho từng người dùng có thể được thực hiện qua nhiều phương pháp khác nhau Một cách là sắp xếp các sản phẩm chưa được đánh giá theo thứ tự từ cao đến thấp dựa trên các đánh giá dự đoán Hoặc có thể chỉ chọn những sản phẩm có đánh giá dự đoán đã được chuẩn hóa và có giá trị dương, cho thấy khả năng cao hơn rằng người dùng sẽ thích những sản phẩm này.
5.3 Áp dụng vào dữ liệu mẫu với Python
Dữ liệu detailedMovies của MovieLen100k
- Tạo TF-IDF ứng với 19 số nhị phân sau mỗi dòng movie ứng với 19 feature thể loại phim
#tfidf from sklearn.feature_extraction.text import TfidfTransformer transformer = TfidfTransformer(smooth_idf=True, norm ='l2') tfidf = transformer.fit_transform(X_train_counts.tolist()).toarray()
- Tìm các hệ số của Ridge Regression cho mỗi user: from sklearn.linear_model import Ridge from sklearn import linear_model d = tfidf.shape[1] # data dimension
W = np.zeros((d, n_users)) b = np.zeros((1, n_users)) for n in range(n_users): ids, scores = get_items_rated_by_user(rate_train, n) clf = Ridge(alpha=0.01, fit_intercept = True)
Xhat = tfidf[ids, :] clf.fit(Xhat, scores)
- Sau khi đã có các hệ số Ridge, áp dụng công thức dự đoán ratings cho mỗi item
Yhat = tfidf.dot(W) + b n = 10 np.set_printoptions(precision=2) # 2 digits after ids, scores = get_items_rated_by_user(rate_test, n)
Yhat[n, ids] print('Rated movies ids :', ids ) print('True ratings :', scores) print('Predicted ratings:', Yhat[ids, n])
The algorithm is evaluated using the Root Mean Square Error (RMSE) metric, which is calculated by the function `evaluate(Yhat, rates, W, b)` This function iterates through each user, retrieving the items they have rated and their corresponding true scores It then computes the predicted scores from the model and calculates the squared errors between the true and predicted scores The sum of these squared errors is accumulated, and the count of errors is tracked Finally, RMSE is derived by taking the square root of the average squared error, providing a measure of prediction accuracy The RMSE values for both the training and test datasets are printed for analysis.
- Tương tự khi áp dụng RMSE với User-User Collaborative Filtering: rs = CF(rate_train, k = 30, uuCF = 1) rs.fit() n_tests = rate_test.shape[0]
SE = 0 # squared error for n in xrange(n_tests): pred = rs.pred(rate_test[n, 0], rate_test[n, 1], normalized = 0)
RMSE = np.sqrt(SE/n_tests) print 'User-user CF, RMSE =', RMSE
- Tương tự khi áp dụng RMSE với Item-Item Collaborative Filtering: rs = CF(rate_train, k = 30, uuCF = 0) rs.fit() n_tests = rate_test.shape[0]
SE = 0 # squared error for n in xrange(n_tests): pred = rs.pred(rate_test[n, 0], rate_test[n, 1], normalized = 0)
RMSE = np.sqrt(SE/n_tests)
Đ A ́ NH GIA ́
5.4.1 So sánh các thuật toán
- Trên bộ dữ liệu MoviesLens100K, dữ liệu test từ ua.test
Content-based User-user CF Item-item CF
Kết quả thực nghiệm cho thấy phương pháp Item-item Collaborative Filtering (CF) có độ RMSE thấp nhất, đồng nghĩa với việc mức độ lỗi là nhỏ nhất Do đó, nhóm đã quyết định chọn Item-Item CF để áp dụng vào dự án.
+ Không cần dữ liệu của những user khác.
+ Có thể gợi ý những item mới, những item không phổ biến do chỉ dựa trên feature vector.
+ Khó để tìm ra feature cho từng item.
+ Không gợi ý những item ngoài user profile.
+ Không khai thác được dữ liệu rating của những user khác.
5.4.2.2 Neighborhood-based Collaborative Filtering (Item-item và User-user)
Có thể hoạt động với nhiều loại item khác nhau.
+ Khởi đầu lạnh (Cold Start): cần một số lượng đủ user trong hệ thống để tìm được gợi ý phù hợp.
+ Ma trận thưa (Sparsity): Utility matrix (ma trận rating) thường thưa thớt dẫn đến khó khăn trong việc tìm những users cùng rate một item.
+ Không gợi ý được những item chưa có rating (item mới)
+ Có xu hướng gợi ý những item phổ biến
Một số hạn chế của User-user CF:
Số lượng người dùng thường vượt xa số lượng mặt hàng, dẫn đến ma trận tương đồng trở nên rất lớn với số phần tử cần lưu trữ vượt quá một nửa bình phương số lượng người dùng Điều này khiến việc lưu trữ ma trận này trong nhiều trường hợp trở nên không khả thi.
Ma trận Utility Y thường rất thưa thớt do số lượng người dùng lớn hơn nhiều so với số lượng mặt hàng, dẫn đến nhiều cột chỉ có vài giá trị khác 0 Nguyên nhân chính là người dùng thường không thích đánh giá Khi một người dùng thay đổi đánh giá hoặc đánh giá thêm mặt hàng, giá trị trung bình các đánh giá và vector chuẩn hóa tương ứng sẽ thay đổi đáng kể Điều này yêu cầu phải tính toán lại ma trận Similarity, một quá trình tốn nhiều bộ nhớ và thời gian.
Ngược lại đối với Item-item CF:
Vì số lượng items thường ít hơn số lượng users, ma trận tương đồng (Similarity matrix) sẽ nhỏ hơn nhiều, điều này giúp tiết kiệm không gian lưu trữ và tối ưu hóa quá trình tính toán trong các bước tiếp theo.
Trong ma trận Utility, số lượng phần tử đã biết là đồng nhất, nhưng số hàng (items) lại ít hơn số cột (users) Do đó, trung bình mỗi hàng sẽ có nhiều phần tử đã biết hơn so với mỗi cột Điều này dễ hiểu vì mỗi item có thể nhận được đánh giá từ nhiều users.
Khi có thêm một vài đánh giá, giá trị trung bình của mỗi hàng sẽ ít bị thay đổi hơn Điều này cho phép việc cập nhật ma trận Similarity Matrix được thực hiện ít thường xuyên hơn.
- Đối với user chưa có rating hoặc số lượng sản phẩm được recommend không đủ 10
Hệ thống sẽ tự thêm vào list recommend theo top điểm WeightedRating của tất cả sản phẩm.
- WeightRating của từng sản phẩm được tính với công thức như sau:
Trong đó, v- số lượt rating của sản phẩm m- số phiếu tối thiểu cần thiết để được liệt kê trong biểu đồ
R- điểm rating trung binh của sản phẩm
C- rating trung bình của tất cả sản phẩm
Hiển thị trên Ecommerce-app
- Đối với User mới, chưa rating, hoặc app chưa được đăng nhập thì gợi ý sẽ sử dụng phương pháp Weight Rating
- Đối với User đã có lịch sử rating thì sẽ dựa vào thuật toán để gợi ý.
Á P DU ̣ NG VƠ ́ I PROJECT
- Hoàn thành yêu cầu đặt ra ban đầu, có đầy đủ tính năng cần thiết của một ứng dụng thương mại điện tử.
- Giao diện đơn giản, bố cục hợp lý, người dùng dễ dàng theo tác trên ứng dụng.
- Tốc độ phản hồi các thao tác nhanh, tối ưu hóa năng suất của người dùng.
- Sinh viên thực hiện đã nắm được cách thức làm một ứng dụng bán hàng, hiểu biết về ngôn ngữ Java, Spring Boot.
- Ứng dụng đã được triển khai và nghiệm thu thành công trên máy thật.
Chúng tôi đã hoàn thành việc áp dụng thuật toán gợi ý Collaborative Filtering vào ứng dụng, nhằm cung cấp những gợi ý sản phẩm phù hợp hơn cho người dùng Thuật toán này dựa trên lịch sử đánh giá của người tiêu dùng, giúp tăng tỉ lệ mua hàng và từ đó nâng cao doanh thu cho người bán.
- Còn hạn chế một số tính năng:
+ Chưa tích hợp được thanh toán trực tuyến.
+ Tối ưu code chưa tốt nên tốc độ tương tác trong ứng dụng còn chậm.
+ Chưa phát triển tính năng xác thực qua bằng email, số điện thoại
- Hệ thống gợi ý chưa hiệu quả với những trường hợp chưa có dữ liệu, thời gian cập nhật lại dữ liệu gợi ý chậm hơn thời gian thực.
- Xây dựng các chứa năng còn thiếu, hoàn thiện các chức năng đã có
- Tích hợp thanh toán trực tuyến qua Bảo Kim, Ngân Lượng, Paypal
- Tối ưu hóa code để tăng tốc độ tương tác
- Tối ưu hóa CSDL hợp lý hơn
- Tối ưu hóa việc gợi ý
- Thêm một số gợi ý cho người dùng dựa trên: Quốc gia, thời tiết,…