223 lines
7.1 KiB
Go
223 lines
7.1 KiB
Go
package adser
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
"time"
|
|
|
|
"91porn-server/app/appg"
|
|
"91porn-server/common"
|
|
"91porn-server/common/constant/redisconst"
|
|
"91porn-server/common/httputil"
|
|
"91porn-server/common/log"
|
|
"91porn-server/models/commod"
|
|
|
|
"github.com/vmihailenco/msgpack/v5"
|
|
)
|
|
|
|
/*
|
|
福利-游戏广告 100001 GameAppList
|
|
福利-直播广告 100002 ZbAppList
|
|
福利-炮台广告 100003 YpAppList
|
|
福利-棋牌广告 100004 QpAppList
|
|
福利-视频广告 100005
|
|
福利-横版广告 100006 HengAppList
|
|
福利-横一广告 100007
|
|
福利-竖版广告 100008 ShuAppList
|
|
福利-文字广告 100009
|
|
福利-Banner广告 100099 AdvList
|
|
*/
|
|
const (
|
|
AdPosGame = 100001 // 游戏
|
|
AdPosZhiBo = 100002 // 直播
|
|
AdPosPaoTai = 100003 // 约炮
|
|
AdPosQiPai = 100004 // 棋牌
|
|
AdPosShiPin = 100005 // 视频
|
|
AdPosHeng = 100006 // 横
|
|
AdPosHeng1 = 100007 // 横1
|
|
AdPosShu = 100008 // 竖
|
|
AdPosWenZi = 100009 // 文字
|
|
AdPosAds = 100099 // BANNER广告
|
|
)
|
|
|
|
// RecreationListRes 娱乐广告列表请求返回
|
|
type RecreationListRes struct {
|
|
HengAppList []AppInfo `json:"hengApp" bson:"hengApp"`
|
|
ShuAppList []AppInfo `json:"shuApp" bson:"shuApp"`
|
|
AdvList []AdvInfo `json:"adv" bson:"adv"`
|
|
GameAppList []AppInfo `json:"gameApp" bson:"gameApp"` // 游戏
|
|
YpAppList []AppInfo `json:"ypApp" bson:"ypApp"` // 约炮
|
|
QpAppList []AppInfo `json:"qpApp" bson:"qpApp"` // 棋牌
|
|
ZbAppList []AppInfo `json:"zbApp" bson:"zbApp"` // 直播
|
|
}
|
|
|
|
type CommonListRes struct {
|
|
Code int64 `json:"code"`
|
|
Data RecreationListRes `json:"data"`
|
|
Msg string `json:"msg"`
|
|
Time string `json:"time"`
|
|
Tip string `json:"tip"`
|
|
}
|
|
|
|
// AppInfo 娱乐app实体信息
|
|
type AppInfo struct {
|
|
Id string `json:"id"` // ID
|
|
Name string `json:"name"` // 应用名称
|
|
Desc string `json:"desc"` // 应用描述
|
|
Icon string `json:"icon"` // 应用图标
|
|
Url string `json:"url"` // 应用链接
|
|
Type string `json:"type"` // 应用类型
|
|
DownloadNum int64 `json:"downloadNum"` // 应用下载次数
|
|
//广告-集团上报数据
|
|
Position int `json:"position"` // 集团广告code
|
|
PositionName string `json:"positionName"` // 集团广告名称
|
|
}
|
|
|
|
// AdvInfo 娱乐广告实体信息
|
|
type AdvInfo struct {
|
|
Id string `json:"id"` // ID
|
|
Name string `json:"name"` // 广告名称
|
|
Image string `json:"image"` // 广告图片
|
|
Url string `json:"url"` // 广告链接
|
|
Location string `json:"location"` // 位置 1:顶部 2:底部
|
|
ModuleType int `json:"moduleType"` // 广告模块 1:应用 2:游戏 3:约炮 4:棋牌 5:直播
|
|
//广告-集团上报数据
|
|
Position int `json:"position"` // 集团广告code
|
|
PositionName string `json:"positionName"` // 集团广告名称
|
|
}
|
|
|
|
// RecreationClickInfo 娱乐广告点击参数信息
|
|
type RecreationClickInfo struct {
|
|
Id string `form:"id" json:"id" binding:"required"` // 数据id
|
|
Type string `form:"type" json:"type" binding:"required"` // 数据类型,app or adv
|
|
SysType string `form:"sysType" json:"sysType" binding:"required"` // 用户设备类型. ios or android
|
|
}
|
|
|
|
// RecreationThreeServer 娱乐广告列表,数据来源于导航站(navigate)
|
|
func RecreationThreeServer() (RecreationListRes, error) {
|
|
str, err := appg.Redis.Get(redisconst.NavigateRecreationCache)
|
|
if err != nil {
|
|
log.Warn(fmt.Sprintf("缓存获取娱乐广告信息异常:%v", err))
|
|
return RecreationListRes{}, err
|
|
}
|
|
|
|
var resp CommonListRes
|
|
if str != nil && *str != "" {
|
|
if err = msgpack.Unmarshal([]byte(*str), &resp); err == nil {
|
|
return resp.Data, nil
|
|
}
|
|
log.Warn(fmt.Sprintf("娱乐广告解析缓存数据异常:%v", err))
|
|
}
|
|
//请求url
|
|
url := appg.Conf.URL.NavigateUrl + "/api/application/list/" + strconv.FormatInt(int64(commod.KFK_APPID), 10)
|
|
//请求
|
|
code, err := httputil.DefaultClientPostJsonWithResp(&resp, url, nil, nil)
|
|
if err != nil {
|
|
log.Error("RecreationThreeServer POSTWithJResp", log.Any("url", url), log.E(err))
|
|
return resp.Data, err
|
|
}
|
|
if code != http.StatusOK {
|
|
log.Error("RecreationThreeServer response status", log.Any("code", code))
|
|
return resp.Data, errors.New("response status err")
|
|
}
|
|
if len(resp.Data.AdvList) > 0 || len(resp.Data.HengAppList) > 0 || len(resp.Data.ShuAppList) > 0 ||
|
|
len(resp.Data.GameAppList) > 0 || len(resp.Data.YpAppList) > 0 || len(resp.Data.QpAppList) > 0 || len(resp.Data.ZbAppList) > 0 {
|
|
common.Go(func() {
|
|
data, err := msgpack.Marshal(resp)
|
|
if err != nil {
|
|
log.Warn(fmt.Sprintf("娱乐广告json序列化缓存数据异常:%v", err))
|
|
return
|
|
}
|
|
if err = appg.Redis.Set(redisconst.NavigateRecreationCache, data, 6*time.Minute); err != nil {
|
|
log.Warn(fmt.Sprintf("娱乐广告保存缓存数据异常:%v", err))
|
|
return
|
|
}
|
|
})
|
|
}
|
|
return resp.Data, nil
|
|
}
|
|
|
|
// RecreationClick 娱乐广告点击记录,请求第三方(navigate)
|
|
func RecreationClick(p RecreationClickInfo) {
|
|
//请求url
|
|
url := appg.Conf.URL.NavigateUrl + "/api/application/click"
|
|
//请求
|
|
res, err := httputil.DefaultClientPostJson(url, nil, p)
|
|
if err != nil {
|
|
log.Error("RecreationClick POSTWithJResp", log.Any("url", url), log.E(err))
|
|
return
|
|
}
|
|
if res.StatusCode != http.StatusOK {
|
|
log.Error("RecreationClick response status", log.Any("code", res.StatusCode))
|
|
return
|
|
}
|
|
}
|
|
|
|
// RecreationFromJt 从广告中心拉取福利页广告
|
|
func RecreationFromJt() (RecreationListRes, error) {
|
|
var resp RecreationListRes
|
|
|
|
jtAds, err := JtAdvertiseThreeServer()
|
|
if err != nil {
|
|
log.Error("JtAdvertiseThreeServer error occur", log.E(err))
|
|
return resp, err
|
|
}
|
|
|
|
for _, loc := range jtAds {
|
|
pos, err := strconv.Atoi(loc.AdvertiseLocationCode)
|
|
if err != nil {
|
|
log.Error("广告位置代码错误,必须为数字", log.Any("code", loc.AdvertiseLocationCode))
|
|
continue
|
|
}
|
|
if pos < AdPosGame {
|
|
continue
|
|
}
|
|
|
|
for _, ad := range loc.AdDetailInfoList {
|
|
extra := ad.GetExtraData()
|
|
if pos == AdPosAds {
|
|
resp.AdvList = append(resp.AdvList, AdvInfo{
|
|
Id: ad.AdvertiseCode,
|
|
Name: ad.AdvertiseName,
|
|
Image: ad.GetCoverLsj(),
|
|
Url: ad.GetRealLink(nil, nil),
|
|
Location: extra.Location,
|
|
ModuleType: ad.GetAdvertiseType(),
|
|
Position: pos,
|
|
PositionName: loc.AdvertiseLocationName,
|
|
})
|
|
continue
|
|
}
|
|
appInfo := AppInfo{
|
|
Id: ad.AdvertiseCode,
|
|
Name: ad.AdvertiseName,
|
|
Desc: ad.AdvertiseDesc,
|
|
Icon: ad.GetCoverLsj(),
|
|
Url: ad.GetRealLink(nil, nil),
|
|
Type: extra.Type,
|
|
DownloadNum: extra.DownloadCount,
|
|
Position: pos,
|
|
PositionName: loc.AdvertiseLocationName,
|
|
}
|
|
switch pos {
|
|
case AdPosGame:
|
|
resp.GameAppList = append(resp.GameAppList, appInfo)
|
|
case AdPosZhiBo:
|
|
resp.ZbAppList = append(resp.ZbAppList, appInfo)
|
|
case AdPosPaoTai:
|
|
resp.YpAppList = append(resp.YpAppList, appInfo)
|
|
case AdPosQiPai:
|
|
resp.QpAppList = append(resp.QpAppList, appInfo)
|
|
case AdPosHeng:
|
|
resp.HengAppList = append(resp.HengAppList, appInfo)
|
|
case AdPosShu:
|
|
resp.ShuAppList = append(resp.ShuAppList, appInfo)
|
|
}
|
|
}
|
|
}
|
|
|
|
return resp, nil
|
|
}
|