Files
huangguo_server/app/service/adser/adser.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

84 lines
2.2 KiB
Go

package adser
import (
"sort"
"sync"
"91porn-server/app/proto"
"91porn-server/app/service/annouser"
"91porn-server/common"
"91porn-server/models/v/adsmod"
"91porn-server/models/v/annoumod"
"github.com/gin-gonic/gin"
)
func toAdsResSlice(slice adsmod.AdsSlice) []proto.AdsInfo {
ads := make([]proto.AdsInfo, len(slice))
for i, v := range slice {
ads[i] = proto.AdsInfo{
// ID: v.ID,
Cover: v.Cover,
Href: v.Href,
Position: int(v.Position),
SortCode: v.SortCode,
}
}
return ads
}
var sysAds = adsmod.SysAds
func AdsList(adsType adsmod.AdsType, discCode string) (res proto.AdsRes) {
var ads []proto.AdsInfo
var announ []*annouser.Annou
wait := sync.WaitGroup{}
wait.Add(2)
common.Go(func() {
defer wait.Done()
if adsType == adsmod.SysAds {
adSlice, _ := adsmod.ActiveStartAndEndList(adsmod.Sort_sortCode_N1, nil, nil, (&adsmod.AdsTypeMatch{AdsType: &sysAds}).New())
ads = toAdsResSlice(adSlice)
} else {
ads = toAdsResSlice(GetDiscAdSlice(discCode))
}
})
common.Go(func() {
defer wait.Done()
announInfo, _ := annouser.GetAnnouList(annoumod.TotalType)
announ = append(announ, announInfo)
})
wait.Wait()
res.AdsList = ads
if gin.Mode() == gin.DebugMode { //测试模式下向外暴露链接
res.AnnounInfo = announ
return
}
res.AnnounInfo = announ
return
}
func GetDiscAdSlice(discCode string) adsmod.AdsSlice {
mats := []adsmod.Matcher{
(&adsmod.DistrictCodeMatch{DistrictCode: &discCode}).New(),
}
discADSlice, _ := adsmod.ActiveStartAndEndList(adsmod.Sort_sortCode_N1, nil, nil, mats...)
//未配置渠道广告的广告位,展示系统广告
mats = []adsmod.Matcher{
(&adsmod.AdsTypeMatch{AdsType: &sysAds}).New(),
(&adsmod.AdPositionNinMatch{PositionList: discADSlice.ToPositions()}).New(),
}
ads, _ := adsmod.ActiveStartAndEndList(adsmod.Sort_sortCode_N1, nil, nil, mats...)
ads = append(ads, discADSlice...)
sort.Sort(ads)
return ads
}
func AdList(adsType adsmod.AdsType, discCode string) []proto.AdsInfo {
if adsType == adsmod.SysAds {
adSlice, _ := adsmod.ActiveStartAndEndList(adsmod.Sort_sortCode_N1, nil, nil, (&adsmod.AdsTypeMatch{AdsType: &sysAds}).New())
return toAdsResSlice(adSlice)
}
return toAdsResSlice(GetDiscAdSlice(discCode))
}