新增广告V2模块,双端下载落地页调整
- 新增 advitise v2: info/location/bind/click-stat/day-click-stat 模型与 对应的 service、api、router、proto 定义 - models/index.go 注册 5 个新模型的索引初始化 - 鉴权白名单: /rsdownload/ 改为 /download/,放行 advitise v2 的 get/click 接口 - statg/config: proxyUrl 增加 fileRes1 - common/genId: lid 生成逻辑补充 - 新增 91fans / huangguo 的 mobileconfig 描述文件 - 新增 deploy/nginx/cpcdownload.mfcg.me.conf 网关配置 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -150,6 +150,30 @@ func FindAdsById(ctx context.Context, id int64) (data Advertise, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// FindLatestAdsByAppAndLoc 取该应用/位置当前生效的最新一条广告(用于点击回退到最新广告)
|
||||
// locId <= 0 表示不按位置过滤,只在应用维度取最新
|
||||
func FindLatestAdsByAppAndLoc(ctx context.Context, appId, locId int32) (data Advertise, err error) {
|
||||
now := time.Now()
|
||||
filter := bson.M{
|
||||
"appId": appId,
|
||||
"isActive": true,
|
||||
"startTime": bson.M{"$lte": now},
|
||||
"endTime": bson.M{"$gte": now},
|
||||
}
|
||||
if locId > 0 {
|
||||
filter["locId"] = locId
|
||||
}
|
||||
opts := options.FindOne().SetSort(bson.D{
|
||||
{Key: "sort", Value: 1},
|
||||
{Key: "createAt", Value: -1},
|
||||
})
|
||||
if err = db.FindOne(ctx, &data, filter, opts); err != nil {
|
||||
log.Error("advertise FindLatestAdsByAppAndLoc FindOne err", log.E(err))
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 增加广告点击量
|
||||
func IncAdsClickCount(ctx context.Context, id int64) (err error) {
|
||||
filter := bson.M{"_id": id}
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
package advitiseBindMod
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"stat/common/log"
|
||||
"stat/common/mongos"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func Init(ctx context.Context) {
|
||||
db = mongos.New(mongos.MgoManager, TN.AdvitiseBind)
|
||||
indexes := []mongo.IndexModel{
|
||||
{Keys: bson.D{
|
||||
{Key: FN.AdvitiseBind.AppId, Value: 1},
|
||||
{Key: FN.AdvitiseBind.LocationId, Value: 1},
|
||||
}},
|
||||
{Keys: bson.D{{Key: FN.AdvitiseBind.AdvitiseId, Value: 1}}},
|
||||
{Keys: bson.D{{Key: FN.AdvitiseBind.CreatedAt, Value: -1}}},
|
||||
}
|
||||
if _, err := db.CreateIndex(ctx, indexes); err != nil {
|
||||
panic(fmt.Sprintf("(advitiseBindMod:Init) CreateIndex failed: %+v", err))
|
||||
}
|
||||
}
|
||||
|
||||
func InsertOneAdvitiseBind(ctx context.Context, doc *AdvitiseBind) error {
|
||||
if _, err := db.InsertOne(ctx, doc); err != nil {
|
||||
log.Warn("advitiseBindMod InsertOne failed", log.E(err))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func FindOneAdvitiseBind(ctx context.Context, filter bson.M) (*AdvitiseBind, error) {
|
||||
var doc AdvitiseBind
|
||||
if err := db.FindOne(ctx, &doc, filter); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &doc, nil
|
||||
}
|
||||
|
||||
func DelOneAdvitiseBind(ctx context.Context, filter bson.M) (int64, error) {
|
||||
count, err := db.DeleteOne(ctx, filter)
|
||||
if err != nil {
|
||||
log.Warn("advitiseBindMod DeleteOne failed", log.E(err), log.Any("filter", filter))
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func UpdateOneAdvitiseBind(ctx context.Context, filter bson.M, update bson.M) error {
|
||||
if _, err := db.UpdateOne(ctx, filter, update); err != nil {
|
||||
log.Warn("advitiseBindMod UpdateOne failed", log.E(err), log.Any("filter", filter))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func CountAdvitiseBinds(ctx context.Context, filter bson.M) (int64, error) {
|
||||
count, err := db.Count(ctx, filter)
|
||||
if err != nil {
|
||||
log.Warn("advitiseBindMod Count failed", log.E(err), log.Any("filter", filter))
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func FindManyAdvitiseBinds(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (AdvitiseBindList, error) {
|
||||
list := make(AdvitiseBindList, 0)
|
||||
if err := db.Find(ctx, &list, filter, opts...); err != nil {
|
||||
log.Warn("advitiseBindMod Find failed", log.E(err), log.Any("filter", filter))
|
||||
return nil, err
|
||||
}
|
||||
return list, nil
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package advitiseBindMod
|
||||
|
||||
type TagAdvitiseBind struct {
|
||||
Id string
|
||||
AppId string
|
||||
AdvitiseId string
|
||||
LocationId string
|
||||
Sort string
|
||||
CreatedAt string
|
||||
UpdatedAt string
|
||||
}
|
||||
|
||||
var FN struct {
|
||||
AdvitiseBind TagAdvitiseBind
|
||||
}
|
||||
|
||||
var TN struct {
|
||||
AdvitiseBind string
|
||||
}
|
||||
|
||||
func init() {
|
||||
FN.AdvitiseBind.Id = "_id"
|
||||
FN.AdvitiseBind.AppId = "appId"
|
||||
FN.AdvitiseBind.AdvitiseId = "advitiseId"
|
||||
FN.AdvitiseBind.LocationId = "locationId"
|
||||
FN.AdvitiseBind.Sort = "sort"
|
||||
FN.AdvitiseBind.CreatedAt = "createdAt"
|
||||
FN.AdvitiseBind.UpdatedAt = "updatedAt"
|
||||
TN.AdvitiseBind = "advitise_bind"
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package advitiseBindMod
|
||||
|
||||
import (
|
||||
"stat/common/mongos"
|
||||
"time"
|
||||
)
|
||||
|
||||
var db *mongos.MongoTool
|
||||
|
||||
// AdvitiseBind 广告投放绑定(V2):把一个 AdvitiseInfo 绑到指定 (appId, locationId[]) 上
|
||||
// @table:advitise_bind
|
||||
type AdvitiseBind struct {
|
||||
Id int64 `json:"id" bson:"_id"`
|
||||
AppId int32 `json:"appId" bson:"appId"` // 产品id
|
||||
AdvitiseId int64 `json:"advitiseId" bson:"advitiseId"` // 广告id -> advitiseInfoMod
|
||||
LocationId []int32 `json:"locationId" bson:"locationId"` // 位置id列表(可多)
|
||||
Sort int64 `json:"sort" bson:"sort"` // 排序值,优先级
|
||||
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"`
|
||||
}
|
||||
|
||||
type AdvitiseBindList []*AdvitiseBind
|
||||
@@ -0,0 +1,99 @@
|
||||
package advitiseClickStatMod
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"stat/common/log"
|
||||
"stat/common/mongos"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func Init(ctx context.Context) {
|
||||
db = mongos.New(mongos.MgoManager, TN.AdvitiseClickStat)
|
||||
indexes := []mongo.IndexModel{
|
||||
{
|
||||
Keys: bson.D{
|
||||
{Key: FN.AdvitiseClickStat.AppId, Value: 1},
|
||||
{Key: FN.AdvitiseClickStat.AdvitiseId, Value: 1},
|
||||
{Key: FN.AdvitiseClickStat.LocationId, Value: 1},
|
||||
{Key: FN.AdvitiseClickStat.StatDate, Value: -1},
|
||||
},
|
||||
},
|
||||
{Keys: bson.D{
|
||||
{Key: FN.AdvitiseClickStat.AdvitiseId, Value: 1},
|
||||
{Key: FN.AdvitiseClickStat.StatDate, Value: -1},
|
||||
}},
|
||||
{Keys: bson.D{
|
||||
{Key: FN.AdvitiseClickStat.StatDate, Value: -1},
|
||||
}},
|
||||
}
|
||||
if _, err := db.CreateIndex(ctx, indexes); err != nil {
|
||||
panic(fmt.Sprintf("(advitiseClickStatMod:Init) CreateIndex failed: %+v", err))
|
||||
}
|
||||
}
|
||||
|
||||
// InsertOrUpdate 按 (appId, advitiseId, locationId, statDate) upsert +1
|
||||
// 对齐 media/biadsclickmod.InsertOrUpdateBIAdsClickModel
|
||||
func InsertOrUpdate(ctx context.Context, appId int32, advitiseId int64, locationId int32, statDate time.Time) error {
|
||||
filter := bson.M{
|
||||
FN.AdvitiseClickStat.AppId: appId,
|
||||
FN.AdvitiseClickStat.AdvitiseId: advitiseId,
|
||||
FN.AdvitiseClickStat.LocationId: locationId,
|
||||
FN.AdvitiseClickStat.StatDate: statDate,
|
||||
}
|
||||
update := bson.M{
|
||||
"$inc": bson.M{FN.AdvitiseClickStat.Clicks: 1},
|
||||
"$setOnInsert": bson.M{
|
||||
FN.AdvitiseClickStat.CreatedAt: time.Now(),
|
||||
},
|
||||
}
|
||||
if _, err := db.UpsertOneEx(ctx, filter, update); err != nil {
|
||||
log.Warn("advitiseClickStatMod InsertOrUpdate upsert failed",
|
||||
log.E(err), log.Any("filter", filter))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func FindMany(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (AdvitiseClickStatList, error) {
|
||||
list := make(AdvitiseClickStatList, 0)
|
||||
if err := db.Find(ctx, &list, filter, opts...); err != nil {
|
||||
log.Warn("advitiseClickStatMod Find failed", log.E(err), log.Any("filter", filter))
|
||||
return nil, err
|
||||
}
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func Count(ctx context.Context, filter bson.M) (int64, error) {
|
||||
c, err := db.Count(ctx, filter)
|
||||
if err != nil {
|
||||
log.Warn("advitiseClickStatMod Count failed", log.E(err), log.Any("filter", filter))
|
||||
return 0, err
|
||||
}
|
||||
return c, nil
|
||||
}
|
||||
|
||||
// Aggregate 通用聚合(留给上层写 pipeline)
|
||||
func Aggregate(ctx context.Context, bind interface{}, pipeline []bson.M) error {
|
||||
return db.Aggregate(ctx, bind, pipeline)
|
||||
}
|
||||
|
||||
// GetAppClicks 按 appId + statDate 汇总点击(对齐 media/biadsclickmod.GetAppClicks)
|
||||
func GetAppClicks(ctx context.Context, appId int32, statDate time.Time) (int64, error) {
|
||||
list, err := FindMany(ctx, bson.M{
|
||||
FN.AdvitiseClickStat.AppId: appId,
|
||||
FN.AdvitiseClickStat.StatDate: statDate,
|
||||
})
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
total := int64(0)
|
||||
for _, i := range list {
|
||||
total += i.Clicks
|
||||
}
|
||||
return total, nil
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package advitiseClickStatMod
|
||||
|
||||
type TagAdvitiseClickStat struct {
|
||||
Id string
|
||||
AppId string
|
||||
AdvitiseId string
|
||||
LocationId string
|
||||
Clicks string
|
||||
StatDate string
|
||||
CreatedAt string
|
||||
}
|
||||
|
||||
var FN struct {
|
||||
AdvitiseClickStat TagAdvitiseClickStat
|
||||
}
|
||||
|
||||
var TN struct {
|
||||
AdvitiseClickStat string
|
||||
}
|
||||
|
||||
func init() {
|
||||
FN.AdvitiseClickStat.Id = "_id"
|
||||
FN.AdvitiseClickStat.AppId = "appId"
|
||||
FN.AdvitiseClickStat.AdvitiseId = "advitiseId"
|
||||
FN.AdvitiseClickStat.LocationId = "locationId"
|
||||
FN.AdvitiseClickStat.Clicks = "clicks"
|
||||
FN.AdvitiseClickStat.StatDate = "statDate"
|
||||
FN.AdvitiseClickStat.CreatedAt = "createdAt"
|
||||
TN.AdvitiseClickStat = "advitise_click_stat"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package advitiseClickStatMod
|
||||
|
||||
import (
|
||||
"stat/common/mongos"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
var db *mongos.MongoTool
|
||||
|
||||
// AdvitiseClickStat 广告点击天粒度细维度统计(对齐 media/biadsclickmod)
|
||||
// 键: (appId, advitiseId, locationId, statDate)
|
||||
// @table:advitise_click_stat
|
||||
type AdvitiseClickStat struct {
|
||||
Id primitive.ObjectID `json:"id" bson:"_id,omitempty"`
|
||||
AppId int32 `json:"appId" bson:"appId"`
|
||||
AdvitiseId int64 `json:"advitiseId" bson:"advitiseId"`
|
||||
LocationId int32 `json:"locationId" bson:"locationId"`
|
||||
Clicks int64 `json:"clicks" bson:"clicks"`
|
||||
StatDate time.Time `json:"statDate" bson:"statDate"`
|
||||
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
|
||||
}
|
||||
|
||||
type AdvitiseClickStatList []*AdvitiseClickStat
|
||||
@@ -0,0 +1,68 @@
|
||||
package advitiseDayClickStatMod
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"stat/common/log"
|
||||
"stat/common/mongos"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func Init(ctx context.Context) {
|
||||
db = mongos.New(mongos.MgoManager, TN.AdvitiseDayClickStat)
|
||||
indexes := []mongo.IndexModel{
|
||||
{Keys: bson.D{
|
||||
{Key: FN.AdvitiseDayClickStat.AdvitiseId, Value: 1},
|
||||
{Key: FN.AdvitiseDayClickStat.StatDate, Value: -1},
|
||||
}},
|
||||
{Keys: bson.D{
|
||||
{Key: FN.AdvitiseDayClickStat.StatDate, Value: -1},
|
||||
}},
|
||||
}
|
||||
if _, err := db.CreateIndex(ctx, indexes); err != nil {
|
||||
panic(fmt.Sprintf("(advitiseDayClickStatMod:Init) CreateIndex failed: %+v", err))
|
||||
}
|
||||
}
|
||||
|
||||
// InsertOrUpdate 按 (advitiseId, statDate) upsert +1
|
||||
// 对齐 media/adsdayclickstatmod.InsertOrUpdateAdsDayClickStatModel
|
||||
func InsertOrUpdate(ctx context.Context, advitiseId int64, statDate time.Time) error {
|
||||
filter := bson.M{
|
||||
FN.AdvitiseDayClickStat.AdvitiseId: advitiseId,
|
||||
FN.AdvitiseDayClickStat.StatDate: statDate,
|
||||
}
|
||||
update := bson.M{
|
||||
"$inc": bson.M{FN.AdvitiseDayClickStat.Clicks: 1},
|
||||
"$setOnInsert": bson.M{
|
||||
FN.AdvitiseDayClickStat.CreatedAt: time.Now(),
|
||||
},
|
||||
}
|
||||
if _, err := db.UpsertOneEx(ctx, filter, update); err != nil {
|
||||
log.Warn("advitiseDayClickStatMod InsertOrUpdate upsert failed",
|
||||
log.E(err), log.Any("filter", filter))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func FindMany(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (AdvitiseDayClickStatList, error) {
|
||||
list := make(AdvitiseDayClickStatList, 0)
|
||||
if err := db.Find(ctx, &list, filter, opts...); err != nil {
|
||||
log.Warn("advitiseDayClickStatMod Find failed", log.E(err), log.Any("filter", filter))
|
||||
return nil, err
|
||||
}
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func Count(ctx context.Context, filter bson.M) (int64, error) {
|
||||
c, err := db.Count(ctx, filter)
|
||||
if err != nil {
|
||||
log.Warn("advitiseDayClickStatMod Count failed", log.E(err), log.Any("filter", filter))
|
||||
return 0, err
|
||||
}
|
||||
return c, nil
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package advitiseDayClickStatMod
|
||||
|
||||
type TagAdvitiseDayClickStat struct {
|
||||
Id string
|
||||
AdvitiseId string
|
||||
Clicks string
|
||||
StatDate string
|
||||
CreatedAt string
|
||||
}
|
||||
|
||||
var FN struct {
|
||||
AdvitiseDayClickStat TagAdvitiseDayClickStat
|
||||
}
|
||||
|
||||
var TN struct {
|
||||
AdvitiseDayClickStat string
|
||||
}
|
||||
|
||||
func init() {
|
||||
FN.AdvitiseDayClickStat.Id = "_id"
|
||||
FN.AdvitiseDayClickStat.AdvitiseId = "advitiseId"
|
||||
FN.AdvitiseDayClickStat.Clicks = "clicks"
|
||||
FN.AdvitiseDayClickStat.StatDate = "statDate"
|
||||
FN.AdvitiseDayClickStat.CreatedAt = "createdAt"
|
||||
TN.AdvitiseDayClickStat = "advitise_day_click_stat"
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package advitiseDayClickStatMod
|
||||
|
||||
import (
|
||||
"stat/common/mongos"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
var db *mongos.MongoTool
|
||||
|
||||
// AdvitiseDayClickStat 广告点击天粒度汇总(不含位置维度,对齐 media/adsdayclickstatmod)
|
||||
// 键: (advitiseId, statDate)
|
||||
// @table:advitise_day_click_stat
|
||||
type AdvitiseDayClickStat struct {
|
||||
Id primitive.ObjectID `json:"id" bson:"_id,omitempty"`
|
||||
AdvitiseId int64 `json:"advitiseId" bson:"advitiseId"`
|
||||
Clicks int64 `json:"clicks" bson:"clicks"`
|
||||
StatDate time.Time `json:"statDate" bson:"statDate"`
|
||||
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
|
||||
}
|
||||
|
||||
type AdvitiseDayClickStatList []*AdvitiseDayClickStat
|
||||
@@ -0,0 +1,79 @@
|
||||
package advitiseInfoMod
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"stat/common/log"
|
||||
"stat/common/mongos"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func Init(ctx context.Context) {
|
||||
db = mongos.New(mongos.MgoManager, TN.AdvitiseInfo)
|
||||
indexes := []mongo.IndexModel{
|
||||
{Keys: bson.D{
|
||||
{Key: FN.AdvitiseInfo.StartTime, Value: 1},
|
||||
{Key: FN.AdvitiseInfo.EndTime, Value: 1},
|
||||
{Key: FN.AdvitiseInfo.Status, Value: 1},
|
||||
}},
|
||||
{Keys: bson.D{{Key: FN.AdvitiseInfo.CreatedAt, Value: -1}}},
|
||||
}
|
||||
if _, err := db.CreateIndex(ctx, indexes); err != nil {
|
||||
panic(fmt.Sprintf("(advitiseInfoMod:Init) CreateIndex failed: %+v", err))
|
||||
}
|
||||
}
|
||||
|
||||
func InsertOneAdvitiseInfo(ctx context.Context, doc *AdvitiseInfo) error {
|
||||
if _, err := db.InsertOne(ctx, doc); err != nil {
|
||||
log.Warn("advitiseInfoMod InsertOne failed", log.E(err))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func FindOneAdvitiseInfo(ctx context.Context, filter bson.M) (*AdvitiseInfo, error) {
|
||||
var doc AdvitiseInfo
|
||||
if err := db.FindOne(ctx, &doc, filter); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &doc, nil
|
||||
}
|
||||
|
||||
func DelOneAdvitiseInfo(ctx context.Context, filter bson.M) (int64, error) {
|
||||
count, err := db.DeleteOne(ctx, filter)
|
||||
if err != nil {
|
||||
log.Warn("advitiseInfoMod DeleteOne failed", log.E(err), log.Any("filter", filter))
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func UpdateOneAdvitiseInfo(ctx context.Context, filter bson.M, update bson.M) error {
|
||||
if _, err := db.UpdateOne(ctx, filter, update); err != nil {
|
||||
log.Warn("advitiseInfoMod UpdateOne failed", log.E(err), log.Any("filter", filter))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func CountAdvitiseInfos(ctx context.Context, filter bson.M) (int64, error) {
|
||||
count, err := db.Count(ctx, filter)
|
||||
if err != nil {
|
||||
log.Warn("advitiseInfoMod Count failed", log.E(err), log.Any("filter", filter))
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func FindManyAdvitiseInfos(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (AdvitiseInfoList, error) {
|
||||
list := make(AdvitiseInfoList, 0)
|
||||
if err := db.Find(ctx, &list, filter, opts...); err != nil {
|
||||
log.Warn("advitiseInfoMod Find failed", log.E(err), log.Any("filter", filter))
|
||||
return nil, err
|
||||
}
|
||||
return list, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package advitiseInfoMod
|
||||
|
||||
type TagAdvitiseInfo struct {
|
||||
Id string
|
||||
Title string
|
||||
FullScreenImgs string
|
||||
Banner720300Imgs string
|
||||
Banner720150Imgs string
|
||||
Banner750700Imgs string
|
||||
Banner800450Imgs string
|
||||
PopUps600800Imgs string
|
||||
PopUps512512Imgs string
|
||||
SmallCubeImgs string
|
||||
VerticalCubeImgs string
|
||||
RandomNames string
|
||||
Link string
|
||||
Status string
|
||||
StartTime string
|
||||
EndTime string
|
||||
Remark string
|
||||
Desc string
|
||||
CreatedAt string
|
||||
UpdatedAt string
|
||||
}
|
||||
|
||||
var FN struct {
|
||||
AdvitiseInfo TagAdvitiseInfo
|
||||
}
|
||||
|
||||
var TN struct {
|
||||
AdvitiseInfo string
|
||||
}
|
||||
|
||||
func init() {
|
||||
FN.AdvitiseInfo.Id = "_id"
|
||||
FN.AdvitiseInfo.Title = "title"
|
||||
FN.AdvitiseInfo.FullScreenImgs = "fullScreenImgs"
|
||||
FN.AdvitiseInfo.Banner720300Imgs = "banner720300Imgs"
|
||||
FN.AdvitiseInfo.Banner720150Imgs = "banner720150Imgs"
|
||||
FN.AdvitiseInfo.Banner750700Imgs = "banner750700Imgs"
|
||||
FN.AdvitiseInfo.Banner800450Imgs = "banner800450Imgs"
|
||||
FN.AdvitiseInfo.PopUps600800Imgs = "popUps600800Imgs"
|
||||
FN.AdvitiseInfo.PopUps512512Imgs = "popUps512512Imgs"
|
||||
FN.AdvitiseInfo.SmallCubeImgs = "smallCubeImgs"
|
||||
FN.AdvitiseInfo.VerticalCubeImgs = "verticalCubeImgs"
|
||||
FN.AdvitiseInfo.RandomNames = "randomNames"
|
||||
FN.AdvitiseInfo.Link = "link"
|
||||
FN.AdvitiseInfo.Status = "status"
|
||||
FN.AdvitiseInfo.StartTime = "startTime"
|
||||
FN.AdvitiseInfo.EndTime = "endTime"
|
||||
FN.AdvitiseInfo.Remark = "remark"
|
||||
FN.AdvitiseInfo.Desc = "desc"
|
||||
FN.AdvitiseInfo.CreatedAt = "createdAt"
|
||||
FN.AdvitiseInfo.UpdatedAt = "updatedAt"
|
||||
TN.AdvitiseInfo = "advitise_info"
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package advitiseInfoMod
|
||||
|
||||
import (
|
||||
"stat/common/mongos"
|
||||
"time"
|
||||
)
|
||||
|
||||
var db *mongos.MongoTool
|
||||
|
||||
// AdvitiseInfo 广告素材(V2):素材本身与位置/绑定解耦,可复用到多个 app 的多个位置
|
||||
// @table:advitise_info
|
||||
type AdvitiseInfo struct {
|
||||
Id int64 `json:"id" bson:"_id"`
|
||||
Title string `json:"title" bson:"title"` // 广告标题
|
||||
FullScreenImgs []string `json:"fullScreenImgs" bson:"fullScreenImgs"` // 全屏封面
|
||||
Banner720300Imgs []string `json:"banner720300Imgs" bson:"banner720300Imgs"` // Banner720*300 封面
|
||||
Banner720150Imgs []string `json:"banner720150Imgs" bson:"banner720150Imgs"` // Banner720*150 封面
|
||||
Banner750700Imgs []string `json:"banner750700Imgs" bson:"banner750700Imgs"` // Banner750*700 封面
|
||||
Banner800450Imgs []string `json:"banner800450Imgs" bson:"banner800450Imgs"` // Banner800*450 封面
|
||||
PopUps600800Imgs []string `json:"popUps600800Imgs" bson:"popUps600800Imgs"` // 弹窗 600*800 封面
|
||||
PopUps512512Imgs []string `json:"popUps512512Imgs" bson:"popUps512512Imgs"` // 弹窗 512*512 封面
|
||||
SmallCubeImgs []string `json:"smallCubeImgs" bson:"smallCubeImgs"` // 小方块封面
|
||||
VerticalCubeImgs []string `json:"verticalCubeImgs" bson:"verticalCubeImgs"` // 竖方块封面
|
||||
RandomNames []string `json:"randomNames" bson:"randomNames"` // 随机名称
|
||||
Link string `json:"link" bson:"link"` // 跳转链接
|
||||
Status bool `json:"status" bson:"status"` // 是否激活
|
||||
StartTime time.Time `json:"startTime" bson:"startTime"` // 开始时间
|
||||
EndTime time.Time `json:"endTime" bson:"endTime"` // 结束时间
|
||||
Remark string `json:"remark" bson:"remark"` // 备注
|
||||
Desc string `json:"desc" bson:"desc"` // 描述
|
||||
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"`
|
||||
}
|
||||
|
||||
type AdvitiseInfoList []*AdvitiseInfo
|
||||
@@ -0,0 +1,80 @@
|
||||
package advitiseLocationMod
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"stat/common/log"
|
||||
"stat/common/mongos"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
func Init(ctx context.Context) {
|
||||
db = mongos.New(mongos.MgoManager, TN.AdvitiseLocation)
|
||||
indexes := []mongo.IndexModel{
|
||||
{
|
||||
Keys: bson.D{
|
||||
{Key: FN.AdvitiseLocation.AppId, Value: 1},
|
||||
{Key: FN.AdvitiseLocation.LocId, Value: 1},
|
||||
},
|
||||
Options: options.Index().SetUnique(true),
|
||||
},
|
||||
{Keys: bson.D{{Key: FN.AdvitiseLocation.CreatedAt, Value: -1}}},
|
||||
}
|
||||
if _, err := db.CreateIndex(ctx, indexes); err != nil {
|
||||
panic(fmt.Sprintf("(advitiseLocationMod:Init) CreateIndex failed: %+v", err))
|
||||
}
|
||||
}
|
||||
|
||||
func InsertOneAdvitiseLocation(ctx context.Context, doc *AdvitiseLocation) error {
|
||||
if _, err := db.InsertOne(ctx, doc); err != nil {
|
||||
log.Warn("advitiseLocationMod InsertOne failed", log.E(err))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func FindOneAdvitiseLocation(ctx context.Context, filter bson.M) (*AdvitiseLocation, error) {
|
||||
var doc AdvitiseLocation
|
||||
if err := db.FindOne(ctx, &doc, filter); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &doc, nil
|
||||
}
|
||||
|
||||
func DelOneAdvitiseLocation(ctx context.Context, filter bson.M) (int64, error) {
|
||||
count, err := db.DeleteOne(ctx, filter)
|
||||
if err != nil {
|
||||
log.Warn("advitiseLocationMod DeleteOne failed", log.E(err), log.Any("filter", filter))
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func UpdateOneAdvitiseLocation(ctx context.Context, filter bson.M, update bson.M) error {
|
||||
if _, err := db.UpdateOne(ctx, filter, update); err != nil {
|
||||
log.Warn("advitiseLocationMod UpdateOne failed", log.E(err), log.Any("filter", filter))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func CountAdvitiseLocations(ctx context.Context, filter bson.M) (int64, error) {
|
||||
count, err := db.Count(ctx, filter)
|
||||
if err != nil {
|
||||
log.Warn("advitiseLocationMod Count failed", log.E(err), log.Any("filter", filter))
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func FindManyAdvitiseLocations(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (AdvitiseLocationList, error) {
|
||||
list := make(AdvitiseLocationList, 0)
|
||||
if err := db.Find(ctx, &list, filter, opts...); err != nil {
|
||||
log.Warn("advitiseLocationMod Find failed", log.E(err), log.Any("filter", filter))
|
||||
return nil, err
|
||||
}
|
||||
return list, nil
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package advitiseLocationMod
|
||||
|
||||
type TagAdvitiseLocation struct {
|
||||
Id string
|
||||
AppId string
|
||||
LocId string
|
||||
Name string
|
||||
AdvitiseSize string
|
||||
ImgSizeDesc string
|
||||
Remark string
|
||||
CreatedAt string
|
||||
UpdatedAt string
|
||||
}
|
||||
|
||||
var FN struct {
|
||||
AdvitiseLocation TagAdvitiseLocation
|
||||
}
|
||||
|
||||
var TN struct {
|
||||
AdvitiseLocation string
|
||||
}
|
||||
|
||||
func init() {
|
||||
FN.AdvitiseLocation.Id = "_id"
|
||||
FN.AdvitiseLocation.AppId = "appId"
|
||||
FN.AdvitiseLocation.LocId = "locId"
|
||||
FN.AdvitiseLocation.Name = "name"
|
||||
FN.AdvitiseLocation.AdvitiseSize = "advitiseSize"
|
||||
FN.AdvitiseLocation.ImgSizeDesc = "imgSizeDesc"
|
||||
FN.AdvitiseLocation.Remark = "remark"
|
||||
FN.AdvitiseLocation.CreatedAt = "createdAt"
|
||||
FN.AdvitiseLocation.UpdatedAt = "updatedAt"
|
||||
TN.AdvitiseLocation = "advitise_location"
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package advitiseLocationMod
|
||||
|
||||
import (
|
||||
"stat/common/mongos"
|
||||
"time"
|
||||
)
|
||||
|
||||
var db *mongos.MongoTool
|
||||
|
||||
type AdvitiseSizeType string
|
||||
|
||||
const (
|
||||
AdvitiseSizeFullScreen AdvitiseSizeType = "全屏" // 全屏
|
||||
AdvitiseSizeBanner720300 AdvitiseSizeType = "banner720*300" // Banner720*300
|
||||
AdvitiseSizeBanner720150 AdvitiseSizeType = "banner720*150" // Banner720*150
|
||||
AdvitiseSizeBanner750700 AdvitiseSizeType = "banner750*700" // Banner750*700
|
||||
AdvitiseSizeBanner800450 AdvitiseSizeType = "banner800*450" // Banner800*450
|
||||
AdvitiseSizePopUps600800 AdvitiseSizeType = "弹窗600*800" // 弹窗 600*800
|
||||
AdvitiseSizePopUps512512 AdvitiseSizeType = "弹窗512*512" // 弹窗 512*512
|
||||
AdvitiseSizeSmallCube AdvitiseSizeType = "小方块" // 小方块
|
||||
AdvitiseSizeVerticalCube AdvitiseSizeType = "竖方块" // 竖方块
|
||||
)
|
||||
|
||||
// AdvitiseLocation 广告位(V2):按 (appId, locId) 唯一
|
||||
// @table:advitise_location
|
||||
type AdvitiseLocation struct {
|
||||
Id int64 `json:"id" bson:"_id"`
|
||||
AppId int32 `json:"appId" bson:"appId"` // 应用id
|
||||
LocId int32 `json:"locId" bson:"locId"` // 位置id,外部使用
|
||||
Name string `json:"name" bson:"name"` // 位置名称
|
||||
AdvitiseSize AdvitiseSizeType `json:"advitiseSize" bson:"advitiseSize"` // 尺寸类型
|
||||
ImgSizeDesc string `json:"imgSizeDesc" bson:"imgSizeDesc"` // 图片描述
|
||||
Remark string `json:"remark" bson:"remark"` // 备注
|
||||
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt" bson:"updatedAt"`
|
||||
}
|
||||
|
||||
type AdvitiseLocationList []*AdvitiseLocation
|
||||
@@ -9,6 +9,11 @@ import (
|
||||
"stat/models/advertiseLocMod"
|
||||
"stat/models/advertiseMod"
|
||||
"stat/models/advertisestat"
|
||||
"stat/models/advitiseBindMod"
|
||||
"stat/models/advitiseClickStatMod"
|
||||
"stat/models/advitiseDayClickStatMod"
|
||||
"stat/models/advitiseInfoMod"
|
||||
"stat/models/advitiseLocationMod"
|
||||
"stat/models/announInfoMod"
|
||||
"stat/models/appInfoMod"
|
||||
"stat/models/appcategory"
|
||||
@@ -109,4 +114,9 @@ func InitIndex() {
|
||||
applicationLocMod.Init(ctx)
|
||||
channelpackage.Init(ctx)
|
||||
cpcDownloadCfg.Init(ctx)
|
||||
advitiseInfoMod.Init(ctx)
|
||||
advitiseLocationMod.Init(ctx)
|
||||
advitiseBindMod.Init(ctx)
|
||||
advitiseClickStatMod.Init(ctx)
|
||||
advitiseDayClickStatMod.Init(ctx)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user