feat:会员付费看原图

This commit is contained in:
wangxinyu 2024-12-18 13:34:14 +08:00
parent 5a3ebbbb7c
commit bd77e505fb
9 changed files with 142 additions and 30 deletions

View File

@ -151,6 +151,7 @@ var ErrCodeMsgMap = map[ErrCode]string{
ErrCodeImageAuditTaskSrvFail: "图像审核任务服务错误", ErrCodeImageAuditTaskSrvFail: "图像审核任务服务错误",
ErrCodeImageAuditTaskNotExist: "图像审核任务不存在", ErrCodeImageAuditTaskNotExist: "图像审核任务不存在",
ErrCodeImageAuditTaskManuallyPassFail: "图像审核人工通过失败", ErrCodeImageAuditTaskManuallyPassFail: "图像审核人工通过失败",
ErrCodeImageOriginalVipView: "会员可查看原图",
ErrCodeTextAuditSrvFail: "文字审核服务错误", ErrCodeTextAuditSrvFail: "文字审核服务错误",
ErrCodeTextAuditNotExist: "文字审核不存在", ErrCodeTextAuditNotExist: "文字审核不存在",
@ -456,6 +457,7 @@ const (
ErrCodeImageAuditTaskSrvFail ErrCode = -21001 // 图像审核任务服务错误 ErrCodeImageAuditTaskSrvFail ErrCode = -21001 // 图像审核任务服务错误
ErrCodeImageAuditTaskNotExist ErrCode = -21002 // 图像审核任务不存在 ErrCodeImageAuditTaskNotExist ErrCode = -21002 // 图像审核任务不存在
ErrCodeImageAuditTaskManuallyPassFail ErrCode = -21003 // 图像审核人工通过失败 ErrCodeImageAuditTaskManuallyPassFail ErrCode = -21003 // 图像审核人工通过失败
ErrCodeImageOriginalVipView ErrCode = -21004 // 会员可查看原图
// TextAudit: 22xxx // TextAudit: 22xxx
ErrCodeTextAuditSrvOk ErrCode = ErrCodeOk ErrCodeTextAuditSrvOk ErrCode = ErrCodeOk
@ -633,4 +635,7 @@ const (
ErrCodeRavenIQTestVisitSrvOk ErrCode = ErrCodeOk ErrCodeRavenIQTestVisitSrvOk ErrCode = ErrCodeOk
ErrCodeRavenIQTestVisitSrvFail ErrCode = -102001 // 瑞文智商测试访问表服务错误 ErrCodeRavenIQTestVisitSrvFail ErrCode = -102001 // 瑞文智商测试访问表服务错误
ErrCodeRavenIQTestVisitNotExist ErrCode = -102002 // 瑞文智商测试访问表不存在 ErrCodeRavenIQTestVisitNotExist ErrCode = -102002 // 瑞文智商测试访问表不存在
//
ErrCodeVip ErrCode = -102003
) )

View File

@ -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"`
}

View File

@ -1 +1,26 @@
package controller 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)
}

View File

@ -38,6 +38,7 @@ import (
loginproto "service/api/proto/login/proto" loginproto "service/api/proto/login/proto"
momentproto "service/api/proto/moment/proto" momentproto "service/api/proto/moment/proto"
moment_audit_taskproto "service/api/proto/moment_audit_task/proto" moment_audit_taskproto "service/api/proto/moment_audit_task/proto"
imageproto "service/api/proto/previews/proto"
productproto "service/api/proto/product/proto" productproto "service/api/proto/product/proto"
realname_authenticationproto "service/api/proto/realname_authentication/proto" realname_authenticationproto "service/api/proto/realname_authentication/proto"
streamerproto "service/api/proto/streamer/proto" streamerproto "service/api/proto/streamer/proto"
@ -318,6 +319,9 @@ func Init(r *gin.Engine) {
apiConfigGroup := r.Group("/api/config", PrepareToC()) apiConfigGroup := r.Group("/api/config", PrepareToC())
apiConfigGroup.POST("cold_config", middleware.JSONParamValidator(base.BaseRequest{}), middleware.JwtAuthenticator(), ColdConfigHandler) 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 // op相关直接调用服务不调用gateway

View File

@ -59,6 +59,7 @@ import (
"time" "time"
Raven_IQ_testproto "service/api/proto/Raven_IQ_test/proto" Raven_IQ_testproto "service/api/proto/Raven_IQ_test/proto"
previewsproto "service/api/proto/previews/proto"
"go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo"
goproto "google.golang.org/protobuf/proto" goproto "google.golang.org/protobuf/proto"
@ -4462,3 +4463,41 @@ func (s *Service) ApiGetRavenIQTestVisitCount(ctx *gin.Context, req *Raven_IQ_te
} }
return 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
}

View File

@ -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
}

View File

@ -155,6 +155,7 @@ var (
_DefaultRavenIQTest *logic.RavenIQTest _DefaultRavenIQTest *logic.RavenIQTest
_DefaultRavenIQTestVisit *logic.RavenIQTestVisit _DefaultRavenIQTestVisit *logic.RavenIQTestVisit
_DefaultVeriCodeWrongTimes *logic.VeriCodeWrongTimes _DefaultVeriCodeWrongTimes *logic.VeriCodeWrongTimes
_DefaultImage *logic.Image
_DefaultStreamerDecrtByEs *logic.StreamerDecrtByEs _DefaultStreamerDecrtByEs *logic.StreamerDecrtByEs
_DefaultZoneDecrtByEs *logic.ZoneDecrtByEs _DefaultZoneDecrtByEs *logic.ZoneDecrtByEs

View File

@ -3,9 +3,7 @@ package mediafiller
import ( import (
"encoding/json" "encoding/json"
"math/rand" "math/rand"
accountproto "service/api/proto/account/proto"
"service/api/proto/gateway/proto" "service/api/proto/gateway/proto"
"service/app/mix/service/logic"
"service/dbstruct" "service/dbstruct"
"service/library/logger" "service/library/logger"
"time" "time"
@ -24,7 +22,6 @@ func init() {
var ( var (
defaultMediaFiller *MediaFiller defaultMediaFiller *MediaFiller
_DefaultAccount *logic.Account
) )
type GetImageByIdsFunc func(ctx *gin.Context, ids []int64) ([]*dbstruct.Image, error) 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 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) images := make([]*dbstruct.ToCImage, 0)
videos := make([]*dbstruct.ToCVideo, 0) videos := make([]*dbstruct.ToCVideo, 0)
for _, imageId := range imageIds { for _, imageId := range imageIds {
if image, ok := imageMap[imageId]; ok { if image, ok := imageMap[imageId]; ok {
images = append(images, transToCImage(image, account.GetIsAMember())) images = append(images, transToCImage(image))
} }
} }
for _, videoId := range videoIds { for _, videoId := range videoIds {
@ -165,22 +153,13 @@ func FillList(ctx *gin.Context, list []MediaFillable) error {
return err 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 { for _, v := range list {
images := make([]*dbstruct.ToCImage, 0) images := make([]*dbstruct.ToCImage, 0)
videos := make([]*dbstruct.ToCVideo, 0) videos := make([]*dbstruct.ToCVideo, 0)
for _, imageId := range v.GetImageIds() { for _, imageId := range v.GetImageIds() {
if image, ok := imageMap[imageId]; ok { if image, ok := imageMap[imageId]; ok {
images = append(images, transToCImage(image, account.GetIsAMember())) images = append(images, transToCImage(image))
} }
} }
for _, videoId := range v.GetVideoIds() { for _, videoId := range v.GetVideoIds() {

View File

@ -1,7 +1,6 @@
package mediafiller package mediafiller
import ( import (
"service/api/consts"
"service/dbstruct" "service/dbstruct"
"service/library/logger" "service/library/logger"
@ -43,7 +42,7 @@ func getVideoMapByIds(ctx *gin.Context, ids []int64) (map[int64]*dbstruct.Video,
} }
// todo // todo
func transToCImage(image *dbstruct.Image, isAMember int64) *dbstruct.ToCImage { func transToCImage(image *dbstruct.Image) *dbstruct.ToCImage {
if image == nil { if image == nil {
return nil return nil
} }
@ -51,11 +50,6 @@ func transToCImage(image *dbstruct.Image, isAMember int64) *dbstruct.ToCImage {
// 选择内存最小的图片 // 选择内存最小的图片
imgSrcId := image.SelectMinSizeOssId() imgSrcId := image.SelectMinSizeOssId()
// 会员可以查看原图
if isAMember == consts.PermanentMember {
imgSrcId = ""
}
return &dbstruct.ToCImage{ return &dbstruct.ToCImage{
Id: image.Id, Id: image.Id,
W: image.W, W: image.W,