165 lines
5.2 KiB
Go
165 lines
5.2 KiB
Go
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创建盘点任务进行测试")
|
||
}
|