feat(backend): 历史进销存导入器 cmd/import-history + 单据明细快照列
一次性 CLI 导入旧系统 data/ 入库·出库 总表/详情表到当前库,历史只读(绝不 回放 inventories/inventory_logs)。明细忠实直存不做 SKU 归一:order/item 表 新增 creator_id(制单人)与 product_code/product_name/series/spec 快照列 (出库另补 batch_no/production_date),导入行 product_id 指向共享占位商品。 order_no 天然主键 (shop_id,order_no) 幂等去重,可重复跑。 testutil sqlite DDL 同步补列以保持 service 测试通过。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ type StockInOrder struct {
|
||||
WarehouseID uint64 `gorm:"not null" json:"warehouse_id" binding:"required,min=1"`
|
||||
PartnerID *uint64 `json:"partner_id"`
|
||||
OperatorID uint64 `gorm:"not null" json:"operator_id"`
|
||||
CreatorID *uint64 `json:"creator_id"`
|
||||
ReviewerID *uint64 `json:"reviewer_id"`
|
||||
Status string `gorm:"type:enum('draft','pending','approved','rejected');default:'draft'" json:"status"`
|
||||
OrderDate Date `gorm:"type:date" json:"order_date"`
|
||||
@@ -23,6 +24,7 @@ type StockInOrder struct {
|
||||
Warehouse *Warehouse `gorm:"foreignKey:WarehouseID" json:"warehouse,omitempty"`
|
||||
Partner *Partner `gorm:"foreignKey:PartnerID" json:"partner,omitempty"`
|
||||
Operator *User `gorm:"foreignKey:OperatorID" json:"operator,omitempty"`
|
||||
Creator *User `gorm:"foreignKey:CreatorID" json:"creator,omitempty"`
|
||||
Reviewer *User `gorm:"foreignKey:ReviewerID" json:"reviewer,omitempty"`
|
||||
}
|
||||
|
||||
@@ -31,6 +33,11 @@ type StockInItem struct {
|
||||
OrderID uint64 `gorm:"not null;index" json:"order_id"`
|
||||
ShopID uint64 `gorm:"not null" json:"shop_id"`
|
||||
ProductID uint64 `gorm:"not null" json:"product_id"`
|
||||
// 历史导入快照列:源明细自带的商品信息,不依赖 product 主数据(product_id 可为 0)。
|
||||
ProductCode string `gorm:"size:50" json:"product_code"`
|
||||
ProductName string `gorm:"size:255" json:"product_name"`
|
||||
Series string `gorm:"size:100" json:"series"`
|
||||
Spec string `gorm:"size:100" json:"spec"`
|
||||
Quantity float64 `gorm:"type:decimal(12,3);not null" json:"quantity"`
|
||||
UnitPrice float64 `gorm:"type:decimal(16,2);default:0" json:"unit_price"`
|
||||
TotalPrice float64 `gorm:"type:decimal(16,2);default:0" json:"total_price"`
|
||||
@@ -52,6 +59,7 @@ type StockOutOrder struct {
|
||||
WarehouseID uint64 `gorm:"not null" json:"warehouse_id" binding:"required,min=1"`
|
||||
PartnerID *uint64 `json:"partner_id"`
|
||||
OperatorID uint64 `gorm:"not null" json:"operator_id"`
|
||||
CreatorID *uint64 `json:"creator_id"`
|
||||
ReviewerID *uint64 `json:"reviewer_id"`
|
||||
Status string `gorm:"type:enum('draft','pending','approved','rejected');default:'draft'" json:"status"`
|
||||
OrderDate Date `gorm:"type:date" json:"order_date"`
|
||||
@@ -64,6 +72,7 @@ type StockOutOrder struct {
|
||||
Warehouse *Warehouse `gorm:"foreignKey:WarehouseID" json:"warehouse,omitempty"`
|
||||
Partner *Partner `gorm:"foreignKey:PartnerID" json:"partner,omitempty"`
|
||||
Operator *User `gorm:"foreignKey:OperatorID" json:"operator,omitempty"`
|
||||
Creator *User `gorm:"foreignKey:CreatorID" json:"creator,omitempty"`
|
||||
Reviewer *User `gorm:"foreignKey:ReviewerID" json:"reviewer,omitempty"`
|
||||
}
|
||||
|
||||
@@ -72,9 +81,16 @@ type StockOutItem struct {
|
||||
OrderID uint64 `gorm:"not null;index" json:"order_id"`
|
||||
ShopID uint64 `gorm:"not null" json:"shop_id"`
|
||||
ProductID uint64 `gorm:"not null" json:"product_id"`
|
||||
// 历史导入快照列:源明细自带的商品信息,不依赖 product 主数据(product_id 可为 0)。
|
||||
ProductCode string `gorm:"size:50" json:"product_code"`
|
||||
ProductName string `gorm:"size:255" json:"product_name"`
|
||||
Series string `gorm:"size:100" json:"series"`
|
||||
Spec string `gorm:"size:100" json:"spec"`
|
||||
Quantity float64 `gorm:"type:decimal(12,3);not null" json:"quantity"`
|
||||
UnitPrice float64 `gorm:"type:decimal(16,2);default:0" json:"unit_price"`
|
||||
TotalPrice float64 `gorm:"type:decimal(16,2);default:0" json:"total_price"`
|
||||
BatchNo string `gorm:"size:50" json:"batch_no"`
|
||||
ProductionDate *Date `gorm:"type:date" json:"production_date"`
|
||||
CustomFields JSON `gorm:"type:json" json:"custom_fields,omitempty"`
|
||||
Remark string `gorm:"size:255" json:"remark"`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user