package handlers import ( "awesomeProject/internal/common" "awesomeProject/internal/models" "crypto/md5" "fmt" "log" "gorm.io/gorm" ) // InitHandler 初始化处理器 type InitHandler struct{} // InitDefaultAdmin 初始化默认管理员 func (h *InitHandler) InitDefaultAdmin() error { db := common.GetDB() // 检查是否已有管理员用户 var adminCount int64 db.Model(&models.User{}).Where("system_role = 0").Count(&adminCount) if adminCount > 0 { return nil // 已有管理员,不重复创建 } // 创建默认管理员 hashedPassword := fmt.Sprintf("%x", md5.Sum([]byte("admin123"))) admin := models.User{ Phone: "13800138000", SystemRole: 0, // 管理员 CustomerName: "系统管理员", RealName: "Administrator", Password: hashedPassword, Status: 1, } if err := db.Create(&admin).Error; err != nil { return fmt.Errorf("创建默认管理员失败: %v", err) } // 更新身份码 admin.IdentityCode = fmt.Sprintf("A%08d", admin.ID) if err := db.Model(&admin).Update("identity_code", admin.IdentityCode).Error; err != nil { return fmt.Errorf("更新管理员身份码失败: %v", err) } log.Printf("默认管理员创建成功: 手机号: %s, 密码: admin123", admin.Phone) return nil } // InitDefaultAgent 初始化默认代理商(可选) func (h *InitHandler) InitDefaultAgent() error { db := common.GetDB() // 检查是否已有代理商用户 var agent models.User err := db.Where("phone = ?", "13800138001").First(&agent).Error if err == nil { return nil // 代理商已存在 } else if err != gorm.ErrRecordNotFound { return fmt.Errorf("查询代理商失败: %v", err) } // 创建默认代理商 hashedPassword := fmt.Sprintf("%x", md5.Sum([]byte("agent123"))) agentUser := models.User{ Phone: "13800138001", SystemRole: 1, // 代理商 CustomerName: "测试代理商", RealName: "Test Agent", Password: hashedPassword, Status: 1, } if err := db.Create(&agentUser).Error; err != nil { return fmt.Errorf("创建默认代理商失败: %v", err) } // 更新身份码 agentUser.IdentityCode = fmt.Sprintf("T%08d", agentUser.ID) if err := db.Model(&agentUser).Update("identity_code", agentUser.IdentityCode).Error; err != nil { return fmt.Errorf("更新代理商身份码失败: %v", err) } log.Printf("默认代理商创建成功: 手机号: %s, 密码: agent123", agentUser.Phone) return nil } // InitTestUsers 初始化测试用户 func (h *InitHandler) InitTestUsers() error { db := common.GetDB() // 获取代理商身份码 var agent models.User if err := db.Where("system_role = 1").First(&agent).Error; err != nil { return nil // 没有代理商,跳过创建测试用户 } // 创建测试用户 testUsers := []models.User{ { Phone: "13800138002", SystemRole: 2, // 普通用户 CustomerName: "测试用户1", RealName: "Test User 1", Password: fmt.Sprintf("%x", md5.Sum([]byte("user123"))), ReferrerIdentityCode: agent.IdentityCode, Status: 1, }, { Phone: "13800138003", SystemRole: 2, // 普通用户 CustomerName: "测试用户2", RealName: "Test User 2", Password: fmt.Sprintf("%x", md5.Sum([]byte("user123"))), ReferrerIdentityCode: agent.IdentityCode, Status: 1, }, } for i, user := range testUsers { // 检查用户是否已存在 var existUser models.User if err := db.Where("phone = ?", user.Phone).First(&existUser).Error; err == nil { continue // 用户已存在,跳过 } if err := db.Create(&user).Error; err != nil { return fmt.Errorf("创建测试用户失败: %v", err) } // 更新身份码 user.IdentityCode = fmt.Sprintf("U%08d", user.ID) if err := db.Model(&user).Update("identity_code", user.IdentityCode).Error; err != nil { return fmt.Errorf("更新用户身份码失败: %v", err) } testUsers[i] = user log.Printf("测试用户创建成功: 手机号: %s, 密码: user123", user.Phone) } return nil } // InitAll 初始化所有数据 func (h *InitHandler) InitAll() error { // 初始化默认管理员 if err := h.InitDefaultAdmin(); err != nil { return err } // 初始化默认代理商 if err := h.InitDefaultAgent(); err != nil { return err } // 初始化测试用户 if err := h.InitTestUsers(); err != nil { return err } return nil }