Files
2026-11-05 12:11:56 +08:00

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
}