上传artistinfo微服务

This commit is contained in:
songchuang 2022-12-09 16:24:12 +08:00
commit 928a9f0387
52 changed files with 6190 additions and 0 deletions

33
DockerfileWindowsTest Normal file
View File

@ -0,0 +1,33 @@
FROM golang:alpine AS builder
LABEL stage=gobuilder
#ENV DUBBO_GO_CONFIG_PATH ./conf/dubbogo.yaml
#ENV MODE_ENV test
ENV CGO_ENABLED 0
ENV GOPROXY https://goproxy.cn,direct
#RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
#RUN apk update --no-cache && apk add --no-cache tzdata
WORKDIR /build
COPY ./utils ../utils
ADD ./fonchain-backup/go.mod .
ADD ./fonchain-backup/go.sum .
RUN go mod download
COPY ./fonchain-backup .
RUN go build -ldflags "-s -w" -o /app/backup ./cmd/app.go
FROM alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update --no-cache
RUN apk add --no-cache ca-certificates
RUN apk add --no-cache tzdata
COPY ./fonchain-backup/conf /app/conf
COPY ./fonchain-backup/conf /conf
ENV TZ Asia/Shanghai
ENV DUBBO_GO_CONFIG_PATH ./conf/dubbogo.yaml
WORKDIR /app
COPY --from=builder /app/backup .
EXPOSE 9021
CMD ["/app/backup"]

26
cmd/app.go Normal file
View File

@ -0,0 +1,26 @@
package main
import (
"fmt"
"dubbo.apache.org/dubbo-go/v3/config"
_ "dubbo.apache.org/dubbo-go/v3/imports"
"github.com/fonchain-artistserver/cmd/internal/controller"
"github.com/fonchain-artistserver/pkg/cache"
db "github.com/fonchain-artistserver/pkg/db"
"github.com/fonchain-artistserver/pkg/m"
)
// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-server/conf/dubbogo.yaml
func main() {
fmt.Println("第一处")
config.SetProviderService(&controller.ArtistInfoProvider{})
db.Init(m.SERVER_CONFIG)
cache.InitRedis(m.SERVER_CONFIG)
if err := config.Load(); err != nil {
panic(err)
}
select {}
}

View File

@ -0,0 +1,77 @@
package controller
import (
"context"
"fmt"
"github.com/fonchain-artistserver/cmd/internal/logic"
artistInfo "github.com/fonchain-artistserver/pb/artistinfo"
)
type ArtistInfoProvider struct {
artistInfo.UnimplementedArtistInfoServer
artistInfoLogic *logic.ArtistInfo
}
func (a *ArtistInfoProvider) GetUserInfo(ctx context.Context, req *artistInfo.GetUserInfoRequest) (rep *artistInfo.GetUserInfoRespond, err error) {
fmt.Println("第一处")
// backup := &artistInfo.GetUserInfoRespond{}
if rep, err = a.artistInfoLogic.GetUserInfo(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *ArtistInfoProvider) CreateUserInfo(ctx context.Context, req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.CreateUserInfoRespond, err error) {
fmt.Println("第一处")
// backup := &artistInfo.GetUserInfoRespond{}
if rep, err = a.artistInfoLogic.CreateUserInfo(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *ArtistInfoProvider) UpdateUserInfo(ctx context.Context, req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.UpdateUserInfoRespond, err error) {
fmt.Println("第一处")
// backup := &artistInfo.GetUserInfoRespond{}
if rep, err = a.artistInfoLogic.UpdateUserInfo(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *ArtistInfoProvider) UserUpdateTel(ctx context.Context, req *artistInfo.UserUpdateTelRequest) (rep *artistInfo.UserUpdateTelRespond, err error) {
fmt.Println("第一处")
// backup := &artistInfo.GetUserInfoRespond{}
if rep, err = a.artistInfoLogic.UserUpdateTel(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *ArtistInfoProvider) UserUpdateMsg(ctx context.Context, req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.UserUpdateMsgRespond, err error) {
fmt.Println("第一处")
// backup := &artistInfo.GetUserInfoRespond{}
if rep, err = a.artistInfoLogic.UserUpdateMsg(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *ArtistInfoProvider) Verifyfdd(ctx context.Context, req *artistInfo.VerifyfddRequest) (rep *artistInfo.VerifyfddRespond, err error) {
fmt.Println("第一处")
// backup := &artistInfo.GetUserInfoRespond{}
if rep, err = a.artistInfoLogic.Verifyfdd(req); err != nil {
return nil, err
}
return rep, nil
}
func (a *ArtistInfoProvider) FinishVerify(ctx context.Context, req *artistInfo.FinishVerifyRequest) (rep *artistInfo.FinishVerifyRespond, err error) {
fmt.Println("第一处")
// backup := &artistInfo.GetUserInfoRespond{}
if rep, err = a.artistInfoLogic.FinishVerify(req); err != nil {
return nil, err
}
return rep, nil
}

View File

@ -0,0 +1,441 @@
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
}

View File

@ -0,0 +1,151 @@
package logic
import (
"encoding/base64"
"fmt"
"strings"
"github.com/fonchain-artistserver/cmd/internal/dao"
"github.com/fonchain-artistserver/cmd/model"
artistInfo "github.com/fonchain-artistserver/pb/artistinfo"
"github.com/fonchain-artistserver/pkg/m"
"github.com/fonchain-artistserver/pkg/util"
fdd "github.com/fonchain/electronic-contract/server"
"go.uber.org/zap"
)
type IArtistInfo interface {
GetUserInfo(req *artistInfo.GetUserInfoRequest) (rep *artistInfo.GetUserInfoRespond, err error)
CreateUserInfo(req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.CreateUserInfoRespond, err error)
UpdateUserInfo(req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.UpdateUserInfoRespond, err error)
UserUpdateTel(req *artistInfo.UserUpdateTelRequest) (rep *artistInfo.UserUpdateTelRespond, err error)
UserUpdateMsg(req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.UserUpdateMsgRespond, err error)
Verifyfdd(req *artistInfo.VerifyfddRequest) (rep *artistInfo.VerifyfddRespond, err error)
FinishVerify(req *artistInfo.FinishVerifyRequest) (rep *artistInfo.FinishVerifyRespond, err error)
}
func NewArtistInfo() IArtistInfo {
return &ArtistInfo{}
}
type ArtistInfo struct{}
func (a *ArtistInfo) GetUserInfo(req *artistInfo.GetUserInfoRequest) (rep *artistInfo.GetUserInfoRespond, err error) {
rep, err = dao.User(req)
return
}
func (a *ArtistInfo) CreateUserInfo(req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.CreateUserInfoRespond, err error) {
// rep = &artistInfo.CreateUserInfoRespond{}
util.CreateArtistInfo(req.Id)
rep, err = dao.Create(req)
if err != nil {
return
}
fddClient, err := fdd.NewFddClient()
if err != nil {
zap.L().Error("newFddClient err", zap.Error(err))
return
}
userInfos, err := dao.GetUserInfoSelf(req.Id)
if err != nil {
zap.L().Error("getUserInfoSelf err", zap.Error(err))
return rep, nil
}
err = util.CreateQrCode(userInfos.InvitedCode, userInfos.RealName)
if err != nil {
zap.L().Error("createQrCode err", zap.Error(err))
return
}
_, b, err := fddClient.PersonVerify(userInfos.CustomerId, "1", req.UserUpdateInfoService.RealName, req.UserUpdateInfoService.IdCard, req.UserUpdateInfoService.TelNum, fmt.Sprintf("%v/contractreturn?id=%d&htmltype=%s&envtype=%s", m.ReturnUrl, req.Id, req.UserUpdateInfoService.HtmlType, req.UserUpdateInfoService.EnvType))
if err != nil {
zap.L().Error("fddClient personVerify err", zap.Error(err))
return
}
url, err := base64.StdEncoding.DecodeString(b)
if err != nil {
return
}
rep.Url = string(url)
return
}
func (a *ArtistInfo) UpdateUserInfo(req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.UpdateUserInfoRespond, err error) {
util.CreateArtistInfo(req.Id)
req.UserUpdateInfoService.Photo = strings.Split(req.UserUpdateInfoService.Photo, "?v=")[0]
//转移画家视频
req.UserUpdateInfoService.CertificateImg = strings.Split(req.UserUpdateInfoService.CertificateImg, "?v=")[0]
//转移画家视频
req.UserUpdateInfoService.Video = strings.Split(req.UserUpdateInfoService.Video, "?v=")[0]
//转移身份证正面
req.UserUpdateInfoService.IdCardFront = strings.Split(req.UserUpdateInfoService.IdCardFront, "?v=")[0]
req.UserUpdateInfoService.IdCardBack = strings.Split(req.UserUpdateInfoService.IdCardBack, "?v=")[0]
rep, err = dao.Update(req)
return
}
func (a *ArtistInfo) UserUpdateTel(req *artistInfo.UserUpdateTelRequest) (rep *artistInfo.UserUpdateTelRespond, err error) {
rep, err = dao.UpdateTel(req)
return
}
func (a *ArtistInfo) UserUpdateMsg(req *artistInfo.UserInfoCommonRequest) (rep *artistInfo.UserUpdateMsgRespond, err error) {
rep, err = dao.UpdateMsg(req)
return
}
func (a *ArtistInfo) Verifyfdd(req *artistInfo.VerifyfddRequest) (rep *artistInfo.VerifyfddRespond, err error) {
rep, err = dao.VerifyFdd(req)
if err != nil {
if !rep.Ready {
fddClient, err := fdd.NewFddClient()
if err != nil {
zap.L().Error("newFddClient err", zap.Error(err))
return rep, err
}
userInfo, err := dao.GetUserInfoSelf(req.Id)
if err != nil {
zap.L().Error("getUserInfoSelf err", zap.Error(err))
return rep, nil
}
err = util.CreateQrCode(userInfo.InvitedCode, userInfo.RealName)
if err != nil {
zap.L().Error("createQrCode err", zap.Error(err))
return rep, err
}
//注意userUpdateInfoService没有值
var userUpdateInfoService model.UserUpdateInfoService
_, b, err := fddClient.PersonVerify(userInfo.CustomerId, "1", userUpdateInfoService.RealName, userUpdateInfoService.IdCard, userUpdateInfoService.TelNum, fmt.Sprintf("%v/contractreturn?id=%d&htmltype=%s&envtype=%s", m.ReturnUrl, req.Id, userUpdateInfoService.HtmlType, userUpdateInfoService.EnvType))
if err != nil {
zap.L().Error("fddClient personVerify err", zap.Error(err))
return nil, err
}
url, err := base64.StdEncoding.DecodeString(b)
if err != nil {
zap.L().Error("base64 decodeString err", zap.Error(err))
}
rep.Url = string(url)
} else {
rep.Url = ""
}
}
return
}
func (a *ArtistInfo) FinishVerify(req *artistInfo.FinishVerifyRequest) (rep *artistInfo.FinishVerifyRespond, err error) {
rep, err = dao.FinishVerify(req)
return
}

View File

@ -0,0 +1,4 @@
{"level":"\u001b[34mINFO\u001b[0m","time":"2022-12-02T11:22:57.799+0800","caller":"config/root_config.go:150","message":"[Config Center] Config center doesn't start"}
{"level":"\u001b[34mINFO\u001b[0m","time":"2022-12-02T11:24:08.395+0800","caller":"config/root_config.go:150","message":"[Config Center] Config center doesn't start"}
{"level":"\u001b[34mINFO\u001b[0m","time":"2022-12-02T11:39:34.056+0800","caller":"config/root_config.go:150","message":"[Config Center] Config center doesn't start"}
{"level":"\u001b[34mINFO\u001b[0m","time":"2022-12-02T11:48:17.606+0800","caller":"config/root_config.go:150","message":"[Config Center] Config center doesn't start"}

19
cmd/model/artistinfo.go Normal file
View File

@ -0,0 +1,19 @@
package model
import (
"gorm.io/gorm"
)
// User 用户模型
type ArtistInfo struct {
gorm.Model
ID int32 `gorm:"not null" json:"id"`
UserId int32 `gorm:"not null default:0" json:"userId"`
ArtistId string `gorm:"type:varchar(256) default ''"`
BankAccount string `gorm:"type:varchar(25) not null" json:"bankAccount"`
BankName string `gorm:"type:varchar(25) not null" json:"bankName"`
Introduct string `gorm:"type:varchar(2048) not null" json:"introduct"`
CountryArtLevel string `gorm:"type:varchar(256) default ''"`
ArtistCertPic string `gorm:"type:varchar(256) default ''"`
State int32 `gorm:"not null default:0" json:"state"`
}

31
cmd/model/artwork.go Normal file
View File

@ -0,0 +1,31 @@
package model
import (
"gorm.io/gorm"
)
// User 用户模型
type Artwork struct {
gorm.Model
ID int32 `gorm:"not null" json:"id"`
ArtistId int32 `gorm:"not null" json:"artistId"`
Name string `gorm:"type:varchar(256) not null" json:"name"`
ArtworkId string `gorm:"type:varchar(256) default ''" json:"artworkId"`
ModelYear string `gorm:"type:varchar(256) not null" json:"modelYear"`
Photo string `gorm:"type:varchar(1024) not null" json:"photo"`
BatchId int32 `gorm:"not null" json:"batchId"`
ArtistPhoto string `gorm:"type:varchar(1024) not null" json:"artistPhoto"`
CreateAddress string `gorm:"type:varchar(256) not null" json:"createAddress"`
Width int32 `gorm:"not null" json:"width"`
Height int32 `gorm:"not null" json:"height"`
Ruler int32 `gorm:"not null" json:"ruler"`
AgeOfCreation string `gorm:"type:varchar(56) default ''" json:"ageOfCreation"`
CreateTime string `gorm:"type:varchar(20) not null" json:"createTime"`
Introduct string `gorm:"type:varchar(2048) not null" json:"introduct"`
NetworkTrace bool `gorm:"not null" json:"networkTrace"`
FlowState int32 `gorm:"default 0"`
Url string `gorm:"type:varchar(512) not null" json:"url"`
Remark string `gorm:"type:varchar(256) default ''" json:"remark"`
Remark2 string `gorm:"type:varchar(256) default ''" json:"remark2"`
State int32 `gorm:"not null" json:"state"` //1未上传2已上传3已通过4未通过
}

14
cmd/model/artworkbatch.go Normal file
View File

@ -0,0 +1,14 @@
package model
import (
"gorm.io/gorm"
)
//User 用户模型
type ArtworkBatch struct {
gorm.Model
ID int32 `gorm:"not null"`
BatchId int32 `gorm:"not null"`
ArtistId int32 `gorm:"not null"`
State int32 `gorm:"not null"`
}

14
cmd/model/artworkstate.go Normal file
View File

@ -0,0 +1,14 @@
package model
import (
"gorm.io/gorm"
)
//考核 用户模型
type ArtworkState struct {
gorm.Model
ID int32 `gorm:"not null"`
ArtworkId int32 `gorm:"default:0"`
State int32 `gorm:"default:0"`
Pic string `gorm:"type:varchar(256) default ''"`
}

15
cmd/model/bank.go Normal file
View File

@ -0,0 +1,15 @@
package model
import (
"gorm.io/gorm"
)
//User 用户模型
type Bank struct {
gorm.Model
ID int32 `gorm:"not null"`
UserId int32 `gorm:" not null"`
BankAccount string `gorm:"type:varchar(25) not null"`
BankName string `gorm:"type:varchar(25) not null"`
Enable bool `gorm:"not null"`
}

23
cmd/model/contract.go Normal file
View File

@ -0,0 +1,23 @@
package model
import (
"gorm.io/gorm"
)
// Contract 用户模型
type Contract struct {
gorm.Model
ID int32 `gorm:"not null"`
UserId int `gorm:"not null"`
CardId string `gorm:"type:varchar(256) default ''"`
MgmtUserId string `gorm:"not null"`
ArtworkId string `gorm:"type:varchar(256) default ''"`
ContractId string `gorm:"type:varchar(256) default ''"`
TransactionId string `gorm:"type:varchar(256) default '' "`
Type int `gorm:"not null"`
BatchId int `gorm:"not null"`
BatchName string `gorm:"type:varchar(256) default '' "`
ViewUrl string `gorm:"type:varchar(256) default ''"`
DownloadUrl string `gorm:"type:varchar(256) default ''"`
State int `gorm:"not null"`
}

19
cmd/model/exhexam.go Normal file
View File

@ -0,0 +1,19 @@
package model
import (
"gorm.io/gorm"
)
//考核 用户模型
type ExhExam struct {
gorm.Model
ID int32 `gorm:"not null"`
UserId int32 `gorm:"default:0"`
Title string `gorm:"type:varchar(64) default ''"`
Class string `gorm:"type:varchar(25) default ''"`
TitleScore int32 `gorm:"default:0"`
Score string `gorm:"type:varchar(1024) default ''"`
Types string `gorm:"type:varchar(25) default ''"`
Remarks string `gorm:"type:varchar(1024) default ''"`
Enable bool `gorm:"default:0"`
}

16
cmd/model/exhvideo.go Normal file
View File

@ -0,0 +1,16 @@
package model
import (
"gorm.io/gorm"
)
// User 用户模型
type ExhVideo struct {
gorm.Model
ID int32 `gorm:"not null "`
UserId int32 `gorm:"not null default:0"`
Url string `gorm:"type:varchar(256) default ''"`
Types string `gorm:"type:varchar(25) default ''"`
Remarks string `gorm:"type:varchar(1024) default ''"`
Enable bool `gorm:"default:false"`
}

23
cmd/model/invite.go Normal file
View File

@ -0,0 +1,23 @@
package model
import (
"gorm.io/gorm"
)
// User 用户模型
type Invite struct {
gorm.Model
ID int32 `gorm:"not null default 0"`
UserId int32 `gorm:"not null default 0"`
InvitedId int32 `gorm:"not null default 0"`
}
type InvitedCodeService struct {
InvitedCode string `form:"invitedCode" json:"invitedCode"`
}
type InviteService struct {
Id int32 `json:"id"`
UserId int32 `form:"userId" json:"userId"`
InvitedId int32 `form:"invitedId" json:"invitedId"`
}

15
cmd/model/real_name.go Normal file
View File

@ -0,0 +1,15 @@
package model
import (
"gorm.io/gorm"
)
//实名认证模型
type RealName struct {
gorm.Model
Name string `gorm:"not null"`
IDNum string `gorm:"type:varchar(18) not null"`
TelNum string `gorm:"type:varchar(11) not null"`
IdcardFront string `gorm:"type:varchar(256) not null"`
IdcardBack string `gorm:"type:varchar(256) not null"`
}

33
cmd/model/supplyinfo.go Normal file
View File

@ -0,0 +1,33 @@
package model
import (
"gorm.io/gorm"
)
//User 用户模型
type SupplyInfo struct {
gorm.Model
ID int32 `gorm:"not null"`
ArtworkId string `gorm:"type:varchar(256) default ''"`
ArtistId string `gorm:"type:varchar(256) default ''"`
UserId int32 `gorm:" not null"`
Name string `gorm:"type:varchar(256) default ''"`
ModelYear string `gorm:"type:varchar(256) default ''"`
Photo string `gorm:"type:varchar(2048) default ''"`
ArtistPhoto string `gorm:"type:varchar(2048) default ''"`
Width int32 `gorm:"default:0"`
Height int32 `gorm:"default:0"`
Ruler int32 `gorm:"default:0"`
ExhibitInfo string `gorm:"type:varchar(1024) default ''"`
ExhibitPic1 string `gorm:"type:varchar(1024) default ''"`
ExhibitPic2 string `gorm:"type:varchar(1024) default ''"`
CreateTime string `gorm:"type:varchar(20) default ''"`
Introduct string `gorm:"type:varchar(2048) default ''"`
NetworkTrace bool `gorm:"default:false"`
CreateAddress string `gorm:"type:varchar(256) not null" json:"createAddress"`
Url string `gorm:"type:varchar(1024) default ''"`
Types string `gorm:"type:varchar(25) default ''"`
Remarks string `gorm:"type:varchar(1024) default ''"`
Enable bool `gorm:"default:false"`
}

40
cmd/model/user.go Normal file
View File

@ -0,0 +1,40 @@
package model
import (
"gorm.io/gorm"
)
// User 用户模型
type User struct {
gorm.Model
ID int32 `gorm:"not null"`
Account string `gorm:"type:varchar(256) not null"`
MnemonicWords string `gorm:"type:varchar(256) not null"`
TelNum string `gorm:"type:varchar(20) not null"`
Name string `gorm:"type:varchar(20) not null"`
PenName string `gorm:"type:varchar(20) not null"`
StageName string `gorm:"type:varchar(20) not null"`
JoinAssoTime string `gorm:"type:varchar(64) not null"`
CertificateNum string `gorm:"type:varchar(16) not null"`
CertificateImg string `gorm:"type:varchar(512) not null"`
Key string `gorm:"type:varchar(16) not null"`
RealNameID int32 `gorm:"not null"`
IDNum string `gorm:"type:varchar(18) not null"`
Sex int32 `gorm:"not null"`
OpenId string `gorm:"type:varchar(2048) not null"`
CustomerId string `gorm:"type:varchar(2048) not null"`
Age int32 `gorm:"not null"`
Introduct string `gorm:"type:varchar(2048) not null"`
CreateAt int64 `gorm:"not null"`
ConAddress string `gorm:"type:varchar(2048) not null"`
Photo string `gorm:"type:varchar(2048) not null"`
Video string `gorm:"type:varchar(256) not null"`
IsRealName bool `gorm:"not null"`
FddState int32 `gorm:"not null"`
WxAccount string `gorm:"type:varchar(256) not null"`
IsLock bool `gorm:"not null"`
InvitedCode string `gorm:"type:varchar(16) default ''"`
IsRead int32 `gorm:"not null"`
IsImport int32 `gorm:"not null"`
Enable bool `gorm:"not null"`
}

14
cmd/model/user_invited.go Normal file
View File

@ -0,0 +1,14 @@
package model
import (
"gorm.io/gorm"
)
//User 用户模型
type UserInvited struct {
gorm.Model
ID int32 `gorm:"not null"`
UserId int32 `gorm:"type:int not null"`
InvitedUserId int32 `gorm:"type:int not null"`
Count int32 `gorm:"type:int not null"`
}

View File

@ -0,0 +1,30 @@
package model
// 用户修改信息的服务
type UserUpdateInfoService struct {
TelNum string `form:"telNum" json:"telNum" binding:"required,len=11"`
CertificateNum string `form:"certificateNum" json:"certificateNum" binding:"required"`
CertificateImg string `form:"certificateImg" json:"certificateImg" `
JoinAssoTime string `from:"joinAssoTime" json:"joinAssoTime"`
RealName string `form:"realName" json:"realName" binding:"required"`
PenName string `form:"penName" json:"penName"`
StageName string `form:"stageName" json:"stageName"`
Sex int32 `form:"sex" json:"sex"`
IdCard string `form:"idCard" json:"idCard" binding:"required"`
IdCardFront string `form:"idCardFront" json:"idCardFront" binding:"required"`
IdCardBack string `form:"idCardBack" json:"idCardBack" binding:"required"`
Age int32 `form:"age" json:"age"`
Ruler int32 `form:"ruler" json:"ruler"`
ConAddress []string `form:"conAddress" json:"conAddress"`
Photo string `form:"photo" json:"photo" binding:"required"`
Video string `form:"video" json:"video"`
FddState int32 `form:"fddState" json:"fddState"`
CustomerId string `form:"customerId" json:"customerId"`
InvitedCode string `form:"invitedCode" json:"invitedCode"`
InvitedName string `form:"invitedName" json:"invitedName"`
WxAccount string `form:"wxAccount" json:"wxAccount"`
QrCodeImg string `form:"qrCode" json:"qrCodeImg"`
QrCodeImgDownload string `form:"qrCodeDownload" json:"qrCodeImgDownload"`
HtmlType string `form:"htmlType" json:"htmlType"`
EnvType string `form:"envType" json:"envType"`
}

29
conf/conf.ini Normal file
View File

@ -0,0 +1,29 @@
[system]
mode = dev #正式prod #测试dev
[mysql]
Db = mysql
DbHost = 121.229.45.214
DbPort = 9007
DbUser = artuser
DbPassWord = "C250PflXIWv2SQm8"
DbName = artistmgmt
[redis]
RedisDB = 2
RedisAddr = 172.16.100.99:9008
RedisPW = "nDCTrfTtBu3Pw"
RedisDBNAme =
[chain]
IP=127.0.0.1:37101
MnemonicWords=知 睡 迷 纤 纲 耀 镜 婆 渡 考 拔 百
ContractAccount=XC8214684261867838@xuper
ContractName=fp001
[zap_log]
level: "info"
filename: "logs/artist_server.log"
max_size: 200
max_age: 30
max_backups: 7

29
conf/dev/conf.ini Normal file
View File

@ -0,0 +1,29 @@
[system]
mode = dev #正式prod #测试dev
[mysql]
Db = mysql
DbHost = 127.0.0.1
DbPort = 3306
DbUser = dyb
DbPassWord = rootdyb
DbArtist = artist
[redis]
RedisDB = 2
RedisAddr = 127.0.0.1:6379
RedisPW = "7532T6R"
RedisDBNAme =
[chain]
IP=127.0.0.1:37101
MnemonicWords=知 睡 迷 纤 纲 耀 镜 婆 渡 考 拔 百
ContractAccount=XC8214684261867838@xuper
ContractName=fp001
[zap_log]
level: "info"
filename: "logs/artist_server.log"
max_size: 200
max_age: 30
max_backups: 7

69
conf/dev/dubbogo.yaml Normal file
View File

@ -0,0 +1,69 @@
dubbo:
metrics:
enable: true # default is true
path: /metrics # default is /metrics
port: 9091 # default is 9090
namespace: dubboArtist # default is dubbo 作为数据上报 metrics 的前缀
registries:
demoZK:
protocol: zookeeper
# timeout: 3s
address: 127.0.0.1:2181
protocols:
triple: #triple
name: tri
port: 20004
provider:
services:
ArtistProvider:
interface: com.fontree.microservices.common.Artist
retries: 0
# filter: myServerFilter
# application: "1234"
filter: tps
tps.limiter: method-service
tps.limit.strategy: fixedWindow
tps.limit.rejected.handler: DefaultValueHandler
tps.limit.interval: 1000
tps.limit.rate: 3
warmup: 100 #预热时间
logger:
zap-config:
level: info # 日志级别
development: false
disableCaller: false
disableStacktrace: false
encoding: "json"
# zap encoder 配置
encoderConfig:
messageKey: "message"
levelKey: "level"
timeKey: "time"
nameKey: "logger"
callerKey: "caller"
stacktraceKey: "stacktrace"
lineEnding: ""
levelEncoder: "capitalColor"
timeEncoder: "iso8601"
durationEncoder: "seconds"
callerEncoder: "short"
nameEncoder: ""
EncodeTime: zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05.000"),
EncodeDuration: zapcore.SecondsDurationEncoder,
outputPaths:
- "stderr"
errorOutputPaths:
- "stderr"
lumberjack-config:
# 写日志的文件名称
filename: "logs/artist_server.log"
# 每个日志文件长度的最大大小,单位是 MiB。默认 100MiB
maxSize: 10
# 日志保留的最大天数(只保留最近多少天的日志)
maxAge: 15
# 只保留最近多少个日志文件,用于控制程序总日志的大小
maxBackups: 10
# 是否使用本地时间,默认使用 UTC 时间
localTime: true
# 是否压缩日志文件,压缩方法 gzip
compress: false

18
conf/dev/sdk.real.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
endorseServiceHost: "39.156.69.83:37100"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: false
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: false
# 合规性背书费用
complianceCheckEndorseServiceFee: 400
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: aB2hpHnTBDxko3UoP2BpBZRujwhdcAFoT
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"
txVersion: 1

18
conf/dev/sdk.test.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
endorseServiceHost: "14.215.179.74:37101"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: true
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: true
# 合规性背书费用
complianceCheckEndorseServiceFee: 100
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: cHvBK1TTB52GYtVxHK7HnW8N9RTqkN99R
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: XDxkpQkfLwG6h56e896f3vBHhuN5g6M9u
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"
txVersion: 1

18
conf/dev/sdk.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
# endorseServiceHost: "120.48.24.223:37101"
endorseServiceHost: "127.0.0.1:37101"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: false
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: false
# 合规性背书费用
complianceCheckEndorseServiceFee: 400
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"

19
conf/dubbogo.yaml Normal file
View File

@ -0,0 +1,19 @@
dubbo:
metrics:
enable: true # default is true
path: /metrics # default is /metrics
port: 9091 # default is 9090
namespace: dubboArtistInfo # default is dubbo 作为数据上报 metrics 的前缀
registries:
demoZK:
protocol: zookeeper
timeout: 3s
address: 127.0.0.1:2181
protocols:
triple: #triple
name: tri
port: 20020
provider:
services:
ArtistInfoProvider:
interface: com.fontree.microservices.common.ArtistInfo

29
conf/prod/conf.ini Normal file
View File

@ -0,0 +1,29 @@
[system]
mode = prod #正式prod #测试dev
[mysql]
Db = mysql
DbHost = 192.168.1.35
DbPort = 9005
DbUser = root
DbPassWord = sLl0b7stlbwvZ883TV
DbArtist = artist
[redis]
RedisDB = 2
RedisAddr = 192.168.1.35:6379
RedisPW =
RedisDBNAme =
[chain]
IP=127.0.0.1:37101
MnemonicWords=知 睡 迷 纤 纲 耀 镜 婆 渡 考 拔 百
ContractAccount=XC8214684261867838@xuper
ContractName=fp001
[zap_log]
level: "info"
filename: "logs/artist_server.log"
max_size: 200
max_age: 30
max_backups: 7

69
conf/prod/dubbogo.yaml Normal file
View File

@ -0,0 +1,69 @@
dubbo:
metrics:
enable: true # default is true
path: /metrics # default is /metrics
port: 9091 # default is 9090
namespace: dubboArtist # default is dubbo 作为数据上报 metrics 的前缀
registries:
demoZK:
protocol: zookeeper
timeout: 3s
address: 192.168.1.35:2181
protocols:
triple: #triple
name: tri
port: 20004
provider:
services:
ArtistProvider:
interface: com.fontree.microservices.common.Artist
retries: 0
filter: tps
# token: "dubbo"
# application: "1234"
tps.limiter: method-service
tps.limit.strategy: fixedWindow
tps.limit.rejected.handler: DefaultValueHandler
tps.limit.interval: 1000
tps.limit.rate: 3
warmup: 100 #预热时间
logger:
zap-config:
level: info # 日志级别
development: false
disableCaller: false
disableStacktrace: false
encoding: "json"
# zap encoder 配置
encoderConfig:
messageKey: "message"
levelKey: "level"
timeKey: "time"
nameKey: "logger"
callerKey: "caller"
stacktraceKey: "stacktrace"
lineEnding: ""
levelEncoder: "capitalColor"
timeEncoder: "iso8601"
durationEncoder: "seconds"
callerEncoder: "short"
nameEncoder: ""
EncodeTime: zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05.000"),
EncodeDuration: zapcore.SecondsDurationEncoder,
outputPaths:
- "stderr"
errorOutputPaths:
- "stderr"
lumberjack-config:
# 写日志的文件名称
filename: "logs/artist_server.log"
# 每个日志文件长度的最大大小,单位是 MiB。默认 100MiB
maxSize: 10
# 日志保留的最大天数(只保留最近多少天的日志)
maxAge: 15
# 只保留最近多少个日志文件,用于控制程序总日志的大小
maxBackups: 10
# 是否使用本地时间,默认使用 UTC 时间
localTime: true
# 是否压缩日志文件,压缩方法 gzip
compress: false

18
conf/prod/sdk.real.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
endorseServiceHost: "39.156.69.83:37100"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: false
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: false
# 合规性背书费用
complianceCheckEndorseServiceFee: 400
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: aB2hpHnTBDxko3UoP2BpBZRujwhdcAFoT
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"
txVersion: 1

18
conf/prod/sdk.test.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
endorseServiceHost: "14.215.179.74:37101"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: true
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: true
# 合规性背书费用
complianceCheckEndorseServiceFee: 100
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: cHvBK1TTB52GYtVxHK7HnW8N9RTqkN99R
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: XDxkpQkfLwG6h56e896f3vBHhuN5g6M9u
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"
txVersion: 1

18
conf/prod/sdk.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
# endorseServiceHost: "120.48.24.223:37101"
endorseServiceHost: "127.0.0.1:37101"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: false
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: false
# 合规性背书费用
complianceCheckEndorseServiceFee: 400
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"

18
conf/sdk.real.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
endorseServiceHost: "39.156.69.83:37100"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: false
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: false
# 合规性背书费用
complianceCheckEndorseServiceFee: 400
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: aB2hpHnTBDxko3UoP2BpBZRujwhdcAFoT
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"
txVersion: 1

18
conf/sdk.test.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
endorseServiceHost: "14.215.179.74:37101"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: true
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: true
# 合规性背书费用
complianceCheckEndorseServiceFee: 100
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: cHvBK1TTB52GYtVxHK7HnW8N9RTqkN99R
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: XDxkpQkfLwG6h56e896f3vBHhuN5g6M9u
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"
txVersion: 1

18
conf/sdk.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
# endorseServiceHost: "120.48.24.223:37101"
endorseServiceHost: "127.0.0.1:37101"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: false
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: false
# 合规性背书费用
complianceCheckEndorseServiceFee: 400
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"

29
conf/test/conf.ini Normal file
View File

@ -0,0 +1,29 @@
[system]
mode = dev #正式prod #测试dev
[mysql]
Db = mysql
DbHost = 172.16.100.99 #214
DbPort = 9007
DbUser = artuser
DbPassWord = "C250PflXIWv2SQm8"
DbArtist = artist
[redis]
RedisDB = 2
RedisAddr = 172.16.100.99:9008
RedisPW = "nDCTrfTtBu3Pw"
RedisDBNAme =
[chain]
IP=127.0.0.1:37101
MnemonicWords=知 睡 迷 纤 纲 耀 镜 婆 渡 考 拔 百
ContractAccount=XC8214684261867838@xuper
ContractName=fp001
[zap_log]
level: "info"
filename: "logs/artist_server.log"
max_size: 200
max_age: 30
max_backups: 7

73
conf/test/dubbogo.yaml Normal file
View File

@ -0,0 +1,73 @@
dubbo:
metrics:
enable: true # default is true
path: /metrics # default is /metrics
port: 9091 # default is 9090
namespace: dubboArtist # default is dubbo 作为数据上报 metrics 的前
registries:
demoZK:
protocol: zookeeper
timeout: 3s
# address: 127.0.0.1:2181
# address: 121.229.45.214:9004
# address: 114.218.158.24:2181
address: 172.16.100.93:2181
protocols:
triple: #triple
name: tri
# ip: 121.229.45.214
port: 20004
provider:
services:
ArtistProvider:
interface: com.fontree.microservices.common.Artist
retries: 0
filter: tps
# token: "dubbo"
# application: "1234"
tps.limiter: method-service
tps.limit.strategy: fixedWindow
tps.limit.rejected.handler: DefaultValueHandler
tps.limit.interval: 1000
tps.limit.rate: 3
warmup: 100 #预热时间
logger:
zap-config:
level: info # 日志级别
development: false
disableCaller: false
disableStacktrace: false
encoding: "json"
# zap encoder 配置
encoderConfig:
messageKey: "message"
levelKey: "level"
timeKey: "time"
nameKey: "logger"
callerKey: "caller"
stacktraceKey: "stacktrace"
lineEnding: ""
levelEncoder: "capitalColor"
timeEncoder: "iso8601"
durationEncoder: "seconds"
callerEncoder: "short"
nameEncoder: ""
EncodeTime: zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05.000"),
EncodeDuration: zapcore.SecondsDurationEncoder,
outputPaths:
- "stderr"
errorOutputPaths:
- "stderr"
lumberjack-config:
# 写日志的文件名称
filename: "logs/artist_server.log"
# 每个日志文件长度的最大大小,单位是 MiB。默认 100MiB
maxSize: 10
# 日志保留的最大天数(只保留最近多少天的日志)
maxAge: 15
# 只保留最近多少个日志文件,用于控制程序总日志的大小
maxBackups: 10
# 是否使用本地时间,默认使用 UTC 时间
localTime: true
# 是否压缩日志文件,压缩方法 gzip
compress: false

18
conf/test/sdk.real.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
endorseServiceHost: "39.156.69.83:37100"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: false
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: false
# 合规性背书费用
complianceCheckEndorseServiceFee: 400
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: aB2hpHnTBDxko3UoP2BpBZRujwhdcAFoT
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"
txVersion: 1

18
conf/test/sdk.test.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
endorseServiceHost: "14.215.179.74:37101"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: true
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: true
# 合规性背书费用
complianceCheckEndorseServiceFee: 100
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: cHvBK1TTB52GYtVxHK7HnW8N9RTqkN99R
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: XDxkpQkfLwG6h56e896f3vBHhuN5g6M9u
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"
txVersion: 1

18
conf/test/sdk.yaml Normal file
View File

@ -0,0 +1,18 @@
# endorseService Info
# testNet addrs
# endorseServiceHost: "120.48.24.223:37101"
endorseServiceHost: "127.0.0.1:37101"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: false
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: false
# 合规性背书费用
complianceCheckEndorseServiceFee: 400
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"

161
go.mod Normal file
View File

@ -0,0 +1,161 @@
module github.com/fonchain-artistserver
go 1.17
replace (
github.com/fonchain/electronic-contract => ../electronic-contract
github.com/fonchain/utils/objstorage => ../utils/objstorage
github.com/fonchain/utils/utils => ../utils/utils
github.com/fonchain_enterprise/utils/aes => ../utils/aes
github.com/fonchain_enterprise/utils/baidu => ../utils/baidu
github.com/fonchain_enterprise/utils/chain => ../utils/chain
github.com/fonchain_enterprise/utils/jwt => ../utils/jwt
github.com/fonchain_enterprise/utils/rand => ../utils/rand
)
require (
dubbo.apache.org/dubbo-go/v3 v3.0.1
github.com/dubbogo/grpc-go v1.42.9
github.com/dubbogo/triple v1.1.8
github.com/fonchain/electronic-contract v0.0.0-00010101000000-000000000000
github.com/fonchain/utils/objstorage v0.0.0-00010101000000-000000000000
github.com/fonchain/utils/utils v0.0.0-00010101000000-000000000000
github.com/fonchain_enterprise/utils/aes v0.0.0-00010101000000-000000000000
github.com/gin-gonic/gin v1.8.1
github.com/go-redis/redis v6.15.9+incompatible
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
go.uber.org/zap v1.21.0
golang.org/x/image v0.0.0-20190802002840-cff245a6509b
google.golang.org/protobuf v1.28.0
gopkg.in/ini.v1 v1.66.4
gorm.io/driver/mysql v1.4.4
gorm.io/gorm v1.24.1
)
require (
contrib.go.opencensus.io/exporter/prometheus v0.4.0 // indirect
github.com/RoaringBitmap/roaring v0.7.1 // indirect
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
github.com/Workiva/go-datastructures v1.0.52 // indirect
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect
github.com/alibaba/sentinel-golang v1.0.4 // indirect
github.com/aliyun/alibaba-cloud-sdk-go v1.61.18 // indirect
github.com/aliyun/aliyun-oss-go-sdk v2.2.4+incompatible // indirect
github.com/apache/dubbo-getty v1.4.7 // indirect
github.com/apache/dubbo-go-hessian2 v1.11.0 // indirect
github.com/baidubce/bce-sdk-go v0.9.138 // indirect
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bits-and-blooms/bitset v1.2.0 // indirect
github.com/boombuler/barcode v1.0.1 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/coreos/go-semver v0.3.0 // indirect
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
github.com/creasty/defaults v1.5.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5 // indirect
github.com/dubbogo/gost v1.11.22 // indirect
github.com/emicklei/go-restful/v3 v3.7.3 // indirect
github.com/fsnotify/fsnotify v1.5.1 // indirect
github.com/ghodss/yaml v1.0.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-co-op/gocron v1.9.0 // indirect
github.com/go-errors/errors v1.0.1 // indirect
github.com/go-kit/log v0.1.0 // indirect
github.com/go-logfmt/logfmt v0.5.0 // indirect
github.com/go-logr/logr v0.4.0 // indirect
github.com/go-ole/go-ole v1.2.4 // indirect
github.com/go-playground/locales v0.14.0 // indirect
github.com/go-playground/universal-translator v0.18.0 // indirect
github.com/go-playground/validator/v10 v10.10.0 // indirect
github.com/go-resty/resty/v2 v2.7.0 // indirect
github.com/go-sql-driver/mysql v1.6.0 // indirect
github.com/goccy/go-json v0.9.7 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/go-cmp v0.5.7 // indirect
github.com/google/gofuzz v1.1.0 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/hashicorp/vault/sdk v0.3.0 // indirect
github.com/jinzhu/copier v0.3.5 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/k0kubun/pp v3.0.1+incompatible // indirect
github.com/knadh/koanf v1.4.0 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/magiconair/properties v1.8.6 // indirect
github.com/mattn/go-colorable v0.1.12 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/mapstructure v1.4.3 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mschoch/smat v0.2.0 // indirect
github.com/nacos-group/nacos-sdk-go v1.1.0 // indirect
github.com/natefinch/lumberjack v2.0.0+incompatible // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pelletier/go-toml v1.9.4 // indirect
github.com/pelletier/go-toml/v2 v2.0.1 // indirect
github.com/pierrec/lz4 v2.5.2+incompatible // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/polarismesh/polaris-go v1.0.1 // indirect
github.com/prometheus/client_golang v1.12.1 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.32.1 // indirect
github.com/prometheus/procfs v0.7.3 // indirect
github.com/prometheus/statsd_exporter v0.21.0 // indirect
github.com/robfig/cron/v3 v3.0.1 // indirect
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect
github.com/shirou/gopsutil v3.20.11+incompatible // indirect
github.com/shirou/gopsutil/v3 v3.21.6 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/spf13/afero v1.8.2 // indirect
github.com/spf13/cast v1.4.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.11.0 // indirect
github.com/subosito/gotenv v1.2.0 // indirect
github.com/tklauser/go-sysconf v0.3.6 // indirect
github.com/tklauser/numcpus v0.2.2 // indirect
github.com/toolkits/concurrent v0.0.0-20150624120057-a4371d70e3e3 // indirect
github.com/uber/jaeger-client-go v2.29.1+incompatible // indirect
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
github.com/ugorji/go/codec v1.2.7 // indirect
github.com/zouyx/agollo/v3 v3.4.5 // indirect
go.etcd.io/etcd/api/v3 v3.5.2 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.2 // indirect
go.etcd.io/etcd/client/v3 v3.5.2 // indirect
go.opencensus.io v0.23.0 // indirect
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect
golang.org/x/net v0.0.0-20220412020605-290c469a71a5 // indirect
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect
golang.org/x/text v0.3.7 // indirect
golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect
google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac // indirect
google.golang.org/grpc v1.45.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
k8s.io/apimachinery v0.22.4 // indirect
k8s.io/klog/v2 v2.9.0 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.1.2 // indirect
)

1661
go.sum Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,145 @@
syntax = "proto3";
package ArtistInfo;
option go_package = "./;artistInfo";
service ArtistInfo {
rpc GetUserInfo (GetUserInfoRequest) returns (GetUserInfoRespond) {}
rpc CreateUserInfo (UserInfoCommonRequest) returns (CreateUserInfoRespond) {}
rpc UpdateUserInfo (UserInfoCommonRequest) returns (UpdateUserInfoRespond) {}
rpc UserUpdateTel (UserUpdateTelRequest) returns (UserUpdateTelRespond) {}
rpc UserUpdateMsg (UserUpdateMsgRequest) returns (UserUpdateMsgRespond) {}
rpc Verifyfdd (VerifyfddRequest) returns (VerifyfddRespond) {}
rpc FinishVerify (FinishVerifyRequest) returns (FinishVerifyRespond) {}
}
message UserUpdateInfoService{
string TelNum = 1 [json_name = "telNum"];
string CertificateNum = 2 [json_name = "certificateNum"];
string CertificateImg = 3 [json_name = "certificateImg"];
string JoinAssoTime = 4 [json_name = "joinAssoTime"];
string RealName = 5 [json_name = "realName"];
string PenName = 6 [json_name = "penName"];
string StageName = 7 [json_name = "stageName"];
int32 Sex = 8 [json_name = "sex"];
string IdCard = 9 [json_name = "idCard"];
string IdCardFront = 10 [json_name = "idCardFront"];
string IdCardBack = 11 [json_name = "idCardBack"];
int32 Age = 12 [json_name = "age"];
int32 Ruler = 13 [json_name = "ruler"];
repeated string ConAddress = 14 [json_name = "conAddress"];
string Photo = 15 [json_name = "photo"];
string Video = 16 [json_name = "video"];
int32 FddState = 17 [json_name = "fddState"];
string CustomerId = 18 [json_name = "customerId"];
string InvitedCode = 19 [json_name = "invitedCode"];
string InvitedName = 20 [json_name = "invitedName"];
string WxAccount = 21 [json_name = "wxAccount"];
string QrCodeImg = 22 [json_name = "qrCode"];
string QrCodeImgDownload = 23 [json_name = "qrCodeDownload"];
string HtmlType = 24 [json_name = "htmlType"];
string EnvType = 25 [json_name = "envType"];
}
message User{
int32 ID =1 [json_name = "id"];
string Account = 2 [json_name = "account"];
string MnemonicWords = 3 [json_name = "mnemonicWords"];
string TelNum = 4 [json_name = "telNum"];
string Name = 5 [json_name = "name"];
string PenName = 6 [json_name = "penName"];
string StageName = 7 [json_name = "stageName"];
string JoinAssoTime = 8 [json_name = "joinAssoTime"];
string CertificateNum = 9 [json_name = "certificateNum"];
string CertificateImg = 10 [json_name = "certificateImg"];
string Key = 11 [json_name = "key"];
int32 RealNameID = 12 [json_name = "realNameID"];
string IDNum = 13 [json_name = "idNum"];
int32 Sex = 14 [json_name = "sex"];
string OpenId = 15 [json_name = "openId"];
string CustomerId = 16 [json_name = "customerId"];
int32 Age = 17 [json_name = "age"];
string Introduct = 18 [json_name = "introduct"];
int64 CreateAt = 19 [json_name = "createAt"];
string ConAddress =20 [json_name = "conAddress"];
string Photo = 21 [json_name = "photo"];
string Video = 22 [json_name = "video"];
bool IsRealName = 23 [json_name = "isRealName"];
int32 FddState = 24 [json_name = "fddState"];
string WxAccount = 25 [json_name = "wxAccount"];
bool IsLock = 26 [json_name = "isLock"];
string InvitedCode = 27 [json_name = "invitedCode"];
int32 IsRead = 28 [json_name = "isRead"];
int32 IsImport = 29 [json_name = "isImport"];
bool Enable = 30 [json_name = "enable"];
}
message UserInfoCommonRequest{
int64 Id = 1 [json_name = "id"];
UserUpdateInfoService UserUpdateInfoService = 2 [json_name = "userUpdateInfoService"];
}
message GetUserInfoRequest {
int64 Id = 1 [json_name = "id"];
}
message GetUserInfoRespond {
UserUpdateInfoService Data = 1 [json_name = "data"];
}
// message CreateUserInfoRequest {
// int64 Id = 1 [json_name = "id"];
// UserUpdateInfoService UserUpdateInfoService = 2 [json_name = "userUpdateInfoService"];
// }
message CreateUserInfoRespond {
User User = 1 [json_name = "user"];
string Url = 2 [json_name = "url"];
}
// message UpdateUserInfoRequest {
// int64 Id = 1 [json_name = "id"];
// UserUpdateInfoService UserUpdateInfoService = 2 [json_name = "userUpdateInfoService"];
// }
message UpdateUserInfoRespond {
User User = 1 [json_name = "user"];
}
message UserUpdateTelRequest {
int64 Id = 1 [json_name = "id"];
string TelNum = 2 [json_name = "telNum"];
string VerCode = 3 [json_name = "verCode"];
}
message UserUpdateTelRespond {
string TelNum = 1 [json_name = "telNum"];
}
message UserUpdateMsgRequest {
int64 Id = 1 [json_name = "id"];
}
message UserUpdateMsgRespond {}
message VerifyfddRequest {
int64 Id = 1 [json_name = "id"];
}
message VerifyfddRespond {
bool Ready = 1 [json_name = "ready"];
string Url = 2 [json_name = "url"];
}
message FinishVerifyRequest {
int64 Id = 1 [json_name = "id"];
int64 ContractId = 2 [json_name = "contractId"];
string HtmlType = 3 [json_name = "htmlType"];
string EnvType = 4 [json_name = "envType"];
}
message FinishVerifyRespond {
User User = 1 [json_name = "user"];
}

View File

@ -0,0 +1,417 @@
// Code generated by protoc-gen-go-triple. DO NOT EDIT.
// versions:
// - protoc-gen-go-triple v1.0.8
// - protoc v3.21.8
// source: artistinfo.proto
package artistInfo
import (
context "context"
protocol "dubbo.apache.org/dubbo-go/v3/protocol"
dubbo3 "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
invocation "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
grpc_go "github.com/dubbogo/grpc-go"
codes "github.com/dubbogo/grpc-go/codes"
metadata "github.com/dubbogo/grpc-go/metadata"
status "github.com/dubbogo/grpc-go/status"
common "github.com/dubbogo/triple/pkg/common"
constant "github.com/dubbogo/triple/pkg/common/constant"
triple "github.com/dubbogo/triple/pkg/triple"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc_go.SupportPackageIsVersion7
// ArtistInfoClient is the client API for ArtistInfo service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type ArtistInfoClient interface {
GetUserInfo(ctx context.Context, in *GetUserInfoRequest, opts ...grpc_go.CallOption) (*GetUserInfoRespond, common.ErrorWithAttachment)
CreateUserInfo(ctx context.Context, in *UserInfoCommonRequest, opts ...grpc_go.CallOption) (*CreateUserInfoRespond, common.ErrorWithAttachment)
UpdateUserInfo(ctx context.Context, in *UserInfoCommonRequest, opts ...grpc_go.CallOption) (*UpdateUserInfoRespond, common.ErrorWithAttachment)
UserUpdateTel(ctx context.Context, in *UserUpdateTelRequest, opts ...grpc_go.CallOption) (*UserUpdateTelRespond, common.ErrorWithAttachment)
UserUpdateMsg(ctx context.Context, in *UserUpdateMsgRequest, opts ...grpc_go.CallOption) (*UserUpdateMsgRespond, common.ErrorWithAttachment)
Verifyfdd(ctx context.Context, in *VerifyfddRequest, opts ...grpc_go.CallOption) (*VerifyfddRespond, common.ErrorWithAttachment)
FinishVerify(ctx context.Context, in *FinishVerifyRequest, opts ...grpc_go.CallOption) (*FinishVerifyRespond, common.ErrorWithAttachment)
}
type artistInfoClient struct {
cc *triple.TripleConn
}
type ArtistInfoClientImpl struct {
GetUserInfo func(ctx context.Context, in *GetUserInfoRequest) (*GetUserInfoRespond, error)
CreateUserInfo func(ctx context.Context, in *UserInfoCommonRequest) (*CreateUserInfoRespond, error)
UpdateUserInfo func(ctx context.Context, in *UserInfoCommonRequest) (*UpdateUserInfoRespond, error)
UserUpdateTel func(ctx context.Context, in *UserUpdateTelRequest) (*UserUpdateTelRespond, error)
UserUpdateMsg func(ctx context.Context, in *UserUpdateMsgRequest) (*UserUpdateMsgRespond, error)
Verifyfdd func(ctx context.Context, in *VerifyfddRequest) (*VerifyfddRespond, error)
FinishVerify func(ctx context.Context, in *FinishVerifyRequest) (*FinishVerifyRespond, error)
}
func (c *ArtistInfoClientImpl) GetDubboStub(cc *triple.TripleConn) ArtistInfoClient {
return NewArtistInfoClient(cc)
}
func (c *ArtistInfoClientImpl) XXX_InterfaceName() string {
return "ArtistInfo.ArtistInfo"
}
func NewArtistInfoClient(cc *triple.TripleConn) ArtistInfoClient {
return &artistInfoClient{cc}
}
func (c *artistInfoClient) GetUserInfo(ctx context.Context, in *GetUserInfoRequest, opts ...grpc_go.CallOption) (*GetUserInfoRespond, common.ErrorWithAttachment) {
out := new(GetUserInfoRespond)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetUserInfo", in, out)
}
func (c *artistInfoClient) CreateUserInfo(ctx context.Context, in *UserInfoCommonRequest, opts ...grpc_go.CallOption) (*CreateUserInfoRespond, common.ErrorWithAttachment) {
out := new(CreateUserInfoRespond)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CreateUserInfo", in, out)
}
func (c *artistInfoClient) UpdateUserInfo(ctx context.Context, in *UserInfoCommonRequest, opts ...grpc_go.CallOption) (*UpdateUserInfoRespond, common.ErrorWithAttachment) {
out := new(UpdateUserInfoRespond)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdateUserInfo", in, out)
}
func (c *artistInfoClient) UserUpdateTel(ctx context.Context, in *UserUpdateTelRequest, opts ...grpc_go.CallOption) (*UserUpdateTelRespond, common.ErrorWithAttachment) {
out := new(UserUpdateTelRespond)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UserUpdateTel", in, out)
}
func (c *artistInfoClient) UserUpdateMsg(ctx context.Context, in *UserUpdateMsgRequest, opts ...grpc_go.CallOption) (*UserUpdateMsgRespond, common.ErrorWithAttachment) {
out := new(UserUpdateMsgRespond)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UserUpdateMsg", in, out)
}
func (c *artistInfoClient) Verifyfdd(ctx context.Context, in *VerifyfddRequest, opts ...grpc_go.CallOption) (*VerifyfddRespond, common.ErrorWithAttachment) {
out := new(VerifyfddRespond)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Verifyfdd", in, out)
}
func (c *artistInfoClient) FinishVerify(ctx context.Context, in *FinishVerifyRequest, opts ...grpc_go.CallOption) (*FinishVerifyRespond, common.ErrorWithAttachment) {
out := new(FinishVerifyRespond)
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/FinishVerify", in, out)
}
// ArtistInfoServer is the server API for ArtistInfo service.
// All implementations must embed UnimplementedArtistInfoServer
// for forward compatibility
type ArtistInfoServer interface {
GetUserInfo(context.Context, *GetUserInfoRequest) (*GetUserInfoRespond, error)
CreateUserInfo(context.Context, *UserInfoCommonRequest) (*CreateUserInfoRespond, error)
UpdateUserInfo(context.Context, *UserInfoCommonRequest) (*UpdateUserInfoRespond, error)
UserUpdateTel(context.Context, *UserUpdateTelRequest) (*UserUpdateTelRespond, error)
UserUpdateMsg(context.Context, *UserUpdateMsgRequest) (*UserUpdateMsgRespond, error)
Verifyfdd(context.Context, *VerifyfddRequest) (*VerifyfddRespond, error)
FinishVerify(context.Context, *FinishVerifyRequest) (*FinishVerifyRespond, error)
mustEmbedUnimplementedArtistInfoServer()
}
// UnimplementedArtistInfoServer must be embedded to have forward compatible implementations.
type UnimplementedArtistInfoServer struct {
proxyImpl protocol.Invoker
}
func (UnimplementedArtistInfoServer) GetUserInfo(context.Context, *GetUserInfoRequest) (*GetUserInfoRespond, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetUserInfo not implemented")
}
func (UnimplementedArtistInfoServer) CreateUserInfo(context.Context, *UserInfoCommonRequest) (*CreateUserInfoRespond, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateUserInfo not implemented")
}
func (UnimplementedArtistInfoServer) UpdateUserInfo(context.Context, *UserInfoCommonRequest) (*UpdateUserInfoRespond, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateUserInfo not implemented")
}
func (UnimplementedArtistInfoServer) UserUpdateTel(context.Context, *UserUpdateTelRequest) (*UserUpdateTelRespond, error) {
return nil, status.Errorf(codes.Unimplemented, "method UserUpdateTel not implemented")
}
func (UnimplementedArtistInfoServer) UserUpdateMsg(context.Context, *UserUpdateMsgRequest) (*UserUpdateMsgRespond, error) {
return nil, status.Errorf(codes.Unimplemented, "method UserUpdateMsg not implemented")
}
func (UnimplementedArtistInfoServer) Verifyfdd(context.Context, *VerifyfddRequest) (*VerifyfddRespond, error) {
return nil, status.Errorf(codes.Unimplemented, "method Verifyfdd not implemented")
}
func (UnimplementedArtistInfoServer) FinishVerify(context.Context, *FinishVerifyRequest) (*FinishVerifyRespond, error) {
return nil, status.Errorf(codes.Unimplemented, "method FinishVerify not implemented")
}
func (s *UnimplementedArtistInfoServer) XXX_SetProxyImpl(impl protocol.Invoker) {
s.proxyImpl = impl
}
func (s *UnimplementedArtistInfoServer) XXX_GetProxyImpl() protocol.Invoker {
return s.proxyImpl
}
func (s *UnimplementedArtistInfoServer) XXX_ServiceDesc() *grpc_go.ServiceDesc {
return &ArtistInfo_ServiceDesc
}
func (s *UnimplementedArtistInfoServer) XXX_InterfaceName() string {
return "ArtistInfo.ArtistInfo"
}
func (UnimplementedArtistInfoServer) mustEmbedUnimplementedArtistInfoServer() {}
// UnsafeArtistInfoServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to ArtistInfoServer will
// result in compilation errors.
type UnsafeArtistInfoServer interface {
mustEmbedUnimplementedArtistInfoServer()
}
func RegisterArtistInfoServer(s grpc_go.ServiceRegistrar, srv ArtistInfoServer) {
s.RegisterService(&ArtistInfo_ServiceDesc, srv)
}
func _ArtistInfo_GetUserInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(GetUserInfoRequest)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("GetUserInfo", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
func _ArtistInfo_CreateUserInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(UserInfoCommonRequest)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("CreateUserInfo", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
func _ArtistInfo_UpdateUserInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(UserInfoCommonRequest)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("UpdateUserInfo", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
func _ArtistInfo_UserUpdateTel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(UserUpdateTelRequest)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("UserUpdateTel", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
func _ArtistInfo_UserUpdateMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(UserUpdateMsgRequest)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("UserUpdateMsg", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
func _ArtistInfo_Verifyfdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(VerifyfddRequest)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("Verifyfdd", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
func _ArtistInfo_FinishVerify_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
in := new(FinishVerifyRequest)
if err := dec(in); err != nil {
return nil, err
}
base := srv.(dubbo3.Dubbo3GrpcService)
args := []interface{}{}
args = append(args, in)
md, _ := metadata.FromIncomingContext(ctx)
invAttachment := make(map[string]interface{}, len(md))
for k, v := range md {
invAttachment[k] = v
}
invo := invocation.NewRPCInvocation("FinishVerify", args, invAttachment)
if interceptor == nil {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
info := &grpc_go.UnaryServerInfo{
Server: srv,
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
return result, result.Error()
}
return interceptor(ctx, in, info, handler)
}
// ArtistInfo_ServiceDesc is the grpc_go.ServiceDesc for ArtistInfo service.
// It's only intended for direct use with grpc_go.RegisterService,
// and not to be introspected or modified (even as a copy)
var ArtistInfo_ServiceDesc = grpc_go.ServiceDesc{
ServiceName: "ArtistInfo.ArtistInfo",
HandlerType: (*ArtistInfoServer)(nil),
Methods: []grpc_go.MethodDesc{
{
MethodName: "GetUserInfo",
Handler: _ArtistInfo_GetUserInfo_Handler,
},
{
MethodName: "CreateUserInfo",
Handler: _ArtistInfo_CreateUserInfo_Handler,
},
{
MethodName: "UpdateUserInfo",
Handler: _ArtistInfo_UpdateUserInfo_Handler,
},
{
MethodName: "UserUpdateTel",
Handler: _ArtistInfo_UserUpdateTel_Handler,
},
{
MethodName: "UserUpdateMsg",
Handler: _ArtistInfo_UserUpdateMsg_Handler,
},
{
MethodName: "Verifyfdd",
Handler: _ArtistInfo_Verifyfdd_Handler,
},
{
MethodName: "FinishVerify",
Handler: _ArtistInfo_FinishVerify_Handler,
},
},
Streams: []grpc_go.StreamDesc{},
Metadata: "artistinfo.proto",
}

51
pkg/cache/redis.go vendored Normal file
View File

@ -0,0 +1,51 @@
package cache
import (
"strconv"
"dubbo.apache.org/dubbo-go/v3/common/logger"
"github.com/go-redis/redis"
"gopkg.in/ini.v1"
)
// RedisClient Redis缓存客户端单例
var (
RedisClient *redis.Client
RedisDB int
RedisAddr string
RedisPw string
//RedisDbName string
)
// InitRedis 在中间件中初始化redis链接 防止循环导包,所以放在这里
func InitRedis(confPath string) {
//从本地读取环境变量
file, err := ini.Load(confPath)
if err != nil {
panic(err)
}
LoadRedisData(file)
connRedis()
}
// connRedis 在中间件中初始化redis链接
func connRedis() {
RedisClient = redis.NewClient(&redis.Options{
Addr: RedisAddr,
Password: RedisPw,
DB: RedisDB,
})
_, err := RedisClient.Ping().Result()
if err != nil {
logger.Errorf("connRedis err", err)
panic(err)
}
}
func LoadRedisData(file *ini.File) {
dbStr := file.Section("redis").Key("RedisDb").String()
RedisDB, _ = strconv.Atoi(dbStr)
RedisAddr = file.Section("redis").Key("RedisAddr").String()
RedisPw = file.Section("redis").Key("RedisPW").String()
//RedisDbName = file.Section("redis").Key("RedisDbName").String()
}

106
pkg/db/init.go Normal file
View File

@ -0,0 +1,106 @@
package model
import (
"fmt"
"os"
"strings"
"time"
"github.com/fonchain-artistserver/cmd/model"
"github.com/fonchain-artistserver/pkg/m"
"github.com/gin-gonic/gin"
"gopkg.in/ini.v1"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
)
var DB *gorm.DB
var (
Db string
DbHost string
DbPort string
DbUser string
DbPassWord string
DbLogName string
)
func Init(confPath string) {
//从本地读取环境变量
file, err := ini.Load(confPath)
if err != nil {
fmt.Println(m.ERROR_SERVER, err)
}
//加载数据库配置
LoadMysqlData(file)
//MySQL数据库
path := strings.Join([]string{DbUser, ":", DbPassWord, "@tcp(", DbHost, ":", DbPort, ")/", DbLogName, "?charset=utf8&parseTime=true"}, "")
//连接数据库
Database(path)
migration() //迁移表 如果需要就打开使用
}
func LoadMysqlData(file *ini.File) {
Db = file.Section("mysql").Key("Db").String()
DbHost = file.Section("mysql").Key("DbHost").String()
DbPort = file.Section("mysql").Key("DbPort").String()
DbUser = file.Section("mysql").Key("DbUser").String()
DbPassWord = file.Section("mysql").Key("DbPassWord").String()
DbLogName = file.Section("mysql").Key("DbName").String()
}
func Database(conn string) {
var ormLogger logger.Interface
if gin.Mode() == "debug" {
ormLogger = logger.Default.LogMode(logger.Info)
} else {
ormLogger = logger.Default
}
db, err := gorm.Open(mysql.New(mysql.Config{
DSN: conn, // DSN data source name
DefaultStringSize: 256, // string 类型字段的默认长度
DisableDatetimePrecision: true, // 禁用 datetime 精度MySQL 5.6 之前的数据库不支持
DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
DontSupportRenameColumn: true, // 用 `change` 重命名列MySQL 8 之前的数据库和 MariaDB 不支持重命名列
SkipInitializeWithVersion: false, // 根据版本自动配置
}), &gorm.Config{
Logger: ormLogger,
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
})
sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(20) //设置连接池,空闲
sqlDB.SetMaxOpenConns(100) //打开
sqlDB.SetConnMaxLifetime(time.Second * 30)
DB = db
if err != nil {
panic(err)
}
}
func migration() {
//自迁移模式
err := DB.AutoMigrate(&model.User{},
&model.Bank{},
&model.RealName{},
&model.Artwork{},
&model.Contract{},
&model.SupplyInfo{},
&model.ExhVideo{},
&model.ExhExam{},
&model.Invite{},
&model.ArtistInfo{},
&model.UserInvited{},
&model.ArtworkState{},
&model.ArtworkBatch{},
)
if err != nil {
fmt.Println("register table fail")
os.Exit(0)
}
fmt.Println("register table success")
}

17
pkg/m/artistinfo.go Normal file
View File

@ -0,0 +1,17 @@
package m
//HTTP
const (
CertPath = "./key/artist.fontree.cn.crt"
PrivPath = "./key/artist.fontree.cn.key"
Enabled = "false"
// ReturnUrl = "http://artist.fontree.cn"
ReturnUrl = "192.168.10.7"
)
const (
URL = "https://cdn.fontree.cn"
AK = "e102c02f0a7843d29a8abe561a17913e"
SK = "a6042bb43d4747259a7da72133cc5ce6"
Bucket = "dci-file"
)

76
pkg/m/msg.go Normal file
View File

@ -0,0 +1,76 @@
package m
import "github.com/fonchain_enterprise/utils/aes"
var Encryption aes.Encryption
var JWTSecret = []byte("asdfqwer1234")
const (
SERVER_CONFIG = "../conf/conf.ini"
SERVER_DUBBOGO_CONFIG = "dubbogo.yaml"
MODE_ENV = "MODE_ENV"
)
const (
TokenTime = 12
)
const (
SUCCESS = "success"
FAILED = "failed"
)
const (
ERRORPWD = "账号或密码错误"
ERRORCODE = "验证码错误"
ERROT_SAME_TEL = "新手机号与旧手机号相同"
ERRORCONFIG = "配置文件读取错误,请检查文件路径:"
ACCOUNT_EXIST = "账号已存在"
ERROR_SERVER = "服务器错误"
ERROR_STRUCT = "结构体错误"
WARNING_WAITING = "稍等重试"
ERROR_DELETE = "删除错误"
ERROR_UPDATE = "更新异常"
ERROR_CREATE_ARTIST_INVALID = "创建画家参数错误"
CREATE_SUCCESS = "创建成功"
CREATE_ERROR = "创建失败"
UPDATE_SUCCESS = "更新成功"
ERROR_UID = "uid创建错误"
ERROR_CREATE_PROFILE_DAO = "创建画家信息表错误"
ERROR_CREATE_EXT_DATA = "创建画家扩充数据错误"
ERROR_ARTIST_NAME_EMPTY = "画家名字为空"
ERROR_CAA_NAME_NOT_EMPTY = "证书和名字都不能为空"
ERROR_CAA_NUM_EMPTY = "证书编号为空"
ERROR_CAA_NUM_INVALID = "证书不匹配"
ERROR_CAA_NO_DATA = "证书未查询到数据"
ERROR_ALREADY_AUTH = "此身份证已实名认证"
ERROR_MARSHAL = "数据序列化错误"
ERROR_UNMARSHAL = "数据反序列化错误"
ERROR_AFFECT_ROWS_ZERO = "影响行为0"
ERROR_AFFECT_ROWS = "影响行不一致"
ERROR_SELECT = "查询异常"
SAVE_ERROR = "数据库保存或者更新数据错误"
UPDATE_FAILED = "更新失败"
ERROR_UPDATE_MEAID_INVALID = "更新图像参数不合法"
ERROR_Index_INVALID = "更新指数参数不合法"
ERROR_UPDATE_MEDIA_DAO = "更新图像错误"
ARTIST_NOT_EXISTS = "画家不存在"
ERROR_DATA_NOT_EXISTS = "数据不存在"
ERROR_UPDATE_ARTIST = "数据不存在"
ERROR_INVALID_CARDID = "身份证号不合法"
INVITE_CODE_INVALID = "邀请码无效"
ERROR_UPDATE_HONOR_INVALID = "更新荣誉参数不合法"
ERROR_HONOR_TYPE = "荣誉类型不合法"
ERROR_HONOR_CREATE = "荣誉信息创建错误"
ERROR_DEL_ARTIST_INVALID = "删除画家参数错误"
ERROR_DEL_ARTIST_DAO = "删除画家DAO错误"
ERROR_DEL_ARTIST_FAILED = "删除画家失败"
DEL_SUCCESS = "删除成功"
ERROR_BATCH_INSERT = "批量插入失败"
CREATE_BATCH_SUCCESS = "批量插入成功"
)

19
pkg/util/file.go Normal file
View File

@ -0,0 +1,19 @@
package util
import (
"fmt"
"os"
)
func CreateArtistInfo(id int64) {
if _, err := os.Stat("static/artist/" + fmt.Sprintf("%d", id) + "/"); err != nil {
if !os.IsExist(err) {
os.MkdirAll("static/artist/"+fmt.Sprintf("%d", id)+"/", os.ModePerm)
}
}
if _, err := os.Stat("static/artist/" + fmt.Sprintf("%d", id) + "/info/"); err != nil {
if !os.IsExist(err) {
os.MkdirAll("static/artist/"+fmt.Sprintf("%d", id)+"/info", os.ModePerm)
}
}
}

130
pkg/util/qrcode.go Normal file
View File

@ -0,0 +1,130 @@
package util
import (
"fmt"
"image"
"image/color"
"image/draw"
"image/png"
"io/ioutil"
"log"
"os"
"github.com/fonchain/utils/utils"
"github.com/golang/freetype"
"github.com/nfnt/resize"
"golang.org/x/image/font"
)
func CreateQrCode(invitedCode, userName string) error {
QrCodePath, err := utils.GenQRCode("https://artist.fontree.cn/login?invitedCode=" + invitedCode)
if err != nil {
return err
}
tmp, err := os.Open(QrCodePath)
if err != nil {
return err
}
defer tmp.Close()
src, err := os.Open("./qrcodebg.png")
if err != nil {
log.Println(err)
return err
}
defer src.Close()
img, err := png.Decode(src)
if err != nil {
log.Println(err)
return err
}
outimage, _ := addLabel(img, userName+"邀请您注册画家宝用户", 210, 300, color.RGBA{255, 255, 255, 255}, 55, "font1716.ttf")
outimage, _ = addLabel(outimage, "(使用此二维码后,"+userName+"将成为你的邀请人)", 210, 400, color.RGBA{255, 255, 255, 255}, 38, "font1716.ttf")
outimage, _ = addLabel(outimage, "邀请码:"+invitedCode, 260, 1340, color.RGBA{69, 137, 239, 255}, 70, "font1716.ttf")
QrCode2Path := "static/qrcode/" + invitedCode + "-2.png"
f, err := os.Create(QrCode2Path)
if err != nil {
log.Println(err)
return err
}
defer f.Close()
newImg := image.NewNRGBA(image.Rect(0, 0, 1125, 2436))
// fe, err := os.Open("./" + artistPhoto.SmallPic + "_small.jpg")
qrImg, err := png.Decode(tmp)
if err != nil {
fmt.Println(err.Error())
return err
}
qrImg = resize.Resize(uint(700), uint(700), qrImg, resize.Lanczos3)
draw.Draw(newImg, newImg.Bounds(), outimage, outimage.Bounds().Min.Sub(image.Pt(0, 0)), draw.Over)
draw.Draw(newImg, newImg.Bounds(), qrImg, qrImg.Bounds().Min.Sub(image.Pt(210, 570)), draw.Over)
err = png.Encode(f, newImg)
if err != nil {
return err
}
tmp.Close()
tmps, err := os.OpenFile(QrCodePath, os.O_RDWR|os.O_CREATE, 0777)
if err != nil {
return err
}
defer tmps.Close()
_, err = UploadToBos(tmps, fmt.Sprintf("artistmgmt/static/qrcode/%v.png", invitedCode))
if err != nil {
return err
}
// fmt.Println(urlss)
tmp2, err := os.Open(QrCode2Path)
if err != nil {
return err
}
defer tmp2.Close()
str, err := UploadToBos(tmp2, fmt.Sprintf("artistmgmt/static/qrcode/%v-2.png", invitedCode))
if err != nil {
return err
}
fmt.Println(str, "===============")
return nil
}
func addLabel(img image.Image, label string, x, y int, fontColor color.Color, size float64, fontPath string) (image.Image, error) {
bound := img.Bounds()
// 创建一个新的图片
rgba := image.NewRGBA(image.Rect(0, 0, bound.Dx(), bound.Dy()))
// 读取字体
fontBytes, err := ioutil.ReadFile(fontPath)
if err != nil {
return rgba, err
}
myFont, err := freetype.ParseFont(fontBytes)
if err != nil {
return rgba, err
}
draw.Draw(rgba, rgba.Bounds(), img, bound.Min, draw.Src)
c := freetype.NewContext()
c.SetDPI(72)
c.SetFont(myFont)
c.SetFontSize(size)
c.SetClip(rgba.Bounds())
c.SetDst(rgba)
uni := image.NewUniform(fontColor)
c.SetSrc(uni)
c.SetHinting(font.HintingNone)
// 在指定的位置显示
pt := freetype.Pt(x, y+int(c.PointToFixed(size)>>6))
if _, err := c.DrawString(label, pt); err != nil {
return rgba, err
}
return rgba, nil
}

137
pkg/util/utils.go Normal file
View File

@ -0,0 +1,137 @@
package util
import (
"fmt"
"io"
"mime/multipart"
"reflect"
"strconv"
"strings"
"time"
"github.com/fonchain-artistserver/pkg/m"
"github.com/fonchain/utils/objstorage"
)
// IdCardTurnAge 身份证号读取年龄
func IdCardTurnAge(idCard string) int {
var mapmou = map[string]int{"January": 1, "february": 2, "March": 3, "April": 4, "May": 5, "June": 6, "July": 7, "August": 8, "September": 9, "October": 10, "November": 11, "December": 12}
// idCard := "34052419800101001X" //身份证
now := time.Now()
now_year := now.Year() // 年
now_mo := mapmou[now.Month().String()] // 月
now_day := now.Day() // 日
fmt.Println(now_year, now_mo, now_day)
idcard_year, _ := strconv.Atoi(Substr(idCard, 6, 4)) // 年
idcard_mo, _ := strconv.Atoi(Substr(idCard, 10, 2)) // 月
idcard_day, _ := strconv.Atoi(Substr(idCard, 12, 2)) // 日
fmt.Println(idcard_year, idcard_mo, idcard_day)
fmt.Println("idCard:" + idCard)
age := now_year - idcard_year // 如果计算虚岁需这样age := now_year - idcard_year+1
if now_year < idcard_year {
age = 0
} else {
if now_mo < idcard_mo {
age = age - 1
} else {
if now_day < idcard_day {
age = age - 1
}
}
}
fmt.Println("age:", age)
return age
}
func Substr(str string, start, length int) string {
rs := []rune(str)
rl := len(rs)
end := 0
if start < 0 {
start = rl - 1 + start
}
end = start + length
if start > end {
start, end = end, start
}
if start < 0 {
start = 0
}
if start > rl {
start = rl
}
if end < 0 {
end = 0
}
if end > rl {
end = rl
}
return string(rs[start:end])
}
// 封装上传图片到bos然后返回状态和图片的url单张
func UploadToBos(file multipart.File, objName string) (string, error) {
BOSClient, err := objstorage.NewBOS(m.AK, m.SK, objstorage.BOS_BJ)
if err != nil {
fmt.Println(err)
}
b := new(strings.Builder)
io.Copy(b, file)
_, err = BOSClient.PutObjectFromBytes(m.Bucket, objName, []byte(b.String()))
if err != nil {
return "", err
}
url := m.URL + "/" + objName
return url, nil
}
type CopyOption struct {
Src interface{}
Dst interface{}
WhiteFields string
BlackFields string
}
// 反射
func CopyStructSuper(copyOpt CopyOption) {
st := reflect.TypeOf(copyOpt.Src)
sv := reflect.ValueOf(copyOpt.Src)
dt := reflect.TypeOf(copyOpt.Dst)
dv := reflect.ValueOf(copyOpt.Dst)
if st.Kind() == reflect.Ptr { //处理指针
st = st.Elem()
sv = sv.Elem()
}
if dt.Kind() == reflect.Ptr { //处理指针
dt = dt.Elem()
}
if st.Kind() != reflect.Struct || dt.Kind() != reflect.Struct { //如果不是struct类型直接返回dst
return
}
dv = reflect.ValueOf(dv.Interface())
// 遍历TypeOf 类型
for i := 0; i < dt.NumField(); i++ { //通过索引来取得它的所有字段,同时来决定循环的次数
f := dt.Field(i) //通过这个i作为它的索引从0开始来取得它的字段
dVal := dv.Elem().Field(i)
sVal := sv.FieldByName(f.Name)
if copyOpt.WhiteFields != "" {
if !strings.Contains(copyOpt.WhiteFields, fmt.Sprintf(",%s,", f.Name)) {
continue
}
}
if copyOpt.BlackFields != "" {
if strings.Contains(copyOpt.BlackFields, fmt.Sprintf(",%s,", f.Name)) {
continue
}
}
//src数据有效且dst字段能赋值,类型一致
if sVal.IsValid() && dVal.CanSet() && f.Type.Kind() == sVal.Type().Kind() {
dVal.Set(sVal)
}
}
}