84 lines
2.2 KiB
Go
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))
|
|
}
|