diff --git a/model/user-model.go b/model/user-model.go new file mode 100644 index 0000000..50c8b55 --- /dev/null +++ b/model/user-model.go @@ -0,0 +1,27 @@ +package model + +import ( + "time" + + "gorm.io/gorm" +) + +/* +通过分库来区别不同版本的产品-现在的demo逻辑 +用户在后台注册,前台扫码登录,组织ID肯定存在(后期如果开放注册-组织ID可以不存在) +*/ + +type User struct { + ID uint `gorm:"primarykey"` + UserName string `gorm:"column:user_name;type:varchar(30);comment:用户名"` + NickName string `gorm:"column:nick_name;type:varchar(40);comment:昵称"` + OpenID string `gorm:"column:openid;type:varchar(100);not null;index;comment:公众号openid" json:"-"` + Avatar string `gorm:"column:avatar;type:varchar(300);comment:头像地址"` + Mobile string `gorm:"column:mobile;type:varchar(12);not null;index ;comment:手机号"` + Email string `gorm:"column:email;type:varchar(30);comment:email"` + ProjectID string `gorm:"column:project_id;type:varchar(40);comment:项目ID"` //项目 Id admin项目 Id 为 0 + Role string `gorm:"column:role;type:varchar(15);not null;default:guest;comment:角色类型"` // sys、so、admin + CreatedAt time.Time `gorm:"autoCreateTime"` + UpdatedAt time.Time `gorm:"autoUpdateTime"` + DeletedAt gorm.DeletedAt `gorm:"index"` +} diff --git a/utils/snowflake.go b/utils/snowflake.go new file mode 100644 index 0000000..33aaa86 --- /dev/null +++ b/utils/snowflake.go @@ -0,0 +1,42 @@ +package utils + +import ( + "errors" + "time" + + sf "github.com/bwmarrin/snowflake" +) + +const ( + _dafaultStartTime = "2023-12-31" // 默认开始时间 +) + +var node *sf.Node + +// Init 雪花算法组件初始化,正常应该把雪花算法当成一个独立的服务部署 +// startTime 开始时间 +// machineID 机器id +func Init(startTime string, machineID int64) (err error) { + if machineID < 0 { + return errors.New("snowflake need machineID") + } + if len(startTime) == 0 { + startTime = _dafaultStartTime + } + var st time.Time + st, err = time.Parse("2006-01-02", startTime) + if err != nil { + return + } + sf.Epoch = st.UnixNano() / 1000000 // 时间戳的开始时间,默认从1970年开始计算 + node, err = sf.NewNode(machineID) // 机器编号,最多1024 + return +} + +func GenID() int64 { + return node.Generate().Int64() +} + +func GenIDStr() string { + return node.Generate().String() +}