Files
pos-system/services/order-service-net/docs/vi

Order Service

Điều phối đơn hàng với Strategy Pattern cho thương mại đa ngành.

Tổng Quan

Order Service là "bộ não" của nền tảng, điều phối đơn hàng qua nhiều ngành dọc sử dụng Strategy Pattern. Service này định tuyến từng dòng hàng đến vertical engine phù hợp (Inventory, Booking, F&B Engine) dựa trên loại sản phẩm.

Tính Năng Chính

  • Strategy Pattern - Định tuyến đơn hàng theo loại sản phẩm không dùng if-else
  • Đơn hàng Hybrid - Một đơn với nhiều loại mặt hàng (Physical + Service + Food)
  • Điều phối Transaction - Luồng Validate → Pay → Execute
  • Event-Driven - Phát integration events cho các service downstream

Bối Cảnh Kiến Trúc

graph TB
    POS["POS / Web"] --> ORDER["📝 Order Service"]
    ORDER --> CATALOG["📦 Catalog Service"]
    ORDER --> MERCHANT["🏪 Merchant Service"]
    ORDER --> WALLET["💰 Wallet Service"]
    ORDER --> INVENTORY["🏭 Inventory Service"]
    ORDER --> BOOKING["📅 Booking Service"]
    ORDER --> FNB["🍳 F&B Engine"]
    
    style ORDER fill:#e74c3c,stroke:#c0392b,color:#fff

Yêu Cầu

Yêu cầu Phiên bản
.NET SDK 10.0.101+
Docker 24.0+
PostgreSQL 15+
RabbitMQ 3.12+

Bắt Đầu Nhanh

cd services/order-service-net
cp .env.example .env
dotnet restore
dotnet run --project src/OrderService.API

Cấu Trúc Dự Án

order-service-net/
├── src/
│   ├── OrderService.API/
│   │   ├── Application/
│   │   │   ├── Strategies/          # Các chiến lược dòng hàng
│   │   │   ├── Commands/            # CreateOrder, CancelOrder
│   │   │   └── Queries/             # GetOrder, ListOrders
│   │   └── Controllers/
│   ├── OrderService.Domain/
│   │   ├── AggregatesModel/
│   │   │   └── OrderAggregate/      # Order, OrderItem
│   │   └── Events/
│   └── OrderService.Infrastructure/
└── tests/

API Endpoints

Method Endpoint Mô tả
POST /api/v1/orders Tạo đơn hàng
GET /api/v1/orders/{id} Chi tiết đơn hàng
GET /api/v1/orders Danh sách đơn hàng theo shop
POST /api/v1/orders/{id}/pay Xử lý thanh toán
POST /api/v1/orders/{id}/cancel Hủy đơn hàng
PATCH /api/v1/orders/{id}/items/{itemId}/status Cập nhật trạng thái item

Strategy Pattern

ILineItemStrategy Interface

public interface ILineItemStrategy
{
    ProductType SupportedType { get; }
    Task ValidateAsync(OrderItem item, Guid shopId);
    Task ExecuteAsync(OrderItem item, Guid shopId);
}

Các Strategies Có Sẵn

Strategy Product Type Service Đích
RetailStrategy Physical Inventory Service
ServiceStrategy Service Booking Service
FnbStrategy PreparedFood F&B Engine

Luồng Xử Lý Đơn Hàng

sequenceDiagram
    participant POS
    participant Order as Order Service
    participant Catalog as Catalog Service
    participant Strategy as Strategy Factory
    participant Target as Target Service

    POS->>Order: Tạo Đơn Hàng
    Order->>Catalog: Lấy Loại Sản Phẩm
    
    loop Mỗi Dòng Hàng
        Order->>Strategy: Lấy Strategy theo Loại
        Strategy->>Target: Validate
        Target-->>Strategy: OK
    end
    
    Order->>Order: Xử Lý Thanh Toán
    
    loop Mỗi Dòng Hàng
        Order->>Strategy: Lấy Strategy theo Loại
        Strategy->>Target: Execute
    end
    
    Order-->>POS: Đơn Hàng Hoàn Tất

Domain Model

Order Aggregate

public class Order : Entity, IAggregateRoot
{
    public Guid ShopId { get; private set; }
    public Guid? CustomerId { get; private set; }
    public OrderStatus Status { get; private set; }
    public decimal TotalAmount { get; private set; }
    
    private readonly List<OrderItem> _items;
    public IReadOnlyCollection<OrderItem> Items => _items.AsReadOnly();
    
    public void AddItem(Product product, int quantity);
    public void MarkAsPaid();
    public void Cancel(string reason);
}

Integration Events

Event Trigger Subscribers
OrderCreatedEvent Đặt đơn hàng Analytics
OrderPaidEvent Thanh toán thành công Wallet, Notification
OrderCancelledEvent Hủy đơn hàng Inventory (rollback)
KitchenTicketCreatedEvent Thêm món F&B F&B Engine

Services Liên Quan

Tài Nguyên

License

Proprietary - GoodGo Platform