This commit is contained in:
lwl0608 2024-12-03 15:54:46 +08:00
parent 04d757c62a
commit 1464052697
8 changed files with 150 additions and 0 deletions

View File

@ -312,6 +312,9 @@ func Init(r *gin.Engine) {
apiAppGroup := r.Group("/api/app", PrepareToC())
apiAppGroup.POST("install_info", middleware.JSONParamValidator(base.BaseRequest{}), OpGetInstallInfo)
apiShareGroup := r.Group("/api/share", PrepareToC())
apiShareGroup.POST("zone_url", GetZoneShareUrl)
// =============================== 以下是服务,只允许内网调用 ===============================
// op相关直接调用服务不调用gateway

View File

@ -0,0 +1,23 @@
package controller
import (
"github.com/gin-gonic/gin"
"service/app/mix/service"
"service/library/logger"
)
func GetZoneShareUrl(ctx *gin.Context) {
url, err := service.DefaultService.GetZoneShareUrl(ctx)
if err != nil {
logger.Error("GetZoneShareUrl fail, err: %v", err)
data := map[string]any{
"share_url": "",
}
ReplyOk(ctx, data)
return
}
data := map[string]any{
"share_url": url,
}
ReplyOk(ctx, data)
}

View File

@ -247,6 +247,9 @@ const (
DBRavenIQTest = "Raven_IQ_test"
COLRavenIQTest = "Raven_IQ_test"
COLRavenIQTestVisit = "Raven_IQ_test_visit"
DBShare = "share"
COLShareUrl = "share_url"
)
// 商品表
@ -648,6 +651,11 @@ func (m *Mongo) getColRavenIQTestVisit() *qmgo.Collection {
return m.clientMix.Database(DBRavenIQTest).Collection(COLRavenIQTestVisit)
}
// 商品表
func (m *Mongo) getColShareUrl() *qmgo.Collection {
return m.clientMix.Database(DBShare).Collection(COLShareUrl)
}
// 商品相关
func (m *Mongo) CreateProduct(ctx *gin.Context, product *dbstruct.Product) error {
col := m.getColProduct()

View File

@ -0,0 +1,45 @@
package dao
import (
"github.com/gin-gonic/gin"
"github.com/qiniu/qmgo"
"github.com/qiniu/qmgo/operator"
"service/dbstruct"
)
// 获取有效的分享链接
func (m *Mongo) GetValidShareUrl(ctx *gin.Context) ([]*dbstruct.ShareUrl, error) {
list := make([]*dbstruct.ShareUrl, 0)
col := m.getColShareUrl()
query := qmgo.M{
"status": dbstruct.ShareUrlStatusAvailable,
}
err := col.Find(ctx, query).All(&list)
if err == qmgo.ErrNoSuchDocuments {
err = nil
return make([]*dbstruct.ShareUrl, 0), nil
}
if err != nil {
return make([]*dbstruct.ShareUrl, 0), err
}
return list, nil
}
// 分享链接使用次数 +1
func (m *Mongo) IncShareUrlUseCnt(ctx *gin.Context, url string) error {
col := m.getColShareUrl()
up := qmgo.M{
operator.Inc: qmgo.M{
"use_cnt": 1,
},
}
err := col.UpdateId(ctx, url, up)
if err == qmgo.ErrNoSuchDocuments {
err = nil
return nil
}
if err != nil {
return err
}
return nil
}

View File

@ -0,0 +1,39 @@
package logic
import (
"github.com/gin-gonic/gin"
"math/rand"
"service/app/mix/dao"
"service/bizcommon/util"
"service/library/logger"
)
type Share struct {
store *dao.Store
}
func NewShare(store *dao.Store) (s *Share) {
s = &Share{
store: store,
}
return
}
func (p *Share) GetZoneShareUrl(ctx *gin.Context) (string, error) {
list, err := p.store.GetValidShareUrl(ctx)
if err != nil {
logger.Error("GetValidShareUrl fail, list: %v, err: %v", util.ToJson(list), err)
return "", err
}
if len(list) <= 0 {
logger.Error("GetValidShareUrl fail, nil, list: %v", util.ToJson(list))
return "", nil
}
doc := list[rand.Intn(len(list))-1]
retUrl := doc.Url
err1 := p.store.IncShareUrlUseCnt(ctx, retUrl)
if err1 != nil {
logger.Error("IncShareUrlUseCnt fail, url: %v, err: %v", retUrl, err1)
}
return retUrl, nil
}

View File

@ -158,6 +158,8 @@ var (
_DefaultStreamerDecrtByEs *logic.StreamerDecrtByEs
_DefaultZoneDecrtByEs *logic.ZoneDecrtByEs
_DefaultShare *logic.Share
)
type Service struct {
@ -275,6 +277,7 @@ func (s *Service) Init(c any) (err error) {
_DefaultStreamerDecrtByEs = logic.NewStreamerDecrtByEs(_DefaultStreamerAcct, _DefaultStreamer)
_DefaultZoneDecrtByEs = logic.NewZoneDecrtByEs(_DefaultStreamerAcct, _DefaultZone)
_DefaultShare = logic.NewShare(store)
return
}

View File

@ -0,0 +1,9 @@
package service
import (
"github.com/gin-gonic/gin"
)
func (s *Service) GetZoneShareUrl(ctx *gin.Context) (string, error) {
return _DefaultShare.GetZoneShareUrl(ctx)
}

20
dbstruct/share.go Normal file
View File

@ -0,0 +1,20 @@
package dbstruct
const (
ShareUrlStatusInit = "000" // 初始化
ShareUrlStatusForbidden = "101" // 被屏蔽
ShareUrlStatusAvailable = "102" // 可用
ShareUrlStatusUnknown = "103" // 未知、查空
ShareUrlStatusInvalidParam = "001" // 调用异常:参数有误请检查参数
ShareUrlStatusInvalidFreq = "002" // 调用异常:接口调用频率过快,如需更快调用升级VIP
ShareUrlStatusServerError = "003" // 调用异常:其它异常,不影响.
)
type ShareUrl struct {
Url string `json:"url" bson:"_id"` // url
Ct int64 `json:"ct" bson:"ct"` // 创建时间
Ut int64 `json:"ut" bson:"ut"` // 更新时间
Status string `json:"status" bson:"status"` // Url状态
ApiRes string `json:"api_res" bson:"api_res"` // 接口返回数据
UseCnt int64 `json:"use_cnt" bson:"use_cnt"` // 使用次数
}