Files
2019-04-22 18:49:16 +08:00

180 lines
4.5 KiB
Go

package banner
import (
"encoding/json"
xtime "go-common/library/time"
"strconv"
"go-common/app/interface/main/app-show/model"
"go-common/app/interface/main/app-show/model/bangumi"
resource "go-common/app/service/main/resource/model"
)
// Banner struct
type Banner struct {
ID int `json:"id"`
ParentID int `json:"-"`
Plat int8 `json:"-"`
Module string `json:"-"`
Position string `json:"-"`
Title string `json:"title"`
Image string `json:"image"`
Hash string `json:"hash"`
URI string `json:"uri"`
Goto string `json:"-"`
Value string `json:"-"`
Param string `json:"-"`
Channel string `json:"-"`
Build int `json:"-"`
Condition string `json:"-"`
Area string `json:"-"`
Rank int `json:"-"`
Rule string `json:"-"`
Type int8 `json:"-"`
Start xtime.Time `json:"-"`
End xtime.Time `json:"-"`
MTime xtime.Time `json:"-"`
ResourceID int `json:"resource_id"`
RequestId string `json:"request_id,omitempty"`
CreativeId int `json:"creative_id,omitempty"`
SrcId int `json:"src_id,omitempty"`
IsAd bool `json:"is_ad"`
IsAdReplace bool `json:"-"`
IsAdLoc bool `json:"is_ad_loc,omitempty"`
CmMark int `json:"cm_mark"`
AdCb string `json:"ad_cb,omitempty"`
ShowUrl string `json:"show_url,omitempty"`
ClickUrl string `json:"click_url,omitempty"`
ClientIp string `json:"client_ip,omitempty"`
Index int `json:"index"`
ServerType int `json:"server_type"`
Extra json.RawMessage `json:"extra,omitempty"`
}
type JsonBanner struct {
Area string `json:"area"`
Hash string `json:"hash"`
Build int `json:"build"`
Condition string `json:"conditions"`
Channel string `json:"channel"`
}
// Banner limit
type Limit struct {
Rule string `json:"-"`
}
// Json limit
type JsonLimit struct {
Limit int `json:"limit"`
Resrc []string `json:"resrc"`
}
// PlatChange
func (b *Banner) BannerChange() {
var tmp *JsonBanner
if err := json.Unmarshal([]byte(b.Rule), &tmp); err == nil {
b.Area = tmp.Area
b.Build = tmp.Build
b.Condition = tmp.Condition
if tmp.Channel == "" {
b.Channel = "*"
} else {
b.Channel = tmp.Channel
}
b.Hash = tmp.Hash
}
switch b.Plat {
case 1: // resource iphone
b.Plat = model.PlatIPhone
case 2: // resource android
b.Plat = model.PlatAndroid
case 3: // resource pad
b.Plat = model.PlatIPad
case 4: // resource iphoneg
b.Plat = model.PlatIPhoneI
case 5: // resource androidg
b.Plat = model.PlatAndroidG
case 6: // resource padg
b.Plat = model.PlatIPadI
case 8: // resource androidi
b.Plat = model.PlatAndroidI
}
if b.Value == "" {
return
}
switch b.Type {
case 6:
//GotoAv
b.URI = "bilibili://video/" + b.Value
case 4:
//GotoLive
if b.Plat == model.PlatIPad {
b.URI = "bilibili://player/live/" + b.Value
} else {
b.URI = "bilibili://live/" + b.Value
}
case 3:
//GotoBangumi
b.URI = "bilibili://bangumi/season/" + b.Value
case 5:
//GotoGame
b.URI = "bilibili://game/" + b.Value
case 2:
//GotoWeb
b.URI = b.Value
}
}
// LimitChange
func (l *Limit) LimitChange() (data map[int]int) {
data = map[int]int{}
var (
tmp = &JsonLimit{}
err error
resid int
)
if err = json.Unmarshal([]byte(l.Rule), tmp); err != nil {
return
}
l.Rule = ""
for _, residstr := range tmp.Resrc {
resid, err = strconv.Atoi(residstr)
if err != nil {
return
}
data[resid] = tmp.Limit
}
return
}
// ResChangeBanner
func (b *Banner) ResChangeBanner(resb *resource.Banner) {
b.ID = resb.ID
b.Title = resb.Title
b.Image = resb.Image
b.Hash = resb.Hash
b.URI = resb.URI
b.ResourceID = resb.ResourceID
b.RequestId = resb.RequestId
b.CreativeId = resb.CreativeId
b.SrcId = resb.SrcId
b.IsAd = resb.IsAd
b.IsAdLoc = resb.IsAdLoc
b.CmMark = resb.CmMark
b.AdCb = resb.AdCb
b.ShowUrl = resb.ShowUrl
b.ClickUrl = resb.ClickUrl
b.ClientIp = resb.ClientIp
b.Index = resb.Index
b.ServerType = resb.ServerType
b.Extra = resb.Extra
}
// BgmChangeBanner bangumiBanner change banner
func (b *Banner) BgmChangeBanner(bgmb *bangumi.Banner) {
b.Title = bgmb.Title
b.Image = bgmb.Image
b.URI = bgmb.URI
}