package service import ( "fmt" "github.com/gin-gonic/gin" "github.com/golangkit/formatime" "recook/internal/cache" "recook/internal/dbc" "recook/internal/define" "recook/internal/libs/snow" "recook/internal/model/user" "recook/internal/service/baseCode" "recook/tools" "time" ) type registerUser struct { Audit int8 } func NewRegisterUser() *registerUser { return ®isterUser{} } func (r *registerUser) UserAdd(c *gin.Context, login *user.Login, info *user.Information, mobile string) error { DB := dbc.DB tx := DB.Begin() { lastId, _ := snow.GetUserWorker().NextID() //sql := `select max(id)+floor(1+rand()*5) from recook_user_info` //var lastId uint //if err := tx.Raw(sql).Count(&lastId).Error; err != nil { // back.Err(c, err.Error()) // tx.Rollback() // return err //} *info = user.Information{ ID: uint(lastId), AncestorID: 1, Nickname: "左家右厨" + mobile[7:], Mobile: mobile, Birthday: formatime.NewSecondFrom(define.DefaultBirthday), HeadImgUrl: define.DefaultHeadImage, Audit: r.Audit, Phone: mobile, AssessBegin: formatime.NewSecondNow(), // 第一次的起始时间是注册时间 Identifier: time.Now().Format("060102") + baseCode.Encode(uint64(lastId)), } if err := tx.Create(&info).Error; err != nil { tx.Rollback() err = fmt.Errorf("创建用户错误101:" + err.Error()) return err } // 生成邀请码和推荐码 info.InvitationNo = baseCode.Encode(uint64(lastId)) info.IntroCode = "" if err := tx.Save(&info).Error; err != nil { tx.Rollback() err = fmt.Errorf("创建用户错误102:" + err.Error()) return err } // 建立钱包 wallet := user.Wallet{ UserID: info.ID, } if err := tx.Create(&wallet).Error; err != nil { tx.Rollback() err = fmt.Errorf("创建用户错误103:" + err.Error()) return err } deviceType := cache.GetDeviceType(c) *login = user.Login{ LoginTime: formatime.NewSecondNow(), Token: tools.Token(), IP: c.ClientIP(), UserID: info.ID, DeviceType: deviceType, } if err := tx.Create(&login).Error; err != nil { tx.Rollback() err = fmt.Errorf("创建用户错误104:" + err.Error()) return err } //插入首次登录的通知 //这里插入通知 var userNotice = &user.Notice{ Type: 3, UserID: info.ID, Content: "请跳出对话框要求修改昵称", CreatTime: formatime.NewSecondNow(), } tx.Create(userNotice) } tx.Commit() return nil }