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