CHƯƠNG 2. KHẢO SÁT VÀ PHÂN TÍCH HIỆN TRẠNG
2.3. Phân tích yêu cầu của đề tài
Xây dựng hệ thống website thương mại điện tử trong đó khách hàng có thể lựa chọn các sản phẩm quan tâm, đặt hàng, thanh toán và theo dõi đơn hàng, cung cấp các tiện ích nâng cao trải nghiệm của khách hàng. Bên cạnh đó hệ thống cung cấp website quản trị để quản lý người dùng, quản lý sản phẩm, quản lý đơn hàng, báo cáo thống kê doanh thu,… Đồng thời hệ thống phải đảm bảo hoạt động ổn định, bảo mật thông tin người dùng, logic xử lý chặt chẽ, dữ liệu đúng đắn và nhất quán, tuân theo các quy chuẩn thiết kế phần mềm và lập trình phổ biến và nâng cao hiện nay.
2.3.1. Yêu cầu chức năng
2.3.1.1. Yêu cầu chức năng nghiệp vụ
Về mặt lưu trữ hệ thống sẽ lưu các thông tin chính:
+ Sản phẩm: tên, mô tả, loại (category), hình ảnh, điểm đánh giá, lượt đánh giá chi tiết (từ 1 sao đến 5 sao), giá thấp nhất và cao nhất của biến thể sản phẩm, trạng thái hết hàng, trạng thái sản phẩm (hoạt động, ẩn, đã xóa), lượt mua, lượt xem, ngày đăng sản phẩm (tạo sản phẩm), thông tin về các biến thể (màu sắc, kích thước,…) và giá trị biến thể (xanh, XL,…).
67
+ Biến thể sản phẩm: thông tin sản phẩm, giá gốc, chiết khấu, lượt mua, số lượng tồn kho, trạng thái biến thể (hoạt động, ẩn, đã xóa).
+ Nhập kho sản phẩm: thông tin biến thể, số lượng nhập, thông tin nhân viên và thời điểm nhập kho.
+ Đánh giá sản phẩm: các hình ảnh (nếu có), nội dung đánh giá, điểm đánh giá (giá trị nguyên từ 1 đến 5), thời điểm đánh giá cùng thông tin sản phẩm trong đơn hàng.
+ Địa chỉ: địa chỉ cấp tỉnh (thành phố), cấp huyện (quận), cấp xã (phường, làng) + Tài khoản khách hàng: thông tin cá nhân khách hàng gồm tên đăng nhập, email, điện thoại, họ tên, giới tính, ngày sinh, hình đại diện, mật khẩu, thông tin khách hàng thân thiết, thông tin địa chỉ mặc định và trạng thái tài khoản (hoạt động hoặc khóa).
+ Tài khoản quản lý: thông tin cá nhân của quản lý (nhân viên) gồm tên đăng nhập, email, điện thoại, họ tên, mật khẩu, vai trò và trạng thái tài khoản (hoạt động hoặc khóa).
+ Vai trò quản lý: tên vai trò, danh sách quyền.
+ Giỏ hàng: danh sách sản phẩm của khách hàng.
+ Sản phẩm yêu thích: danh sách sản phẩm của khách hàng.
+ Địa chỉ giao hàng: danh sách địa chỉ giao hàng của khách hàng.
+ Lịch sử xem sản phẩm: danh sách sản phẩm khách hàng đã xem.
+ Mã giảm giá: mã, mô tả, thời gian hiệu lực, loại (giảm theo phần trăm giá trị đơn hàng hay giảm theo giá trị cố định), giá trị giảm tối đa nếu giảm theo phần trăm, điều kiện giá trị đơn hàng đạt tối thiểu, giới hạn số khách hàng sử dụng, số lượt sử dụng, trạng thái (hoạt động hay ẩn).
+ Nhật ký hệ thống: nội dung, loại (thông tin hay cảnh báo), thời gian.
+ Thông báo cá nhân: nội dung, tiêu đề, thông tin người dùng, thời gian và trạng thái (đã đánh dấu là đọc hay chưa).
+ Đơn hàng: thông tin chi tiết đơn hàng (các biến thể sản phẩm), thông tin giảm giá, thời gian tạo (đặt hàng), ghi chú, phương thức thanh toán, tổng giá trị đơn hàng, phí vận chuyển, tổng tiền đơn hàng (sau khi tính phí và giảm giá), thông tin khách hàng và địa chỉ giao hàng, trạng thái đơn hàng (trạng thái của quy trình xử lý đơn hàng).
+ Tài nguyên phương tiện: thông tin tài nguyên trên cloud.
68
+ Mỗi sản phẩm trong hệ thống có một hay nhiều biến thể hay phân loại (variation) khác với loại sản phẩm (category).
Hệ thống có thể gợi ý sản phẩm cho người dùng thông qua dữ liệu người dùng thu thập được.
Hệ thống có thể ẩn loại sản phẩm, sản phẩm, biến thể sản phẩm. Khi đó khách hàng ở hệ thống người mua sẽ không thể xem tất cả các sản phẩm của loại sản phẩm đó, không thể xem chi tiết sản phẩm, không thể đặt hàng biến thể của sản phẩm đó.
Khi đăng nhập vào hệ thống có thể dùng email hoặc số điện thoại (nếu có) thay cho tên đăng nhập.
Mỗi khách hàng chỉ áp dụng được mã giảm giá một lần cho một đơn hàng.
Hệ thống có các vai trò bao gồm quản lý (và các nhân viên nói chung là vai trò con của vai trò quản lý bị hạn thế quyền quản lý chỉ có thể thực hiện một số nghiệp vụ nhất định do người có vai trò quản lý chỉ định) và khách hàng (bao gồm cả khách hàng chưa đăng nhập):
+ Vai trò quản lý sẽ sử dụng hệ thống quản lý.
+ Vai trò khách hàng sẽ sử dụng hệ thống khách hàng (hệ thống người mua hàng).
Yêu cầu chức năng đối với vai trò quản lý:
+ Đăng nhập hệ thống.
+ Quản lý người dùng: Xem, tra cứu, tạo, cập nhật người dùng.
+ Quản lý phân quyền: Xem, tra cứu, tạo, cập nhật vai trò và phân quyền của người dùng hệ thống.
+ Quản lý nhật ký hệ thống: Xem, tra cứu nhật ký hoạt động của hệ thống.
+ Quản lý đơn hàng: Xem, tra cứu, cập nhật trạng thái đơn hàng.
+ Quản lý nhóm sản phẩm: Xem, tra cứu, tạo, cập nhật nhóm sản phẩm.
+ Quản lý sản phẩm:
o Xem, tra cứu, tạo mới, cập nhật, xóa sản phẩm.
o Cập nhật, xóa lựa chọn sản phẩm.
o Tạo, cập nhật, xóa biến thể sản phẩm.
o Tạo, xóa hình ảnh sản phẩm.
+ Quản lý nhập kho sản phẩm: Xem, tra cứu, tạo nhập kho sản phẩm.
69
+ Quản lý thứ hạng khách hàng: Xem, cập nhật thứ hạng khách hàng.
+ Quản lý khách hàng: Xem, tra cứu, cập nhật khách hàng.
+ Quản lý mã giảm giá: Xem, tra cứu, tạo, cập nhật, xóa mã giảm giá.
+ Báo cáo thống kê: Xem báo cáo thống kê về doanh thu/sản phẩm/đơn hàng/người mua theo khoảng thời gian chỉ định.
+ Quản lý thông báo cá nhân: Xem, đánh dấu đã xem các thông báo cá nhân.
Yêu cầu chức năng đối với vai trò khách hàng đã đăng nhập:
+ Đăng nhập hệ thống.
+ Quản lý tài khoản: Xem, cập nhật thông tin cá nhân, xác thực số điện thoại, email.
+ Quản lý đơn hàng: Xem, tra cứu, cập nhật đơn hàng cá nhân, đánh giá các biến thể sản phẩm của đơn hàng.
+ Quản lý địa chỉ giao hàng: Xem, tra cứu, cập nhật, xóa địa chỉ giao hàng.
+ Quản lý sản phẩm yêu thích: Xem, tra cứu, thêm, xóa sản phẩm yêu thích.
+ Quản lý thông báo cá nhân: Xem, đánh dấu đã đọc các thông báo cá nhân.
+ Xem danh sách nhóm sản phẩm và các sản phẩm thuộc các nhóm đó.
+ Xem chi tiết, lọc (giá, đánh giá,…), tra cứu (từ khóa, hình ảnh) sản phẩm.
+ Xem, thêm/xóa sản phẩm, cập nhật số lượng sản phẩm trong giỏ hàng.
+ Xem lịch sử các sản phẩm đã xem.
+ Xem lịch sử tìm kiếm sản phẩm.
+ Xem danh sách các mã giảm giá khả dụng.
+ Trò chuyện với trợ lý ảo về các thông tin liên quan đến website.
+ Đặt hàng.
+ Thanh toán đơn hàng:
o Thanh toán khi nhận hàng (COD).
o Thanh toán online (MoMo, PayPal).
Đối vai trò khách hàng chưa đăng nhập:
+ Đăng ký tài khoản.
+ Xem danh sách nhóm sản phẩm và các sản phẩm thuộc các nhóm đó.
+ Xem chi tiết, lọc (giá, đánh giá,…), tra cứu (từ khóa, hình ảnh) sản phẩm.
+ Xem lịch sử các sản phẩm đã xem.
70
+ Trò chuyện với trợ lý ảo về các thông tin liên quan đến website.
+ Trải nghiệm những thông tin trên trang web.
2.3.1.2. Yêu cầu chức năng hệ thống
Ngoài các chức năng cơ bản cần có của một hệ thống website thương mại điện tử, hệ thống còn cung cấp các chức năng đặc trưng sau:
Bảng 2.4. Mô tả yêu cầu chức năng của hệ thống
TT Chức năng
Mô tả chi tiết Ghi chú
1 Xác thực người dùng
Hệ thống đảm bảo chỉ người dùng đã xác thực mới có thể truy cập vào các chức năng và tài nguyên của hệ thống.
2 Quản lý dữ liệu
Hệ thống cung cấp các chức năng để
thêm, xem, sửa, và xóa các dữ liệu trong hệ thống.
3
Phân quyền sử dụng
• Quản trị viên (Admin): có quyền sử dụng tất cả các chức năng của hệ thống quản lý; trong đó quản trị viên có thể tạo thêm các vai trò khác ngoài Nhân viên và Shipper, đồng thời quản lý quyền của các vai trò này.
• Nhân viên (Sale-admin): là vai trò con của Admin, mặc định có quyền xem danh sách khách hàng; xem danh sách, cập nhật trạng thái đơn hàng; xem danh sách sản phẩm; xem danh sách mã giảm giá.
• Nguời giao hàng (Shipper): là vai trò con của Admin, mặc định có quyền xem danh sách, cập nhật trạng thái giao hàng các đơn hàng cần vận chuyển.
• Hệ thống có nhiều tài khoản thuộc các vai trò mặc định:
Quản trị viên, Nhân viên, Shipper, Khách hàng.
• Ngoài các vai trò mặc định, Quản trị viên có thể tạo thêm vai trò cũng như cập nhật quyền của vai trò ở hệ thống quản lý.
71
• Khách hàng: Được quyền sử dụng các chức năng tùy vào trạng thái đăng nhập của hệ thống người mua hàng.
4
Quản lý các file phương tiện
• Các file phương tiện (hình ảnh và video) khi đưa vào hệ thống để lưu trữ đầu tiên sẽ được kiểm tra phải chính xác là các file phương tiện, sau đó hệ thống sẽ sử dụng dịch vụ bên thứ 3 là Cloudinary để
lưu trữ và quản lý.
• Khi có ngoại xảy ra trong các chức năng có liên quan đến upload file phương tiện, khi rollback hệ thống cũng sẽ tự động xóa các file đã upload trước đó.
5
Chức năng xóa tài nguyên
• Với các chức năng xóa của hệ thống, nếu không thể xóa trực tiếp tại cơ sở dữ liệu, hệ thống sẽ đánh dấu dữ liệu đó là đã xóa (DELETED).
• Khi thực hiện các chức năng có liên quan đến file phương tiện bị thay thế, bị xóa, hệ thống đồng sẽ xóa file phương tiện đó tại dịch vụ bên thứ 3.
6 Tính phí giao hàng
Phí giao hàng dựa vào dịch vụ bên thứ 3 là GHN (Giao Hàng Nhanh) để tính toán, địa chỉ gửi hàng là 1 Võ Văn Ngân, Phường Linh Chiểu, Thành phố Thủ Đức, Thành phố Hồ Chí Minh
7
Tìm kiếm bằng hình ảnh
Hệ thống sẽ sử dụng dịch vụ bên thứ 3 là Clarifai với model apparel-recognition (model nhận diện trang phục) để truy xuất keyword từ hình ảnh và dùng keyword đó để tìm kiếm trên hệ thống.
72 8 Gợi ý sản
phẩm
• Hệ thống sẽ sử dụng một microservice viết bằng Python và Flask giao tiếp thông qua RESTful API.
• Microservice này sẽ sử dụng 2 thư viện Implicit và Explicit, dữ liệu để train model được lấy từ cơ sở dữ liệu MySQL (dữ liệu đánh giá sản phẩm, mua hàng, giỏ hàng, sản phẩm yêu thích, lịch sử xem sản phẩm) và MongoDB (lịch sử xem sản phẩm của người dùng chưa đăng nhập).
• Khi có yêu cầu lấy dữ liệu gợi ý từ hệ thống chính, microservice sẽ cung cấp dữ liệu gợi ý từ các model đã train. Đồng thời nếu không có dữ liệu gợi ý microservice sẽ lập tức cập nhật lại model của mình (mặc định sẽ cập nhật mỗi 5 phút).
9
Gửi mã xác thực OTP qua điện thoại và email
Hệ thống dùng dịch vụ bên thứ 3 là Twilio để gửi OTP qua điện thoại và qua email thông qua Google.
OTP sẽ được tạo bên trong hệ thống và lưu trong bộ nhớ (sử dụng LoadingCache của Google Guava).
10 Thanh toán online
Hỗ trợ 2 cổng thanh toán MoMo và PayPal.
Khi tiến hành thanh toán online hệ thống sẽ thực hiện 2 bước.
Đầu tiên là tạo yêu cầu thanh toán online.
Tiếp theo là dựa vào kết quả thanh toán trả về và hệ thống chưa nhận thanh toán cho đơn hàng đó
73
thì đơn hàng sẽ cập nhật thanh toán thành công đồng thời thông báo đến cổng thanh toán đã nhận thanh toán thành công. Nếu đơn hàng đã thanh toán trước đó thì hệ thống sẽ từ chối thanh toán và người dùng sẽ được hoàn tiền.
11
Lọc, tìm kiếm dữ liệu
• Hệ thống dùng framework Hibernate Search và Lucene để thực hiện chức năng Full-text Search, Fuzzy Search, bộ xử lý ngôn ngữ tự nhiên để cho ra các kết quả liên quan nhất.
• Bộ lọc dùng thuật toán “Multiple Selection Through Bitmasks” để kết hợp các tiêu chí lọc tùy ý một cách tiện dụng.
Do hệ thống sử dụng automatic indexing strategy là async nên đôi lúc Hibernate Search sẽ trả về kết quả cũ do chưa cập nhật lại Index.
12 Thời gian
Thời gian hệ thống tự động chuyển đổi và lưu dưới dạng UTC.
• Múi giờ mặc định của hệ thống là GMT+7.
• Hệ thống hỗ trợ định dạng múi giờ mặc định trả về và chấp nhận định dạng múi giờ là định dạng đầu vào (nếu không chỉ định sẽ theo múi
74
giờ mặc định của hệ thống).
13
Định danh người dùng bằng JWT
Hệ thống sử dụng JWT để xác thực người dùng đã đăng nhập.
JWT sẽ hết hạn sau 24 giờ kể từ thời gian cấp token.
14
Giới hạn thời gian thanh toán online
Hệ thống sẽ hủy tất cả các đơn hàng đang chờ thanh toán online nhưng đã quá hạn thanh toán.
• Mặc định người dùng có 15 phút để
thanh toán đơn hàng nếu người dùng chọn phương thức thanh toán online.
• Do hệ thống quét mỗi 60 giây nên đôi khi sẽ có đơn hàng quá hạn thanh toán tối thiểu là 1 giây, tối đa là 60 giây mới bị hủy bởi hệ thống.
15
Đăng nhập/đăng ký thông qua OAuth
Hệ thống hỗ trợ xác thực thông qua OAuth và hiện tại chỉ hỗ trợ Google OAuth (hệ thống khách hàng).
Khi đăng ký thông qua OAuth, một username ngẫu nhiên sẽ được cấp và người dùng có thể thay đổi username một lần duy nhất.
16 Lưu trữ dữ liệu
Hệ thống sử dụng MySQL để lưu trữ dữ liệu chính cho hệ thống, ngoài ra còn sử dụng MongoDB để lưu trữ các thông tin bổ sung bao gồm lịch sử tìm kiếm của người dùng, lịch sử xem sản phẩm của cả người dùng và người dùng ẩn danh.
Hệ thống áp dụng hướng tiếp cận Code- First giúp đơn giản hoá thao tác với cơ sở dữ liệu; tập trung vào mã nguồn và từ mã nguồn cơ sở dữ liệu sẽ
75
được tạo một cách hoàn toàn tự động;
đồng bộ hóa cấu trúc cơ sở dữ liệu với mã nguồn; giảm phụ thuộc vào loại cơ sở dữ liệu sử dụng.
17
Xác thực dữ liệu đầu vào
Hệ thống sử dụng tính năng Validation của Javax để validate dữ liệu của request đầu vào, đồng thời có chức năng ngăn chặn người dùng cố ý nhập sai thông tin (nhập thông tin do người dùng khác sở hữu,…).
18 Mã hóa
Hệ thống sử dụng mã hóa Bcrypt để mã hóa và lưu trữ thông tin nhạy cảm như mật khẩu
19
Phân quyền hệ thống quản lý
Hệ thống có phân quyền trên các chức năng quản lý, chỉ có người dùng có vai trò có quyền của chức năng đó mới sử dụng được.
20
Chức năng quản lý truy cập tài nguyên
Các tài nguyên có chức năng vô hiệu hóa sẽ ẩn các tài nguyên khỏi hệ thống người mua, các người dùng khách hàng sẽ không thể tìm thấy/truy cập tài nguyên đó nữa. Và tương tự khi hủy vô hiệu hóa tài nguyên đó.
21
Quản lý trạng thái đơn hàng
Đơn hàng có các trạng thái:
• WAIT_FOR_PAYMENTchờ thanh toán từ người mua. Khi đơn hàng ở trạng thái này thì có nghĩa là các sản phẩm có trong đơn hàng sẽ bị trừ đi số lượng sẵn
Khi đặt hàng với phương thức thanh toán COD, trạng thái đơn hàng sẽ tự động
chuyển sang
76
có tương ứng với từng phân loại. Có thể
hủy đơn hàng bởi người mua.
• WAIT_FOR_CONFIRM: chờ xác nhận đơn hàng từ người quản trị khi người dùng đã thanh toán thành công (hệ thống quản lý). Có thể hủy đơn hàng bởi người mua và bởi người bán khi không xác nhận đơn hàng. Khi hủy thì nếu người mua thanh toán online thì tiền hàng sẽ được hoàn trả.
• WAIT_FOR_SEND: chờ xác nhận gửi hàng từ người quản trị khi đã xác nhận đơn hàng. Có thể hủy đơn hàng bởi người mua.
• DELIVERING: đang giao hàng khi người quản trị (Shipper) xác nhận đã gửi hàng. Khi xác nhận gửi hàng số lượng bán ra của các sản phẩm tương ứng sẽ tăng lên tương ứng với số lượng trên đơn hàng.
Khi ở trạng thái này đơn hàng không thể bị hủy.
• DELIVERED: đã giao hàng xác nhận bởi người quản trị (Shipper) khi giao hàng thành công. Đơn hàng không thể bị hủy.
• COMPLETED: đơn hàng đã hoàn thành khi người dùng đánh giá đơn hàng hoàn tất.
• CANCELED: đã hủy khi đơn hàng bị hủy.
WAIT_FOR_CONFI RM.
Dòng trạng thái của đơn hàng không bị
hủy là:
WAIT_FOR_PAYM
ENT ->
WAIT_FOR_CONFI
RM ->
WAIT_FOR_SEND -
> DELIVERING ->
DELIVERED ->
COMPLETED