package sys import ( "context" "crypto/rand" "fmt" "math/big" "hotgo/internal/dao" "github.com/gogf/gf/v2/database/gdb" "github.com/gogf/gf/v2/errors/gerror" ) func newAppMemberInviteCode(ctx context.Context, members *gdb.Model) (string, error) { for attempt := 0; attempt < 20; attempt++ { number, err := rand.Int(rand.Reader, big.NewInt(1000000)) if err != nil { return "", gerror.Wrap(err, "生成邀请码失败") } code := fmt.Sprintf("%06d", number.Int64()) count, err := members.Unscoped().Where(dao.AppMember.Columns().InviteCode, code).Count() if err != nil { return "", gerror.Wrap(err, "检查邀请码失败") } if count == 0 { return code, nil } } return "", gerror.New("邀请码暂时无法生成,请稍后重试") }