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