Initial commit
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
package channelSer
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"stat/api/proto"
|
||||
"stat/common/log"
|
||||
"stat/models/channelmod"
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
)
|
||||
|
||||
// SearchChannelDeductionRule 查询渠道扣量规则信息
|
||||
func SearchChannelDeductionRule(ctx context.Context, req *proto.ChannelDeductionRuleSearch) (*proto.ChannelDeductionRuleSearchResp, error) {
|
||||
resp := &proto.ChannelDeductionRuleSearchResp{}
|
||||
filter := bson.M{}
|
||||
opt := &options.FindOptions{}
|
||||
opt.SetSort(bson.M{channelmod.FN.ChannelDeductionRule.BeginTime: -1})
|
||||
opt.SetSkip((req.PageNum - 1) * req.PageSize)
|
||||
opt.SetLimit(req.PageSize)
|
||||
|
||||
if req.Channel != nil && *req.Channel != "" {
|
||||
filter[channelmod.FN.ChannelDeductionRule.Channel] = bson.M{"$regex": *req.Channel}
|
||||
}
|
||||
|
||||
if req.AppId != nil {
|
||||
filter[channelmod.FN.ChannelDeductionRule.AppId] = *req.AppId
|
||||
}
|
||||
|
||||
if req.Channel != nil && *req.Channel != "" {
|
||||
filter[channelmod.FN.ChannelDeductionRule.Channel] = *req.Channel
|
||||
}
|
||||
|
||||
total, err := channelmod.CountChannelDeductionRules(ctx, filter)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if total == 0 {
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
ChannelDeductionRuleList, err := channelmod.FindManyChannelDeductionRule(ctx, filter, opt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, rule := range ChannelDeductionRuleList {
|
||||
if rule.DivideRate == 0 {
|
||||
rule.DivideRate = 100
|
||||
}
|
||||
}
|
||||
|
||||
resp.Total = total
|
||||
resp.List = ChannelDeductionRuleList
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// AddChannelDeductionRule 添加一个媒体视频
|
||||
func AddChannelDeductionRule(ctx context.Context, req *proto.ChannelDeductionRuleAdd) (*channelmod.ChannelDeductionRule, error) {
|
||||
checkFilter := bson.M{channelmod.FN.ChannelDeductionRule.Channel: req.Channel, channelmod.FN.ChannelDeductionRule.AppId: req.AppId}
|
||||
ChannelDeductionRule, err := channelmod.FindOneChannelDeductionRule(ctx, checkFilter)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if ChannelDeductionRule.Channel == req.Channel {
|
||||
return ChannelDeductionRule, errors.New("渠道扣量规则已经存在")
|
||||
}
|
||||
channelInfo, err := channelmod.FindOneChannelInfoEx(ctx, bson.M{channelmod.FN.ChannelInfo.Channel: req.Channel})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var one float64
|
||||
if req.LessIncomeRate == nil {
|
||||
one = 0.0
|
||||
} else {
|
||||
one = *req.LessIncomeRate
|
||||
}
|
||||
now := time.Now()
|
||||
rule := channelmod.ChannelDeductionRule{
|
||||
AppId: req.AppId,
|
||||
AppType: req.AppType,
|
||||
PromoteMode: req.PromoteMode,
|
||||
Channel: req.Channel,
|
||||
Settlement: req.Settlement,
|
||||
First: req.First,
|
||||
Second: req.Second,
|
||||
Third: req.Third,
|
||||
Fourth: req.Fourth,
|
||||
Fifth: req.Fifth,
|
||||
CPAPrice: req.CPAPrice,
|
||||
CPSRate: req.CPSRate,
|
||||
BeginTime: req.BeginTime,
|
||||
CPSBegin: req.CPSBegin,
|
||||
CPSDeductionRate: req.CPSDeductionRate,
|
||||
DivideRate: req.DivideRate,
|
||||
LandingPage: req.LandingPage,
|
||||
ProxyDeduction: req.ProxyDeduction,
|
||||
AutoDeduction: req.AutoDeduction,
|
||||
LessIncomeRate: one,
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
}
|
||||
|
||||
err = channelmod.InsertOneChannelDeductionRule(ctx, &rule)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
channelInfo.AppIds = append(channelInfo.AppIds, req.AppId)
|
||||
|
||||
setdoc := bson.M{"$set": bson.M{channelmod.FN.ChannelInfo.AppIds: channelInfo.AppIds}}
|
||||
err = channelmod.UpdateOneChannelInfo(ctx, bson.M{channelmod.FN.ChannelInfo.Channel: req.Channel}, setdoc)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return channelmod.FindOneChannelDeductionRuleEx(ctx, checkFilter)
|
||||
}
|
||||
|
||||
// DelChannelDeductionRule 删除指定渠道扣量规则信息
|
||||
func DelChannelDeductionRule(ctx context.Context, channelId string) error {
|
||||
id, err := primitive.ObjectIDFromHex(channelId)
|
||||
if err != nil {
|
||||
return errors.New("ID 格式错误")
|
||||
}
|
||||
ruleFilter := bson.M{channelmod.FN.ChannelDeductionRule.ID: id}
|
||||
channelRuleInfo, err := channelmod.FindOneChannelDeductionRuleEx(ctx, ruleFilter)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
channelInfo, err := channelmod.FindOneChannelInfoEx(ctx, bson.M{channelmod.FN.ChannelInfo.Channel: channelRuleInfo.Channel})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
count, err := channelmod.CountChannelInfos(ctx, bson.M{channelmod.FN.ChannelInfo.ParentAgent: channelInfo.Channel})
|
||||
if err != nil {
|
||||
log.Error("DelChannelDeductionRule CountChannelInfos", log.Any("channelId", channelId), log.E(err))
|
||||
return err
|
||||
}
|
||||
if count > 0 {
|
||||
return errors.New("下级代理不为空,请先删除下级代理, 再删除应用规则")
|
||||
}
|
||||
|
||||
_, err = channelmod.DelOneChannelDeductionRule(ctx, ruleFilter)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
appids := make([]int32, 0)
|
||||
for _, appid := range channelInfo.AppIds {
|
||||
if appid != channelRuleInfo.AppId {
|
||||
appids = append(appids, appid)
|
||||
}
|
||||
}
|
||||
|
||||
setdoc := bson.M{"$set": bson.M{channelmod.FN.ChannelInfo.AppIds: appids}}
|
||||
err = channelmod.UpdateOneChannelInfo(ctx, bson.M{channelmod.FN.ChannelInfo.Channel: channelRuleInfo.Channel}, setdoc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateChannelDeductionRule 更新指定渠道扣量规则
|
||||
func UpdateChannelDeductionRule(ctx context.Context, channelId string, info proto.ChannelDeductionRuleUpdate) error {
|
||||
|
||||
id, err := primitive.ObjectIDFromHex(channelId)
|
||||
if err != nil {
|
||||
return errors.New("ID 格式错误")
|
||||
}
|
||||
filter := bson.M{channelmod.FN.ChannelDeductionRule.ID: id}
|
||||
|
||||
//更新数据库
|
||||
setDoc := bson.M{"$set": info}
|
||||
|
||||
serr := channelmod.UpdateOneChannelDeductionRule(ctx, filter, setDoc)
|
||||
if serr != nil {
|
||||
return serr
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user