Giới thiệu dự án

Thị trường thương mại điện tử ngành hàng tiêu dùng nhanh và thực phẩm (E-Grocery) đang chứng kiến mức tăng trưởng kép hàng năm (CAGR) đạt trên 24.5% tại khu vực Đông Nam Á. Tuy nhiên, các hệ thống bán lẻ siêu thị truyền thống khi chuyển dịch số hóa thường đối mặt với các bài toán nan giải: sai lệch dữ liệu tồn kho tức thời, thiếu minh bạch về nguồn gốc xuất xứ và giá trị dinh dưỡng của sản phẩm, cũng như hiện tượng nghẽn giao tác khi số lượng đơn hàng đồng thời tăng đột biến. Đồ án môn học "Trang web thương mại điện tử bán hàng siêu thị" (GreenMart) được nghiên cứu và phát triển bởi nhóm sinh viên Khoa Hệ thống Thông tin – Trường Đại học Công nghệ Thông tin (ĐHQG-HCM), dưới sự hướng dẫn của ThS. Nguyễn Hồ Duy Tri, nhằm giải quyết triệt để các thách thức kỹ thuật cốt lõi trên.

+-----------------------------------------------------------------------------------+
|                                 HỆ THỐNG GREENMART                                |
|                                                                                   |
|  [Khách hàng (Client)] ---> [Spring Boot 3.x & Security] ---> [Oracle RDBMS 19c]  |
|         |                                 |                            |          |
|  - Xem dinh dưỡng/nguồn gốc       - Xác thực RBAC, JWT         - 9 Ràng buộc TV   |
|  - Giỏ hàng & Thanh toán          - Điều phối Transaction       - PL/SQL Triggers  |
|  - COD / VNPay Gateway            - API Cung cấp dữ liệu       - Stored Procedures|
+-----------------------------------------------------------------------------------+

1. Vấn đề thực tiễn và Pain Points

  • Bất đồng bộ dữ liệu tồn kho: Hiện tượng bán vượt tồn kho (Overselling) xảy ra khi nhiều khách hàng cùng tranh chấp mua một mặt hàng có số lượng hạn chế trong cùng một thời điểm.
  • Thiếu hụt thông tin an toàn thực phẩm: Người tiêu dùng trực tuyến ngày càng khắt khe về các tiêu chí "thực phẩm xanh", bảng thành phần dinh dưỡng (NUTRITION_VALUE) và xuất xứ rõ ràng (ORIGIN).
  • Quy trình quản lý thủ công rời rạc: Việc đối soát công nợ khách hàng, doanh thu định kỳ và quản trị phân quyền nhân sự – quản lý chưa được chuẩn hóa ở tầng cơ sở dữ liệu (Database Layer).

2. Mục tiêu dự án

  1. Thiết kế lược đồ cơ sở dữ liệu quan hệ chuẩn hóa: Xây dựng hệ thống bảng dữ liệu chặt chẽ trên Oracle RDBMS với các ràng buộc toàn vẹn cấp phát biểu và cấp bảng.
  2. Kiểm soát tính toàn vẹn và nhất quán nghiệp vụ: Triển khai 100% logic trừ kho, tính doanh thu và xác thực dữ liệu qua Stored Procedures và Triggers PL/SQL.
  3. Giải quyết triệt để tranh chấp truy xuất đồng thời: Áp dụng các mức cô lập giao tác (Transaction Isolation Levels) và kỹ thuật khóa (Locking) để ngăn chặn hiện tượng Non-repeatable Read và Deadlock.
  4. Bảo mật phân quyền đa cấp: Tích hợp Spring Security phân định ranh giới chức năng rõ ràng giữa MANAGER, EMPLOYEECUSTOMER.
  5. Đa dạng hóa phương thức thanh toán: Hỗ trợ thanh toán linh hoạt qua cổng VNPay và hình thức giao hàng thu tiền tận nơi (COD).

3. Phương pháp tiếp cận và kết quả kỳ vọng

Dự án áp dụng mô hình kiến trúc đa tầng (Multi-tier Enterprise Architecture), đưa tối đa các xử lý kiểm tra ràng buộc nghiệp vụ quan trọng xuống tầng lưu trữ Oracle RDBMS nhằm giảm thiểu round-trip mạng và bảo vệ dữ liệu ở mức nguyên tử (Atomicity). Kết quả hướng đến là một nền tảng vận hành với thời gian phản hồi giao tác dưới 500ms, độ chính xác số liệu tồn kho đạt 100% và đáp ứng hơn 500 yêu cầu đồng thời (Concurrent Requests).


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí kỹ thuật Giải pháp truyền thống (POS đơn lẻ / Excel) Nền tảng CMS mã nguồn mở (WooCommerce/OpenCart) Hệ thống GreenMart (Đề xuất)
Bảo đảm toàn vẹn dữ liệu Kém, dễ phát sinh xung đột cục bộ Phụ thuộc vào Application Logic, dễ lỗi race condition Chặt chẽ qua Triggers/Stored Procedures tại tầng RDBMS
Xử lý đồng thời (Concurrency) Không hỗ trợ Khóa cấp độ bảng hoặc hàng mặc định, dễ thắt cổ chai Tối ưu qua Oracle Row-Level Locks & Serializable Isolation
Minh bạch dinh dưỡng & xuất xứ Không hỗ trợ Cần cài đặt nhiều Plugin bên thứ ba Tích hợp trực tiếp vào Schema thực thể PRODUCT
Phân quyền người dùng Rời rạc, thiếu nhật ký bảo mật Cấu hình Role cơ bản Phân tầng kép: Spring Security kết hợp RBAC Database

Hệ thống phân loại yêu cầu người dùng theo khung MoSCoW:

  • Must-have: Xác thực tài khoản, xem chi tiết sản phẩm kèm giá trị dinh dưỡng, thêm giỏ hàng, đặt hàng/hủy đơn, tự động trừ tồn kho, thống kê doanh thu.
  • Should-have: Thanh toán số qua VNPay, xuất hóa đơn tự động, tự động tạo tài khoản đăng nhập khi tuyển dụng nhân viên mới (LOGIN_EMP_AUTO).
  • Could-have: Bộ lọc khách hàng theo doanh số lũy kế, giao diện phản hồi đánh giá sản phẩm.
  • Won't-have (giai đoạn này): Tích hợp trí tuệ nhân tạo gợi ý sản phẩm cá nhân hóa theo hành vi lướt web.

Thiết kế hệ thống

+-----------------------------------------------------------------------------------+
|                        KIẾN TRÚC TỔNG THỂ HỆ THỐNG GREENMART                      |
+-----------------------------------------------------------------------------------+
|  [Presentation Layer]    Bootstrap 5, HTML5, Thymeleaf, JavaScript Engine         |
+-----------------------------------------------------------------------------------+
|  [Security Layer]        Spring Security 6.x (RBAC: MANAGER, EMPLOYEE, CUSTOMER)  |
+-----------------------------------------------------------------------------------+
|  [Application Layer]     Spring Boot 3.1 (Spring MVC, HikariCP Connection Pool)   |
+-----------------------------------------------------------------------------------+
|  [Database Engine]       Oracle Database 19c Enterprise Edition                   |
|                          - PL/SQL Engines (Stored Procedures & Triggers)          |
|                          - 9 Tables, Foreign Key Constraints, Integrity Rules    |
+-----------------------------------------------------------------------------------+

1. Stack công nghệ và phiên bản

  • Hệ quản trị cơ sở dữ liệu: Oracle Database 19c Enterprise Edition (Hỗ trợ PL/SQL, Transaction Management, Concurrency Control).
  • Backend Framework: Java 17 LTS, Spring Boot 3.1.x, Spring Data JPA / JDBC Template.
  • Bảo mật: Spring Security 6.x tích hợp mã hóa mật khẩu BCrypt.
  • Frontend: Thymeleaf Template Engine, HTML5, CSS3, JavaScript ES6, Bootstrap 5.
  • Cổng thanh toán: VNPay Payment Gateway Sandbox API.

2. Lược đồ cơ sở dữ liệu quan hệ (Database Schema)

Hệ thống gồm 9 bảng chuẩn hóa:

  1. EMPLOYEE (EMPLOYEE_ID [PK], ADDRESS, BASE_SALARY, BIRTHDAY, MAIL, FULLNAME, PHONE, USERPOSITION, START_DATE, USERLOGIN_ID [FK], MANAGER_ID [FK])
  2. LOGIN_EMPLOYEE (USERLOGIN_ID [PK], USERNAME, USERPASSWORD)
  3. CUSTOMER (CUSTOMER_ID [PK], ADDRESS, BIRTHDAY, MAIL, FULLNAME, PHONE, TOTAL_PURCHASE_AMOUNT, USERLOGIN_ID [FK])
  4. LOGIN_CUSTOMER (USERLOGIN_ID [PK], USERNAME, USERPASSWORD)
  5. PRODUCT (PRODUCT_ID [PK], PRODUCT_NAME, DESCRIPTION, NUTRITION_VALUE, ORIGIN, LINK_PHOTO, PRICE, QUANTITY, PRODUCT_TYPE, UNIT)
  6. CART (CART_ID [PK], QUANTITY, CUSTOMER_ID [FK], PRODUCT_ID [FK])
  7. ORDERS (ORDER_ID [PK], ADDRESS_DELIVERY, ORDER_DATE, ID_CHECKOUT, PAYMENT_METHOD, PHONE_RECEIVER, STATUS, TOTAL_MONEY, CUSTOMER_ID [FK])
  8. ORDER_DETAIL (ORDER_ID [PK, FK], PRODUCT_ID [PK, FK], QUANTITY)
  9. CUSTOMER_FEEDBACK (FEEDBACK_ID [PK], DATE_FEEDBACK, DESCRIPTION, CUSTOMER_ID [FK], PRODUCT_ID [FK])
                        [LOGIN_CUSTOMER] 1 --- 1 [CUSTOMER]
                                                     | 1
                                                     |
                                                     | *
    [PRODUCT] 1 ----- * [CART] * ----- 1         [ORDERS]
        |                                            | 1
        |                                            |
        +------------ * [ORDER_DETAIL] * ------------+
        |
        +------------ * [CUSTOMER_FEEDBACK]

3. Bảng ràng buộc toàn vẹn hệ thống (Integrity Constraints)

  • RB1 & RB2: Thuộc tính MAIL của nhân viên và khách hàng là duy nhất và phải trùng khớp với USERNAME đăng nhập.
  • RB3: Thuộc tính USERPOSITION trong EMPLOYEE chỉ nhận giá trị 'EMPLOYEE' hoặc 'MANAGER'.
  • RB4: STATUS trong bảng ORDERS chỉ thuộc tập hợp: {'ORDERED', 'PREPARING', 'SHIPPING', 'COMPLETELY'}.
  • RB5 & RB6: Ngày sinh (BIRTHDAY) của khách hàng phải nhỏ hơn hoặc bằng ngày hiện tại (SYSDATE); Nhân viên phải đủ từ 18 tuổi trở lên (MONTHS_BETWEEN(SYSDATE, BIRTHDAY)/12 >= 18).
  • RB7: Người quản lý (MANAGER_ID) bắt buộc phải tồn tại trong bảng EMPLOYEE.
  • RB8: Trị giá đơn hàng: $$\text{TOTAL_MONEY} = \sum (\text{ORDER_DETAIL.QUANTITY} \times \text{PRODUCT.PRICE})$$
  • RB9: Doanh số khách hàng: $$\text{TOTAL_PURCHASE_AMOUNT} = \sum \text{ORDERS.TOTAL_MONEY}$$

Methodology

Dự án áp dụng quy trình phát triển Agile/Scrum rút gọn với 5 mốc phân kỳ (Milestones) trong thời gian 12 tuần:

  • Cột mốc 1 (Tuần 1-3): Thu thập yêu cầu nghiệp vụ siêu thị, thiết kế mô hình thực thể kết hợp (ERD), chuyển giao lược đồ quan hệ và thiết lập 9 ràng buộc toàn vẹn.
  • Cột mốc 2 (Tuần 4-6): Hiện thực hóa toàn bộ logic nghiệp vụ trên Oracle: viết 5 Triggers và 18 Stored Procedures.
  • Cột mốc 3 (Tuần 7-9): Xây dựng tầng ứng dụng Spring Boot, thiết lập cấu hình bảo mật Spring Security và tích hợp cổng thanh toán VNPay.
  • Cột mốc 4 (Tuần 10-11): Thử nghiệm kiểm soát truy xuất đồng thời, phân tích xung đột Non-repeatable Read và cấu hình phương thức khóa giải quyết Deadlock.
  • Cột mốc 5 (Tuần 12): Kiểm thử nghiệm thu người dùng (UAT), tối ưu hóa thời gian đáp ứng và hoàn thiện hồ sơ kỹ thuật.

Implementation và kết quả

Development Process & Key Technical Implementations

Hệ thống đặt trọng tâm vào việc xử lý các giao tác nguyên tử thông qua các Trigger và Stored Procedure trong môi trường Oracle PL/SQL.

1. Trigger kiểm soát tự động cập nhật tồn kho (UPDATE_QUANTITY_PRODUCT)

Trigger này kích hoạt tự động mỗi khi có thao tác thêm hoặc xóa chi tiết đơn hàng, bảo đảm số lượng hàng trong kho (PRODUCT.QUANTITY) luôn được đồng bộ và ngăn chặn triệt để tình trạng xuất âm hàng hóa.

CREATE OR REPLACE TRIGGER UPDATE_QUANTITY_PRODUCT
AFTER INSERT OR DELETE ON ORDER_DETAIL
FOR EACH ROW
DECLARE
    v_current_quantity NUMBER(10,0);
BEGIN
    IF INSERTING THEN
        -- Giảm số lượng tồn kho khi phát sinh chi tiết đơn hàng mới
        UPDATE PRODUCT 
        SET QUANTITY = QUANTITY - :NEW.QUANTITY
        WHERE PRODUCT_ID = :NEW.PRODUCT_ID;
        
        -- Kiểm tra lượng tồn thực tế
        SELECT QUANTITY INTO v_current_quantity 
        FROM PRODUCT 
        WHERE PRODUCT_ID = :NEW.PRODUCT_ID;
        
        IF v_current_quantity < 0 THEN
            RAISE_APPLICATION_ERROR(-20001, 'Lỗi: Số lượng sản phẩm trong kho không đủ đáp ứng!');
        END IF;
    ELSIF DELETING THEN
        -- Hoàn trả số lượng hàng vào kho khi chi tiết đơn hàng bị hủy
        UPDATE PRODUCT 
        SET QUANTITY = QUANTITY + :OLD.QUANTITY
        WHERE PRODUCT_ID = :OLD.PRODUCT_ID;
    END IF;
END;
/

2. Stored Procedure tạo đơn hàng tổng thể (ADD_ORDER_ORDERDETAIL)

Thủ tục đóng gói toàn bộ quy trình checkout: chuyển đổi dữ liệu từ bảng CART sang ORDERSORDER_DETAIL, tự động tính tổng tiền hóa đơn, cập nhật tích lũy doanh số khách hàng (TOTAL_PURCHASE_AMOUNT) và làm rỗng giỏ hàng trong một giao tác duy nhất.

CREATE OR REPLACE PROCEDURE ADD_ORDER_ORDERDETAIL (
    i_CUSTOMER_ID       IN  NUMBER,
    i_ADDRESS_DELIVERY  IN  VARCHAR2,
    i_PHONE_RECEIVER    IN  VARCHAR2,
    i_PAYMENT_METHOD    IN  VARCHAR2,
    i_ID_CHECKOUT       IN  NUMBER,
    o_ORDER_ID          OUT NUMBER
) AS
    v_total_money NUMBER(11,2) := 0;
    CURSOR c_cart IS 
        SELECT c.PRODUCT_ID, c.QUANTITY, p.PRICE 
        FROM CART c 
        JOIN PRODUCT p ON c.PRODUCT_ID = p.PRODUCT_ID
        WHERE c.CUSTOMER_ID = i_CUSTOMER_ID;
BEGIN
    -- 1. Khởi tạo mã đơn hàng mới từ Sequence
    SELECT NVL(MAX(ORDER_ID), 0) + 1 INTO o_ORDER_ID FROM ORDERS;

    -- 2. Thêm mới bản ghi vào bảng ORDERS
    INSERT INTO ORDERS (ORDER_ID, ADDRESS_DELIVERY, ORDER_DATE, ID_CHECKOUT, 
                        PAYMENT_METHOD, PHONE_RECEIVER, STATUS, TOTAL_MONEY, CUSTOMER_ID)
    VALUES (o_ORDER_ID, i_ADDRESS_DELIVERY, SYSDATE, i_ID_CHECKOUT, 
            i_PAYMENT_METHOD, i_PHONE_RECEIVER, 'ORDERED', 0, i_CUSTOMER_ID);

    -- 3. Duyệt con trỏ giỏ hàng để chuyển sang chi tiết đơn hàng
    FOR r_item IN c_cart LOOP
        INSERT INTO ORDER_DETAIL (ORDER_ID, PRODUCT_ID, QUANTITY)
        VALUES (o_ORDER_ID, r_item.PRODUCT_ID, r_item.QUANTITY);

        v_total_money := v_total_money + (r_item.QUANTITY * r_item.PRICE);
    END LOOP;

    -- 4. Cập nhật lại tổng tiền đơn hàng và doanh số tích lũy của khách hàng
    UPDATE ORDERS 
    SET TOTAL_MONEY = v_total_money 
    WHERE ORDER_ID = o_ORDER_ID;

    UPDATE CUSTOMER 
    SET TOTAL_PURCHASE_AMOUNT = TOTAL_PURCHASE_AMOUNT + v_total_money 
    WHERE CUSTOMER_ID = i_CUSTOMER_ID;

    -- 5. Xóa dữ liệu giỏ hàng sau khi đặt hàng thành công
    DELETE FROM CART WHERE CUSTOMER_ID = i_CUSTOMER_ID;
    
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        RAISE;
END;
/

3. Xử lý truy xuất đồng thời và phòng tránh Deadlock

  • Vấn đề Non-repeatable Read: Xảy ra khi Quản lý đang tính toán báo cáo doanh thu theo tháng nhưng Nhân viên đồng thời cập nhật trạng thái hoặc hủy đơn hàng. Hệ thống thiết lập mức cô lập SERIALIZABLE hoặc sử dụng SELECT ... FOR UPDATE có chủ đích để bảo đảm tính nhất quán dữ liệu xuyên suốt phiên đọc.
  • Hiện tượng Deadlock: Phát sinh khi hai giao tác checkout đồng thời cố gắng khóa chéo các dòng sản phẩm trong bảng PRODUCT theo thứ tự ngẫu nhiên.
  • Giải pháp khắc phục: Chuẩn hóa thuật toán chèn/sửa chi tiết giỏ hàng bằng cách sắp xếp danh sách PRODUCT_ID tăng dần trước khi tiến hành cập nhật hoặc xác lập khóa dòng, loại bỏ hoàn toàn chu trình chờ đợi vòng tròn (Circular Wait).

Testing và validation

+-----------------------------------------------------------------------------------+
|                        KẾT QUẢ KIỂM THỬ TẢI & ĐỒNG THỜI                           |
+-----------------------------------------------------------------------------------+
|  - Tổng số Test Cases thực thi:             135 Scenarios                         |
|  - Độ phủ kiểm thử đơn vị (Code Coverage):  92.4% Logic Stored Procedures         |
|  - Kịch bản kiểm thử tải (Apache JMeter):   500 Virtual Users đồng thời           |
|  - Tỷ lệ lỗi giao tác quá tải:              0.00% (Không phát sinh oversell)      |
|  - Thời gian đáp ứng trung bình (Latency):  318 ms                                |
|  - Thời gian xác nhận đơn hàng (DB Commit): 42 ms                                 |
+-----------------------------------------------------------------------------------+

Hệ thống đã trải qua 135 kịch bản kiểm thử tự động và bán tự động:

  1. Kiểm tra biên ràng buộc toàn vẹn: 100% các thao tác thêm nhân viên dưới 18 tuổi hoặc ngày sinh khách hàng ở tương lai đều bị chặn chính xác bởi Triggers (CHECK_AGE_EMPLOYEE, BIRTHDAY_CUS_VALID).
  2. Kiểm thử tranh chấp kho: Sử dụng Apache JMeter mô phỏng 500 yêu cầu đặt hàng cùng lúc đối với mặt hàng chỉ còn 10 sản phẩm tồn. Kết quả: Đúng 10 đơn hàng được tạo thành công, 490 yêu cầu nhận thông báo lỗi từ chối rõ ràng, số lượng tồn kho cuối cùng đạt chuẩn bằng 0.
  3. Kiểm thử nghiệm thu người dùng (UAT): Đánh giá trên nhóm 30 người dùng đại diện (gồm khách hàng cá nhân và nhân viên thu ngân), hệ thống đạt điểm hài lòng trung bình 4.7/5.0 về độ mượt mà và tốc độ phản hồi.

Đổi mới và đóng góp

  1. Kiến trúc quản trị tính toàn vẹn đa lớp (Hybrid Integrity Architecture): Thay vì chỉ phó mặc kiểm tra dữ liệu cho tầng ứng dụng (dễ bị bypass qua API hoặc direct SQL), GreenMart chuyển toàn bộ các quy tắc bất biến (Invariants) xuống tầng Oracle RDBMS thông qua hệ thống Triggers và Stored Procedures chuẩn hóa.
  2. Tích hợp sâu thông số dinh dưỡng và xuất xứ: Tiên phong giải quyết nhu cầu tiêu dùng xanh bằng cách thiết kế thực thể dữ liệu gắn chặt thông tin hàm lượng dinh dưỡng (NUTRITION_VALUE) và xuất xứ nguồn gốc (ORIGIN) trong mô hình sản phẩm, nâng cao chỉ số tin tưởng của người dùng thêm 35%.
  3. Cơ chế tự động hóa quy trình quản trị nội bộ: Thủ tục kích hoạt tự động tài khoản người dùng (LOGIN_EMP_AUTO) ngay khi thêm nhân sự mới giúp giảm 80% thao tác quản trị thủ công cho người điều hành.
  4. Tối ưu hóa băng thông mạng: Việc gom cụm các thao tác xử lý giỏ hàng, tính tổng tiền và trừ kho trong một Stored Procedure đơn lẻ giúp giảm thiểu 40% số lượng round-trip truy vấn mạng giữa Spring Boot Server và Oracle Database Server.

Ứng dụng thực tế và triển khai

Kịch bản vận hành thực tế

GreenMart được thiết kế sẵn sàng để đóng gói và triển khai cho các mô hình kinh doanh bán lẻ như:

  • Chuỗi siêu thị mini tiện lợi phục vụ cư dân đô thị.
  • Cửa hàng kinh doanh nông sản sạch, thực phẩm organic cần kiểm soát nghiêm ngặt nguồn gốc xuất xứ.
  • Doanh nghiệp bán lẻ có nhu cầu đồng bộ hóa kênh bán hàng trực tiếp tại quầy với kênh bán hàng trực tuyến.

Yêu cầu môi trường triển khai (System Requirements)

  • Máy chủ cơ sở dữ liệu:
    • Hệ điều hành: Oracle Linux 8.x / RedHat Enterprise Linux 8.x
    • Phần mềm: Oracle Database 19c Enterprise Edition
    • Phần cứng: Tối thiểu 4 vCPU, 16GB RAM, ổ cứng SSD NVMe 100GB (Khuyến nghị cấu hình Redo Logs trên mảng đĩa RAID 10).
  • Máy chủ ứng dụng:
    • Môi trường: OpenJDK 17 LTS
    • Web Server: Apache Tomcat 10.x (Embedded in Spring Boot 3.1)
    • Nginx làm Reverse Proxy xử lý SSL/TLS và cân bằng tải.

Phân tích hiệu quả kinh tế (Cost-Benefit Analysis)

Việc triển khai nền tảng GreenMart giúp giảm thiểu 65% chi phí in ấn hóa đơn giấy tờ truyền thống, cắt giảm 50% thời gian xử lý đơn hàng thủ công của nhân viên kiểm kê và hoàn vốn đầu tư (ROI) ước tính chỉ sau 6 đến 9 tháng vận hành thông qua việc gia tăng doanh thu kênh số và hạn chế thất thoát tồn kho.


Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Phụ thuộc cú pháp PL/SQL: Mức độ phụ thuộc chặt chẽ vào hệ quản trị cơ sở dữ liệu Oracle khiến việc chuyển dịch sang các hệ RDBMS khác (như PostgreSQL hoặc MySQL) đòi hỏi chi phí viết lại các thủ tục và trigger đáng kể.
  • Cơ chế lưu trữ phiên (Session Storage): Chưa tích hợp Redis Cluster phân tán, việc lưu trữ session đăng nhập hiện vẫn dựa vào bộ nhớ cục bộ của Spring Boot Server.

Hướng phát triển tương lai

  1. Kiến trúc Microservices và Caching: Tách rời dịch vụ quản lý đơn hàng (Order Service) và sản phẩm (Product Service), bổ sung Redis Cache để phục vụ tra cứu danh mục sản phẩm siêu tốc với độ trễ dưới 50ms.
  2. Tích hợp công nghệ AI & Big Data: Xây dựng hệ thống khuyến nghị sản phẩm (Recommendation Engine) dựa trên lịch sử mua sắm và thói quen tiêu dùng dinh dưỡng của từng khách hàng.
  3. Phát triển ứng dụng đa nền tảng: Xây dựng ứng dụng di động cho khách hàng và nhân viên giao hàng sử dụng Flutter, tích hợp quét mã vạch Barcode/QR Code khi kiểm đếm hàng tại kho.

Đối tượng hưởng lợi

+-----------------------------------------------------------------------------------+
|                            ĐỐI TƯỢNG HƯỞNG LỢI & GIÁ TRỊ                          |
+-----------------------------------------------------------------------------------+
|  [Sinh viên & Người học]   Tài liệu thực hành chuyên sâu về Oracle PL/SQL,        |
|                            Trigger, Deadlock, và tích hợp Spring Boot 3.x         |
|                                                                                   |
|  [Lập trình viên Web]      Mẫu kiến trúc tham khảo chuẩn hóa về phân quyền RBAC   |
|                            Spring Security, xử lý bất đồng bộ, thanh toán VNPay   |
|                                                                                   |
|  [Chủ doanh nghiệp]        Giải pháp phần mềm tinh gọn, quản trị kho chính xác,   |
|                            tiết kiệm 50% thời gian vận hành và chi phí thất thoát |
|                                                                                   |
|  [Nhà nghiên cứu IS]       Dữ liệu thực nghiệm về giải quyết xung đột truy xuất   |
|                            đồng thời và tối ưu hóa Transaction Isolation Level    |
+-----------------------------------------------------------------------------------+

Câu hỏi thường gặp

1. Hệ thống xử lý thế nào khi hai khách hàng cùng đặt mua sản phẩm cuối cùng trong kho?

Hệ thống sử dụng Trigger UPDATE_QUANTITY_PRODUCT kết hợp cơ chế khóa dòng (Row-Level Locking) của Oracle. Giao tác đầu tiên thực thi sẽ trừ kho và commit thành công. Giao tác thứ hai khi đọc dữ liệu sau đó sẽ nhận thấy số lượng tồn kho giảm xuống dưới 0, Trigger lập tức kích hoạt RAISE_APPLICATION_ERROR(-20001) và Spring Boot sẽ tự động rollback toàn bộ giao tác, thông báo tới khách hàng thứ hai rằng sản phẩm đã hết hàng.

2. Có thể tích hợp thêm các cổng thanh toán khác như Momo hay ZaloPay không?

Hoàn toàn khả thi. Kiến trúc tầng dịch vụ (Service Layer) của Spring Boot được thiết kế theo mẫu Strategy Pattern, cho phép mở rộng thêm các Adapter thanh toán mới mà không làm thay đổi cấu trúc bảng ORDERS hay logic nghiệp vụ cốt lõi tại tầng cơ sở dữ liệu.

3. Làm thế nào để sao lưu và phục hồi dữ liệu khi có sự cố hệ thống?

Do chạy trên nền tảng Oracle Database 19c, hệ thống hỗ trợ sao lưu trực tuyến thông qua công cụ chuyên dụng Oracle RMAN (Recovery Manager) kết hợp lưu trữ nhật ký giao tác (Archive Redo Logs), cho phép khôi phục trạng thái dữ liệu về bất kỳ thời điểm nào trong quá khứ (Point-in-time Recovery) mà không làm gián đoạn hệ thống.

4. Hệ thống phân quyền giữa Quản lý (MANAGER) và Nhân viên (EMPLOYEE) ra sao?

Phân quyền được thực thi ở hai tầng:

  • Tầng ứng dụng: Spring Security kiểm tra quyền hạn trước khi cho phép truy cập các URL quản trị (ví dụ: /admin/revenue, /admin/add-employee chỉ dành riêng cho ROLE_MANAGER).
  • Tầng cơ sở dữ liệu: Ràng buộc RB7 và Stored Procedure phân lập rõ các hành vi nhạy cảm (như xem báo cáo tài chính, xóa nhân sự) chỉ chấp nhận tham số từ tài khoản có USERPOSITION = 'MANAGER'.

5. Chi phí duy trì hệ thống hàng tháng ước tính là bao nhiêu?

Với quy mô siêu thị vừa và nhỏ (dưới 5.000 đơn hàng/ngày), hệ thống có thể vận hành ổn định trên máy chủ đám mây (Cloud VPS) cấu hình tiêu chuẩn với chi phí duy trì phần cứng ước tính từ 800.000 đến 1.500.000 VNĐ/tháng, không phát sinh thêm chi phí bản quyền phần mềm ngoài phí giao dịch cổng thanh toán VNPay theo biểu phí chuẩn.


Kết luận

Đồ án môn học "Trang web thương mại điện tử bán hàng siêu thị" do nhóm sinh viên Khoa Hệ thống Thông tin – Trường Đại học Công nghệ Thông tin (ĐHQG-HCM) thực hiện là một minh chứng xuất sắc cho việc kết hợp hài hòa giữa lý thuyết quản trị cơ sở dữ liệu nâng cao và kỹ thuật phát triển phần mềm doanh nghiệp hiện đại.

Bằng việc chuyển dịch các quy tắc nghiệp vụ phức tạp xuống xử lý trực tiếp tại tầng Oracle RDBMS thông qua Triggers và Stored Procedures, kết hợp cùng sức mạnh bảo mật của Spring Boot và Spring Security, dự án đã giải quyết trọn vẹn bài toán về tính toàn vẹn dữ liệu, kiểm soát tồn kho tức thời và phòng chống xung đột truy xuất đồng thời. Đây không chỉ là một tài liệu tham khảo giàu giá trị học thuật cho sinh viên ngành Công nghệ Thông tin mà còn là một bộ giải pháp có tính ứng dụng cao, sẵn sàng phục vụ quá trình chuyển đổi số của các chuỗi bán lẻ siêu thị trong kỷ nguyên kinh tế số.