package main import ( "log" "golang.org/x/crypto/bcrypt" "kefu-cloud/server/internal/config" "kefu-cloud/server/internal/model" ) func main() { cfg := config.Load() model.InitDB(cfg.Database.DSN()) seed() log.Println("种子数据填充完成") } // seed 仅初始化平台运行所需的最小数据:平台管理员账号与套餐定价。 // 租户、坐席、渠道、知识库等业务数据请通过平台管理后台正常开通创建, // 不再预置任何虚构的演示/测试数据。 func seed() { hash, _ := bcrypt.GenerateFromPassword([]byte("kefu_admin123"), bcrypt.DefaultCost) pwd := string(hash) model.EnsurePermissions() // 平台管理员(TenantID=0) var count int64 model.DB.Model(&model.User{}).Where("username = ?", "platform_admin").Count(&count) if count == 0 { model.DB.Create(&model.User{ TenantID: 0, Role: "platform_admin", Username: "platform_admin", PasswordHash: pwd, Nickname: "平台管理员", Status: "online", }) log.Println("平台管理员账号: platform_admin / kefu_admin123") } else { log.Println("平台管理员账号已存在,跳过") } // 套餐定价 var planCount int64 model.DB.Model(&model.Plan{}).Count(&planCount) if planCount == 0 { plans := []model.Plan{ {Name: "基础版", PriceMonthly: 299, Seats: 2, StorageDays: 30, KBLimit: 50, Status: "active", Features: `{"stats":"basic","api":false,"channels":["web"],"brand":false}`}, {Name: "专业版", PriceMonthly: 699, Seats: 10, StorageDays: 180, KBLimit: 500, Status: "active", Features: `{"stats":"advanced","api":true,"channels":["web","wechat","app"],"brand":true}`}, {Name: "企业版", PriceMonthly: 1999, Seats: 50, StorageDays: 0, KBLimit: 0, Status: "active", Features: `{"stats":"custom","api":true,"channels":["all"],"brand":true,"dedicated":true}`}, } model.DB.Create(&plans) log.Println("已初始化默认套餐:基础版 / 专业版 / 企业版") } else { log.Println("套餐已存在,跳过") } }