You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
4.0 KiB

6 months ago
package service
import (
"bkb-seller/global"
"bkb-seller/model"
"bkb-seller/utils"
"errors"
uuid "github.com/satori/go.uuid"
"gorm.io/gorm"
)
func LoginByPhone(u *model.User) (err error, userInter *model.User) {
var (
user model.User
authorities []model.SysAuthority
)
err = global.MG_DB.Model(&model.User{}).Where("phone_code = ? AND phone = ? and appid=? and type=?", u.PhoneCode, u.Phone, u.Appid, "seller").First(&user).Error
if err != nil {
return errors.New("用户名不存在或者密码错误"), nil
}
e := Casbin()
res := e.GetRolesForUserInDomain(user.UUID.String(), u.Appid)
if len(res) > 0 {
err = global.MG_DB.Where("authority_id IN ?", res).Find(&authorities).Error
} else {
err = errors.New("该用户未分配角色")
}
for _, v := range authorities {
if user.AuthorityID == v.AuthorityId {
user.Authority = v
break
}
}
user.Authorities = authorities
return err, &user
}
func LoginByEmail(u *model.User) (err error, userInter *model.User) {
var (
user model.User
authorities []model.SysAuthority
)
if errors.Is(global.MG_DB.Where("email = ? and appid=? and type=?", u.Email, u.Appid, "seller").First(&user).Error, gorm.ErrRecordNotFound) { // 判断email是否注册
return errors.New("邮箱未注册"), userInter
}
u.Password = utils.MD5V([]byte(u.Password))
err = global.MG_DB.Where("email = ? AND password = ? and appid=? and type=?", u.Email, u.Password, u.Appid, "seller").First(&user).Error
if err != nil {
return errors.New("密码错误"), userInter
}
e := Casbin()
res := e.GetRolesForUserInDomain(user.UUID.String(), u.Appid)
if len(res) > 0 {
err = global.MG_DB.Where("authority_id IN ?", res).Find(&authorities).Error
} else {
err = errors.New("该用户未分配角色")
}
for _, v := range authorities {
if user.AuthorityID == v.AuthorityId {
user.Authority = v
break
}
}
user.Authorities = authorities
return nil, &user
}
func Register(u model.User) (err error, userInter model.User) {
var user model.User
if !errors.Is(global.MG_DB.Where("phone = ? and appid=? and type=?", u.Phone, u.Appid, "seller").First(&user).Error, gorm.ErrRecordNotFound) { // 判断手机号是否注册
return errors.New("手机号已注册"), userInter
}
if !errors.Is(global.MG_DB.Where("email = ? and appid=? and type=?", u.Email, u.Appid, "seller").First(&user).Error, gorm.ErrRecordNotFound) { // 判断email是否注册
return errors.New("邮箱已注册"), userInter
}
tx := global.MG_DB.Begin()
storeNo := utils.GetUUIDv4()
// 附加uuid 密码md5简单加密 注册
u.Password = utils.MD5V([]byte(u.Password))
u.UUID = uuid.NewV4()
u.Type = "seller"
u.Avatar = "https://minio.sumweal.com/nft/221109/C82M980ZLumQCzt857yxur92iAsGdCc7271sDn8MPf666sk44V.png"
u.AuthorityID = 1
u.NickName = "商家用户"
u.RelationID = storeNo
err = tx.Create(&u).Error
if err != nil {
tx.Rollback()
err = errors.New("注册失败")
return err, u
}
//创建个人店铺
err = tx.Create(&model.SellerStore{StoreNo: storeNo, Type: 1, Email: u.Email, CreateBy: u.UUID.String()}).Error
if err != nil {
tx.Rollback()
err = errors.New("注册失败2")
return err, u
}
var wallet model.Wallet
//卖家端钱包userid为店铺编号
wallet.UserID = storeNo
wallet.Platform = "seller"
err = tx.Model(&model.Wallet{}).Create(&wallet).Error
if err != nil {
tx.Rollback()
err = errors.New("注册失败2")
return err, u
}
tx.Commit()
InitSellerRole(u.UUID.String(), "1", u.Appid)
return err, u
}
func RecoverPassword(u model.User) (err error, userInter model.User) {
var user model.User
if global.MG_DB.Where("email = ?", u.Email).First(&user).Error != nil { // 判断email是否注册
return errors.New("邮箱未注册"), userInter
}
if global.MG_DB.Where("email = ? AND phone = ?", u.Email, u.Phone).First(&user).Error != nil { // 判断email是否注册
return errors.New("邮箱与手机号不匹配"), userInter
}
u.Password = utils.MD5V([]byte(u.Password))
err = global.MG_DB.Model(&user).Updates(&u).Error
return err, u
}