Thiết kế kiến trúc công nghệ
Framework Backend
- Sử dụng Django làm framework chính, cung cấp các tính năng như ORM, định tuyến, và công cụ template.
- Kết hợp Django REST framework (DRF) để phát triển API, hỗ trợ tương tác dữ liệu dạng JSON.
Công nghệ Frontend
- Xây dựng giao diện cơ bản với HTML5, CSS3 và JavaScript.
- Tích hợp Bootstrap hoặc Vue.js để tạo bố cục responsive và tương tác động.
- Sử dụng D3.js hoặc Highcharts để trực quan hóa dữ liệu xu hướng bán hàng.
Cơ sở dữ liệu
- Chọn PostgreSQL hoặc MySQL làm cơ sở dữ liệu chính, hỗ trợ giao dịch và xử lý đồng thời cao.
- Sử dụng Redis cho tầng cache, lưu trữ dữ liệu truy cập thường xuyên (như top món bán chạy).
Công cụ hỗ trợ
- Celery để xử lý tác vụ bất đồng bộ (như tạo báo cáo).
- Django Channels hỗ trợ đẩy dữ liệu thời gian thực (như cập nhật trạng thái đơn hàng).
Thiết kế các chức năng chính
1. Phân tích xu hướng bán hàng
- Thống kê doanh thu, số lượng đơn hàng, và món ăn phổ biến theo ngày/tuần/tháng.
- Phân tích đa chiều (theo khung giờ, chi nhánh, loại món).
- Hỗ trợ xuất biểu đồ dạng đường, cột sang PDF/Excel.
2. Quản lý đơn hàng
- Theo dõi toàn quy trình từ khách đặt hàng, bếp nhận đơn, đến tình trạng giao hàng.
- Hỗ trợ ghi chú đơn hàng, xử lý hủy đơn và ghi lý do.
3. Quản lý kho nguyên liệu
- Tự động cảnh báo khi nguyên liệu tồn kho thấp.
- Dự báo nhu cầu mua hàng dựa trên dữ liệu bán hàng.
4. Hệ thống thành viên
- Quản lý điểm tích lũy và quyền lợi theo cấp độ.
- Gợi ý cá nhân hóa dựa trên lịch sử mua hàng.
Thiết kế cơ sở dữ liệu (bảng chính)
Bảng: BanGhiBanHang
class BanGhiBanHang(models.Model):
hoa_don = models.ForeignKey(HoaDon, on_delete=models.CASCADE)
mon_an = models.ForeignKey(MonAn, on_delete=models.PROTECT)
so_luong = models.IntegerField()
thoi_gian_ban = models.DateTimeField(auto_now_add=True)
tong_tien = models.DecimalField(max_digits=10, decimal_places=2)
Bảng: TonKho
class TonKho(models.Model):
nguyen_lieu = models.CharField(max_length=100)
so_luong_hien_tai = models.FloatField()
muc_canh_bao = models.FloatField() # Ngưỡng cảnh báo
don_vi = models.CharField(max_length=20)
Ví dụ mã nguồn quan trọng
API xu hướng bán hàng (DRF)
class BieuDoXuHuongView(APIView):
def get(self, request):
ngay_bat_dau = request.query_params.get('start')
ngay_ket_thuc = request.query_params.get('end')
queryset = BanGhiBanHang.objects.filter(
thoi_gian_ban__range=[ngay_bat_dau, ngay_ket_thuc]
).values('mon_an__ten_mon').annotate(
doanh_thu=Sum('tong_tien')
).order_by('-doanh_thu')
return Response(queryset)
Logic cảnh báo kho
def kiem_tra_kho():
nguyen_lieu_thap = TonKho.objects.filter(
so_luong_hien_tai__lt=F('muc_canh_bao')
)
if nguyen_lieu_thap.exists():
gui_thong_bao_email(list(nguyen_lieu_thap.values('nguyen_lieu')))
Thiết kế kiểm thử hệ thống
Kiểm thử đơn vị (PyTest)
- Kiểm tra việc tự động giảm tồn kho khi tạo đơn hàng:
def test_giam_ton_kho():
mon = MonAn.objects.create(ten_mon="Món Thử Nghiệm", so_luong_can_thiet=2)
ton_kho_ban_dau = TonKho.objects.get(nguyen_lieu="Bột").so_luong_hien_tai
DichVuHoaDon.tao_hoa_don([mon.id])
assert TonKho.objects.get(nguyen_lieu="Bột").so_luong_hien_tai == ton_kho_ban_dau - 2
Kiểm thử hiệu năng
- Sử dụng Locust mô phỏng tình huống đặt hàng đồng thời cao, đảm bảo thời gian phản hồi dưới 500ms.
Kiểm thử giao diện
- Tự động hóa kiểm thử các đường dẫn chính (đăng nhập → đặt hàng → thanh toán) bằng Selenium.
Đề xuất triển khai
- Triển khai ứng dụng Django với Nginx + Gunicorn.
- Cấu hình sao chép master-slave cho PostgreSQL để đảm bảo an toàn dữ liệu.
- Sử dụng Prometheus + Grafana để giám tra sức khỏe hệ thống.