广告改为参考模板从媒资中心按 AppId 拉取

- 新增 proxy.QueryAdvitise / storage.QueryAdvitiseList,调用 /media/web/app/advitise
- proxy.AdvitiseInfo 兼容 id 为数字或字符串
- configser 改用 UpdateAdvitiseData,定时拉取并拼接 CDN,移除广告中心(Jt)拉取
- proto.AdvitiseData 改为 proxy.AdvitiseData 别名,应用列表 A/B 广告位改用 appInfoAList/appInfoBList
- 同步 swagger 文档

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-29 11:28:04 +08:00
co-authored by Claude Opus 5.5
parent a074446edb
commit 9a2d92d4b7
10 changed files with 1233 additions and 7323 deletions
+2 -2
View File
@@ -124,7 +124,7 @@ func UpdateAppListCache(ctx context.Context) {
}
// 广告位 A(code=12)
if category.Code == 12 {
for _, ad := range advitise.AList {
for _, ad := range advitise.AppInfoAList {
apps = append(apps, proto.AppInfoData{
AdvitiseId: ad.Id,
CategoryId: category.Id,
@@ -137,7 +137,7 @@ func UpdateAppListCache(ctx context.Context) {
}
// 广告位 B(code=13)
if category.Code == 13 {
for _, ad := range advitise.BList {
for _, ad := range advitise.AppInfoBList {
apps = append(apps, proto.AppInfoData{
AdvitiseId: ad.Id,
CategoryId: category.Id,
+42 -78
View File
@@ -1,97 +1,61 @@
package configser
import (
"strconv"
"videoweb/app/api/proto"
"videoweb/app/appg"
"videoweb/pub/adcenter"
"context"
"net/http"
"videoweb/pub/common/log"
"videoweb/pub/common/netutil"
"videoweb/pub/pubdef"
"videoweb/pub/storage"
"videoweb/pub/storage/proxy"
)
// UpdateAdvitiseDataFromJt 从广告中心拉取福利页广告
func UpdateAdvitiseDataFromJt() {
// UpdateAdvitiseData 从媒资中心按 AppId 拉取广告,图片拼接 CDN 后写入缓存
func UpdateAdvitiseData(ctx context.Context) {
config := GetConfigInfo()
var resp proto.AdvitiseData
jtAds, err := adcenter.JtAdvertiseThreeServer(appg.Conf.AdCenter.ApiDomain, appg.Conf.AdCenter.MerchantCode, appg.Conf.AdCenter.AppCode, appg.Conf.AdCenter.AesKey)
if err != nil {
log.Error("JtAdvertiseThreeServer error occur", log.E(err))
queryAdvitiseReq := &proxy.AppAdvitiseInfoReq{
Id: pubdef.AppId,
}
advitiseResult, err := storage.QueryAdvitiseList(ctx, queryAdvitiseReq, "")
if err != nil || advitiseResult.Code != http.StatusOK {
if advitiseResult != nil {
log.Warn("UpdateAdvitiseData.QueryAdvitiseList failed", log.Any("filter", queryAdvitiseReq), log.E(err), log.Any("respCode", advitiseResult.Code))
} else {
log.Warn("UpdateAdvitiseData.QueryAdvitiseList failed", log.Any("filter", queryAdvitiseReq), log.E(err))
}
return
}
adMap := make(map[string]adcenter.AdCacheInfo)
for _, loc := range jtAds {
pos, err := strconv.Atoi(loc.AdvertiseLocationCode)
if err != nil {
log.Error("广告位置代码错误,必须为数字", log.Any("code", loc.AdvertiseLocationCode))
continue
}
//if pos < 100001 {
// continue
//}
ads := make([]proxy.AdvitiseInfo, 0)
for _, ad := range loc.AdDetailInfoList {
//extra := ad.GetExtraData()
ads = append(ads, proxy.AdvitiseInfo{
Id: ad.AdvertiseCode,
Location: int64(pos),
Title: ad.AdvertiseName,
Images: netutil.MergeURL(config.ImgCdn, ad.GetCoverLsj()),
Link: ad.GetRealLink(),
})
adMap[ad.AdvertiseCode] = adcenter.AdCacheInfo{
AdvertiseCode: ad.AdvertiseCode,
CustomerCode: ad.CustomerCode,
AdvertiseName: ad.AdvertiseName,
AdvertiseUrl: ad.AdvertiseUrl,
AdvertiseIcon: ad.AdvertiseIcon,
AdvertiseType: ad.AdvertiseType,
AdMode: ad.AdMode,
AppCode: ad.AppCode,
LocationType: ad.LocationType,
AdvertiseDesc: ad.AdvertiseDesc,
PageType: ad.PageType,
StartTimeStamp: ad.StartTimeStamp,
EndTimeStamp: ad.EndTimeStamp,
Sort: ad.Sort,
AdExtData: ad.AdExtData,
DeptCode: loc.DeptCode,
MerchantCode: loc.MerchantCode,
AdvertiseLocationCode: loc.AdvertiseLocationCode,
AdvertiseLocationName: loc.AdvertiseLocationName,
DisplayMode: loc.DisplayMode,
AdvertiseHeight: loc.AdvertiseHeight,
AdvertiseWidth: loc.AdvertiseWidth,
MaterialType: loc.MaterialType,
AdLimit: loc.AdLimit,
}
}
switch pos {
case 1: //弹窗
resp.DialogList = ads
case 2: // 应用
resp.DetailTopList = ads
case 3: // 横幅
resp.NineGridList = ads
resp.DetailbannerList = ads
case 12:
resp.AList = ads
case 13:
resp.BList = ads
}
data := advitiseResult.Data
for _, list := range []*[]proxy.AdvitiseInfo{
&data.DialogList,
&data.HomeList,
&data.VideoTopList,
&data.VideoDownList,
&data.HotAppList,
&data.NewAppList,
&data.MustAppList,
&data.TitleAppList,
&data.FriendList,
&data.NineGridList,
&data.VideoList,
&data.StopList,
&data.ForcedJumpList,
&data.AppInfoAList,
&data.AppInfoBList,
} {
mergeAdvitiseImages(*list, config.ImgCdn)
}
CacheMgr.Lock.Lock()
defer CacheMgr.Lock.Unlock()
CacheMgr.Advitise = resp
CacheMgr.AdvitiseMap = adMap
CacheMgr.Advitise = data
}
func GetAdvertiseLocation(adverId string) (res adcenter.AdCacheInfo) {
CacheMgr.Lock.RLock()
defer CacheMgr.Lock.RUnlock()
if ad, ok := CacheMgr.AdvitiseMap[adverId]; ok {
res = ad
func mergeAdvitiseImages(list []proxy.AdvitiseInfo, cdn string) {
for i := range list {
if len(list[i].Images) > 0 {
list[i].Images = netutil.MergeURL(cdn, list[i].Images)
}
}
return
}
+2 -4
View File
@@ -8,7 +8,6 @@ import (
"sync"
"videoweb/app/api/proto"
"videoweb/app/service/translationser"
"videoweb/pub/adcenter"
"videoweb/pub/common/log"
"videoweb/pub/common/netutil"
"videoweb/pub/common/srvdef"
@@ -36,7 +35,6 @@ type CacheInfo struct {
Lock sync.RWMutex // 读写锁
Config proto.ConfigInfo // 系统配置缓存
Advitise proto.AdvitiseData
AdvitiseMap map[string]adcenter.AdCacheInfo
TagCategoryList []proto.VideoTagCategoryData
TotalHistory int64
IpBlackMaps map[string]struct{}
@@ -63,14 +61,14 @@ func Start() {
ctx := context.Background()
dataReport.StartSDKConfigCron()
UpdateConfigInfo(ctx)
UpdateAdvitiseDataFromJt()
UpdateAdvitiseData(ctx)
updateIpBlack()
updateTagsCache()
updateAppRichTexts()
updateAnnouncements()
_, _ = skdCron.AddFunc("0 */5 * * * ?", func() {
UpdateConfigInfo(ctx)
UpdateAdvitiseDataFromJt()
UpdateAdvitiseData(ctx)
updateIpBlack()
updateTagsCache()
updateAppRichTexts()