732 lines
25 KiB
Go
732 lines
25 KiB
Go
package channelmod
|
|
|
|
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"
|
|
)
|
|
|
|
var dbChannel *mongos.MongoTool
|
|
var dbRule *mongos.MongoTool
|
|
var dbStat *mongos.MongoTool
|
|
var dbSettlement *mongos.MongoTool
|
|
var dbChannelOwnerChange *mongos.MongoTool
|
|
|
|
var dbStatYestoday *mongos.MongoTool
|
|
|
|
func Init() {
|
|
ctx := context.Background()
|
|
InitChannel(ctx)
|
|
InitStat(ctx)
|
|
InitRule(ctx)
|
|
InitSettlement(ctx)
|
|
InitStatYestoday(ctx)
|
|
InitChannelOwnerChange(ctx)
|
|
}
|
|
|
|
func InitRule(ctx context.Context) {
|
|
// 获取数据库表
|
|
dbRule = mongos.New(mongos.MgoManager, TN.ChannelDeductionRule)
|
|
|
|
// 初始化
|
|
indexes := []mongo.IndexModel{
|
|
{
|
|
Keys: bson.D{{Key: FN.ChannelDeductionRule.Channel, Value: 1}, {Key: FN.ChannelDeductionRule.AppId, Value: 1}},
|
|
Options: options.Index().SetUnique(true),
|
|
},
|
|
}
|
|
if _, err := dbRule.CreateIndex(context.Background(), indexes); err != nil {
|
|
panic(fmt.Sprintf("%s model set index err ==>[%+v]", TN.ChannelDeductionRule, err))
|
|
}
|
|
}
|
|
|
|
func InitStat(ctx context.Context) {
|
|
// 获取数据库表
|
|
dbStat = mongos.New(mongos.MgoManager, TN.ChannelStat)
|
|
|
|
// 初始化
|
|
indexes := []mongo.IndexModel{
|
|
{
|
|
Keys: bson.D{{Key: FN.ChannelStat.Channel, Value: 1}, {Key: FN.ChannelStat.AppId, Value: 1}, {Key: FN.ChannelStat.SumDate, Value: 1}},
|
|
Options: options.Index().SetUnique(true),
|
|
},
|
|
{
|
|
Keys: bson.D{{Key: FN.ChannelStat.SumDate, Value: -1}, {Key: FN.ChannelStat.NewDirectCount, Value: -1}},
|
|
},
|
|
{
|
|
Keys: bson.D{{Key: FN.ChannelStat.CreatedAt, Value: -1}},
|
|
},
|
|
// {
|
|
// Keys: bson.D{{Key: FN.ChannelStat.NewDirectCount, Value: -1}},
|
|
// },
|
|
{
|
|
Keys: bson.D{
|
|
{Key: FN.ChannelStat.Channel, Value: 1},
|
|
{Key: FN.ChannelStat.ParentChannel, Value: 1},
|
|
{Key: FN.ChannelStat.AppId, Value: 1},
|
|
{Key: FN.ChannelStat.SumDate, Value: -1},
|
|
{Key: FN.ChannelStat.Type, Value: 1},
|
|
},
|
|
},
|
|
{
|
|
Keys: bson.D{{Key: FN.ChannelStat.Type, Value: 1}},
|
|
},
|
|
// {
|
|
// Keys: bson.D{{Key: FN.ChannelStat.IsPay, Value: 1}},
|
|
// },
|
|
// {
|
|
// Keys: bson.D{{Key: FN.ChannelStat.SumDate, Value: -1}},
|
|
// },
|
|
// {
|
|
// Keys: bson.D{{Key: FN.ChannelStat.AppId, Value: 1}},
|
|
// },
|
|
{
|
|
Keys: bson.D{
|
|
{Key: FN.ChannelStat.AppId, Value: 1},
|
|
{Key: FN.ChannelStat.SumDate, Value: -1},
|
|
},
|
|
},
|
|
}
|
|
if _, err := dbStat.CreateIndex(context.Background(), indexes); err != nil {
|
|
panic(fmt.Sprintf("%s model set index err ==>[%+v]", TN.ChannelStat, err))
|
|
}
|
|
}
|
|
|
|
func InitStatYestoday(ctx context.Context) {
|
|
// 获取数据库表
|
|
dbStatYestoday = mongos.New(mongos.MgoManager, TN.ChannelStatYestoday)
|
|
|
|
// 初始化
|
|
indexes := []mongo.IndexModel{
|
|
{
|
|
Keys: bson.D{{Key: FN.ChannelStatYestoday.Channel, Value: 1}, {Key: FN.ChannelStatYestoday.AppId, Value: 1}, {Key: FN.ChannelStatYestoday.SumDate, Value: 1}},
|
|
Options: options.Index().SetUnique(true),
|
|
},
|
|
{
|
|
Keys: bson.D{{Key: FN.ChannelStatYestoday.SumDate, Value: -1}, {Key: FN.ChannelStatYestoday.NewCount, Value: -1}},
|
|
},
|
|
{
|
|
Keys: bson.D{
|
|
{Key: FN.ChannelStatYestoday.SumDate, Value: -1},
|
|
},
|
|
Options: options.Index().SetExpireAfterSeconds(3 * 24 * 60 * 60),
|
|
},
|
|
}
|
|
if _, err := dbStatYestoday.CreateIndex(context.Background(), indexes); err != nil {
|
|
panic(fmt.Sprintf("%s model set index err ==>[%+v]", TN.ChannelStatYestoday, err))
|
|
}
|
|
}
|
|
|
|
func InitSettlement(ctx context.Context) {
|
|
// 获取数据库表
|
|
dbSettlement = mongos.New(mongos.MgoManager, TN.ChannelSettlement)
|
|
|
|
// 初始化
|
|
indexes := []mongo.IndexModel{
|
|
{
|
|
Keys: bson.D{{Key: FN.ChannelSettlement.Channel, Value: 1}, {Key: FN.ChannelSettlement.AppId, Value: 1}, {Key: FN.ChannelSettlement.SumDate, Value: 1}},
|
|
Options: options.Index().SetUnique(true),
|
|
},
|
|
{
|
|
Keys: bson.D{{Key: FN.ChannelSettlement.CreatedAt, Value: -1}},
|
|
Options: options.Index().SetExpireAfterSeconds(5 * 24 * 60 * 60),
|
|
},
|
|
}
|
|
if _, err := dbSettlement.CreateIndex(context.Background(), indexes); err != nil {
|
|
panic(fmt.Sprintf("%s model set index err ==>[%+v]", TN.ChannelSettlement, err))
|
|
}
|
|
}
|
|
|
|
func InitChannel(ctx context.Context) {
|
|
// 获取数据库表
|
|
dbChannel = mongos.New(mongos.MgoManager, TN.ChannelInfo)
|
|
|
|
// 初始化
|
|
indexes := []mongo.IndexModel{
|
|
{
|
|
Keys: bson.D{{Key: FN.ChannelInfo.Channel, Value: 1}},
|
|
Options: options.Index().SetUnique(true),
|
|
},
|
|
{
|
|
Keys: bson.D{
|
|
{Key: FN.ChannelInfo.ParentAgent, Value: 1},
|
|
},
|
|
},
|
|
{
|
|
Keys: bson.D{
|
|
{Key: FN.ChannelInfo.ParentChannel, Value: 1},
|
|
},
|
|
},
|
|
}
|
|
if _, err := dbChannel.CreateIndex(context.Background(), indexes); err != nil {
|
|
panic(fmt.Sprintf("%s model set index err ==>[%+v]", TN.ChannelInfo, err))
|
|
}
|
|
}
|
|
|
|
func InitChannelOwnerChange(ctx context.Context) {
|
|
// 获取数据库表
|
|
dbChannelOwnerChange = mongos.New(mongos.MgoManager, TN.ChannelOwnerChange)
|
|
|
|
// 初始化
|
|
indexes := []mongo.IndexModel{
|
|
{
|
|
Keys: bson.D{{Key: FN.ChannelOwnerChange.Channel, Value: -1}},
|
|
},
|
|
{
|
|
Keys: bson.D{
|
|
{Key: FN.ChannelOwnerChange.NewUser, Value: -1},
|
|
{Key: FN.ChannelOwnerChange.OldUser, Value: -1},
|
|
},
|
|
},
|
|
}
|
|
if _, err := dbChannelOwnerChange.CreateIndex(context.Background(), indexes); err != nil {
|
|
panic(fmt.Sprintf("%s model set index err ==>[%+v]", TN.ChannelOwnerChange, err))
|
|
}
|
|
}
|
|
|
|
// InsertOneChannelInfo 插入一个渠道信息
|
|
func InsertOneChannelInfo(ctx context.Context, media *ChannelInfo) error {
|
|
if _, err := dbChannel.InsertOne(ctx, media); err != nil {
|
|
log.Warn("media:InsertOneChannelInfo db.InsertOne failed", log.E(err))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindOneChannelInfo 查找一个渠道信息
|
|
func FindOneChannelInfo(ctx context.Context, filter bson.M) (*ChannelInfo, error) {
|
|
var ChannelInfo ChannelInfo
|
|
if err := dbChannel.FindOne(ctx, &ChannelInfo, filter); err != nil {
|
|
log.Warn("ChannelInfo:FindOneChannelInfo dbChannel.FindOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return &ChannelInfo, nil
|
|
}
|
|
|
|
// FindOneChannelInfo 查找一个渠道信息
|
|
func FindOneChannelInfoEx(ctx context.Context, filter bson.M) (*ChannelInfo, error) {
|
|
var ChannelInfo ChannelInfo
|
|
if err := dbChannel.FindOneEx(ctx, &ChannelInfo, filter); err != nil {
|
|
log.Warn("ChannelInfo:FindOneChannelInfoEx dbChannel.FindOneEx failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return &ChannelInfo, nil
|
|
}
|
|
|
|
// DelOneChannelInfo 删除一个渠道信息
|
|
func DelOneChannelInfo(ctx context.Context, filter bson.M) (int64, error) {
|
|
count, err := dbChannel.DeleteOne(ctx, filter)
|
|
if err != nil {
|
|
log.Warn("ChannelInfo:DelOneChannelInfo dbChannel.DeleteOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// UpdateOneChannelInfo 更新一个渠道信息
|
|
func UpdateOneChannelInfo(ctx context.Context, filter bson.M, update bson.M) error {
|
|
_, err := dbChannel.UpdateOne(ctx, filter, update)
|
|
if err != nil {
|
|
log.Warn("user:UpdateOneChannelInfo dbChannel.UpdateOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// CountChannelInfos 统计渠道信息数量
|
|
func CountChannelInfos(ctx context.Context, filter bson.M) (int64, error) {
|
|
count, err := dbChannel.Count(ctx, filter)
|
|
if err != nil {
|
|
log.Warn("ChannelInfo:CountChannelInfos dbChannel.Count failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// UpdateManyChannelInfo 更新满足条件的渠道信息
|
|
func UpdateManyChannelInfo(ctx context.Context, filter bson.M, update bson.M) error {
|
|
_, err := dbChannel.UpdateMany(ctx, filter, update)
|
|
if err != nil {
|
|
log.Warn("user:UpdateManyChannelInfo dbChannel.UpdateMany failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindManyChannelInfo 查找一批渠道信息数据
|
|
func FindManyChannelInfo(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (ChannelInfoList, error) {
|
|
data := make(ChannelInfoList, 0)
|
|
if err := dbChannel.Find(ctx, &data, filter, opts...); err != nil {
|
|
log.Warn("ChannelInfo:FindManyChannelInfo dbChannel.Find failed", log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
// FindManyChannelInfoWithBind 用自己定义结构查找一批渠道信息数据
|
|
func FindManyChannelInfoWithBind(ctx context.Context, bind interface{}, filter bson.M, opts ...*options.FindOptions) error {
|
|
if err := dbChannel.Find(ctx, bind, filter, opts...); err != nil {
|
|
log.Warn("ChannelInfo:FindManyChannelInfoWithBind dbChannel.Find failed", log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// InsertOneChannelDeductionRule 插入一个渠道扣量规则
|
|
func InsertOneChannelDeductionRule(ctx context.Context, media *ChannelDeductionRule) error {
|
|
if _, err := dbRule.InsertOne(ctx, media); err != nil {
|
|
log.Warn("media:InsertOneChannelDeductionRule db.InsertOne failed", log.E(err))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindOneChannelDeductionRule 查找一个渠道扣量规则
|
|
func FindOneChannelDeductionRule(ctx context.Context, filter bson.M) (*ChannelDeductionRule, error) {
|
|
var ChannelDeductionRule ChannelDeductionRule
|
|
if err := dbRule.FindOne(ctx, &ChannelDeductionRule, filter); err != nil {
|
|
log.Warn("ChannelDeductionRule:FindOneChannelDeductionRule dbChannel.FindOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return &ChannelDeductionRule, nil
|
|
}
|
|
|
|
// FindOneChannelDeductionRuleEx 查找一个渠道扣量规则
|
|
func FindOneChannelDeductionRuleEx(ctx context.Context, filter bson.M) (*ChannelDeductionRule, error) {
|
|
var ChannelDeductionRule ChannelDeductionRule
|
|
if err := dbRule.FindOneEx(ctx, &ChannelDeductionRule, filter); err != nil {
|
|
log.Warn("ChannelDeductionRule:FindOneChannelDeductionRuleEx dbChannel.FindOneEx failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return &ChannelDeductionRule, nil
|
|
}
|
|
|
|
// DelOneChannelDeductionRule 删除一个渠道扣量规则
|
|
func DelOneChannelDeductionRule(ctx context.Context, filter bson.M) (int64, error) {
|
|
count, err := dbRule.DeleteOne(ctx, filter)
|
|
if err != nil {
|
|
log.Warn("ChannelDeductionRule:DelOneChannelDeductionRule dbChannel.DeleteOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// UpdateOneChannelDeductionRule 更新一个渠道扣量规则
|
|
func UpdateOneChannelDeductionRule(ctx context.Context, filter bson.M, update bson.M) error {
|
|
_, err := dbRule.UpdateOne(ctx, filter, update)
|
|
if err != nil {
|
|
log.Warn("UpdateOneChannelDeductionRule dbChannel.UpdateOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// CountChannelDeductionRules 统计渠道扣量规则数量
|
|
func CountChannelDeductionRules(ctx context.Context, filter bson.M) (int64, error) {
|
|
count, err := dbRule.Count(ctx, filter)
|
|
if err != nil {
|
|
log.Warn("ChannelDeductionRule:CountChannelDeductionRules dbChannel.Count failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// UpdateManyChannelDeductionRule 更新满足条件的渠道扣量规则
|
|
func UpdateManyChannelDeductionRule(ctx context.Context, filter bson.M, update bson.M) error {
|
|
_, err := dbRule.UpdateMany(ctx, filter, update)
|
|
if err != nil {
|
|
log.Warn("user:UpdateManyChannelDeductionRule dbChannel.UpdateMany failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindManyChannelDeductionRule 查找一批渠道扣量规则数据
|
|
func FindManyChannelDeductionRule(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (ChannelDeductionRuleList, error) {
|
|
data := make(ChannelDeductionRuleList, 0)
|
|
if err := dbRule.Find(ctx, &data, filter, opts...); err != nil {
|
|
log.Warn("ChannelDeductionRule:FindManyChannelDeductionRule dbChannel.Find failed", log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
// FindManyChannelDeductionRuleWithBind 用自己定义结构查找一批渠道扣量规则数据
|
|
func FindManyChannelDeductionRuleWithBind(ctx context.Context, bind interface{}, filter bson.M, opts ...*options.FindOptions) error {
|
|
if err := dbRule.Find(ctx, bind, filter, opts...); err != nil {
|
|
log.Warn("ChannelDeductionRule:FindManyChannelDeductionRuleWithBind dbChannel.Find failed", log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// InsertOneChannelStat 插入一个渠道统计信息
|
|
func InsertOneChannelStat(ctx context.Context, media *ChannelStat) error {
|
|
if _, err := dbStat.InsertOne(ctx, media); err != nil {
|
|
log.Warn("media:InsertOneChannelStat db.InsertOne failed", log.E(err))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindOneChannelStat 查找一个渠道日常统计
|
|
func FindOneChannelStat(ctx context.Context, filter bson.M) (*ChannelStat, error) {
|
|
var ChannelStat ChannelStat
|
|
if err := dbStat.FindOne(ctx, &ChannelStat, filter); err != nil {
|
|
log.Warn("ChannelStat:FindOneChannelStat dbStat.FindOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return &ChannelStat, nil
|
|
}
|
|
|
|
// DelOneChannelStat 删除一个渠道日常统计
|
|
func DelOneChannelStat(ctx context.Context, filter bson.M) (int64, error) {
|
|
count, err := dbStat.DeleteOne(ctx, filter)
|
|
if err != nil {
|
|
log.Warn("ChannelStat:DelOneChannelStat dbStat.DeleteOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// UpdateOneChannelStat 更新一个渠道日常统计
|
|
func UpdateOneChannelStat(ctx context.Context, filter bson.M, update bson.M) error {
|
|
_, err := dbStat.UpdateOne(ctx, filter, update)
|
|
if err != nil {
|
|
log.Warn("UpdateOneChannelStat dbStat.UpdateOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// CountChannelStats 统计渠道日常统计数量
|
|
func CountChannelStats(ctx context.Context, filter bson.M) (int64, error) {
|
|
count, err := dbStat.Count(ctx, filter)
|
|
if err != nil {
|
|
log.Warn("ChannelStat:CountChannelStats dbStat.Count failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// UpdateManyChannelStat 更新满足条件的渠道日常统计
|
|
func UpdateManyChannelStat(ctx context.Context, filter bson.M, update bson.M) error {
|
|
_, err := dbStat.UpdateMany(ctx, filter, update)
|
|
if err != nil {
|
|
log.Warn("user:UpdateManyChannelStat dbStat.UpdateMany failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// UpdateManyChannelStat 更新满足条件的渠道日常统计
|
|
func UpdateManyChannelStatWithResult(ctx context.Context, filter bson.M, update bson.M) (int64, error) {
|
|
result, err := dbStat.UpdateMany(ctx, filter, update)
|
|
if err != nil {
|
|
log.Warn("user:UpdateManyChannelStatWithResult dbStat.UpdateMany failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return result.MatchedCount, nil
|
|
}
|
|
|
|
// FindManyChannelStat 查找一批渠道日常统计数据
|
|
func FindManyChannelStat(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (ChannelStatList, error) {
|
|
data := make(ChannelStatList, 0)
|
|
if err := dbStat.Find(ctx, &data, filter, opts...); err != nil {
|
|
log.Warn("ChannelStat:FindManyChannelStat dbStat.Find failed", log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
type OnItem func(item *ChannelStat)
|
|
|
|
// FindManyChannelStatShard 查找一批渠道日常统计数据
|
|
func FindManyChannelStatShard(ctx context.Context, filter bson.M, shard int64, onItem OnItem) error {
|
|
num := int64(0)
|
|
for {
|
|
opt := &options.FindOptions{}
|
|
opt.SetSkip(num * shard)
|
|
opt.SetLimit(shard)
|
|
lst := make(ChannelStatList, 0)
|
|
if err := dbStat.Find(ctx, &lst, filter, opt); err != nil {
|
|
log.Warn("ChannelStat:FindManyChannelStatShard dbStat.Find failed", log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
for _, item := range lst {
|
|
onItem(item)
|
|
}
|
|
if int64(len(lst)) < shard {
|
|
break
|
|
}
|
|
lst = nil
|
|
num++
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindManyChannelStatWithBind 用自己定义结构查找一批渠道日常统计数据
|
|
func FindManyChannelStatWithBind(ctx context.Context, bind interface{}, filter bson.M, opts ...*options.FindOptions) error {
|
|
if err := dbStat.Find(ctx, bind, filter, opts...); err != nil {
|
|
log.Warn("ChannelStat:FindManyChannelStatWithBind dbStat.Find failed", log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// InsertOneChannelSettlement 插入一个渠道统计信息
|
|
func InsertOneChannelSettlement(ctx context.Context, media *ChannelSettlement) error {
|
|
if _, err := dbSettlement.InsertOne(ctx, media); err != nil {
|
|
log.Warn("media:InsertOneChannelSettlement dbSettlement.InsertOne failed", log.E(err))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindOneChannelSettlement 查找一个15分钟结算
|
|
func FindOneChannelSettlement(ctx context.Context, filter bson.M) (*ChannelSettlement, error) {
|
|
var ChannelSettlement ChannelSettlement
|
|
if err := dbSettlement.FindOne(ctx, &ChannelSettlement, filter); err != nil {
|
|
log.Warn("ChannelSettlement:FindOneChannelSettlement dbSettlement.FindOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return &ChannelSettlement, nil
|
|
}
|
|
|
|
// DelOneChannelSettlement 删除一个15分钟结算
|
|
func DelOneChannelSettlement(ctx context.Context, filter bson.M) (int64, error) {
|
|
count, err := dbSettlement.DeleteOne(ctx, filter)
|
|
if err != nil {
|
|
log.Warn("ChannelSettlement:DelOneChannelSettlement dbSettlement.DeleteOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// UpdateOneChannelSettlement 更新一个15分钟结算
|
|
func UpdateOneChannelSettlement(ctx context.Context, filter bson.M, update bson.M) error {
|
|
_, err := dbSettlement.UpdateOne(ctx, filter, update)
|
|
if err != nil {
|
|
log.Warn("UpdateOneChannelSettlement dbSettlement.UpdateOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// CountChannelSettlements 统计15分钟结算数量
|
|
func CountChannelSettlements(ctx context.Context, filter bson.M) (int64, error) {
|
|
count, err := dbSettlement.Count(ctx, filter)
|
|
if err != nil {
|
|
log.Warn("ChannelSettlement:CountChannelSettlements dbSettlement.Count failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// UpdateManyChannelSettlement 更新满足条件的15分钟结算
|
|
func UpdateManyChannelSettlement(ctx context.Context, filter bson.M, update bson.M) error {
|
|
_, err := dbSettlement.UpdateMany(ctx, filter, update)
|
|
if err != nil {
|
|
log.Warn("user:UpdateManyChannelSettlement dbSettlement.UpdateMany failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindManyChannelSettlement 查找一批渠道15分钟结算
|
|
func FindManyChannelSettlement(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (ChannelSettlementList, error) {
|
|
data := make(ChannelSettlementList, 0)
|
|
if err := dbSettlement.Find(ctx, &data, filter, opts...); err != nil {
|
|
log.Warn("ChannelSettlement:FindManyChannelSettlement dbSettlement.Find failed", log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
// FindManyChannelSettlementWithBind 用自己定义结构查找一批渠道15分钟结算
|
|
func FindManyChannelSettlementWithBind(ctx context.Context, bind interface{}, filter bson.M, opts ...*options.FindOptions) error {
|
|
if err := dbSettlement.Find(ctx, bind, filter, opts...); err != nil {
|
|
log.Warn("ChannelSettlement:FindManyChannelSettlementWithBind dbSettlement.Find failed", log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindManyChannelStatYestoday 查找一批渠道日常统计数据
|
|
func FindManyChannelStatYestoday(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (ChannelStatYestodayList, error) {
|
|
data := make(ChannelStatYestodayList, 0)
|
|
if err := dbStatYestoday.Find(ctx, &data, filter, opts...); err != nil {
|
|
log.Warn("ChannelStat:FindManyChannelStat dbStat.Find failed", log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
// InsertOneChannelStatYestoday 插入一个渠道统计信息
|
|
func InsertOneChannelStatYestoday(ctx context.Context, media *ChannelStatYesterday) error {
|
|
if _, err := dbStatYestoday.InsertOne(ctx, media); err != nil {
|
|
log.Warn("media:InsertOneChannelStat db.InsertOne failed", log.E(err))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// UpsertOneChannelStatYestoday 按 (channel, appId, sumDate) 覆盖写入一条同时段对比数据。
|
|
// 用 ReplaceOne 而不是 InsertOne: 整点任务可能因服务重启或重试在同一小时内跑第二次,
|
|
// 而该表有 (channel, appId, sumDate) 唯一索引,InsertOne 第二次必然冲突失败。
|
|
// 整条替换也保证快照不会残留上一次的旧值。
|
|
// 注意不可改用 UpsertMOne: 它内部用 Struct2Map 走 JSON 序列化,time.Time 会被写成字符串,
|
|
// sumDate 将不再是 BSON Date,按时间范围的查询会全部失效。
|
|
func UpsertOneChannelStatYestoday(ctx context.Context, doc *ChannelStatYesterday) error {
|
|
filter := bson.M{
|
|
FN.ChannelStatYestoday.Channel: doc.Channel,
|
|
FN.ChannelStatYestoday.AppId: doc.AppId,
|
|
FN.ChannelStatYestoday.SumDate: doc.SumDate,
|
|
}
|
|
opt := options.Replace().SetUpsert(true)
|
|
if _, err := dbStatYestoday.GetCollection().ReplaceOne(ctx, filter, doc, opt); err != nil {
|
|
log.Warn("ChannelStatYestoday:UpsertOneChannelStatYestoday ReplaceOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// CountChannelStatYestoday 统计渠道扣量规则数量
|
|
func CountChannelStatYestoday(ctx context.Context, filter bson.M) (int64, error) {
|
|
count, err := dbStatYestoday.Count(ctx, filter)
|
|
if err != nil {
|
|
log.Warn("ChannelDeductionRule:CountChannelStatYestoday dbChannel.Count failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// InsertOneChannelOwnerChange 插入一个渠道信息
|
|
func InsertOneChannelOwnerChange(ctx context.Context, media *ChannelOwnerChange) error {
|
|
if _, err := dbChannelOwnerChange.InsertOne(ctx, media); err != nil {
|
|
log.Warn("media:InsertOneChannelOwnerChange db.InsertOne failed", log.E(err))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindOneChannelOwnerChange 查找一个渠道信息
|
|
func FindOneChannelOwnerChange(ctx context.Context, filter bson.M) (*ChannelOwnerChange, error) {
|
|
var ChannelOwnerChange ChannelOwnerChange
|
|
if err := dbChannelOwnerChange.FindOne(ctx, &ChannelOwnerChange, filter); err != nil {
|
|
log.Warn("ChannelOwnerChange:FindOneChannelOwnerChange dbChannelOwnerChange.FindOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return &ChannelOwnerChange, nil
|
|
}
|
|
|
|
// FindOneChannelOwnerChange 查找一个渠道信息
|
|
func FindOneChannelOwnerChangeEx(ctx context.Context, filter bson.M) (*ChannelOwnerChange, error) {
|
|
var ChannelOwnerChange ChannelOwnerChange
|
|
if err := dbChannelOwnerChange.FindOneEx(ctx, &ChannelOwnerChange, filter); err != nil {
|
|
log.Warn("ChannelOwnerChange:FindOneChannelOwnerChangeEx dbChannelOwnerChange.FindOneEx failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return &ChannelOwnerChange, nil
|
|
}
|
|
|
|
// DelOneChannelOwnerChange 删除一个渠道信息
|
|
func DelOneChannelOwnerChange(ctx context.Context, filter bson.M) (int64, error) {
|
|
count, err := dbChannelOwnerChange.DeleteOne(ctx, filter)
|
|
if err != nil {
|
|
log.Warn("ChannelOwnerChange:DelOneChannelOwnerChange dbChannelOwnerChange.DeleteOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// UpdateOneChannelOwnerChange 更新一个渠道信息
|
|
func UpdateOneChannelOwnerChange(ctx context.Context, filter bson.M, update bson.M) error {
|
|
_, err := dbChannelOwnerChange.UpdateOne(ctx, filter, update)
|
|
if err != nil {
|
|
log.Warn("user:UpdateOneChannelOwnerChange dbChannelOwnerChange.UpdateOne failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// CountChannelOwnerChanges 统计渠道信息数量
|
|
func CountChannelOwnerChanges(ctx context.Context, filter bson.M) (int64, error) {
|
|
count, err := dbChannelOwnerChange.Count(ctx, filter)
|
|
if err != nil {
|
|
log.Warn("ChannelOwnerChange:CountChannelOwnerChanges dbChannelOwnerChange.Count failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return 0, err
|
|
}
|
|
return count, nil
|
|
}
|
|
|
|
// UpdateManyChannelOwnerChange 更新满足条件的渠道信息
|
|
func UpdateManyChannelOwnerChange(ctx context.Context, filter bson.M, update bson.M) error {
|
|
_, err := dbChannelOwnerChange.UpdateMany(ctx, filter, update)
|
|
if err != nil {
|
|
log.Warn("user:UpdateManyChannelOwnerChange dbChannelOwnerChange.UpdateMany failed",
|
|
log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// FindManyChannelOwnerChanges 查找一批渠道信息数据
|
|
func FindManyChannelOwnerChanges(ctx context.Context, filter bson.M, opts ...*options.FindOptions) (ChannelOwnerChangeList, error) {
|
|
data := make(ChannelOwnerChangeList, 0)
|
|
if err := dbChannelOwnerChange.Find(ctx, &data, filter, opts...); err != nil {
|
|
log.Warn("ChannelOwnerChange:FindManyChannelOwnerChange dbChannelOwnerChange.Find failed", log.E(err), log.Any("filter", filter))
|
|
return nil, err
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
// FindManyChannelOwnerChangeWithBind 用自己定义结构查找一批渠道信息数据
|
|
func FindManyChannelOwnerChangeWithBind(ctx context.Context, bind interface{}, filter bson.M, opts ...*options.FindOptions) error {
|
|
if err := dbChannelOwnerChange.Find(ctx, bind, filter, opts...); err != nil {
|
|
log.Warn("ChannelOwnerChange:FindManyChannelOwnerChangeWithBind dbChannelOwnerChange.Find failed", log.E(err), log.Any("filter", filter))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|