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 }