From bd77e505fbfcc725b24ff57198073f81b3fd39ef Mon Sep 17 00:00:00 2001 From: wangxinyu Date: Wed, 18 Dec 2024 13:34:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BC=9A=E5=91=98=E4=BB=98=E8=B4=B9?= =?UTF-8?q?=E7=9C=8B=E5=8E=9F=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/errcode/errcode.go | 5 +++ api/proto/previews/proto/image_api.go | 20 +++++++++++ app/mix/controller/image.go | 25 +++++++++++++ app/mix/controller/init.go | 4 +++ app/mix/service/apiservice.go | 39 ++++++++++++++++++++ app/mix/service/logic/image.go | 45 ++++++++++++++++++++++++ app/mix/service/service.go | 1 + library/mediafiller/mediafiller.go | 25 ++----------- library/mediafiller/mediafillerhelper.go | 8 +---- 9 files changed, 142 insertions(+), 30 deletions(-) create mode 100644 api/proto/previews/proto/image_api.go create mode 100644 app/mix/service/logic/image.go diff --git a/api/errcode/errcode.go b/api/errcode/errcode.go index 4daf4307..14f55c0d 100644 --- a/api/errcode/errcode.go +++ b/api/errcode/errcode.go @@ -151,6 +151,7 @@ var ErrCodeMsgMap = map[ErrCode]string{ ErrCodeImageAuditTaskSrvFail: "图像审核任务服务错误", ErrCodeImageAuditTaskNotExist: "图像审核任务不存在", ErrCodeImageAuditTaskManuallyPassFail: "图像审核人工通过失败", + ErrCodeImageOriginalVipView: "会员可查看原图", ErrCodeTextAuditSrvFail: "文字审核服务错误", ErrCodeTextAuditNotExist: "文字审核不存在", @@ -456,6 +457,7 @@ const ( ErrCodeImageAuditTaskSrvFail ErrCode = -21001 // 图像审核任务服务错误 ErrCodeImageAuditTaskNotExist ErrCode = -21002 // 图像审核任务不存在 ErrCodeImageAuditTaskManuallyPassFail ErrCode = -21003 // 图像审核人工通过失败 + ErrCodeImageOriginalVipView ErrCode = -21004 // 会员可查看原图 // TextAudit: 22xxx ErrCodeTextAuditSrvOk ErrCode = ErrCodeOk @@ -633,4 +635,7 @@ const ( ErrCodeRavenIQTestVisitSrvOk ErrCode = ErrCodeOk ErrCodeRavenIQTestVisitSrvFail ErrCode = -102001 // 瑞文智商测试访问表服务错误 ErrCodeRavenIQTestVisitNotExist ErrCode = -102002 // 瑞文智商测试访问表不存在 + + // + ErrCodeVip ErrCode = -102003 ) diff --git a/api/proto/previews/proto/image_api.go b/api/proto/previews/proto/image_api.go new file mode 100644 index 00000000..1b6fac6a --- /dev/null +++ b/api/proto/previews/proto/image_api.go @@ -0,0 +1,20 @@ +package proto + +import ( + "service/api/base" + "service/dbstruct" +) + +type ApiOriginalImageReq struct { + base.BaseRequest + ImageId int64 `json:"image_id"` +} + +type ApiOriginalImageData struct { + Images []*dbstruct.ToCImage `json:"images"` +} + +type ApiOriginalImageResp struct { + base.BaseResponse + *ApiOriginalImageData `json:"data"` +} diff --git a/app/mix/controller/image.go b/app/mix/controller/image.go index b0b429f8..39426369 100644 --- a/app/mix/controller/image.go +++ b/app/mix/controller/image.go @@ -1 +1,26 @@ package controller + +import ( + "github.com/gin-gonic/gin" + "service/api/errcode" + previewsproto "service/api/proto/previews/proto" + "service/app/mix/service" + "service/bizcommon/util" + "service/library/logger" +) + +func ApiGetOriginalImage(ctx *gin.Context) { + req := ctx.MustGet("client_req").(*previewsproto.ApiOriginalImageReq) + if req.ImageId <= 0 { + logger.Error(" ApiGetOriginalImage, invalid param, req: %v", util.ToJson(req)) + ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam) + } + + data, err, ec := service.DefaultService.ApiGetOriginalImage(ctx, req) + if err != nil { + logger.Error("image ApiGetOriginalImage ApiGetOriginalImage err, req: %v", util.ToJson(req)) + ReplyErrCodeMsg(ctx, ec) + } + + ReplyOk(ctx, data) +} diff --git a/app/mix/controller/init.go b/app/mix/controller/init.go index 9261dd43..f1ff910b 100644 --- a/app/mix/controller/init.go +++ b/app/mix/controller/init.go @@ -38,6 +38,7 @@ import ( loginproto "service/api/proto/login/proto" momentproto "service/api/proto/moment/proto" moment_audit_taskproto "service/api/proto/moment_audit_task/proto" + imageproto "service/api/proto/previews/proto" productproto "service/api/proto/product/proto" realname_authenticationproto "service/api/proto/realname_authentication/proto" streamerproto "service/api/proto/streamer/proto" @@ -318,6 +319,9 @@ func Init(r *gin.Engine) { apiConfigGroup := r.Group("/api/config", PrepareToC()) apiConfigGroup.POST("cold_config", middleware.JSONParamValidator(base.BaseRequest{}), middleware.JwtAuthenticator(), ColdConfigHandler) + apiPreviewsGroup := r.Group("/api/previews", PrepareToC()) + apiPreviewsGroup.POST("original_image", middleware.JSONParamValidator(imageproto.ApiOriginalImageReq{}), middleware.JwtAuthenticator(), ApiGetOriginalImage) + // =============================== 以下是服务,只允许内网调用 =============================== // op相关,直接调用服务,不调用gateway diff --git a/app/mix/service/apiservice.go b/app/mix/service/apiservice.go index e89937b9..577c4c0c 100644 --- a/app/mix/service/apiservice.go +++ b/app/mix/service/apiservice.go @@ -59,6 +59,7 @@ import ( "time" Raven_IQ_testproto "service/api/proto/Raven_IQ_test/proto" + previewsproto "service/api/proto/previews/proto" "go.mongodb.org/mongo-driver/mongo" goproto "google.golang.org/protobuf/proto" @@ -4462,3 +4463,41 @@ func (s *Service) ApiGetRavenIQTestVisitCount(ctx *gin.Context, req *Raven_IQ_te } return } + +func (s *Service) ApiGetOriginalImage(ctx *gin.Context, req *previewsproto.ApiOriginalImageReq) (*previewsproto.ApiOriginalImageData, error, errcode.ErrCode) { + ec := errcode.ErrCodeMediaSrvOk + // 获取用户付费状态 + account, err := _DefaultAccount.OpListByMid(ctx, &accountproto.OpListByMidReq{ + Mid: &req.Mid, + }) + if err != nil { + logger.Error("ApiGetOriginalImage failed : %v", err) + } + + // 会员可以查看原图 + if account.GetIsAMember() != consts.PermanentMember { + ec = errcode.ErrCodeImageOriginalVipView + return nil, nil, ec + } + + ids := make([]int64, 0) + ids = append(ids, req.ImageId) + // 获取图片 + list, err := _DefaultMedia.GetImageByIds(ctx, ids) + if err != nil { + logger.Error("ApiGetOriginalImage GetImageByIds fail, req: %v, err: %v", util.ToJson(req), err) + ec = errcode.ErrCodeMediaSrvFail + return nil, err, ec + } + + images := make([]*dbstruct.ToCImage, 0) + for _, image := range list { + images = append(images, _DefaultImage.TransToCImage(image, account.GetIsAMember())) + } + + data := &previewsproto.ApiOriginalImageData{ + Images: images, + } + + return data, err, ec +} diff --git a/app/mix/service/logic/image.go b/app/mix/service/logic/image.go new file mode 100644 index 00000000..9b0c21ea --- /dev/null +++ b/app/mix/service/logic/image.go @@ -0,0 +1,45 @@ +package logic + +import ( + "math/rand" + "service/api/consts" + "service/app/mix/dao" + "service/dbstruct" + _ "service/library/logger" +) + +type Image struct { + store *dao.Store +} + +func (v *Image) TransToCImage(image *dbstruct.Image, isAMember int64) *dbstruct.ToCImage { + if image == nil { + return nil + } + + // 选择内存最小的图片 + imgSrcId := image.SelectMinSizeOssId() + + // 会员可以查看原图 + if isAMember == consts.PermanentMember { + imgSrcId = "" + } + + return &dbstruct.ToCImage{ + Id: image.Id, + W: image.W, + H: image.H, + Fmt: image.Fmt, + Urls: []string{v.getFileServerDomain() + imgSrcId}, + } +} + +func (v *Image) getFileServerDomain() string { + return "https://filecdntx01.tiefen.fun/" + if rand.Intn(100) < 50 { + return "https://filecdntx01.tiefen.fun/" + } + return "https://filecdn01.tiefen.fun/" + + //return defaultMediaFiller.fileServerDomainName +} diff --git a/app/mix/service/service.go b/app/mix/service/service.go index e624d029..0700ba81 100644 --- a/app/mix/service/service.go +++ b/app/mix/service/service.go @@ -155,6 +155,7 @@ var ( _DefaultRavenIQTest *logic.RavenIQTest _DefaultRavenIQTestVisit *logic.RavenIQTestVisit _DefaultVeriCodeWrongTimes *logic.VeriCodeWrongTimes + _DefaultImage *logic.Image _DefaultStreamerDecrtByEs *logic.StreamerDecrtByEs _DefaultZoneDecrtByEs *logic.ZoneDecrtByEs diff --git a/library/mediafiller/mediafiller.go b/library/mediafiller/mediafiller.go index 9fd3656a..a33cb4ff 100644 --- a/library/mediafiller/mediafiller.go +++ b/library/mediafiller/mediafiller.go @@ -3,9 +3,7 @@ package mediafiller import ( "encoding/json" "math/rand" - accountproto "service/api/proto/account/proto" "service/api/proto/gateway/proto" - "service/app/mix/service/logic" "service/dbstruct" "service/library/logger" "time" @@ -24,7 +22,6 @@ func init() { var ( defaultMediaFiller *MediaFiller - _DefaultAccount *logic.Account ) type GetImageByIdsFunc func(ctx *gin.Context, ids []int64) ([]*dbstruct.Image, error) @@ -96,21 +93,12 @@ func FillEntity(ctx *gin.Context, entity MediaFillable) error { return err } - // 获取用户付费状态 - account, err := _DefaultAccount.OpListByMid(ctx, &accountproto.OpListByMidReq{ - Mid: &baseReq.Mid, - }) - if err != nil { - logger.Error("FillEntity mediafiller component opListByMid failed : %v", err) - return err - } - images := make([]*dbstruct.ToCImage, 0) videos := make([]*dbstruct.ToCVideo, 0) for _, imageId := range imageIds { if image, ok := imageMap[imageId]; ok { - images = append(images, transToCImage(image, account.GetIsAMember())) + images = append(images, transToCImage(image)) } } for _, videoId := range videoIds { @@ -165,22 +153,13 @@ func FillList(ctx *gin.Context, list []MediaFillable) error { return err } - // 获取用户付费状态 - account, err := _DefaultAccount.OpListByMid(ctx, &accountproto.OpListByMidReq{ - Mid: &baseReq.Mid, - }) - if err != nil { - logger.Error("FillEntity mediafiller component opListByMid failed : %v", err) - return err - } - for _, v := range list { images := make([]*dbstruct.ToCImage, 0) videos := make([]*dbstruct.ToCVideo, 0) for _, imageId := range v.GetImageIds() { if image, ok := imageMap[imageId]; ok { - images = append(images, transToCImage(image, account.GetIsAMember())) + images = append(images, transToCImage(image)) } } for _, videoId := range v.GetVideoIds() { diff --git a/library/mediafiller/mediafillerhelper.go b/library/mediafiller/mediafillerhelper.go index fda3839c..667fec11 100644 --- a/library/mediafiller/mediafillerhelper.go +++ b/library/mediafiller/mediafillerhelper.go @@ -1,7 +1,6 @@ package mediafiller import ( - "service/api/consts" "service/dbstruct" "service/library/logger" @@ -43,7 +42,7 @@ func getVideoMapByIds(ctx *gin.Context, ids []int64) (map[int64]*dbstruct.Video, } // todo -func transToCImage(image *dbstruct.Image, isAMember int64) *dbstruct.ToCImage { +func transToCImage(image *dbstruct.Image) *dbstruct.ToCImage { if image == nil { return nil } @@ -51,11 +50,6 @@ func transToCImage(image *dbstruct.Image, isAMember int64) *dbstruct.ToCImage { // 选择内存最小的图片 imgSrcId := image.SelectMinSizeOssId() - // 会员可以查看原图 - if isAMember == consts.PermanentMember { - imgSrcId = "" - } - return &dbstruct.ToCImage{ Id: image.Id, W: image.W,