This commit is contained in:
2026-07-30 10:30:50 +08:00
parent cf6d708566
commit 853c478657
85 changed files with 4711 additions and 1052 deletions
+6
View File
@@ -56,6 +56,11 @@ from .material_schemas import (
MaterialSupplierResponse,
MaterialPriceTrendResponse
)
from .purchase_demand_schemas import (
PurchaseDemandCalculateRequest,
PurchaseDemandItemResponse,
PurchaseDemandResponse
)
from .common_schemas import PaginatedResponse
@@ -81,4 +86,5 @@ __all__ = [
"PartnerProductStatementItemResponse", "FinancePartnerProductStatementResponse",
"MaterialPriceHistoryCreate", "MaterialPriceHistoryResponse",
"MaterialSupplierCreate", "MaterialSupplierResponse", "MaterialPriceTrendResponse",
"PurchaseDemandCalculateRequest", "PurchaseDemandItemResponse", "PurchaseDemandResponse",
]
@@ -0,0 +1,36 @@
"""采购需求推导相关数据模型
销售订单 → BOM 展开 → 物料需求 → 对比库存 → 生成采购建议
"""
from pydantic import BaseModel, Field
from decimal import Decimal
from typing import Optional, List
class PurchaseDemandCalculateRequest(BaseModel):
"""计算采购需求的请求体"""
sales_order_ids: List[int] = Field(..., min_length=1, description="销售订单ID列表")
class PurchaseDemandItemResponse(BaseModel):
"""单个物料的采购建议"""
material_id: int
material_sku: str
material_name: str
required_quantity: Decimal = Field(..., description="BOM 需求量")
available_quantity: Decimal = Field(..., description="当前库存量")
shortage_quantity: Decimal = Field(..., description="缺口数量 = required - available")
unit_cost: Decimal = Field(..., description="物料单价")
estimated_cost: Decimal = Field(..., description="预计采购金额 = shortage × unit_cost")
suggested_supplier_id: Optional[int] = Field(None, description="建议供应商ID")
suggested_supplier_name: Optional[str] = Field(None, description="建议供应商名称")
supplier_lead_time: Optional[int] = Field(None, description="供应商交货周期(天)")
class PurchaseDemandResponse(BaseModel):
"""采购需求计算结果"""
items: List[PurchaseDemandItemResponse] = Field(default_factory=list)
total_estimated_cost: Decimal = Field(default=Decimal("0"), description="预计采购总金额")
shortage_count: int = Field(default=0, description="缺货物料种类数")
source_order_ids: List[int] = Field(default_factory=list, description="来源销售订单ID")
source_order_nos: List[str] = Field(default_factory=list, description="来源销售订单编号")