16 Cơ sở dữ liệu
16.3 Đặc tả thực thể trong ERD
Một hệ thống chuỗi cửa hàng cùng các kho phân phối trung gian cần xây dựng một cơ sở dữ liệu lưu trữ các hoạt động quản lý kho hàng cũng như bán lẻ tại cửa hàng. Hệ thống sẽ cần lưu trữ dữ liệu của các đối tượng: nhân viên và tài khoản nhân viên, sản phẩm, danh mục sản phẩm, đơn hàng, khách hàng, khuyến mãi, cửa hàng, kho hàng, các hoạt động đặt hàng và nhập/xuất hàng giữa các kho, ca làm việc của nhân viên thu ngân,. . .
Hình 30:Bảng thông tin sản phẩm
Đối với sản phẩm, cần lưu trữ các thông tin như: mã số, tên, mức tái mua hàng, sự gián đoạn hàng, lượng trên mỗi đơn vị sản phẩm, giá đơn vị sản phẩm. Mỗi sản phẩm sẽ thuộc một danh mục sản phẩm để tiện quản lý. Sản phẩm có thể có những ưu đãi chiết khấu khác nhau vào những thời điểm khác nhau tùy thuộc vào chính sách của công ty.
Hình 31:Bảng thông tin danh mục sản phẩm
Danh mục sản phẩm sẽ được lưu những thông tin như: mã số, tên, mô tả, hình ảnh.Mỗi danh mục sản phẩm có thể chứa nhiều sản phẩm.
Hình 33:Bảng thông tin khuyến mãi sản phẩm
Hình 34:Bảng thông tin khuyến mãi mua combo sản phẩm
Hình 35:Bảng thông tin khuyến mãi trên tổng đơn hàng
Đối với khuyến mãi, cần lưu trữ các thông tin như: mã coupon khuyến mãi, mô tả, thời gian khuyến mãi hợp lệ gồm thời gian khuyến mãi bắt đầu và kết thúc, số lượng khuyến mãi (nếu có), phần trăm khuyến mãi (tính theo cách khác nhau ở 3 loại khuyến mãi). Khuyến mãi trong cơ sở dữ liệu sẽ được lưu thành 3 loại chính: khuyến mãi chiết khấu trực tiếp trên giá mặt hàng, khuyến mãi combo khi mua một nhóm hàng nhất định, và khuyến mãi trên tổng hóa đơn khi đạt giá trị tối thiểu được cho trước. Những khuyến mãi này sẽ do quản lý xác định.
• Đối với khuyến mãi chiết khấu trực tiếp trên giá mặt hàng sẽ lưu thêm phần trăm giảm giá của mặt hàng đó và có thể khác nhau ở những cửa hàng khác nhau.
• Đối với khuyến mãi combo khi mua một nhóm hàng nhất định sẽ lưu thêm phần trăm giảm giá của combo, danh sách các mặt hàng trong combo và số lượng tối thiểu của mỗi mặt hàng trong combo để được nhận khuyến mãi.
• Đối với khuyến mãi trên tổng hóa đơn khi đạt giá trị tối thiểu được cho trước sẽ lưu thêm giá trị đơn hàng tối thiểu để nhận khuyến mãi, phần trăm khuyến mãi trên tổng đơn hàng và số tiền tối đa khuyến mãi.
Hình 36:Bảng thông tin cửa hàng
Mỗi cửa hàng sẽ được lưu những thông tin như: mã số, tên ngắn, điện thoại, fax, email, địa chỉ, thành phố, khu vực, quốc gia, mã bưu chính, kích thước và giá thuê cửa hàng(nếu có). Mỗi cửa hàng sẽ có một kho riêng của mình. Mỗi cửa hàng sẽ có một quản lý cửa hàng duy nhất có toàn quyền với cửa hàng.
Hình 37:Bảng thông tin sản phẩm trong cửa hàng
Mỗi cửa hàng sẽ chứa nhiều mặt hàng khác nhau và được quản lý số lượng hàng còn lại của mình cả trong kho cửa hàng và trên cửa hàng.
Hình 38:Bảng thông tin kho
Đối với kho, sẽ có kho phân phối trung gian và kho của cửa hàng. Kho của cửa hàng sẽ được lưu mã số kho ở cửa hàng. Kho sẽ được lưu những trường dữ liệu như: mã số, tên ngắn, địa chỉ, điện thoại, fax, email, địa chỉ, thành phố, khu vực, quốc gia, mã bưu chính, kích thước kho, kích thước còn trống. Mỗi kho sẽ được quản lý bởi một hoặc nhiều nhân viên kho và có thể tạo những phiếu yêu cầu hàng bởi những nhân viên kho quản lý.
Hình 39:Bảng thông tin thông báo
Mỗi tài khoản sẽ có 1 số lượng thông báo để hiển thị và lưu lại. Thông báo sẽ bao gồm mã, thời gian tạo, tiêu đề, thông tin, tài khoản nhận, và thông tin đã đọc thông báo hay chưa để hiển thị lại.
Hình 40:Bảng thông tin tài khoản
Tài khoản được sử dụng để lưu trữ tài khoản của nhân viên trong hệ thống (bao gồm quản lý và nhân viên ở cả cửa hàng và kho). Đối với tài khoản, cần lưu trữ các thông tin như: tên đăng nhập, mật khẩu, chức vụ, tên, ngày sinh, địa chỉ, quê quán, ghi chú,... Tài khoản này được dùng để một nhân viên đăng nhập vào hệ thống và thực hiên phân việc của mình. Tùy theo từng loại tài khoản khác nhau mà có quyền truy cập khác nhau vào hệ thống.
Hình 41:Bảng thông tin tài khoản quản lý cửa hàng
Tài khoản của quản lý của hàng, là người quản lý chung nhất và có quyền truy cập cao nhất trong cửa hàng đó, quyền truy cập bao gồm cả việc quản lý cửa hàng, quản lý nhân viên trong cửa hàng đó, quản lý sản phẩm, tài chính chi tiết của cửa hàng. Tuy nhiên, quản lý cửa hàng chỉ có thể quản lý chi tiết số lượng sản phẩm trong kho, không thể quản lý chi tiết thông tin sản phẩm như thay đổi tên, giá, khuyến mãi,..
Hình 42:Bảng thông tin tài khoản nhân viên cửa hàng
Tài khoản của nhân viên cửa hàng, là nhân viên làm việc tại cửa hàng dưới sự quản lý của quản lý cửa hàng, được chia thành 3 loại cơ bản: Quản lý kho, Nhân viên tạp vụ và Nhân viên bán hàng. Tùy từng loại nhân viên có chức năng và quyền truy cập khác nhau
Hình 43:Bảng thông tin tài khoản quản lý kho cửa hàng
Tài khoản của quản lý kho cửa hàng, là nhân viên làm việc tại cửa hàng dưới sự quản lý của quản lý cửa hàng,chịu trách nhiệm quản lý kho tại của hàng đó. Nhiệm vụ chính là quản lý xuất kho để bày ra cửa hàng bán lẻ và nhập kho khi hàng hóa sắp hết, chịu trách nhiệm cho hàng hóa trong kho và luồng nhập xuất trong kho. Là người có quyền tạo ra phiếu yêu cầu nhập hàng.
Hình 44:Bảng thông tin tài khoản nhân viên tạp vụ cửa hàng
Tài khoản của nhân viên tạp vụ cửa hàng, là nhân viên làm việc tại cửa hàng dưới sự quản lý của quản lý cửa hàng. Nhiệm vụ chính là bày hàng hóa từ kho lên kệ. Hệ thống có hỗ trợ gợi ý bày hàng hợp lý để thu hút khách hàng mua hàng
Hình 45:Bảng thông tin tài khoản nhân viên đứng quầy cửa hàng
Tài khoản của nhân viên bán hàng, là nhân viên làm việc tại cửa hàng dưới sự quản lý của quản lý cửa hàng. Nhiệm vụ chính là đứng quầy bán hàng hóa và thu tiền, có 2 loại là toàn thời gian và bán thời gian, chịu trách nhiệm cho thu chi trong ca làm việc của mình.
Hình 46:Bảng thông tin tài khoản quản lý kho hệ thống
Tài khoản của quản lý kho hệ thống, chịu trách nhiệm quản lý một kho trong hệ thống kho. Nhiệm vụ chính là quản lý xuất nhập kho. Quản lý kho sẽ nhận phiếu yêu cầu từ cửa hàng sau đó thực hiện phiếu yêu cầu đó. Quản lý kho cũng gửi phiếu yêu cầu hàng hóa lên kho chính để nhập thêm hàng khi kho hết hàng. Chịu mọi trách nhiệm về việc xuất nhập hàng hóa trong kho của mình cũng như số lượng hàng hóa đang tồn tại trong kho.
Hình 47:Bảng thông tin ca làm việc
Ca làm việc của nhân viên cụ thể, có ghi lại thu chi trong một ca làm việc và những hóa đơn đã thực hiện. Ca làm việc sẽ lưu thời gian bắt đầu, thời gian kết thúc, loại, Id nhân viên và cửa hàng nhân viên làm tại ca làm việc để tiện theo dõi cũng như truy xuất lịch sử làm việc giữa các cửa hàng về sau.
Hình 48:Bảng thông tin đơn hàng
Đơn hàng có chứa thông tin của những sản phẩm được bản trong đơn hàng đó, những chi tiết liên quan của đơn hàng như: tổng giá tiền, ngày giờ, người mua, các sản phẩm trong đơn hàng. Một đơn hàng chỉ có thể do một khách thực hiện. Kèm theo đơn hàng cũng có lưu thông tin của những mặt hàng đã bị trả lại từ khách hàng. Đơn hàng có thể áp dụng khuyển mãi và có áp dụng thuế. Khách hàng sẽ được lưu trữ các thông tin như: tên, ngày sinh, địa chỉ, quê quán và một
Hình 49:Bảng thông tin khách hàng
số thông tin liên lạc cơ bản để tiện việc phục vụ khách hàng. Khách hàng thực hiện mua hàng thông qua việc thành lập các hóa đơn qua quá trình thanh toán với nhân viên bán hàng. Khách hàng có thể trả lại hàng hóa mình không vừa ý trong những khuôn khổ điều kiện của cửa hàng. Việc thực hiện trả hàng sẽ được xác định bằng hóa đơn mua hàng của sản phẩm cần trả.
16.4 Kiến trúc hệ thống
Hình 50:Kiến trúc hệ thống
Kiến trúc hệ thống bao gồm ba phần chính:
• Client: là nơi người dùng trực tiếp sử dụng hệ thống trên trình duyệt. Tại đây, Website nhận các yêu cầu từ người dùng, sau đó gửi các Request lên Server để thực hiện chức năng tương ứng. Các request này có thể là các request thao tác trên dữ liệu, hoặc request để server trả về giao diện, ...
• Server: là nơi xử lý các yêu cầu được gửi từ Website. Tùy theo từng yêu cầu mà Server sẽ gửi các dữ liệu (đã qua xử lý) hay các giao diện về trình duyệt người dùng. Khi xử lý dữ liệu, thực chất là dữ liệu này được cung cấp từ server database, server hệ thống không lưu trực tiếp dữ liệu, chỉ xử lý dữ liệu.
• Database: là nơi lưu trữ toàn bộ dữ liệu của người dùng, khi cần sẽ nhận yêu cầu từ Server và gửi về Server dữ liệu tương ứng.
• Google Cloud Flatform: được cung cấp bởi Google, là một bộ dịch vụ điện toán đám mây module bao gồm điện toán, lưu trữ dữ liệu, phân tích dữ liệu và học máy. Trong hệ thống được dùng để gọi Google Maps API.
Tóm lại, khi người dùng thao tác trên trình duyệt, Website dựa vào thao tác này gửi các Request tương ứng. Khi Request đến được Server, Server tiến hành xử lý Request này, tùy theo yêu cầu mà có thể đơn giản trả về một giao diện hoặc gọi đến Database để Database trả về dữ liệu cần thiết, sau đó xử lý dữ liệu đó và cũng trả về Website để hiển thị lên cho người dùng. Kết quả là người dùng thực hiện được chức năng mong muốn.
Phần E
Hiện thực
17 Quản lý mã nguồn 17.1 Git
Git là một trong những hệ thống quản lý phiên bản phân tán (Distributed Version Control System) nổi bận hiện nay và từ lâu đã trở thành một trong những hệ thống quản lý phiên bản phân tán cực kì phổ biến nhờ sự hỗ trợ mạnh mẽ của mình. Git cung cấp cho mỗi lập trình viên kho lưu trữ (repository) riêng chứa toàn bộ lịch sử thay đổi.
VCS là viết tắt của Version Control System là hệ thống kiểm soát các phiên bản phân tán mã nguồn mở. Đọc cái tên VCS đã phần nào nói lên tính năng của hệ thống này, VCS sẽ lưu lại toàn bộ mã nguồn và ghi chép đầy đủ trạng thái thay đổi của các file, với từng trạng thái thay đổi mỗi file, đều được log lại thành một phiên bản.
Git đơn giản là một hệ thống thuộc dạng VCS. Tức là ngoài Git ra vẫn còn nhiều hệ thống khác tương tự như Git. Nhưng ngày nay (2021), khi nói tới VCS, người ta chỉ hình dung tới Git. Với Git, chúng ta có thể: lưu trữ source code, quản lý phiên bản source code, merge code (ghép code) từ nhiều người. TheoKhảo sát của Stack Overflowhơn87%nhà lập trình sử dụng Git.
17.2 Github
Github là một trang web cung cấp dịch vụ cloud-base dựa trên Git để giúp cho người lập trình có thể lưu trữ source code của họ. Không chỉ là lưu trữ, Github còn hỗ trợ người dùng theo dõi code cũng như xem và quản lý các thay đổi đã được thực hiện trên source code đó . Giao diện Github rất thân thiện với người dùng, nhà lập trình dù là người chưa thực sự làm quen với lập trình cũng có thể dễ dàng sử dụng.
18 Cấu trúc mã nguồn 18.1 Frontend
Cấu trúc mã nguồn Frontend gồm 2 phần chính:node_modulevàsrc.
Cụ thể, trong thư mục frontend chứa cái phần chính sau:
• node_modules: Đây là thư mục chứa các thư viện cảunodeđược cài đặt và dùng trong hệ thống phía người dùng.
• public: Đây là thư mục chứa file HTML khi cần sẽ được render ra giao diện người dùng. • src: Đây là thư mục chứa toàn bộ mã nguồn chính viết bằng JavaScript sử dụng thư viện
ReactJS và MobX, bao gồm các thư mục con như sau:
- common: chứa những gì tổng quát nahats dùng chung cho cả hệ thống: các hàm tổng quát (ví dụ như hàm gửi các request có kèm token,...), các hằng số, các hàm bổ trợ utils,... .
- module: chứa mã nguồn cho từng module con trong hệ thống (cụ thể bên dưới hình) - themes: chứa các mã nguồn liên quan đến giao diện (ví dụ các files css, scss, ... )
Thư mụcmodulessẽ chứa nhiều module con. Một module con được cấu trúc như sau: • components: chứa những component con dưới dạng file.tsxđể cấu tạo thành một page. • pages: chứa những page sẽ được tạo ra trong module này.
• .dto.ts: chứa các dto được sử dụng trong module. • .enum.ts: chứa các enum được sử dụng trong module. • .service.ts: chứa mã nguồn để gọi api từ backend.
• .store.ts: chứa mã nguồn để gọi dữ liệu sau khi lấy được từ service và lưu vào store để sử dụng trong các page.
Cấu trúc mã nguồn Frontend gồm 2 phần chính:node_modulevàsrc.
Cụ thể, trong thư mục frontend chứa cái phần chính sau:
• node_modules: Đây là thư mục chứa các thư viện cảunodeđược cài đặt và dùng trong hệ thống phía người dùng.
• public: Đây là thư mục chứa file HTML khi cần sẽ được render ra giao diện người dùng. • src: Đây là thư mục chứa toàn bộ mã nguồn chính viết bằng JavaScript sử dụng thư viện
ReactJS và MobX, bao gồm các thư mục con như sau:
- common: chứa những gì tổng quát nahats dùng chung cho cả hệ thống: các hàm tổng quát (ví dụ như hàm gửi các request có kèm token,...), các hằng số, các hàm bổ trợ utils,... .
- module: chứa mã nguồn cho từng module con trong hệ thống (cụ thể bên dưới hình) - themes: chứa các mã nguồn liên quan đến giao diện (ví dụ các files css, scss, ... )
Thư mụcmodulessẽ chứa nhiều module con. Một module con được cấu trúc như sau: • components: chứa những component con dưới dạng file.tsxđể cấu tạo thành một page. • pages: chứa những page sẽ được tạo ra trong module này.
• .dto.ts: chứa các dto được sử dụng trong module. • .enum.ts: chứa các enum được sử dụng trong module. • .service.ts: chứa mã nguồn để gọi api từ backend.
• .store.ts: chứa mã nguồn để gọi dữ liệu sau khi lấy được từ service và lưu vào store để sử dụng trong các page.
18.2 Backend
Hình 55:Thư mục modules
18.2.1 Tổng quan những file chính của mã nguồn Nest
• app.controller.spec.ts: Có nhiệm vụ viết unit-test cho các controller. • app.module.ts: Root module của ứng dụng.
• app.service.ts: Service chứa các logic mà controller sẽ dùng đến. • main.ts: Sử dụng NestFactory để khởi tạo ứng dụng.
18.2.2 Module
Hình 56:Tổng quan một module
Module có nhiệm vụ đóng gói những logic liên quan của các chức năng cần triển khai đến client một cách độc lập. Một module trong Nest là class được define với @Module().Một file module cơ bản sẽ như sau:
1 ### s r c / modules / p r o d u c t s / p r o d u c t s . module . t s : 2 import { Module } from '@ n e s t j s / common';
3 import { TypeOrmModule } from '@ n e s t j s / typeorm '; 4 import { ProductsService } from '. / p r o d u c t s . s e r v i c e ';
5 import { ProductsController } from '. / p r o d u c t s . c o n t r o l l e r '; 6 import { Product } from ' . . / . . / e n t i t i e s / p r o d u c t / p r o d u c t . e n t i t y ';