128 lines
3.4 KiB
Go
128 lines
3.4 KiB
Go
package resource
|
|
|
|
import (
|
|
"context"
|
|
"go-common/app/interface/main/creative/conf"
|
|
"go-common/app/interface/main/creative/dao/resource"
|
|
"go-common/app/interface/main/creative/dao/tool"
|
|
model "go-common/app/interface/main/creative/model/resource"
|
|
"go-common/app/interface/main/creative/service"
|
|
resmdl "go-common/app/service/main/resource/model"
|
|
"go-common/library/log"
|
|
"sort"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// Android iPhone
|
|
const (
|
|
BanneriPhone = 2417
|
|
BannerAndroid = 2431
|
|
AcademyiPhone = 2873
|
|
AcademyAndroid = 2877
|
|
BannerCooperate = 2893
|
|
)
|
|
|
|
//Service struct
|
|
type Service struct {
|
|
c *conf.Config
|
|
resDao *resource.Dao
|
|
Seed int64
|
|
}
|
|
|
|
//New get service
|
|
func New(c *conf.Config, rpcdaos *service.RPCDaos) *Service {
|
|
s := &Service{
|
|
c: c,
|
|
resDao: resource.New(c),
|
|
}
|
|
return s
|
|
}
|
|
|
|
// TopBanner fn
|
|
func (s *Service) TopBanner(c context.Context, mobiApp, device, network, ipAddr, buvid, adExtra string, build, resID int, plat int8, mid int64, isAd bool) (res []*model.Banner, err error) {
|
|
var bnsm map[int][]*resmdl.Banner
|
|
if resID == 0 {
|
|
if model.IsAndroid(plat) {
|
|
resID = BannerAndroid
|
|
} else if model.IsIPhone(plat) || model.IsIPad(plat) {
|
|
resID = BanneriPhone
|
|
mobiApp = "iphone"
|
|
device = "phone"
|
|
plat = resmdl.PlatIPhone
|
|
}
|
|
}
|
|
if bnsm, err = s.resDao.Banner(c, mobiApp, device, network, "", ipAddr, buvid, adExtra, strconv.Itoa(resID), build, plat, mid, isAd); err != nil {
|
|
log.Error("s.resDao.Banner err(%v)", err)
|
|
return
|
|
}
|
|
for _, rb := range bnsm[resID] {
|
|
b := &model.Banner{}
|
|
b.ChangeBanner(rb)
|
|
if b.ClientIp == "" {
|
|
b.ClientIp = ipAddr
|
|
}
|
|
res = append(res, b)
|
|
}
|
|
topLen := 5
|
|
if len(res) > topLen {
|
|
res = res[:5]
|
|
}
|
|
sort.Slice(res, func(i, j int) bool { return res[i].Rank < res[j].Rank })
|
|
return
|
|
}
|
|
|
|
// AcademyBanner fn
|
|
func (s *Service) AcademyBanner(c context.Context, mobiApp, device, network, ipAddr, buvid, adExtra string, build, resID int, plat int8, mid int64, isAd bool) (randomRes []*model.Banner, err error) {
|
|
var (
|
|
bnsm map[int][]*resmdl.Banner
|
|
res = make([]*model.Banner, 0)
|
|
keys []int
|
|
)
|
|
randomRes = make([]*model.Banner, 0)
|
|
if model.IsAndroid(plat) {
|
|
resID = AcademyAndroid
|
|
} else if model.IsIPhone(plat) {
|
|
resID = AcademyiPhone
|
|
} else if model.IsIPad(plat) {
|
|
return
|
|
}
|
|
if bnsm, err = s.resDao.Banner(c, mobiApp, device, network, "", ipAddr, buvid, adExtra, strconv.Itoa(resID), build, plat, mid, isAd); err != nil {
|
|
log.Error("s.resDao.Banner err(%v)", err)
|
|
return
|
|
}
|
|
for _, rb := range bnsm[resID] {
|
|
b := &model.Banner{}
|
|
b.ChangeBanner(rb)
|
|
if b.ClientIp == "" {
|
|
b.ClientIp = ipAddr
|
|
}
|
|
res = append(res, b)
|
|
}
|
|
sort.Slice(res, func(i, j int) bool { return res[i].Rank < res[j].Rank })
|
|
randLength := 3
|
|
if len(res) > randLength {
|
|
keys = tool.RandomSliceKeys(0, len(res), randLength, time.Now().Unix())
|
|
} else {
|
|
keys = tool.RandomSliceKeys(0, len(res), len(res), time.Now().Unix())
|
|
}
|
|
for _, k := range keys {
|
|
randomRes = append(randomRes, res[k])
|
|
}
|
|
return
|
|
}
|
|
|
|
// CooperateBanner fn
|
|
func (s *Service) CooperateBanner(c context.Context, mobiApp, device, network, buvid, adExtra string, build int, plat int8, mid int64, isAd bool) (ass []*resmdl.Assignment, err error) {
|
|
var res *resmdl.Resource
|
|
if res, err = s.resDao.SimpleResource(c, BannerCooperate); err != nil {
|
|
log.Error("Resource SimpleResource (%d) error(%v)", BannerCooperate, err)
|
|
return
|
|
}
|
|
if res != nil {
|
|
ass = res.Assignments
|
|
return
|
|
}
|
|
return
|
|
}
|