8000 GitHub - thnguyet/gom_su_xanh · GitHub
[go: up one dir, main page]

Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

🏺 GỐM SỨ XANH — Nền tảng thương mại nghệ thuật gốm Việt

Java Spring MySQL JavaScript HTML5 CSS3 NodeJS RabbitMQ


Gốm Sứ Xanh là hệ thống thương mại điện tử chuyên sản phẩm gốm sứ thủ công và các buổi workshop trải nghiệm làm gốm. Backend là 8 microservice Spring Boot, frontend là HTML/CSS/JavaScript thuần.


🌟 Tính năng

🛒 Mua hàng

  • Giá hai mức: giá niêm yết và giá bán, tự tính phần trăm giảm; flash sale đè lên giá bán.
  • Thanh toán: COD, VNPAY (sandbox) và Ví GSX.
  • Voucher: phạm vi công khai / chỉ định riêng khách / theo hạng thành viên, tự động áp mã lợi nhất.
  • Giỏ hàng, yêu thích, tìm sản phẩm bằng ảnh (so khớp dHash).
  • Vòng đời đơn kiểu Shopee: dòng thời gian đầy đủ, lịch sử cập nhật trạng thái, huỷ đơn kèm lý do.
  • Trả hàng và khiếu nại: gộp chung một luồng, có hoàn tiền về ví hoặc tài khoản ngân hàng.

💰 Ví GSX và điểm thưởng

  • Nạp tiền qua VNPAY, rút tiền có admin duyệt, thanh toán đơn bằng số dư, số dư cập nhật tức thời qua WebSocket.
  • Điểm thưởng theo từng lô có hạn dùng, tác vụ nền tự trừ điểm hết hạn và báo trước.
  • Hạng thành viên tự nâng/hạ theo chu kỳ, mỗi hạng có hệ số điểm, hạn trả hàng và ngưỡng miễn phí vận chuyển riêng.

🎓 Workshop

  • Nhiều ca học cho mỗi workshop, số chỗ còn lại tính từ các ca và cập nhật realtime.
  • Kiểm tra hạn đăng ký phải trước ngày diễn ra.

📰 Nội dung và thông báo

  • Blog có lưu nháp, yêu thích bài viết, đếm lượt xem realtime.
  • Thông báo realtime hai chiều qua WebSocket cho cả khách và admin, trạng thái đã đọc lưu riêng từng tài khoản.

📊 Quản trị

  • Quản lý sản phẩm, đơn hàng, workshop, bài viết, voucher, tài khoản người dùng.
  • Duyệt yêu cầu rút tiền, điều chỉnh điểm thưởng và số dư ví của khách (bắt buộc nhập lý do).
  • Biểu đồ doanh thu Chart.js theo tuần và theo tháng.

🛠️ Công nghệ

Frontend

HTML5, CSS3, JavaScript thuần (không framework), Chart.js, SockJS + STOMP cho realtime.

Backend

Java 17, Spring Boot, Spring Cloud Gateway, Eureka, Spring Security + JWT, Spring Data JPA, RabbitMQ, WebSocket (STOMP), Cloudinary.

Danh sách service

Service Cổng Cơ sở dữ liệu
discovery-service (Eureka) 8761 —
api-gateway 8080 —
identity-service 8081 identity_service
product-service 8082 product_service
order-service 8083 order_service
workshop-service 8084 workshop_service
content-service 8085 content_service
notification-service 8086 notification_service
Frontend tĩnh 3000 —

📁 Cấu trúc dự án

gom_su_xanh/
├── be/                     # 8 microservice Spring Boot
├── fe-admin/               # Giao diện quản trị
├── fe-user/                # Giao diện khách hàng
├── FIX-PLAN.md             # Kế hoạch sửa lỗi và bổ sung nghiệp vụ
├── run-all.ps1             # Script khởi động toàn hệ thống
└── README.md

⚙️ Yêu cầu môi trường

  • JDK 17 trở lên và Maven
  • MySQL 8 trở lên (mặc định localhost:3306)
  • RabbitMQ đang chạy ở localhost:5672
  • Node.js (chỉ để phục vụ thư mục frontend tĩnh trên cổng 3000)

Các database được tạo tự động nhờ ddl-auto: update, nhưng schema rỗng phải tồn tại trước:

CREATE DATABASE identity_service;
CREATE DATABASE product_service;
CREATE DATABASE order_service;
CREATE DATABASE workshop_service;
CREATE DATABASE content_service;
CREATE DATABASE notification_service;

🔑 Biến môi trường

Các service đọc cấu hình từ biến môi trường. Phải đặt trước khi chạy, nếu không service sẽ không khởi động được.

Bắt buộc

Biến Ý nghĩa
DB_URL Chuỗi kết nối MySQL, mặc định trỏ localhost:3306
DB_USERNAME Tài khoản MySQL
DB_PASSWORD Mật khẩu MySQL
JWT_SIGNER_KEY Khoá ký JWT, tối thiểu 32 ký tự, phải giống nhau ở mọi service

Tuỳ chọn theo tính năng

Biến Dùng cho Ghi chú
CLOUDINARY_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET Tải ảnh sản phẩm, workshop, bài viết Đặt CLOUDINARY_API_KEY=dummy để tắt Cloudinary và lưu ảnh vào thư mục uploads/ cục bộ
VNPAY_TMN_CODE, VNPAY_HASH_SECRET Thanh toán và nạp ví qua VNPAY Dùng sandbox sandbox.vnpayment.vn
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET Đăng nhập bằng Google
MAIL_USERNAME, MAIL_PASSWORD Gửi email OTP SMTP cổng 587

Lịch chạy tác vụ nền (identity-service)

Biến Mặc định Tác vụ
LOYALTY_POINT_EXPIRY_CRON 0 0 1 * * * Trừ điểm của các lô đã hết hạn, báo trước lô sắp hết hạn
LOYALTY_TIER_CYCLE_CRON 0 30 1 * * * Reset chu kỳ hạng thành viên, báo trước khách sắp bị hạ hạng
LOYALTY_POINT_RECONCILE_CRON 0 45 1 * * * Đối soát users.points với tổng point_lots.points_remaining, ghi log khi lệch

Biểu thức cron của Spring có 6 trường và chứa dấu cách, nên phải truyền qua biến môi trường chứ không truyền qua -D trên dòng lệnh.


🚀 Khởi động

Cách nhanh

.\run-all.ps1

Chạy tay

Thứ tự bắt buộc: discovery-service phải lên trước, api-gateway sau cùng trong nhóm hạ tầng; các service nghiệp vụ chạy thứ tự nào cũng được.

$env:DB_PASSWORD = "<mat-khau-mysql>"
$env:JWT_SIGNER_KEY = "<khoa-toi-thieu-32-ky-tu>"
$env:CLOUDINARY_API_KEY = "dummy"

cd be\discovery-service ; mvn spring-boot:run
cd be\identity-service  ; mvn spring-boot:run
cd be\product-service   ; mvn spring-boot:run
cd be\order-service     ; mvn spring-boot:run
cd be\workshop-service  ; mvn spring-boot:run
cd be\content-service   ; mvn spring-boot:run
cd be\notification-service ; mvn spring-boot:run
cd be\api-gateway       ; mvn spring-boot:run

Lần chạy đầu tiên, khi các bảng còn rỗng, mỗi service sẽ tự nạp dữ liệu mẫu (danh mục, sản phẩm, workshop, hạng thành viên).

Truy cập

Trang Địa chỉ
Khách hàng http://localhost:3000
Quản trị http://localhost:3000/fe-admin/index.html
Eureka http://localhost:8761

Mọi lời gọi API từ frontend đều đi qua gateway http://localhost:8080.


© 2026 Gốm Sứ Xanh. Phát triển bởi Nguyễn Thu Nguyệt và Nguyễn Văn Hiệu.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

0