Files
assets/cmd/seed_data/main.go
2026-03-18 10:18:03 +08:00

165 lines
5.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"context"
"fmt"
"time"
"go.mongodb.org/mongo-driver/v2/bson"
"go.mongodb.org/mongo-driver/v2/mongo"
"go.mongodb.org/mongo-driver/v2/mongo/options"
)
func main() {
ctx := context.Background()
client, err := mongo.Connect(options.Client().ApplyURI("mongodb://192.168.3.200:27017/?directConnection=true"))
if err != nil {
panic(err)
}
defer client.Disconnect(ctx)
db := client.Database("assets")
now := time.Now()
// 0. 清理之前的测试数据按warehouseCode匹配
fmt.Println("=== 清理旧测试数据 ===")
db.Collection("warehouse").DeleteMany(ctx, bson.M{"warehouseCode": "WH-TEST-001"})
db.Collection("zone").DeleteMany(ctx, bson.M{"zoneCode": "ZN-TEST-001"})
db.Collection("location").DeleteMany(ctx, bson.M{"locationCode": "LC-TEST-001"})
db.Collection("private_sku").DeleteMany(ctx, bson.M{"skuName": "测试商品-矿泉水550ml"})
db.Collection("private_stock").DeleteMany(ctx, bson.M{"warehouseCode": "WH-TEST-001"})
db.Collection("inventory_count").DeleteMany(ctx, bson.M{"title": bson.M{"$regex": "测试"}})
db.Collection("inventory_count_detail").DeleteMany(ctx, bson.M{})
fmt.Println("✅ 旧测试数据已清理")
// 基础字段MongoBaseDO
base := func() bson.M {
return bson.M{
"creator": "admin",
"createdAt": now,
"updater": "admin",
"updatedAt": now,
"tenantId": float64(1),
"isDeleted": false,
}
}
// 1. 创建仓库(匹配现有数据格式)
warehouseId := bson.NewObjectID()
whDoc := base()
whDoc["_id"] = warehouseId
whDoc["warehouseCode"] = "WH-TEST-001"
whDoc["warehouseName"] = "测试仓库"
whDoc["address"] = "测试地址"
whDoc["contactPerson"] = "测试联系人"
whDoc["contactPhone"] = "13800138000"
whDoc["status"] = "enable"
whDoc["remark"] = "自动生成的测试数据"
_, err = db.Collection("warehouse").InsertOne(ctx, whDoc)
if err != nil {
fmt.Printf("创建仓库失败: %v\n", err)
return
}
fmt.Printf("✅ 仓库已创建: %s\n", warehouseId.Hex())
// 2. 创建库区Zone.WarehouseId是string类型zoneType是string枚举
zoneId := bson.NewObjectID()
znDoc := base()
znDoc["_id"] = zoneId
znDoc["warehouseId"] = warehouseId.Hex()
znDoc["zoneCode"] = "ZN-TEST-001"
znDoc["zoneName"] = "测试库区A"
znDoc["zoneType"] = "normal"
znDoc["status"] = "enable"
znDoc["remark"] = "自动生成的测试数据"
_, err = db.Collection("zone").InsertOne(ctx, znDoc)
if err != nil {
fmt.Printf("创建库区失败: %v\n", err)
return
}
fmt.Printf("✅ 库区已创建: %s\n", zoneId.Hex())
// 3. 创建库位匹配现有数据maxCapacity/currentCapacity为顶层字段
locationId := bson.NewObjectID()
lcDoc := base()
lcDoc["_id"] = locationId
lcDoc["warehouseId"] = warehouseId
lcDoc["zoneId"] = zoneId
lcDoc["locationCode"] = "LC-TEST-001"
lcDoc["locationName"] = "测试库位A-1"
lcDoc["locationType"] = "shelf"
lcDoc["status"] = "idle"
lcDoc["maxCapacity"] = 100
lcDoc["currentCapacity"] = 0
lcDoc["remark"] = "自动生成的测试数据"
_, err = db.Collection("location").InsertOne(ctx, lcDoc)
if err != nil {
fmt.Printf("创建库位失败: %v\n", err)
return
}
fmt.Printf("✅ 库位已创建: %s\n", locationId.Hex())
// 4. 创建私域SKU匹配现有数据格式
skuId := bson.NewObjectID()
skuDoc := base()
skuDoc["_id"] = skuId
skuDoc["skuName"] = "测试商品-矿泉水550ml"
skuDoc["price"] = 200
skuDoc["stock"] = 150
skuDoc["sort"] = 1
skuDoc["capacityUnitType"] = 1
skuDoc["capacity"] = bson.M{"value": 550, "unit": "ml"}
skuDoc["privateCategoryPath"] = "/饮品/矿泉水"
_, err = db.Collection("private_sku").InsertOne(ctx, skuDoc)
if err != nil {
fmt.Printf("创建SKU失败: %v\n", err)
return
}
fmt.Printf("✅ 私域SKU已创建: %s\n", skuId.Hex())
// 5. 创建私域库存2条批次枚举用string类型
for i := 1; i <= 2; i++ {
stockId := bson.NewObjectID()
stDoc := base()
stDoc["_id"] = stockId
stDoc["stockType"] = 2
stDoc["warehouseId"] = warehouseId
stDoc["warehouseCode"] = "WH-TEST-001"
stDoc["warehouseName"] = "测试仓库"
stDoc["zoneId"] = zoneId
stDoc["zoneCode"] = "ZN-TEST-001"
stDoc["zoneName"] = "测试库区A"
stDoc["zoneType"] = "normal"
stDoc["locationId"] = locationId
stDoc["locationCode"] = "LC-TEST-001"
stDoc["locationName"] = "测试库位A-1"
stDoc["locationType"] = "shelf"
stDoc["privateSkuId"] = skuId
stDoc["batchNo"] = fmt.Sprintf("BATCH-TEST-%03d", i)
stDoc["batchQty"] = 50 * i
stDoc["availableQty"] = 50 * i
stDoc["batchStatus"] = 1
stDoc["supportsRecycle"] = false
stDoc["privateCategoryPath"] = "/饮品/矿泉水"
stDoc["stockStatus"] = 1
_, err = db.Collection("private_stock").InsertOne(ctx, stDoc)
if err != nil {
fmt.Printf("创建库存批次%d失败: %v\n", i, err)
return
}
fmt.Printf("✅ 私域库存批次%d已创建: %s (数量:%d)\n", i, stockId.Hex(), 50*i)
}
fmt.Println("\n========== 测试数据创建完成 ==========")
fmt.Printf("仓库ID: %s\n", warehouseId.Hex())
fmt.Printf("库区ID: %s\n", zoneId.Hex())
fmt.Printf("库位ID: %s\n", locationId.Hex())
fmt.Printf("SKU ID: %s\n", skuId.Hex())
fmt.Println("\n可使用仓库ID创建盘点任务进行测试")
}