fonchain-artistinfo/cmd/internal/dao/artistInfo.go
2022-12-09 16:24:12 +08:00

442 lines
14 KiB
Go

package dao
import (
"encoding/json"
"errors"
"fmt"
"time"
"github.com/fonchain-artistserver/cmd/model"
artistInfo "github.com/fonchain-artistserver/pb/artistinfo"
"github.com/fonchain-artistserver/pkg/cache"
db "github.com/fonchain-artistserver/pkg/db"
"github.com/fonchain-artistserver/pkg/m"
"github.com/fonchain-artistserver/pkg/util"
"go.uber.org/zap"
)
func User(req *artistInfo.GetUserInfoRequest) (rep *artistInfo.GetUserInfoRespond, err error) {
rep = &artistInfo.GetUserInfoRespond{}
service := rep.Data
var user model.User
if err = db.DB.First(&user, "id = ?", int32(req.Id)).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
var realName model.RealName
if err = db.DB.First(&realName, "id = ?", user.RealNameID).Error; err != nil {
zap.L().Error("get realName info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
var artworkList []model.Artwork
if err = db.DB.Where("artist_id = ? ", int32(req.Id)).Find(&artworkList).Error; err != nil {
zap.L().Error("get artworkList info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
for _, v := range artworkList {
if v.State == 3 {
service.Ruler = service.Ruler + v.Ruler
}
}
service.TelNum = user.TelNum
service.CertificateNum = user.CertificateNum
if user.CertificateImg != "" {
service.CertificateImg = fmt.Sprintf("%v?v=%d", user.CertificateImg, user.UpdatedAt.Unix())
}
service.RealName = realName.Name
service.PenName = user.PenName
service.Age = int32(util.IdCardTurnAge(realName.IDNum))
service.IdCard = realName.IDNum
service.StageName = user.StageName
service.WxAccount = user.WxAccount
service.JoinAssoTime = user.JoinAssoTime
service.IdCardFront = fmt.Sprintf("%v?v=%d", realName.IdcardFront, realName.UpdatedAt.Unix())
service.IdCardBack = fmt.Sprintf("%v?v=%d", realName.IdcardBack, realName.UpdatedAt.Unix())
var conAddressArr []string
err = json.Unmarshal([]byte(user.ConAddress), &conAddressArr)
if err != nil {
zap.L().Error("conAddressArr unmarshal err", zap.Error(err))
err = errors.New(m.ERROR_UNMARSHAL)
return nil, err
}
service.ConAddress = conAddressArr
service.InvitedCode = user.InvitedCode
var invited model.Invite
if err = db.DB.Where("user_id=?", user.ID).First(&invited).Error; err != nil {
//如果查询不到,返回相应的错误
if err.Error() == "record not found" {
user.InvitedCode = ""
}
//数据库操作异常
zap.L().Error("get invite info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
var invitedUser model.User
if err = db.DB.Where("id=?", invited.InvitedId).First(&invitedUser).Error; err != nil {
//如果查询不到,返回相应的错误
if err.Error() == "record not found" {
user.InvitedCode = ""
return nil, err
}
//数据库操作异常
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
service.InvitedName = invitedUser.Name
service.Sex = user.Sex
service.FddState = user.FddState
service.CustomerId = user.CustomerId
service.Photo = fmt.Sprintf("%v?v=%d", user.Photo, user.UpdatedAt.Unix())
if user.Video != "" {
service.Video = fmt.Sprintf("%v?v=%d", user.Video, user.UpdatedAt.Unix())
}
service.QrCodeImg = fmt.Sprintf("https://cdn.fontree.cn/artistmgmt/static/qrcode/%v.png", user.InvitedCode)
// service.QrCodeImgDownload = fmt.Sprintf("https://cdn.fontree.cn/artistmgmt/static/qrcode/%v-2.png", user.InvitedCode)
// service.QrCodeImgDownload=("http://192.168.1.18:9400/qrcodebg.png")
service.QrCodeImgDownload = fmt.Sprintf("https://cdn.fontree.cn/artistmgmt/static/qrcode/%v-2.png", user.InvitedCode)
rep.Data = service
return rep, nil
}
// Update 用户修改信息
func Create(req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.CreateUserInfoRespond, err error) {
rep = &artistInfo.CreateUserInfoRespond{}
// user := rep.User
var user model.User
// user := rep.User
if err = db.DB.First(&user, "id = ?", int32(req.Id)).Error; err != nil {
//数据库操作异常
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
var realNameFind model.RealName
if err = db.DB.First(&realNameFind, "id_num = ?", req.UserUpdateInfoService.IdCard).Error; err != nil {
zap.L().Error("get realName info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
} else {
if realNameFind.ID != 0 {
return nil, errors.New(m.ERROR_ALREADY_AUTH)
}
}
var realname = model.RealName{
Name: req.UserUpdateInfoService.RealName,
IDNum: req.UserUpdateInfoService.IdCard,
TelNum: req.UserUpdateInfoService.TelNum,
IdcardFront: req.UserUpdateInfoService.IdCardFront,
IdcardBack: req.UserUpdateInfoService.IdCardBack,
}
if err = db.DB.Save(&realname).Error; err != nil {
zap.L().Error("save realName info err", zap.Error(err))
err = errors.New(m.SAVE_ERROR)
return nil, err
}
if err = db.DB.First(&realname, "id_num=?", realname.IDNum).Error; err != nil {
zap.L().Error("get realName info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
user.ID = int32(req.Id)
user.Name = req.UserUpdateInfoService.RealName
user.PenName = req.UserUpdateInfoService.PenName
user.RealNameID = int32(realname.ID)
user.StageName = req.UserUpdateInfoService.StageName
user.Age = int32(util.IdCardTurnAge(realname.IDNum))
user.Sex = int32(req.UserUpdateInfoService.Sex)
user.JoinAssoTime = req.UserUpdateInfoService.JoinAssoTime
user.CertificateNum = req.UserUpdateInfoService.CertificateNum
conAddessByte, err := json.Marshal(req.UserUpdateInfoService.ConAddress)
if err != nil {
zap.L().Error("conAddress marshal err", zap.Error(err))
err = errors.New(m.ERROR_MARSHAL)
return nil, err
}
user.ConAddress = string(conAddessByte)
user.CreateAt = time.Now().Unix()
user.Photo = req.UserUpdateInfoService.Photo
user.WxAccount = req.UserUpdateInfoService.WxAccount
user.CertificateImg = req.UserUpdateInfoService.CertificateImg
user.Video = req.UserUpdateInfoService.Video
user.IsRealName = true
var invite model.Invite
if err = db.DB.Where("user_id = ?", user.ID).First(&invite).Error; err != nil {
zap.L().Error("get invite info err", zap.Error(err))
if err.Error() == "record not found" {
} else {
err = errors.New(m.SAVE_ERROR)
return nil, err
}
}
if invite.ID == 0 {
res, err := CheckInvitedCode(req.UserUpdateInfoService.InvitedCode)
if err != nil {
Createinvite(user.ID, res.ID)
}
}
user.ID = int32(req.Id)
if err = db.DB.Save(user).Error; err != nil {
zap.L().Error("save user info err", zap.Error(err))
err = errors.New(m.SAVE_ERROR)
return nil, err
}
copyOpt := util.CopyOption{
Src: &user,
Dst: rep.User,
}
util.CopyStructSuper(copyOpt)
return rep, nil
}
// 用户修改信息
func GetUserInfoSelf(id int64) (rep *model.UserUpdateInfoService, err error) {
rep = &model.UserUpdateInfoService{}
var user model.User
if err = db.DB.First(&user, "id = ?", int32(id)).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
var realName model.RealName
if err = db.DB.First(&realName, "id = ?", user.RealNameID).Error; err != nil {
zap.L().Error("get realName info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
var artworkList []model.Artwork
if err = db.DB.Where("artist_id = ? ", uint(id)).Find(&artworkList).Error; err != nil {
zap.L().Error("get artworkList info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
for _, v := range artworkList {
if v.State == 3 {
rep.Ruler = rep.Ruler + int32(v.Ruler)
}
}
rep.TelNum = user.TelNum
rep.CertificateNum = user.CertificateNum
if user.CertificateImg != "" {
rep.CertificateImg = fmt.Sprintf("%v?v=%d", user.CertificateImg, user.UpdatedAt.Unix())
}
rep.RealName = realName.Name
rep.PenName = user.PenName
rep.Age = int32(util.IdCardTurnAge(realName.IDNum))
rep.IdCard = realName.IDNum
rep.StageName = user.StageName
rep.WxAccount = user.WxAccount
rep.JoinAssoTime = user.JoinAssoTime
rep.IdCardFront = fmt.Sprintf("%v?v=%d", realName.IdcardFront, realName.UpdatedAt.Unix())
rep.IdCardBack = fmt.Sprintf("%v?v=%d", realName.IdcardBack, realName.UpdatedAt.Unix())
var conAddressArr []string
err = json.Unmarshal([]byte(user.ConAddress), &conAddressArr)
if err != nil {
zap.L().Error("conAddressArr unmarshal err", zap.Error(err))
err = errors.New(m.ERROR_UNMARSHAL)
return nil, err
}
rep.ConAddress = conAddressArr
rep.InvitedCode = user.InvitedCode
var invited model.Invite
if err = db.DB.Where("user_id=?", user.ID).First(&invited).Error; err != nil {
zap.L().Error("get invited info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
var invitedUser model.User
if err = db.DB.Where("id=?", invited.InvitedId).First(&invitedUser).Error; err != nil {
zap.L().Error("get invitedUser info err", zap.Error(err))
err = errors.New(m.ERROR_UNMARSHAL)
return
}
rep.InvitedName = invitedUser.Name
rep.Sex = user.Sex
rep.FddState = user.FddState
rep.CustomerId = user.CustomerId
rep.Photo = fmt.Sprintf("%v?v=%d", user.Photo, user.UpdatedAt.Unix())
if user.Video != "" {
rep.Video = fmt.Sprintf("%v?v=%d", user.Video, user.UpdatedAt.Unix())
}
rep.QrCodeImg = fmt.Sprintf("https://cdn.fontree.cn/artistmgmt/static/qrcode/%v.png", user.InvitedCode)
rep.QrCodeImgDownload = fmt.Sprintf("https://cdn.fontree.cn/artistmgmt/static/qrcode/%v-2.png", user.InvitedCode)
return rep, nil
}
func Update(req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.UpdateUserInfoRespond, err error) {
rep = &artistInfo.UpdateUserInfoRespond{}
var user model.User
if err = db.DB.First(&user, "id = ?", int32(req.Id)).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
user.PenName = req.UserUpdateInfoService.PenName
user.Photo = req.UserUpdateInfoService.Photo
user.Video = req.UserUpdateInfoService.Video
user.CertificateImg = req.UserUpdateInfoService.CertificateImg
conAddessByte, err := json.Marshal(req.UserUpdateInfoService.ConAddress)
if err != nil {
zap.L().Error("conAddress marshal err", zap.Error(err))
err = errors.New(m.ERROR_MARSHAL)
return nil, err
}
user.ConAddress = string(conAddessByte)
user.WxAccount = req.UserUpdateInfoService.WxAccount
user.CertificateNum = req.UserUpdateInfoService.CertificateNum
if err = db.DB.Save(&user).Error; err != nil {
zap.L().Error("save user info err", zap.Error(err))
err = errors.New(m.SAVE_ERROR)
return
}
var realName model.RealName
if err = db.DB.First(&realName, "id = ?", user.RealNameID).Error; err != nil {
zap.L().Error("get RealName info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
realName.IdcardBack = req.UserUpdateInfoService.IdCardBack
realName.IdcardFront = req.UserUpdateInfoService.IdCardFront
if err = db.DB.Save(&realName).Error; err != nil {
zap.L().Error("save realName info err", zap.Error(err))
err = errors.New(m.SAVE_ERROR)
return
}
copyOpt := util.CopyOption{
Src: &user,
Dst: rep.User,
}
util.CopyStructSuper(copyOpt)
return
}
func UpdateTel(req *artistInfo.UserUpdateTelRequest) (rep *artistInfo.UserUpdateTelRespond, err error) {
rep = &artistInfo.UserUpdateTelRespond{}
var user model.User
if err = db.DB.First(&user, int32(req.Id)).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
str := cache.RedisClient.Get(req.TelNum)
verCode := str.Val()
if verCode != req.VerCode {
zap.L().Error("verCode err", zap.Error(err))
err = errors.New(m.ERRORCODE)
return
}
if user.TelNum == req.TelNum {
zap.L().Error("TelNum err", zap.Error(err))
err = errors.New(m.ERROT_SAME_TEL)
return
}
user.TelNum = req.TelNum
if err = db.DB.Save(&user).Error; err != nil {
zap.L().Error("save user info err", zap.Error(err))
err = errors.New(m.SAVE_ERROR)
return
}
rep.TelNum = user.TelNum
return
}
func UpdateMsg(req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.UserUpdateMsgRespond, err error) {
var user model.User
user.IsRealName = true
user.ID = int32(req.Id)
if err = db.DB.Model(&user).Update("is_read", 1).Error; err != nil {
zap.L().Error("user update failed", zap.Error(err))
err = errors.New(m.UPDATE_FAILED)
return
}
return
}
func VerifyFdd(req *artistInfo.VerifyfddRequest) (rep *artistInfo.VerifyfddRespond, err error) {
rep = &artistInfo.VerifyfddRespond{}
var user model.User
if err = db.DB.Where("id = ?", int32(req.Id)).First(&user).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return
}
if user.FddState != 2 {
return
}
rep.Ready = true
return
}
func FinishVerify(req *artistInfo.FinishVerifyRequest) (rep *artistInfo.FinishVerifyRespond, err error) {
rep = &artistInfo.FinishVerifyRespond{}
var user model.User
user.ID = int32(req.Id)
if err = db.DB.Model(&user).Update("fdd_state", 2).Error; err != nil {
zap.L().Error("user update failed", zap.Error(err))
err = errors.New(m.UPDATE_FAILED)
return
}
copyOpt := util.CopyOption{
Src: &user,
Dst: rep.User,
}
util.CopyStructSuper(copyOpt)
return
}
func CheckInvitedCode(invitedCode string) (user *model.User, err error) {
user = &model.User{}
//找到用户
if err := db.DB.Where("invited_code =?", invitedCode).Find(user).Error; err != nil {
zap.L().Error("get user info err", zap.Error(err))
err = errors.New(m.ERROR_SELECT)
return nil, err
}
if user.ID == 0 {
err = errors.New(m.INVITE_CODE_INVALID)
return nil, err
}
return user, nil
}
func Createinvite(userId, invitedId int32) (invite *model.Invite, err error) {
invite = &model.Invite{}
invite.UserId = userId
invite.InvitedId = invitedId
if err := db.DB.Create(&invite).Error; err != nil {
zap.L().Error("create invite info err", zap.Error(err))
err = errors.New(m.CREATE_ERROR)
return nil, err
}
return invite, nil
}