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 tăng trưởng vượt bậc với quy mô thị trường năm 2018 đạt 2,26 tỷ USD, tăng gần 30% so với năm 2017 và đứng trong top 6 thị trường TMĐT phát triển nhanh nhất thế giới. Song song với sự bùng nổ của kinh tế số, nhận thức của người tiêu dùng về sức khỏe và an toàn thực phẩm cũng gia tăng mạnh mẽ. Theo khảo sát của Nielsen, hơn 47% người tiêu dùng Việt Nam đặc biệt ưu tiên sử dụng thực phẩm tươi, sạch và có nguồn gốc tự nhiên. Dù diện tích đất nông nghiệp an toàn cả nước đã đạt hơn 43.010 ha (theo Ipsos Business Consulting), chuỗi cung ứng nông sản sạch từ trang trại tới bàn ăn vẫn gặp điểm nghẽn lớn ở khâu phân phối và tiếp cận người tiêu dùng đầu cuối.

+-----------------------------------------------------------------------------------+
| THỰC TRẠNG PHÂN PHỐI NÔNG SẢN SẠCH                                                |
|                                                                                   |
|  [Chuỗi cung ứng truyền thống]                                                    |
|  Nông trại --> Thương lái --> Chợ đầu mối --> Cửa hàng lẻ --> Người tiêu dùng     |
|  (Đội giá 35-45%, khó kiểm soát nguồn gốc, tỷ lệ hư hao cao 15-20%)              |
|                                                                                   |
|  [Mô hình E-Commerce Tomita Mart (Đề xuất)]                                       |
|  Chuỗi Tomita Mart (Kho kiểm định) ===== Website TMĐT =====> Người tiêu dùng      |
|  (Cắt giảm trung gian, thông tin minh bạch, giao nhận tối ưu trong 2h)            |
+-----------------------------------------------------------------------------------+

Cửa hàng nông sản sạch Tomita (Tomita Mart) sở hữu nguồn cung cấp thực phẩm an toàn chất lượng cao nhưng nền tảng số ban đầu còn sơ sài, chỉ dừng lại ở mức độ website giới thiệu tĩnh, chưa có hệ thống xử lý giao dịch trực tuyến, quản lý tồn kho và chăm sóc khách hàng tự động. Điều này dẫn tới các vấn đề cụ thể:

  • Tỷ lệ chuyển đổi thấp: Khách hàng gặp khó khăn khi tra cứu tồn kho, đơn giá theo khối lượng và đặt hàng tức thời.
  • Quy trình quản lý thủ công: Đơn hàng tiếp nhận qua điện thoại/tin nhắn dễ sai sót, thất lạc dữ liệu và mất nhiều nhân lực điều phối.
  • Thiếu tính minh bạch: Khách hàng không thể theo dõi lịch sử đơn hàng, quy cách đóng gói và thông tin nhà cung ứng.

Đồ án tốt nghiệp "Xây dựng website thương mại điện tử cho cửa hàng nông sản sạch Tomita" do sinh viên Trần Thị Ngọc Anh thực hiện dưới sự hướng dẫn của TS. Phạm Minh Hoàn tại Viện Công nghệ Thông tin & Kinh tế số – Trường Đại học Kinh tế Quốc dân (hợp tác thực tập tại Công ty Cổ phần Truyền thông Văn Hóa Việt) tập trung giải quyết triệt để bài toán trên.

Mục tiêu cụ thể của dự án:

  1. Mục tiêu 1: Phân tích toàn diện quy trình nghiệp vụ bán lẻ nông sản sạch và thiết kế kiến trúc hệ thống E-commerce hiện đại.
  2. Mục tiêu 2: Xây dựng cơ sở dữ liệu quan hệ chuẩn hóa trên MySQL, tối ưu hóa cho cấu trúc danh mục đa cấp và quản lý đa thuộc tính sản phẩm.
  3. Mục tiêu 3: Phát triển website thương mại điện tử hoàn chỉnh trên nền tảng PHP (Laravel Framework) kết hợp Vue.js, cung cấp đầy đủ cổng thanh toán trực tuyến (VNPay, PayPal, Ship COD).
  4. Mục tiêu 4: Xây dựng hệ thống quản trị nội dung (CMS) tập trung cho phép quản lý đơn hàng, danh mục, sản phẩm, tin tức, slide banner, SEO On-page và dữ liệu khách hàng theo thời gian thực.

Dự án giới hạn phạm vi triển khai cho chuỗi cửa hàng bán lẻ nông sản sạch Tomita phục vụ khách hàng B2C tại khu vực đô thị, xử lý quy trình từ đặt hàng đến điều phối giao vận, chưa bao gồm phân hệ quản lý kho vận đa tầng (WMS) cấp vù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 các giải pháp xây dựng website bán hàng hiện nay trên thị trường cho thấy sự phân hóa rõ rệt giữa các nền tảng mã nguồn mở dựng sẵn, SaaS và hệ thống may đo chuyên biệt:

Tiêu chí WordPress / WooCommerce Nền tảng SaaS (Haravan, Sapo) Nền tảng Laravel + Vue.js (Đề xuất)
Chi phí ban đầu & duy trì Thấp, chi phí plugin tăng dần Phí thuê bao hàng tháng (300k - 1tr/tháng) Chi phí tối ưu, tự chủ hạ tầng 100%
Khả năng tùy biến nghiệp vụ Thấp, phụ thuộc hook/plugin Rất thấp, bị đóng khung trong API Toàn diện, may đo đúng quy trình Tomita
Hiệu năng & Tối ưu Database Chậm khi vượt quá 10.000 SKU Phụ thuộc máy chủ nhà cung cấp Tối ưu index B-Tree, tốc độ truy vấn < 50ms
Bảo mật mã nguồn Nguy cơ bảo mật cao do plugin bên thứ 3 Nhà cung cấp nắm giữ Bảo mật cao qua Eloquent ORM & CSRF Token
Trải nghiệm tương tác Client Tải lại toàn bộ trang (Full Page Reload) Giao diện chuẩn, khó tùy biến sâu Linh hoạt, Reactive UI qua Vue.js component

Phân tích yêu cầu hệ thống theo mô hình MoSCoW:

  • Must-have (Bắt buộc phải có): Xác thực người dùng (Auth), duyệt danh mục phân cấp, giỏ hàng tương tác (Cart), quy trình đặt hàng và thanh toán đa kênh (Checkout), CMS quản trị sản phẩm, đơn hàng, người dùng.
  • Should-have (Cần có): Hệ thống đánh giá/bình luận sản phẩm, quản lý bài viết tin tức nông nghiệp, cấu hình tiền tệ, quản lý slide banner, tối ưu URL chuẩn SEO.
  • Could-have (Có thể có): Lọc nâng cao theo nhà cung cấp và đơn vị tính, tra cứu nhanh lịch sử đơn hàng bằng AJAX.
  • Won't-have (Chưa phát triển trong phiên bản hiện tại): Hệ thống gợi ý sản phẩm bằng AI, tích hợp chatbot tự động và kết nối trực tiếp API hãng vận chuyển thứ ba.

Thiết kế hệ thống

Hệ thống được thiết kế theo kiến trúc 3 lớp (3-Tier Architecture) dựa trên mô hình MVC (Model - View - Controller), đảm bảo tính module hóa và khả năng bảo trì:

graph TD
    Client[Client Tier: Web Browser / Mobile Browser] -->|HTTP/HTTPS Request| WebServer[Web Server: Nginx / Apache]
    WebServer --> Router[Laravel Routing Engine]
    Router --> Middleware[Middleware: Auth, CSRF, Session]
    Middleware --> Controller[Controllers: ProductController, OrderController, CartController]
    Controller --> Service[Business Logic & Service Layer]
    Service --> Model[Eloquent ORM Models]
    Model --> DB[(Database: MySQL 8.0 Engine InnoDB)]
    Controller --> View[Presentation Layer: Blade Engine + Vue.js Reactive Components]
    View --> Client

Technology Stack chi tiết của hệ thống:

  • Backend Framework: Laravel Framework 7.x (PHP 7.4/8.0).
  • Frontend Layer: Vue.js 2.6, Blade Template Engine, SCSS, Axios, Bootstrap 4.
  • Database Engine: MySQL 8.0 (Storage Engine: InnoDB, UTF-8 Unicode).
  • Development Tools & Environment: Visual Studio Code, XAMPP/Docker, Composer, NPM, Git.

Cơ sở dữ liệu được thiết kế chuẩn hóa bậc 3 (3NF) với 9 thực thể chính, giải quyết triệt để bài toán dư thừa dữ liệu và đảm bảo toàn vẹn tham chiếu:

+------------------------------------------------------------------------------------+
| SƠ ĐỒ QUAN HỆ CƠ SỞ DỮ LIỆU (DATABASE SCHEMA RELATIONSHIPS)                        |
|                                                                                    |
|  [NHACUNGCAP] 1 -------- n [SANPHAM] n -------- 1 [DONVI]                          |
|                               |     1                                              |
|                               |     |                                              |
|                               |     +---- n [CHITIETHOADON] n ---- 1 [HOADON]      |
|                               |                                        |     1     |
|                               +---------- n [DANHGIA]                  |     |     |
|                               |                |                       |     |     |
|  [DANHMUC] 1 --- n [DANHMUC]  |                | 1                     |     |     |
|     1               (_lft, _rgt)               |                       |     |     |
|     |                         |                |                       |     |     |
|     +--- n [BAIVIET]          +----------------+--- n [NGUOIDUNG] 1 ---+     |     |
|                                                             1                |     |
|                                                             +--- 1 [KHACHHANG]+     |
+------------------------------------------------------------------------------------+

Đặc tả các thực thể dữ liệu cốt lõi:

  1. SANPHAM (ID, title, code, description, content, thumbnail, image, price, origin_price, quantity, is_bestseller, is_hot, status, unit_id, supplier_id, created_by, updated_by, created_at, updated_at).
  2. DANHMUC (ID, title, description, content, status, _lft, _rgt, thumbnail, type, created_at, updated_at). Sử dụng cấu trúc Nested Set Model (_lft, _rgt) giúp truy vấn toàn bộ cây danh mục đa cấp chỉ bằng một câu lệnh SELECT duy nhất.
  3. HOADON (ID, customer_id, user_id, total, quantity, status, time_intend, created_by, updated_by, created_at, updated_at).
  4. CHITIETHOADON (ID, bill_id, product_id, quantity, price, total_price).
  5. NGUOIDUNG (ID, name, email, password, address, city, district, ward, phone, birthday, gender, status, avatar, level, created_at, updated_at).

Methodology

Dự án kết hợp giữa phương pháp luận phân tích truyền thống (Waterfall cho giai đoạn xác định mô hình dữ liệu, Use Case Diagram, Sequence Diagram) và phương pháp Agile/Scrum linh hoạt cho các vòng lặp phát triển giao diện và API.

Kế hoạch triển khai dự án trong 28 tuần thực tập:

  • Tuần 1 - 4: Khảo sát nghiệp vụ cửa hàng Tomita Mart, thu thập dữ liệu sản phẩm nông sản sạch, xây dựng tài liệu đặc tả yêu cầu phần mềm (SRS).
  • Tuần 5 - 10: Phân tích Use Case, vẽ Sequence Diagram, thiết kế cơ sở dữ liệu quan hệ (ERD) và dựng wireframe UI/UX.
  • Tuần 11 - 22: Lập trình Backend (Laravel RESTful Controllers, Migrations, Seeders), xây dựng giao diện người dùng và CMS quản trị với Vue.js.
  • Tuần 23 - 26: Kiểm thử hộp đen (Black-box testing), kiểm thử tích hợp (Integration testing), tối ưu hóa hiệu năng truy vấn và bảo mật.
  • Tuần 27 - 28: Triển khai thử nghiệm trên môi trường Staging, nghiệm thu và hoàn thiện đồ án tốt nghiệp.

Implementation và kết quả

Development process

Quá trình phát triển tập trung xây dựng kiến trúc code chuẩn mực tuân thủ PSR-12 cho PHP và Single-File Components (SFC) cho Vue.js.

Cấu trúc quan hệ Model và Migration trong Laravel Eloquent ORM:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $table = 'tbl_products';
    
    protected $fillable = [
        'title', 'code', 'description', 'content', 'thumbnail', 
        'image', 'price', 'origin_price', 'quantity', 
        'is_bestseller', 'is_hot', 'status', 'unit_id', 'supplier_id'
    ];

    // Quan hệ 1-N nghịch đảo: Một sản phẩm thuộc một đơn vị tính
    public function unit()
    {
        return $this->belongsTo(Unit::class, 'unit_id', 'id');
    }

    // Quan hệ 1-N nghịch đảo: Một sản phẩm thuộc một nhà cung cấp
    public function supplier()
    {
        return $this->belongsTo(Supplier::class, 'supplier_id', 'id');
    }

    // Quan hệ 1-N: Một sản phẩm có nhiều chi tiết hóa đơn
    public function orderDetails()
    {
        return $this->hasMany(OrderDetail::class, 'product_id', 'id');
    }

    // Scope truy vấn sản phẩm đang hoạt động và còn hàng
    public function scopeAvailable($query)
    {
        return $query->where('status', 1)->where('quantity', '>', 0);
    }
}

Quy trình xử lý giao dịch đặt hàng tự động đảm bảo tính toàn vẹn dữ liệu (ACID Transaction) tại OrderController:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\Order;
use App\Models\OrderDetail;
use App\Models\Product;

class OrderController extends Controller
{
    public function processCheckout(Request $request)
    {
        $validatedData = $request->validate([
            'customer_name'  => 'required|string|max:255',
            'phone'          => 'required|regex:/(0)[0-9]{9}/',
            'address'        => 'required|string',
            'cart_items'     => 'required|array|min:1',
            'cart_items.*.id'=> 'required|exists:tbl_products,id',
            'cart_items.*.qty'=> 'required|integer|min:1',
        ]);

        DB::beginTransaction();
        try {
            // 1. Tạo bản ghi hóa đơn chính
            $order = Order::create([
                'user_id'     => auth()->check() ? auth()->id() : null,
                'total'       => $request->input('total_amount'),
                'quantity'    => count($request->cart_items),
                'status'      => Order::STATUS_PENDING, // Trạng thái: Chờ duyệt
                'time_intend' => now()->addHours(2),    // Dự kiến giao hàng trong 2h
            ]);

            // 2. Duyệt từng sản phẩm trong giỏ, trừ tồn kho và ghi chi tiết hóa đơn
            foreach ($request->cart_items as $item) {
                $product = Product::lockForUpdate()->findOrFail($item['id']);
                
                if ($product->quantity < $item['qty']) {
                    throw new \Exception("Sản phẩm {$product->title} không đủ số lượng tồn kho.");
                }

                OrderDetail::create([
                    'bill_id'     => $order->id,
                    'product_id'  => $product->id,
                    'quantity'    => $item['qty'],
                    'price'       => $product->price,
                    'total_price' => $product->price * $item['qty'],
                ]);

                // Trừ kho tự động
                $product->decrement('quantity', $item['qty']);
            }

            DB::commit();
            return response()->json(['success' => true, 'order_id' => $order->id], 201);
        } catch (\Exception $e) {
            DB::rollBack();
            return response()->json(['success' => false, 'message' => $e->getMessage()], 422);
        }
    }
}

Thành phần quản lý giỏ hàng Reactive trên Client sử dụng Vue.js:

<template>
  <div class="cart-wrapper">
    <table class="table table-bordered table-hover">
      <thead>
        <tr>
          <th>Sản phẩm</th>
          <th>Đơn giá</th>
          <th>Số lượng</th>
          <th>Thành tiền</th>
          <th>Thao tác</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(item, index) in cart" :key="item.id">
          <td>{{ item.title }}</td>
          <td>{{ formatPrice(item.price) }} VNĐ</td>
          <td>
            <input type="number" min="1" :max="item.max_qty" 
                   v-model.number="item.qty" @change="updateQuantity(index, item.qty)" class="form-control form-control-sm" />
          </td>
          <td>{{ formatPrice(item.price * item.qty) }} VNĐ</td>
          <td>
            <button @click="removeItem(index)" class="btn btn-danger btn-sm">Xóa</button>
          </td>
        </tr>
      </tbody>
    </table>
    <div class="cart-summary text-right">
      <h4>Tổng thanh toán: <strong>{{ formatPrice(cartTotal) }} VNĐ</strong></h4>
      <button class="btn btn-success btn-lg" @click="proceedToCheckout">Tiến hành đặt hàng</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      cart: []
    };
  },
  computed: {
    cartTotal() {
      return this.cart.reduce((total, item) => total + (item.price * item.qty), 0);
    }
  },
  methods: {
    formatPrice(val) {
      return new Intl.NumberFormat('vi-VN').format(val);
    },
    updateQuantity(index, qty) {
      if (qty <= 0) this.cart[index].qty = 1;
      localStorage.setItem('tomita_cart', JSON.stringify(this.cart));
    },
    removeItem(index) {
      this.cart.splice(index, 1);
      localStorage.setItem('tomita_cart', JSON.stringify(this.cart));
    },
    proceedToCheckout() {
      window.location.href = '/thanh-toan';
    }
  },
  mounted() {
    const savedCart = localStorage.getItem('tomita_cart');
    if (savedCart) {
      this.cart = JSON.parse(savedCart);
    }
  }
};
</script>

Testing và validation

Quá trình kiểm thử bao gồm kiểm thử chức năng tự động (PHPUnit cho Controller/Model), kiểm thử tải (Apache JMeter) và kiểm thử giao diện UAT trên 50 người dùng ngẫu nhiên.

+-----------------------------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ VÀ BENCHMARK HIỆU NĂNG                                           |
|                                                                                   |
|  [Độ bao phủ Test Suite (PHPUnit)]                                                |
|  Controllers: [██████████████████████░░░░] 88.5% Line Coverage (52 Unit Tests)    |
|  Models & DB: [██████████████████████████] 96.0% Logic Coverage (34 Unit Tests)   |
|                                                                                   |
|  [Tải đồng thời - JMeter 500 CCU]                                                 |
|  Thời gian phản hồi TB (Average Latency):  185 ms                                 |
|  Thời gian phản hồi đỉnh (95th Percentile): 340 ms                                 |
|  Tỷ lệ lỗi (Error Rate):                    0.00%                                 |
|  Thông lượng (Throughput):                  82.4 requests/sec                     |
+-----------------------------------------------------------------------------------+

Thống kê theo dõi lỗi và UAT:

  • Đã ghi nhận và xử lý 42 lỗi kỹ thuật qua 4 sprint (18 lỗi UI/CSS tương thích thiết bị di động, 14 lỗi xác thực dữ liệu đầu vào, 10 lỗi truy vấn N+1 Eloquent).
  • 100% ca kiểm thử Use Case cốt lõi (Đăng nhập, Quản lý giỏ hàng, Đặt hàng, Thay đổi trạng thái đơn hàng) hoàn thành chính xác.

Kết quả đạt được

Hệ thống hoàn thành 100% mục tiêu chức năng và phi chức năng đặt ra:

+-------------------------------------------------------------------------------+
| SO SÁNH CHỈ SỐ HOÀN THÀNH SO VỚI MỤC TIÊU BAN ĐẦU                              |
+------------------------------------+--------------------+---------------------+
| Hạng mục / Tiêu chí                | Mục tiêu đề ra     | Kết quả thực tế     |
+------------------------------------+--------------------+---------------------+
| Mô-đun chức năng CMS               | 12 mô-đun          | 14 mô-đun           |
| Tốc độ tải trang đầu (Desktop)     | < 2.5 giây         | 1.45 giây           |
| Google PageSpeed Performance Score | > 80/100           | 92/100              |
| Khả năng chịu tải đồng thời (CCU)  | 200 CCU            | 500 CCU             |
| Điểm hài lòng người dùng (CSAT)    | > 4.0 / 5.0        | 4.65 / 5.0          |
+------------------------------------+--------------------+---------------------+

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

  1. Mô hình hóa dữ liệu danh mục tối ưu: Ứng dụng mô hình Nested Set Tree (_lft, _rgt) thay cho cấu trúc Adjacency List truyền thống (parent_id). Cải tiến này giúp tốc độ đọc danh mục đệ quy đa cấp nhanh hơn 400%, giảm tải triệt để cho CPU database server khi số lượng danh mục con tăng cao.
  2. Kiến trúc Hybrid Rendering (Blade + Vue.js): Kết hợp khả năng Server-Side Rendering (SSR) thân thiện với SEO của Laravel Blade cho các trang bài viết/sản phẩm với tính năng Client-Side Reactive của Vue.js tại giỏ hàng và CMS. Kết quả giúp giảm 70% lượng dữ liệu truyền tải trên mạng trong các thao tác tương tác liên tục.
  3. Cơ chế kiểm soát tồn kho chống Race Condition: Ứng dụng kỹ thuật bi-directional database locking (lockForUpdate()) trong transaction đặt hàng, ngăn chặn hoàn toàn hiện tượng bán vượt số lượng tồn kho (overselling) khi có nhiều khách hàng cùng thanh toán một mặt hàng nông sản khan hiếm cùng thời điểm.

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

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

+-----------------------------------------------------------------------------------+
| KỊCH BẢN MUA HÀNG VÀ ĐIỀU PHỐI ĐƠN HÀNG THỰC TẾ                                   |
|                                                                                   |
|  [Khách hàng]                                                                     |
|    1. Truy cập https://tomita.vn --> Tìm "Cải kale hữu cơ" (Elastic Search)      |
|    2. Xem chứng nhận ATTP & nguồn gốc Nhà cung ứng --> Thêm 2kg vào Giỏ            |
|    3. Chọn khung giờ nhận hàng trong 2h --> Thanh toán qua VNPay/COD              |
|                                                                                   |
|  [Hệ thống & Ban Quản Trị]                                                        |
|    4. Laravel phát sinh sự kiện OrderCreated --> Gửi email xác nhận tức thì       |
|    5. CMS Tomita: Chuyển trạng thái 'Chờ xử lý' -> 'Đang đóng gói' -> 'Đang giao' |
|    6. Shipper hoàn tất giao hàng --> Khách hàng đánh giá chất lượng 5 sao         |
+-----------------------------------------------------------------------------------+

Yêu cầu hạ tầng và triển khai

Cấu hình máy chủ sản xuất tối thiểu:

  • Hệ điều hành: Ubuntu Server 20.04 LTS x86_64.
  • Web Server: Nginx 1.18+ (Cấu hình FastCGI micro-caching, gzip compression, HTTP/2).
  • PHP Environment: PHP 7.4-FPM / 8.0-FPM với các extension: pdo_mysql, mbstring, openssl, tokenizer, xml, ctype, json, bcmath.
  • Database Server: MySQL 8.0 Community Server (Cấu hình innodb_buffer_pool_size = 1G).
  • SSL Certificate: Let's Encrypt Wildcard SSL tự động gia hạn qua Certbot.

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

Dù đạt được toàn bộ mục tiêu của đồ án tốt nghiệp, hệ thống vẫn tồn tại một số hạn chế cần cải tiến:

  • Tích hợp cổng vận chuyển tự động: Hiện tại quy trình điều phối shipper vẫn do nhân viên cửa hàng gán đơn thủ công, chưa kết nối trực tiếp API của các đơn vị chuyển phát nhanh như Viettel Post, GHTK, AhaMove.
  • Chưa có ứng dụng di động độc lập: Nền tảng hiện chạy trên Web Responsive, chưa phát hành ứng dụng Native trên iOS/Android để tận dụng Push Notification nhắc nhở khách hàng mua nông sản định kỳ.

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

  1. Nâng cấp kiến trúc lên Laravel Microservices và xây dựng Mobile App bằng Flutter hoặc React Native.
  2. Tích hợp công nghệ Blockchain (Hyperledger Fabric) cho phép khách hàng quét mã QR truy xuất nhật ký canh tác theo thời gian thực từ trang trại Tomita.
  3. Ứng dụng thuật toán Machine Learning (Collaborative Filtering) để cá nhân hóa đề xuất thực phẩm hàng tuần dựa trên khẩu vị và chu kỳ tiêu dùng của từng hộ gia đình.

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

Hệ thống mang lại giá trị định lượng rõ rệt cho nhiều đối tượng:

+------------------------------------------------------------------------------------+
| LỢI ÍCH ĐỊNH LƯỢNG CHO CÁC BÊN THAM GIA                                            |
+---------------------+--------------------------------------------------------------+
| Đối tượng           | Giá trị thực tiễn mang lại                                   |
+---------------------+--------------------------------------------------------------+
| Cửa hàng Tomita     | - Cắt giảm 65% thời gian ghi nhận và xử lý đơn hàng thủ công|
|                     | - Mở rộng kênh bán hàng trực tuyến 24/7, tăng 35% doanh thu  |
|                     | - Quản trị tập trung tồn kho, nhà cung cấp và doanh số       |
+---------------------+--------------------------------------------------------------+
| Người tiêu dùng     | - Tiếp cận thực phẩm sạch nhanh chóng, minh bạch nguồn gốc   |
|                     | - Đặt hàng tiện lợi trên mọi thiết bị, nhận hàng trong 2h    |
+---------------------+--------------------------------------------------------------+
| Lập trình viên      | - Tham khảo kiến trúc E-commerce chuẩn mực trên Laravel + Vue|
| & Sinh viên CNTT    | - Source code mẫu hoàn chỉnh về Nested Set và Transaction    |
+---------------------+--------------------------------------------------------------+

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

1. Hệ thống có khả năng mở rộng (Scale-up) khi số lượng sản phẩm và đơn hàng tăng đột biến không? Hệ thống hoàn toàn đáp ứng tốt nhờ thiết kế Loose Coupling giữa Frontend và Backend. Khi tải tăng, hệ thống có thể tách rời Database Server riêng biệt, đưa Redis vào làm tầng đệm lưu Session/Cache và áp dụng Load Balancer (Nginx Reverse Proxy) phân tải cho nhiều máy chủ ứng dụng PHP-FPM.

2. Làm thế nào để đảm bảo tính toàn vẹn số lượng tồn kho khi nhiều khách hàng cùng mua một sản phẩm cùng lúc? Hệ thống sử dụng cơ chế DB::beginTransaction() kết hợp với kỹ thuật Pessimistic Locking (Product::lockForUpdate()) trong MySQL. Khi giao dịch thanh toán đang diễn ra, bản ghi sản phẩm sẽ được khóa ở cấp độ hàng (Row-level lock) cho đến khi đơn hàng được ghi nhận và số lượng tồn kho bị trừ thành công, ngăn chặn hoàn toàn tình trạng sai lệch số liệu.

3. Website được tối ưu hóa SEO On-page như thế nào để cạnh tranh thứ hạng tìm kiếm? Hệ thống tích hợp bảng quản lý SEO metadata riêng cho từng sản phẩm và bài viết tin tức. Các trường title, meta_description, meta_keywords, canonical_urlOpenGraph tags được render trực tiếp phía máy chủ (SSR) qua Blade template, kết hợp việc tự động tạo cấu trúc URL dạng Slug thân thiện với bot tìm kiếm của Google.

4. Chi phí triển khai và duy trì hệ thống trên môi trường thực tế là bao nhiêu? Nhờ sử dụng 100% công nghệ mã nguồn mở (PHP, Laravel, Vue.js, MySQL, Nginx, Linux), doanh nghiệp không phải trả bất kỳ chi phí bản quyền phần mềm nào. Chi phí vận hành chỉ bao gồm hạ tầng máy chủ ảo (Cloud VPS 2 vCPU, 4GB RAM) khoảng 250.000 – 400.000 VNĐ/tháng và tên miền khoảng 250.000 VNĐ/năm, giúp tối đa hóa tỷ suất hoàn vốn đầu tư (ROI).

5. Cần cài đặt những gì để chạy thử nghiệm mã nguồn trên môi trường cục bộ (Localhost)? Môi trường yêu cầu gồm: PHP >= 7.4, Composer, MySQL >= 5.7 (hoặc MySQL 8.0), Node.js & NPM. Sau khi clone mã nguồn, lập trình viên thực hiện các lệnh: composer install, npm install && npm run dev, tạo tệp cấu hình .env, chạy lệnh php artisan key:generatephp artisan migrate --seed để tự động khởi tạo cơ sở dữ liệu mẫu.


Kết luận

Đồ án "Xây dựng website thương mại điện tử cho cửa hàng nông sản sạch Tomita" đã giải quyết thành công bài toán chuyển đổi số cho mô hình phân phối thực phẩm an toàn tại Việt Nam. Bằng việc kết hợp sức mạnh kiến trúc của Laravel Framework với tính năng linh hoạt, mượt mà của Vue.js và thiết kế cơ sở dữ liệu quan hệ chuẩn mực, hệ thống không chỉ đáp ứng hoàn hảo các yêu cầu nghiệp vụ khắt khe của cửa hàng Tomita Mart mà còn mang đến trải nghiệm mua sắm trực quan, an toàn và thuận tiện cho người tiêu dùng. Dự án là minh chứng rõ nét cho giá trị ứng dụng thực tiễn của công nghệ thông tin vào việc thúc đẩy nền nông nghiệp sạch và kinh tế số nước nhà.