|
|
|
|
package service
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
"github.com/golangkit/formatime"
|
|
|
|
|
"log"
|
|
|
|
|
"recook/internal/back"
|
|
|
|
|
"recook/internal/cache"
|
|
|
|
|
"recook/internal/dbc"
|
|
|
|
|
"recook/internal/define"
|
|
|
|
|
"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, invitationNo string) error {
|
|
|
|
|
DB := dbc.DB
|
|
|
|
|
tx := DB.Begin()
|
|
|
|
|
{
|
|
|
|
|
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: lastId,
|
|
|
|
|
AncestorID: 1,
|
|
|
|
|
Nickname: "瑞库客" + mobile[7:],
|
|
|
|
|
Mobile: mobile,
|
|
|
|
|
Birthday: formatime.NewSecondFrom(define.DefaultBirthday),
|
|
|
|
|
HeadImgUrl: define.DefaultHeadImage,
|
|
|
|
|
Audit: r.Audit,
|
|
|
|
|
Phone: mobile,
|
|
|
|
|
AssessBegin: formatime.NewSecondNow(), // 第一次的起始时间是注册时间
|
|
|
|
|
//AssessEnd: formatime.NewDateFrom(comFunc.NextAssessTime(time.Now())), // 获取下次考核时间
|
|
|
|
|
Identifier: time.Now().Format("060102") + baseCode.GetRandomStringForSix(),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := tx.Create(&info).Error; err != nil {
|
|
|
|
|
tx.Rollback()
|
|
|
|
|
err = fmt.Errorf("创建用户错误101:" + err.Error())
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 生成邀请码和推荐码
|
|
|
|
|
info.InvitationNo = baseCode.GetRandomString(baseCode.InviteCodeLen)
|
|
|
|
|
info.IntroCode = baseCode.GetRandomString(baseCode.IntroCodeLen)
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
// 新的继续沿用他的这层关系表
|
|
|
|
|
// 向层级表插入
|
|
|
|
|
//var SuperiorUserInfo user.Information
|
|
|
|
|
//if partner != 0 {
|
|
|
|
|
// // 如果合伙人有值,那就表示他是推荐升级的用户
|
|
|
|
|
// dbc.DB.Find(&SuperiorUserInfo, partner)
|
|
|
|
|
//} else {
|
|
|
|
|
// SuperiorUserInfo = *inviter
|
|
|
|
|
//}
|
|
|
|
|
//if err := insertNode(tx, &SuperiorUserInfo, info.ID); err != nil {
|
|
|
|
|
// tx.Rollback()
|
|
|
|
|
// err = fmt.Errorf("创建用户错误105:" + err.Error())
|
|
|
|
|
// return err
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
//如果code是7位 要去记录码的注册记录
|
|
|
|
|
if len(invitationNo) == 7 {
|
|
|
|
|
//去插入记录
|
|
|
|
|
var topCode user.TopCode
|
|
|
|
|
err := dbc.DB.First(&topCode, "code=?", invitationNo).Error
|
|
|
|
|
if err == nil && topCode.ID > 0 {
|
|
|
|
|
topCodenum := user.TopCodenum{
|
|
|
|
|
Code: invitationNo,
|
|
|
|
|
CreatedTime: formatime.NewSecondNow(),
|
|
|
|
|
UserId: info.ID,
|
|
|
|
|
PId: topCode.UserId,
|
|
|
|
|
}
|
|
|
|
|
if err := tx.Create(&topCodenum).Error; err != nil {
|
|
|
|
|
tx.Rollback()
|
|
|
|
|
err = fmt.Errorf("创建平台记录失败:" + err.Error())
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
tx.Commit()
|
|
|
|
|
|
|
|
|
|
// 放入待统计的队列中
|
|
|
|
|
go func(code string, userId uint) {
|
|
|
|
|
uc := cache.NewUserCode(code, userId) //返回一个结构体,code是上级推荐码,userid是下级id
|
|
|
|
|
if err := uc.ProducerCode(); err != nil { //带着这个结构体去访问这个结构体的方法
|
|
|
|
|
log.Println("Panic 放入队列错误", err.Error())
|
|
|
|
|
}
|
|
|
|
|
}(invitationNo, info.ID)
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|