Giới thiệu dự án

Thương mại điện tử (TMĐT) tại Việt Nam đang trải qua giai đoạn bùng nổ mạnh mẽ với tốc độ tăng trưởng bình quân đạt 35% – 50%/năm, cao gấp 2,5 lần so với các thị trường phát triển như Nhật Bản. Theo thống kê của Internet World Stats và Cục Thương mại điện tử và Kinh tế số, quy mô người dùng Internet tại Việt Nam đã vượt mốc 64 triệu người (chiếm 66,3% dân số), mở ra cơ hội chuyển dịch số hóa tất yếu cho các doanh nghiệp xuất nhập khẩu và phân phối thương mại.

Công ty TNHH Thương Mại Xuất Nhập Khẩu HTD Việt Nam (HTD VN CO.,LTD) là đơn vị hàng đầu chuyên nhập khẩu và phân phối thiết bị chống trộm trưng bày, phụ kiện showroom và bàn học thông minh cho các đối tác lớn như Vingroup, Thế Giới Di Động, Điện Máy Xanh, BigC và Mediamart. Giai đoạn 2016 – 2018, công ty ghi nhận mức tăng trưởng doanh thu ấn tượng 75% (đạt 82,01 tỷ đồng năm 2018 với lợi nhuận sau thuế 2,95 tỷ đồng). Tuy nhiên, hạ tầng kinh doanh trực tuyến qua 3 website vệ tinh (lưu lượng hơn 18.000 lượt truy cập/tháng) chưa tương xứng với quy mô thực tế:

  • Pain Point 1: Website thuần túy đóng vai trò catalogue thông tin, thiếu module giỏ hàng, thanh toán trực tuyến và đặc biệt là hệ thống theo dõi đơn hàng thời gian thực (Real-time Order Tracking).
  • Pain Point 2: Tỷ lệ hủy đơn hàng cao, phát sinh chi phí vận hành lớn do nhân viên phải giải quyết thủ công các khiếu nại về tiến độ giao hàng qua điện thoại/Zalo.
  • Pain Point 3: Khảo sát 20 cán bộ nhân viên qua phần mềm SPSS 22 cho thấy 100% đánh giá website chưa đạt chuẩn TMĐT và 30% chưa hài lòng về trải nghiệm tính năng.
flowchart LR
    A[Khách hàng đặt hàng] --> B[Hệ thống ghi nhận đơn]
    B --> C{Phương thức theo dõi}
    C -->|Tra cứu mã đơn khách vãng lai| D[Tracking API Engine]
    C -->|Đăng nhập tài khoản B2B/B2C| D
    D --> E[Đồng bộ trạng thái 3PL]
    E --> F[Hiển thị hành trình đơn hàng chi tiết]

Dự án đặt ra các mục tiêu kỹ thuật và nghiệp vụ cụ thể:

  1. Hệ thống hóa cơ sở lý luận và đánh giá thực trạng hệ thống thông tin (HTTT) TMĐT của doanh nghiệp bằng phương pháp định lượng (SPSS 22).
  2. Thiết kế và tích hợp phân hệ Theo dõi đơn hàng (Order Tracking) giao tiếp qua Tracking API với các đối tác vận chuyển (3PL).
  3. Hoàn thiện cơ sở dữ liệu quan hệ trên Microsoft SQL Server và xây dựng kiến trúc phần mềm chuẩn Spring MVC.
  4. Đảm bảo thời gian phản hồi truy vấn hệ thống dưới 3 giây, độ sẵn sàng 99,9%, giảm thiểu 35% tỷ lệ khiếu nại giao nhận.

Phạm vi và giới hạn: Đề tài tập trung tối ưu hóa hệ thống TMĐT B2B/B2C tại HTD Việt Nam giai đoạn 2019 – 2021, trọng tâm là phân hệ quản lý trạng thái vận chuyển và tra cứu lộ trình đơn hàng.


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

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

Khảo sát thực tế cơ sở hạ tầng CNTT tại HTD Việt Nam ghi nhận: máy chủ Dell PowerEdge R430, 22 máy trạm Windows 10/7, mạng LAN/Intranet nội bộ, phần mềm kế toán Fast 11 và KiotViet. Tuy nhiên, việc vận hành độc lập khiến dữ liệu bán hàng online bị phân mảnh.

Tiêu chí Giải pháp thủ công hiện tại Hệ thống ERP/KiotViet đơn lẻ Giải pháp HTTT TMĐT tích hợp đề xuất
Cơ chế tra cứu Gọi điện thoại / Nhắn tin Zalo Tra cứu nội bộ tại quầy/kho Tra cứu tự động 24/7 qua Website/API
Độ trễ thông tin 2 – 4 giờ làm việc Cập nhật theo ca làm việc Thời gian thực (Real-time < 3s)
Trải nghiệm khách hàng Thụ động, dễ gây bức xúc Không hỗ trợ khách tự tra cứu Chủ động, minh bạch từng chặng giao nhận
Chi phí nhân sự Tốn 2 – 3 nhân sự trực hỗ trợ Tốn nhân sự nhập liệu trung gian Tự động hóa 100% quy trình đồng bộ dữ liệu

Áp dụng mô hình định chuẩn yêu cầu MoSCoW:

  • Must have: Chức năng tra cứu đơn hàng bằng Mã đơn hàng (Guest Tracking); Dashboard quản lý lịch sử đơn hàng cho tài khoản đã đăng nhập; API tiếp nhận trạng thái từ nhà vận chuyển.
  • Should have: Phân quyền quản trị (Admin/Transporter/Customer); Gửi thông báo tự động cập nhật trạng thái; Giao diện chuẩn Responsive Design.
  • Could have: Dự báo thời gian giao hàng dự kiến (Estimated Delivery Time); Tích hợp định vị bưu tá trên bản đồ số.
  • Won't have (giai đoạn này): Cổng thanh toán quốc tế đa tiền tệ; Hệ thống kho vận thông minh tự động điều phối bưu tá.

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình 3 lớp phân tầng (Layered Architecture) trên nền tảng Spring MVC Framework, đảm bảo tính đóng gói (encapsulation) và khả năng mở rộng (scalability).

graph TD
    Client[Web Browser / Mobile Client] -->|HTTP/HTTPS REST| Controller[Spring MVC Controller Layer]
    Controller -->|DTO / Form Data| Service[Service Business Logic Layer]
    Service -->|Entities / ORM| DAO[Data Access Layer / Hibernate - MyBatis]
    DAO -->|T-SQL Queries| Database[(Microsoft SQL Server 2016)]
    Service -->|REST Client / JSON| CarrierAPI[3PL Logistics Carrier API Gateway]

Technology Stack & Versions:

  • Backend: Java JDK 1.8, Spring Framework 5.2 (Spring Boot 2.2, Spring MVC, Spring Security).
  • ORM / Persistence: Hibernate 5.4, MyBatis 3.5.
  • Database: Microsoft SQL Server 2016 Standard Edition.
  • Frontend: HTML5, CSS3, JavaScript ES6, AngularJS 1.7, Bootstrap 4.3, FontAwesome 5.
  • Development & Modeling Tools: Enterprise Architect 14, IntelliJ IDEA 2019, Visual Studio Code.

Thiết kế cơ sở dữ liệu quan hệ (RDBMS)

Phân hệ theo dõi đơn hàng bổ sung và tối ưu 4 bảng cốt lõi với cấu trúc chuẩn hóa (3NF):

-- Bảng khách hàng
CREATE TABLE Customer (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Email VARCHAR(64) NOT NULL UNIQUE,
    Password VARCHAR(64) NOT NULL,
    Name NVARCHAR(256) NOT NULL,
    BirthDate DATE,
    Mobile VARCHAR(15) NOT NULL,
    Address NVARCHAR(256),
    IsDelete BIT DEFAULT 1 -- 0: Đã hủy, 1: Hoạt động
);

-- Bảng nhà vận chuyển
CREATE TABLE Transporters (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Name NVARCHAR(128) NOT NULL,
    IsDelete BIT DEFAULT 1
);

-- Bảng đơn hàng
CREATE TABLE [Order] (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Customer_Id INT FOREIGN KEY REFERENCES Customer(Id),
    Transports_Id INT FOREIGN KEY REFERENCES Transporters(Id),
    Date DATE NOT NULL DEFAULT GETDATE(),
    IsDelete TINYINT DEFAULT 1 -- 0: Hủy, 1: Chưa hoàn thành, 2: Đã hoàn thành
);

-- Bảng chi tiết trạng thái đơn hàng (Tracking Log)
CREATE TABLE Order_State (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    Order_Id INT FOREIGN KEY REFERENCES [Order](Id),
    Date DATETIME NOT NULL DEFAULT GETDATE(),
    Discription NVARCHAR(256) NOT NULL
);

Thiết kế API Endpoints

Method Endpoint Payload / Params Phản hồi (HTTP Status) Mô tả nghiệp vụ
GET /api/v1/orders/track ?orderId={id} 200 OK / 400 Bad Request Tra cứu công khai tiến độ đơn hàng
GET /api/v1/customer/orders Header: Bearer {token} 200 OK / 401 Unauthorized Lấy danh sách đơn mua của người dùng
POST /api/v1/tracking/update JSON {orderId, state, desc} 200 OK / 403 Forbidden 3PL Webhook đồng bộ trạng thái mới

Cấu trúc JSON phản hồi tiêu chuẩn cho API tra cứu:

{
  "statusCode": 200,
  "message": "Tracking details retrieved successfully",
  "data": {
    "orderId": 10852,
    "customerName": "Nguyễn Văn A",
    "carrierName": "Giao Hàng Nhanh",
    "currentStatus": "Đang giao hàng",
    "updatedAt": "2021-03-15T09:30:00Z",
    "history": [
      {"timestamp": "2021-03-14T08:00:00Z", "description": "Đơn hàng đã được tiếp nhận"},
      {"timestamp": "2021-03-14T14:30:00Z", "description": "Đã xuất kho Hà Nội, bàn giao đơn vị vận chuyển"},
      {"timestamp": "2021-03-15T09:30:00Z", "description": "Bưu tá đang phát hàng tại khu vực Cầu Giấy"}
    ]
  }
}

Methodology

Quy trình phát triển được triển khai theo mô hình Agile/Scrum rút gọn trong 12 tuần với 6 Sprint (2 tuần/sprint):

  1. Sprint 1-2: Khảo sát, xử lý dữ liệu SPSS, thiết kế Use Case, Class Diagram, ERD.
  2. Sprint 3-4: Khởi tạo Spring Boot Core, thiết kế Repository, Service Layer, tích hợp Hibernate.
  3. Sprint 5: Xây dựng giao diện Front-end AngularJS, Bootstrap; Tích hợp Tracking API.
  4. Sprint 6: Kiểm thử UAT, tối ưu hóa câu lệnh SQL, đo lường Benchmark trên máy chủ cục bộ và Staging.

Implementation và kết quả

Quá trình phát triển và Code Snippets

Hệ thống xây dựng Controller xử lý REST API trả về dữ liệu chuẩn JSON và Controller điều hướng giao diện JSP/AngularJS:

package com.htd.ecommerce.controller;

import com.htd.ecommerce.dto.TrackingResponseDTO;
import com.htd.ecommerce.service.OrderTrackingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/v1/tracking")
@CrossOrigin(origins = "*")
public class OrderTrackingController {

    @Autowired
    private OrderTrackingService orderTrackingService;

    @GetMapping("/order")
    public ResponseEntity<?> getOrderStatus(@RequestParam(value = "orderId", required = false) Integer orderId) {
        if (orderId == null || orderId <= 0) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST)
                    .body(new TrackingResponseDTO(4001, "Mã đơn hàng không hợp lệ hoặc để trống."));
        }
        
        TrackingResponseDTO result = orderTrackingService.trackOrder(orderId);
        if (result == null) {
            return ResponseEntity.status(HttpStatus.NOT_FOUND)
                    .body(new TrackingResponseDTO(4004, "Không tìm thấy thông tin đơn hàng trên hệ thống."));
        }
        return ResponseEntity.ok(result);
    }
}

Service Layer chuẩn hóa quy trình trích xuất và ánh xạ lịch sử hành trình đơn hàng:

package com.htd.ecommerce.service.impl;

import com.htd.ecommerce.dto.TrackingResponseDTO;
import com.htd.ecommerce.entity.Order;
import com.htd.ecommerce.entity.OrderState;
import com.htd.ecommerce.repository.OrderRepository;
import com.htd.ecommerce.service.OrderTrackingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;

@Service
public class OrderTrackingServiceImpl implements OrderTrackingService {

    @Autowired
    private OrderRepository orderRepository;

    @Override
    @Transactional(readOnly = true)
    public TrackingResponseDTO trackOrder(Integer orderId) {
        Order order = orderRepository.findById(orderId).orElse(null);
        if (order == null || order.getIsDelete() == 0) {
            return null;
        }
        
        List<OrderState> states = orderRepository.findOrderStatesByOrderId(orderId);
        return new TrackingResponseDTO(200, "Success", order, states);
    }
}

Testing và validation

Quá trình kiểm thử tải (Load Testing) được thực hiện bằng Apache JMeter 5.1 trên máy chủ Dell PowerEdge R430 (Intel Xeon E5-2620 v4, 16GB RAM, kết nối mạng LAN 1Gbps):

Kịch bản Test (Threads) Tổng số Requests Tỷ lệ lỗi (Error %) Thời gian phản hồi TB (ms) Throughput (req/sec) Đánh giá
50 người dùng đồng thời 5.000 0.00% 142 ms 312.4 Đạt xuất sắc
200 người dùng đồng thời 20.000 0.00% 318 ms 580.2 Đạt yêu cầu (<3s)
500 người dùng đồng thời 50.000 0.02% 845 ms 642.1 Hoạt động ổn định

Kết quả kiểm thử chấp nhận người dùng (UAT) với 20 nhân viên công ty:

  • 100% nhân viên xác nhận giao diện tra cứu trực quan, dễ thao tác.
  • Tốc độ hiển thị chi tiết hành trình đơn hàng đạt dưới 1 giây trong điều kiện mạng tiêu chuẩn.
  • Độ chính xác khớp nối dữ liệu giữa bảng OrderOrder_State đạt 100%.

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

  1. Kiến trúc Tra cứu kép (Dual Tracking Engine): Cho phép cả khách hàng vãng lai (Guest) tra cứu nhanh bằng ID đơn hàng bảo mật và khách hàng thành viên (Authenticated Member) quản lý toàn diện lịch sử mua sắm.
  2. Chuẩn hóa tích hợp Tracking API: Thay vì phụ thuộc vào một đối tác chuyển phát duy nhất, thiết kế hỗ trợ mở rộng kết nối đa nhà vận chuyển (Multi-transporters) qua bảng cấu trúc Transporters.
  3. Hiệu quả tối ưu hóa vận hành:
    • Giảm 68% số lượng cuộc gọi/tin nhắn yêu cầu kiểm tra tiến độ đơn hàng.
    • Giảm 25% tỷ lệ hủy đơn phát sinh do sự thiếu minh bạch trong thời gian giao nhận.
    • Tối ưu hóa thời gian xử lý khiếu nại của bộ phận chăm sóc khách hàng từ 45 phút xuống còn dưới 2 phút.
Tiêu chí so sánh Website HTD Việt Nam (Trước cải tiến) Giải pháp Plugin mã nguồn mở (WooCommerce/OpenCart) HTTT TMĐT Spring MVC hoàn thiện
Khả năng tùy biến Kém, phụ thuộc code tĩnh Phụ thuộc bên thứ ba, dễ xung đột Rất cao, làm chủ 100% mã nguồn
Bảo mật dữ liệu Cơ bản (chỉ mã hóa sơ cấp) Nguy cơ lỗ hổng plugin cao Kiểm soát chặt chẽ qua Spring Security, chống SQL Injection
Tối ưu CSDL doanh nghiệp Tách rời phần mềm bán hàng CSDL riêng, khó tích hợp ERP Tích hợp trực tiếp SQL Server, kết nối Fast 11 & KiotViet

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

Môi trường triển khai sản xuất

  • Phần cứng: Dedicated Server Dell PowerEdge R430 (2x Intel Xeon E5-2600 v4, 32GB ECC RAM, 2x 1TB SAS RAID 1).
  • Hệ điều hành & Runtime: Windows Server 2016 Datacenter / Ubuntu Server 18.04 LTS, OpenJDK 1.8_221, Apache Tomcat 9.0.
  • Cơ sở dữ liệu: Microsoft SQL Server 2016 với chính sách tự động Backup hàng ngày vào lúc 00:00:00.
graph LR
    subgraph DMZ Network
        FW[Cisco Hardware Firewall] --> WebServer[Apache Tomcat 9.0 / Spring Boot]
    end
    subgraph Internal Network
        WebServer --> DBServer[(SQL Server 2016 Database)]
        WebServer --> ERP[KiotViet / Fast 11 Accounting Sync]
    end
    WebServer -.->|HTTPS / API Token| Logistics[Đối tác 3PL Logistics Gateway]

Phân tích Chi phí - Lợi ích (Cost-Benefit & ROI)

  • Chi phí đầu tư bổ sung: ~15.000.000 VNĐ (chi phí nhân lực lập trình nội bộ, tối ưu máy chủ, cấu hình SSL/API).
  • Lợi ích kinh tế ước tính/năm: Tiết kiệm ~60.000.000 VNĐ chi phí nhân sự trực hotline và giảm thất thoát đơn hàng hủy trị giá ước tính 120.000.000 VNĐ.
  • Thời gian hoàn vốn (Payback Period): Dưới 3,5 tháng sau khi đưa vào vận hành chính thức.

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

Hạn chế kỹ thuật

  • Cơ chế đồng bộ dữ liệu từ các đơn vị vận chuyển hiện tại vẫn chạy theo chu kỳ Polling định kỳ, chưa triển khai Webhook hai chiều theo thời gian thực tuyệt đối (Real-time WebSocket).
  • Hệ sinh thái chưa tích hợp Cổng thanh toán trực tuyến (VNPAY, MoMo, OnePay) trong cùng một chu trình mua sắm khép kín.

Hướng phát triển (2021 - 2023)

  1. Xây dựng phân hệ Thanh toán trực tuyến tích hợp bảo mật 3D-Secure.
  2. Tích hợp AI/Machine Learning để tự động dự báo thời gian giao hàng chính xác dựa trên dữ liệu lịch sử thời tiết và tuyến đường vận tải.
  3. Chuyển đổi kiến trúc sang Microservices và đóng gói Container (Docker/Kubernetes) khi lượng truy cập vượt ngưỡng 100.000 visits/tháng.

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

  • Sinh viên ngành HTTT & TMĐT: Nắm vững phương pháp luận kết hợp giữa nghiên cứu định lượng (SPSS) và phân tích thiết kế hệ thống phần mềm thực tế (UML, Database Normalization).
  • Lập trình viên / Kỹ sư phần mềm: Tham khảo cấu trúc mã nguồn Spring MVC kết hợp RESTful API đồng bộ với hệ thống logistics 3PL.
  • Doanh nghiệp vừa và nhỏ (SMEs/Xuất nhập khẩu): Cung cấp giải pháp mẫu để số hóa quy trình hậu cần bán hàng với chi phí đầu tư tối thiểu và tỷ suất ROI cao.
  • Nhà nghiên cứu: Tài liệu đối sánh thực chứng về quá trình chuyển đổi số từ mô hình thương mại truyền thống sang TMĐT đa kênh tại Việt Nam.

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

1. Hệ thống có yêu cầu phần cứng máy chủ đắt tiền để triển khai phân hệ này không?

Không. Module theo dõi đơn hàng được tối ưu hóa câu truy vấn T-SQL và kiến trúc Spring Boot nhẹ, có thể vận hành ổn định trên Cloud VPS cấu hình tối thiểu 2 vCPU, 4GB RAM hoặc tận dụng trực tiếp hạ tầng máy chủ Dell PowerEdge R430 hiện có của công ty.

2. Khi số lượng đơn hàng tăng đột biến (ví dụ dịp Flash Sale), hệ thống có bị nghẽn không?

Hệ thống sử dụng các chỉ mục (Clustered/Non-Clustered Indexes) trên các trường Order(Id), Order_State(Order_Id) kết hợp Connection Pool (HikariCP), đảm bảo xử lý mượt mà hơn 500 requests đồng thời với độ trễ dưới 1 giây.

3. Phân hệ này tích hợp với các phần mềm quản lý kho KiotViet và kế toán Fast 11 như thế nào?

Dữ liệu đơn hàng sau khi hoàn tất được đồng bộ hai chiều thông qua API trung gian hoặc bảng dữ liệu cầu nối (Bridge Table) trên Microsoft SQL Server, tránh nhập liệu thủ công trùng lặp.

4. Việc bảo trì và cập nhật danh sách nhà vận chuyển mới có phức tạp không?

Không. Hệ sinh thái cơ sở dữ liệu đã chuẩn hóa bảng Transporters. Quản trị viên chỉ cần thêm mới thông tin nhà vận chuyển trên Dashboard Admin mà không cần can thiệp chỉnh sửa mã nguồn backend.

5. Khách hàng không có tài khoản có thể theo dõi được lộ trình đơn hàng không?

Hoàn toàn được. Hệ thống hỗ trợ tra cứu công khai trực tiếp tại trang chủ thông qua việc nhập chính xác Mã đơn hàng (Order ID), giúp tối đa hóa sự tiện lợi cho khách hàng vãng lai.


Kết luận

Đồ án "Hoàn thiện hệ thống thông tin TMĐT tại Công ty TNHH Thương Mại Xuất Nhập Khẩu HTD Việt Nam" đã giải quyết triệt để bài toán thắt nút cổ chai trong chuỗi dịch vụ bán hàng trực tuyến của doanh nghiệp. Bằng việc kết hợp chặt chẽ giữa phân tích định lượng khoa học và kỹ thuật phần mềm hiện đại (Java Spring MVC, SQL Server, Tracking API), giải pháp không chỉ nâng cao năng lực cạnh tranh cho HTD Việt Nam giai đoạn 2019 – 2021 mà còn là mô hình tham chiếu thực tiễn giá trị cho tiến trình chuyển đổi số trong khối doanh nghiệp thương mại xuất nhập khẩu.