811 lines
29 KiB
Go
811 lines
29 KiB
Go
package channelmod
|
||
|
||
import (
|
||
"fmt"
|
||
"strconv"
|
||
)
|
||
|
||
type CalcIncomeRateMode int
|
||
|
||
const (
|
||
CalcIncomeRateModeDirect CalcIncomeRateMode = 0 // 直推模式:直推总额
|
||
CalcIncomeRateModeTotal CalcIncomeRateMode = 1 // 总量模式:充值总额
|
||
CalcIncomeRateModeMember CalcIncomeRateMode = 2 // 会员模式:会员总额
|
||
CalcIncomeRateModeCustom CalcIncomeRateMode = 3 // 定制模式:会员总额+(金币总额*占比)
|
||
)
|
||
|
||
type CalcIncomeRateConfig struct {
|
||
Mode CalcIncomeRateMode // 计算模式
|
||
CoinRatio float64 // 金币占比(最小为0,最大为1)
|
||
}
|
||
|
||
var configDefault = &CalcIncomeRateConfig{
|
||
Mode: CalcIncomeRateModeMember, // 默认收益率计算模式
|
||
CoinRatio: 0,
|
||
}
|
||
|
||
var configXcb = &CalcIncomeRateConfig{
|
||
Mode: CalcIncomeRateModeTotal, // 总充值
|
||
CoinRatio: 0,
|
||
}
|
||
|
||
func getConfig(appId int32) *CalcIncomeRateConfig {
|
||
if appId == 6666 {
|
||
return configXcb
|
||
} else {
|
||
return configDefault
|
||
}
|
||
}
|
||
|
||
// GetIncome 收益率计算公式
|
||
func (c *CalcIncomeRateConfig) GetIncome(stat *ChannelStat) int64 {
|
||
switch c.Mode {
|
||
case CalcIncomeRateModeDirect:
|
||
return stat.DirectAmount
|
||
case CalcIncomeRateModeTotal:
|
||
return stat.TotalAmount
|
||
case CalcIncomeRateModeMember:
|
||
return stat.VipPayMoney + stat.VipPayDeduction
|
||
case CalcIncomeRateModeCustom:
|
||
rate := c.CoinRatio
|
||
if rate > 1 {
|
||
rate = 1
|
||
}
|
||
if rate < 0 {
|
||
rate = 0
|
||
}
|
||
return (stat.VipPayMoney + stat.VipPayDeduction) + int64(float64(stat.VipPayCoin)*rate)
|
||
default:
|
||
return stat.VipPayMoney + stat.VipPayDeduction
|
||
}
|
||
}
|
||
|
||
func (t ChannelType) String() string {
|
||
switch t {
|
||
case ChannelTypeNone, ChannelTypeEnd:
|
||
return "无效"
|
||
case ChannelTypeParent:
|
||
return "一级"
|
||
case ChannelTypeSecond:
|
||
return "二级"
|
||
case ChannelTypeThird:
|
||
return "三级"
|
||
case ChannelTypeForth:
|
||
return "四级"
|
||
default:
|
||
if t > ChannelTypeNone && t < ChannelTypeEnd {
|
||
return fmt.Sprintf("【%d】级", t)
|
||
}
|
||
return "无效"
|
||
}
|
||
}
|
||
|
||
func (t ChannelType) IsTop() bool {
|
||
if t == ChannelTypeParent {
|
||
return true
|
||
}
|
||
return false
|
||
}
|
||
|
||
func (t ChannelType) IsSecond() bool {
|
||
if t == ChannelTypeSecond {
|
||
return true
|
||
}
|
||
return false
|
||
}
|
||
|
||
func (t ChannelType) IsChild() bool {
|
||
if t > ChannelTypeParent && t < ChannelTypeEnd {
|
||
return true
|
||
}
|
||
return false
|
||
}
|
||
|
||
func (t ChannelType) Child() ChannelType {
|
||
if t > ChannelTypeNone && t < ChannelTypeEnd {
|
||
return t + 1
|
||
} else {
|
||
return ChannelTypeEnd
|
||
}
|
||
}
|
||
|
||
func (t ChannelType) Parent() ChannelType {
|
||
if t > ChannelTypeNone && t < ChannelTypeEnd {
|
||
return t - 1
|
||
} else {
|
||
return ChannelTypeNone
|
||
}
|
||
}
|
||
|
||
func (t ChannelType) IsValid() bool {
|
||
if t > ChannelTypeNone && t < ChannelTypeEnd {
|
||
return true
|
||
} else {
|
||
return false
|
||
}
|
||
}
|
||
|
||
func (t ChannelType) IsNone() bool {
|
||
if t > ChannelTypeNone && t < ChannelTypeEnd {
|
||
return false
|
||
} else {
|
||
return true
|
||
}
|
||
}
|
||
|
||
func (a ChannelStatList) Len() int { return len(a) }
|
||
func (a ChannelStatList) Less(i, j int) bool { return a[i].SumDate.After(a[j].SumDate) }
|
||
func (a ChannelStatList) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
||
|
||
func (s *ChannelSettlement) AssignmentTo(d *ChannelStat) {
|
||
d.ValidDirectCount = s.ValidDirectCount
|
||
d.ValidDeductionCount = s.ValidDeductionCount
|
||
d.ValidPayMoney = s.ValidPayMoney
|
||
d.ValidPayCoin = s.ValidPayCoin
|
||
|
||
d.NewTotalIpCount = s.NewTotalIpCount
|
||
d.NewTotalCount = s.NewTotalCount
|
||
d.NewDirectCount = s.NewDirectCount
|
||
d.NewFissionCount = s.NewFissionCount
|
||
d.NewDeductionCount = s.NewDeductionCount
|
||
|
||
d.NewAndroidCount = s.NewAndroidCount
|
||
d.NewAndroidDirectCount = s.NewAndroidDirectCount
|
||
d.NewAndroidFissionCount = s.NewAndroidFissionCount
|
||
d.NewAndroidDeductionCount = s.NewAndroidDeductionCount
|
||
|
||
d.NewIosCount = s.NewIosCount
|
||
d.NewIosDirectCount = s.NewIosDirectCount
|
||
d.NewIosFissionCount = s.NewIosFissionCount
|
||
d.NewIosDeductionCount = s.NewIosDeductionCount
|
||
|
||
d.NewLightCount = s.NewLightCount
|
||
d.NewLightGuestCount = s.NewLightGuestCount
|
||
d.NewLightGuestDirectCount = s.NewLightGuestDirectCount
|
||
d.NewLightGuestFissionCount = s.NewLightGuestFissionCount
|
||
d.NewLightGuestDeductionCount = s.NewLightGuestDeductionCount
|
||
|
||
d.NewLightFormalCount = s.NewLightFormalCount
|
||
d.NewLightFormalDirectCount = s.NewLightFormalDirectCount
|
||
d.NewLightFormalFissionCount = s.NewLightFormalFissionCount
|
||
d.NewLightFormalDeductionCount = s.NewLightFormalDeductionCount
|
||
|
||
d.NewLightDirectCount = s.NewLightDirectCount
|
||
d.NewLightFissionCount = s.NewLightFissionCount
|
||
d.NewLightDeductionCount = s.NewLightDeductionCount
|
||
d.NewLightNaturalCount = s.NewLightNaturalCount
|
||
d.NewH5Count = s.NewH5Count
|
||
d.NewH5DirectCount = s.NewH5DirectCount
|
||
d.NewH5FissionCount = s.NewH5FissionCount
|
||
d.NewH5DeductionCount = s.NewH5DeductionCount
|
||
|
||
d.NewH5AndroidCount = s.NewH5AndroidCount
|
||
d.NewH5IosCount = s.NewH5IosCount
|
||
d.NewH5PcCount = s.NewH5PcCount
|
||
d.NewH5FormalCount = s.NewH5FormalCount
|
||
d.NewH5FormalDirectCount = s.NewH5FormalDirectCount
|
||
d.NewH5FormalFissionCount = s.NewH5FormalFissionCount
|
||
d.NewH5FormalDeductionCount = s.NewH5FormalDeductionCount
|
||
// 访问
|
||
d.TotalVisitCount = s.TotalVisitCount
|
||
d.DirectVisitCount = s.DirectVisitCount
|
||
d.FissionVisitCount = s.FissionVisitCount
|
||
d.AndroidVisitCount = s.AndroidVisitCount
|
||
d.IosVisitCount = s.IosVisitCount
|
||
d.LightVisitCount = s.LightVisitCount
|
||
d.LightVisitDirectCount = s.LightVisitDirectCount
|
||
d.LightVisitFissionCount = s.LightVisitFissionCount
|
||
d.LightVisitDeductionCount = s.LightVisitDeductionCount
|
||
d.LightVisitNaturalCount = s.LightVisitNaturalCount
|
||
d.H5VisitCount = s.H5VisitCount
|
||
d.H5AndroidVisitCount = s.H5AndroidVisitCount
|
||
d.H5IosVisitCount = s.H5IosVisitCount
|
||
d.H5PcVisitCount = s.H5PcVisitCount
|
||
// 充值
|
||
d.TotalAmount = s.TotalAmount
|
||
d.DirectAmount = s.DirectAmount
|
||
d.DirectAmountCount = s.DirectAmountCount
|
||
d.FissionAmount = s.FissionAmount
|
||
d.FissionAmountCount = s.FissionAmountCount
|
||
d.NaturalAmount = s.NaturalAmount
|
||
d.NaturalAmountCount = s.NaturalAmountCount
|
||
d.DeductionAmount = s.DeductionAmount
|
||
d.DeductionAmountCount = s.DeductionAmountCount
|
||
d.AndroidAmount = s.AndroidAmount
|
||
d.AndroidAmountCount = s.AndroidAmountCount
|
||
d.IosAmount = s.IosAmount
|
||
d.IosAmountCount = s.IosAmountCount
|
||
d.H5Amount = s.H5Amount
|
||
d.H5AmountCount = s.H5AmountCount
|
||
d.LightAmount = s.LightAmount
|
||
d.LightAmountCount = s.LightAmountCount
|
||
d.LightDirectAmount = s.LightDirectAmount
|
||
d.LightDirectAmountCount = s.LightDirectAmountCount
|
||
d.LightFissionAmount = s.LightFissionAmount
|
||
d.LightFissionAmountCount = s.LightFissionAmountCount
|
||
d.LightDeductionAmount = s.LightDeductionAmount
|
||
d.LightDeductionAmountCount = s.LightDeductionAmountCount
|
||
d.LightNaturalAmount = s.LightNaturalAmount
|
||
d.LightNaturalAmountCount = s.LightNaturalAmountCount
|
||
// 其他充值
|
||
d.NewRechargeAmount = s.NewRechargeAmount
|
||
d.VipPayMoney = s.VipPayMoney
|
||
d.VipPayCoin = s.VipPayCoin
|
||
d.VipPayDeduction = s.VipPayDeduction
|
||
d.GameRechageAmount = s.GameRechageAmount
|
||
d.GameWithdrawAmount = s.GameWithdrawAmount
|
||
// 落地页访问
|
||
d.LandPageVisitCount = s.LandPageVisitCount
|
||
d.LandpageAndroidClick = s.LandpageAndroidClick
|
||
d.LandpageIosAppstoreClick = s.LandpageIosAppstoreClick
|
||
d.LandpageIosAthorClick = s.LandpageIosAthorClick
|
||
d.LandpageIosH5Click = s.LandpageIosH5Click
|
||
}
|
||
|
||
func (s *ChannelSettlement) AccumulateTo(d *ChannelStat) {
|
||
d.ValidDirectCount += s.ValidDirectCount
|
||
d.ValidDeductionCount += s.ValidDeductionCount
|
||
d.ValidPayMoney += s.ValidPayMoney
|
||
d.ValidPayCoin += s.ValidPayCoin
|
||
|
||
d.NewTotalIpCount += s.NewTotalIpCount
|
||
d.NewTotalCount += s.NewTotalCount
|
||
d.NewDirectCount += s.NewDirectCount
|
||
d.NewFissionCount += s.NewFissionCount
|
||
d.NewDeductionCount += s.NewDeductionCount
|
||
d.NewAndroidCount += s.NewAndroidCount
|
||
|
||
d.NewAndroidDirectCount += s.NewAndroidDirectCount
|
||
d.NewAndroidFissionCount += s.NewAndroidFissionCount
|
||
d.NewAndroidDeductionCount += s.NewAndroidDeductionCount
|
||
|
||
d.NewIosCount += s.NewIosCount
|
||
d.NewIosDirectCount += s.NewIosDirectCount
|
||
d.NewIosFissionCount += s.NewIosFissionCount
|
||
d.NewIosDeductionCount += s.NewIosDeductionCount
|
||
|
||
d.NewLightCount += s.NewLightCount
|
||
d.NewLightGuestCount += s.NewLightGuestCount
|
||
d.NewLightGuestDirectCount += s.NewLightGuestDirectCount
|
||
d.NewLightGuestFissionCount += s.NewLightGuestFissionCount
|
||
d.NewLightGuestDeductionCount += s.NewLightGuestDeductionCount
|
||
|
||
d.NewLightFormalCount += s.NewLightFormalCount
|
||
d.NewLightFormalDirectCount += s.NewLightFormalDirectCount
|
||
d.NewLightFormalFissionCount += s.NewLightFormalFissionCount
|
||
d.NewLightFormalDeductionCount += s.NewLightFormalDeductionCount
|
||
|
||
d.NewLightDirectCount += s.NewLightDirectCount
|
||
d.NewLightFissionCount += s.NewLightFissionCount
|
||
d.NewLightDeductionCount += s.NewLightDeductionCount
|
||
d.NewLightNaturalCount += s.NewLightNaturalCount
|
||
d.NewH5Count += s.NewH5Count
|
||
|
||
d.NewH5DirectCount += s.NewH5DirectCount
|
||
d.NewH5FissionCount += s.NewH5FissionCount
|
||
d.NewH5DeductionCount += s.NewH5DeductionCount
|
||
|
||
d.NewH5AndroidCount += s.NewH5AndroidCount
|
||
d.NewH5IosCount += s.NewH5IosCount
|
||
d.NewH5PcCount += s.NewH5PcCount
|
||
d.NewH5FormalCount += s.NewH5FormalCount
|
||
d.NewH5FormalDirectCount += s.NewH5FormalDirectCount
|
||
d.NewH5FormalFissionCount += s.NewH5FormalFissionCount
|
||
d.NewH5FormalDeductionCount += s.NewH5FormalDeductionCount
|
||
// 访问
|
||
d.TotalVisitCount += s.TotalVisitCount
|
||
d.DirectVisitCount += s.DirectVisitCount
|
||
d.FissionVisitCount += s.FissionVisitCount
|
||
d.AndroidVisitCount += s.AndroidVisitCount
|
||
d.IosVisitCount += s.IosVisitCount
|
||
d.LightVisitCount += s.LightVisitCount
|
||
d.LightVisitDirectCount += s.LightVisitDirectCount
|
||
d.LightVisitFissionCount += s.LightVisitFissionCount
|
||
d.LightVisitDeductionCount += s.LightVisitDeductionCount
|
||
d.LightVisitNaturalCount += s.LightVisitNaturalCount
|
||
d.H5VisitCount += s.H5VisitCount
|
||
d.H5AndroidVisitCount += s.H5AndroidVisitCount
|
||
d.H5IosVisitCount += s.H5IosVisitCount
|
||
d.H5PcVisitCount += s.H5PcVisitCount
|
||
// 充值
|
||
d.TotalAmount += s.TotalAmount
|
||
d.DirectAmount += s.DirectAmount
|
||
d.DirectAmountCount += s.DirectAmountCount
|
||
d.FissionAmount += s.FissionAmount
|
||
d.FissionAmountCount += s.FissionAmountCount
|
||
d.NaturalAmount += s.NaturalAmount
|
||
d.NaturalAmountCount += s.NaturalAmountCount
|
||
d.DeductionAmount += s.DeductionAmount
|
||
d.DeductionAmountCount += s.DeductionAmountCount
|
||
d.AndroidAmount += s.AndroidAmount
|
||
d.AndroidAmountCount += s.AndroidAmountCount
|
||
d.IosAmount += s.IosAmount
|
||
d.IosAmountCount += s.IosAmountCount
|
||
|
||
d.H5Amount += s.H5Amount
|
||
d.H5AmountCount += s.H5AmountCount
|
||
d.LightAmount += s.LightAmount
|
||
d.LightAmountCount += s.LightAmountCount
|
||
d.LightDirectAmount += s.LightDirectAmount
|
||
d.LightDirectAmountCount += s.LightDirectAmountCount
|
||
d.LightFissionAmount += s.LightFissionAmount
|
||
d.LightFissionAmountCount += s.LightFissionAmountCount
|
||
d.LightDeductionAmount += s.LightDeductionAmount
|
||
d.LightDeductionAmountCount += s.LightDeductionAmountCount
|
||
d.LightNaturalAmount += s.LightNaturalAmount
|
||
d.LightNaturalAmountCount += s.LightNaturalAmountCount
|
||
// 其他充值
|
||
d.NewRechargeAmount += s.NewRechargeAmount
|
||
d.VipPayMoney += s.VipPayMoney
|
||
d.VipPayCoin += s.VipPayCoin
|
||
d.VipPayDeduction += s.VipPayDeduction
|
||
d.GameRechageAmount += s.GameRechageAmount
|
||
d.GameWithdrawAmount += s.GameWithdrawAmount
|
||
// 落地页访问
|
||
d.LandPageVisitCount += s.LandPageVisitCount
|
||
d.LandpageAndroidClick += s.LandpageAndroidClick
|
||
d.LandpageIosAppstoreClick += s.LandpageIosAppstoreClick
|
||
d.LandpageIosAthorClick += s.LandpageIosAthorClick
|
||
d.LandpageIosH5Click += s.LandpageIosH5Click
|
||
}
|
||
|
||
func (s *ChannelStat) AssignmentTo(d *ChannelSettlement) {
|
||
d.ValidDirectCount = s.ValidDirectCount
|
||
d.ValidDeductionCount = s.ValidDeductionCount
|
||
d.ValidPayMoney = s.ValidPayMoney
|
||
d.ValidPayCoin = s.ValidPayCoin
|
||
|
||
d.NewTotalIpCount = s.NewTotalIpCount
|
||
d.NewTotalCount = s.NewTotalCount
|
||
d.NewDirectCount = s.NewDirectCount
|
||
d.NewFissionCount = s.NewFissionCount
|
||
d.NewDeductionCount = s.NewDeductionCount
|
||
d.NewAndroidCount = s.NewAndroidCount
|
||
d.NewAndroidDirectCount = s.NewAndroidDirectCount
|
||
d.NewAndroidFissionCount = s.NewAndroidFissionCount
|
||
d.NewAndroidDeductionCount = s.NewAndroidDeductionCount
|
||
|
||
d.NewIosCount = s.NewIosCount
|
||
d.NewIosDirectCount = s.NewIosDirectCount
|
||
d.NewIosFissionCount = s.NewIosFissionCount
|
||
d.NewIosDeductionCount = s.NewIosDeductionCount
|
||
|
||
d.NewLightCount = s.NewLightCount
|
||
d.NewLightGuestCount = s.NewLightGuestCount
|
||
d.NewLightGuestDirectCount = s.NewLightGuestDirectCount
|
||
d.NewLightGuestFissionCount = s.NewLightGuestFissionCount
|
||
d.NewLightGuestDeductionCount = s.NewLightGuestDeductionCount
|
||
|
||
d.NewLightFormalCount = s.NewLightFormalCount
|
||
d.NewLightFormalDirectCount = s.NewLightFormalDirectCount
|
||
d.NewLightFormalFissionCount = s.NewLightFormalFissionCount
|
||
d.NewLightFormalDeductionCount = s.NewLightFormalDeductionCount
|
||
|
||
d.NewLightDirectCount = s.NewLightDirectCount
|
||
d.NewLightFissionCount = s.NewLightFissionCount
|
||
d.NewLightDeductionCount = s.NewLightDeductionCount
|
||
d.NewLightNaturalCount = s.NewLightNaturalCount
|
||
d.NewH5Count = s.NewH5Count
|
||
d.NewH5DirectCount = s.NewH5DirectCount
|
||
d.NewH5FissionCount = s.NewH5FissionCount
|
||
d.NewH5DeductionCount = s.NewH5DeductionCount
|
||
|
||
d.NewH5AndroidCount = s.NewH5AndroidCount
|
||
d.NewH5IosCount = s.NewH5IosCount
|
||
d.NewH5PcCount = s.NewH5PcCount
|
||
d.NewH5FormalCount = s.NewH5FormalCount
|
||
d.NewH5FormalDirectCount = s.NewH5FormalDirectCount
|
||
d.NewH5FormalFissionCount = s.NewH5FormalFissionCount
|
||
d.NewH5FormalDeductionCount = s.NewH5FormalDeductionCount
|
||
// 访问
|
||
d.TotalVisitCount = s.TotalVisitCount
|
||
d.DirectVisitCount = s.DirectVisitCount
|
||
d.FissionVisitCount = s.FissionVisitCount
|
||
d.AndroidVisitCount = s.AndroidVisitCount
|
||
d.IosVisitCount = s.IosVisitCount
|
||
d.LightVisitCount = s.LightVisitCount
|
||
d.LightVisitDirectCount = s.LightVisitDirectCount
|
||
d.LightVisitFissionCount = s.LightVisitFissionCount
|
||
d.LightVisitDeductionCount = s.LightVisitDeductionCount
|
||
d.LightVisitNaturalCount = s.LightVisitNaturalCount
|
||
d.H5VisitCount = s.H5VisitCount
|
||
d.H5AndroidVisitCount = s.H5AndroidVisitCount
|
||
d.H5IosVisitCount = s.H5IosVisitCount
|
||
d.H5PcVisitCount = s.H5PcVisitCount
|
||
// 充值
|
||
d.TotalAmount = s.TotalAmount
|
||
d.DirectAmount = s.DirectAmount
|
||
d.DirectAmountCount = s.DirectAmountCount
|
||
d.FissionAmount = s.FissionAmount
|
||
d.FissionAmountCount = s.FissionAmountCount
|
||
d.NaturalAmount = s.NaturalAmount
|
||
d.NaturalAmountCount = s.NaturalAmountCount
|
||
d.DeductionAmount = s.DeductionAmount
|
||
d.DeductionAmountCount = s.DeductionAmountCount
|
||
d.AndroidAmount = s.AndroidAmount
|
||
d.AndroidAmountCount = s.AndroidAmountCount
|
||
d.IosAmount = s.IosAmount
|
||
d.IosAmountCount = s.IosAmountCount
|
||
d.H5Amount = s.H5Amount
|
||
d.H5AmountCount = s.H5AmountCount
|
||
d.LightAmount = s.LightAmount
|
||
d.LightAmountCount = s.LightAmountCount
|
||
d.LightDirectAmount = s.LightDirectAmount
|
||
d.LightDirectAmountCount = s.LightDirectAmountCount
|
||
d.LightFissionAmount = s.LightFissionAmount
|
||
d.LightFissionAmountCount = s.LightFissionAmountCount
|
||
d.LightDeductionAmount = s.LightDeductionAmount
|
||
d.LightDeductionAmountCount = s.LightDeductionAmountCount
|
||
d.LightNaturalAmount = s.LightNaturalAmount
|
||
d.LightNaturalAmountCount = s.LightNaturalAmountCount
|
||
// 其他充值
|
||
d.NewRechargeAmount = s.NewRechargeAmount
|
||
d.VipPayMoney = s.VipPayMoney
|
||
d.VipPayCoin = s.VipPayCoin
|
||
d.VipPayDeduction = s.VipPayDeduction
|
||
d.GameRechageAmount = s.GameRechageAmount
|
||
d.GameWithdrawAmount = s.GameWithdrawAmount
|
||
// 落地页访问
|
||
d.LandPageVisitCount = s.LandPageVisitCount
|
||
d.LandpageAndroidClick = s.LandpageAndroidClick
|
||
d.LandpageIosAppstoreClick = s.LandpageIosAppstoreClick
|
||
d.LandpageIosAthorClick = s.LandpageIosAthorClick
|
||
d.LandpageIosH5Click = s.LandpageIosH5Click
|
||
}
|
||
|
||
func (s *ChannelStat) AccumulateTo(d *ChannelSettlement) {
|
||
d.ValidDirectCount += s.ValidDirectCount
|
||
d.ValidDeductionCount += s.ValidDeductionCount
|
||
d.ValidPayMoney += s.ValidPayMoney
|
||
d.ValidPayCoin += s.ValidPayCoin
|
||
|
||
d.NewTotalIpCount += s.NewTotalIpCount
|
||
d.NewTotalCount += s.NewTotalCount
|
||
d.NewDirectCount += s.NewDirectCount
|
||
d.NewFissionCount += s.NewFissionCount
|
||
d.NewDeductionCount += s.NewDeductionCount
|
||
d.NewAndroidCount += s.NewAndroidCount
|
||
d.NewAndroidDirectCount += s.NewAndroidDirectCount
|
||
d.NewAndroidFissionCount += s.NewAndroidFissionCount
|
||
d.NewAndroidDeductionCount += s.NewAndroidDeductionCount
|
||
|
||
d.NewIosCount += s.NewIosCount
|
||
d.NewIosDirectCount += s.NewIosDirectCount
|
||
d.NewIosFissionCount += s.NewIosFissionCount
|
||
d.NewIosDeductionCount += s.NewIosDeductionCount
|
||
|
||
d.NewLightCount += s.NewLightCount
|
||
d.NewLightGuestCount += s.NewLightGuestCount
|
||
d.NewLightGuestDirectCount += s.NewLightGuestDirectCount
|
||
d.NewLightGuestFissionCount += s.NewLightGuestFissionCount
|
||
d.NewLightGuestDeductionCount += s.NewLightGuestDeductionCount
|
||
|
||
d.NewLightFormalCount += s.NewLightFormalCount
|
||
d.NewLightFormalDirectCount += s.NewLightFormalDirectCount
|
||
d.NewLightFormalFissionCount += s.NewLightFormalFissionCount
|
||
d.NewLightFormalDeductionCount += s.NewLightFormalDeductionCount
|
||
|
||
d.NewLightDirectCount += s.NewLightDirectCount
|
||
d.NewLightFissionCount += s.NewLightFissionCount
|
||
d.NewLightDeductionCount += s.NewLightDeductionCount
|
||
d.NewLightNaturalCount += s.NewLightNaturalCount
|
||
d.NewH5Count += s.NewH5Count
|
||
d.NewH5DirectCount += s.NewH5DirectCount
|
||
d.NewH5FissionCount += s.NewH5FissionCount
|
||
d.NewH5DeductionCount += s.NewH5DeductionCount
|
||
|
||
d.NewH5AndroidCount += s.NewH5AndroidCount
|
||
d.NewH5IosCount += s.NewH5IosCount
|
||
d.NewH5PcCount += s.NewH5PcCount
|
||
d.NewH5FormalCount += s.NewH5FormalCount
|
||
d.NewH5FormalDirectCount += s.NewH5FormalDirectCount
|
||
d.NewH5FormalFissionCount += s.NewH5FormalFissionCount
|
||
d.NewH5FormalDeductionCount += s.NewH5FormalDeductionCount
|
||
|
||
// 访问
|
||
d.TotalVisitCount += s.TotalVisitCount
|
||
d.DirectVisitCount += s.DirectVisitCount
|
||
d.FissionVisitCount += s.FissionVisitCount
|
||
d.AndroidVisitCount += s.AndroidVisitCount
|
||
d.IosVisitCount += s.IosVisitCount
|
||
d.LightVisitCount += s.LightVisitCount
|
||
d.LightVisitDirectCount += s.LightVisitDirectCount
|
||
d.LightVisitFissionCount += s.LightVisitFissionCount
|
||
d.LightVisitDeductionCount += s.LightVisitDeductionCount
|
||
d.LightVisitNaturalCount += s.LightVisitNaturalCount
|
||
d.H5VisitCount += s.H5VisitCount
|
||
d.H5AndroidVisitCount += s.H5AndroidVisitCount
|
||
d.H5IosVisitCount += s.H5IosVisitCount
|
||
d.H5PcVisitCount += s.H5PcVisitCount
|
||
// 充值
|
||
d.TotalAmount += s.TotalAmount
|
||
d.DirectAmount += s.DirectAmount
|
||
d.DirectAmountCount += s.DirectAmountCount
|
||
d.FissionAmount += s.FissionAmount
|
||
d.FissionAmountCount += s.FissionAmountCount
|
||
d.NaturalAmount += s.NaturalAmount
|
||
d.NaturalAmountCount += s.NaturalAmountCount
|
||
d.DeductionAmount += s.DeductionAmount
|
||
d.DeductionAmountCount += s.DeductionAmountCount
|
||
d.AndroidAmount += s.AndroidAmount
|
||
d.AndroidAmountCount += s.AndroidAmountCount
|
||
d.IosAmount += s.IosAmount
|
||
d.IosAmountCount += s.IosAmountCount
|
||
d.LightAmount += s.LightAmount
|
||
d.LightAmountCount += s.LightAmountCount
|
||
d.LightDirectAmount += s.LightDirectAmount
|
||
d.LightDirectAmountCount += s.LightDirectAmountCount
|
||
d.LightFissionAmount += s.LightFissionAmount
|
||
d.LightFissionAmountCount += s.LightFissionAmountCount
|
||
d.LightDeductionAmount += s.LightDeductionAmount
|
||
d.LightDeductionAmountCount += s.LightDeductionAmountCount
|
||
d.LightNaturalAmount += s.LightNaturalAmount
|
||
d.LightNaturalAmountCount += s.LightNaturalAmountCount
|
||
// 其他充值
|
||
d.NewRechargeAmount += s.NewRechargeAmount
|
||
d.VipPayMoney += s.VipPayMoney
|
||
d.VipPayCoin += s.VipPayCoin
|
||
d.VipPayDeduction += s.VipPayDeduction
|
||
d.GameRechageAmount += s.GameRechageAmount
|
||
d.GameWithdrawAmount += s.GameWithdrawAmount
|
||
// 落地页访问
|
||
d.LandPageVisitCount += s.LandPageVisitCount
|
||
d.LandpageAndroidClick += s.LandpageAndroidClick
|
||
d.LandpageIosAppstoreClick += s.LandpageIosAppstoreClick
|
||
d.LandpageIosAthorClick += s.LandpageIosAthorClick
|
||
d.LandpageIosH5Click += s.LandpageIosH5Click
|
||
}
|
||
|
||
func (s *ChannelStat) CalcIncomeRate() *ChannelStat {
|
||
if s.Settlement == SettlementCPA && s.CPAPrice > 0 {
|
||
spendMoney := s.ValidDirectCount * s.CPAPrice
|
||
incomeMoney := getConfig(s.AppId).GetIncome(s) //s.DirectAmount
|
||
if spendMoney > 0 {
|
||
s.IncomeAmount = spendMoney
|
||
s.IncomeRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", float64(incomeMoney)/float64(spendMoney)), 64)
|
||
}
|
||
} else if s.Settlement == SettlementCPS && s.CPSRate > 0 {
|
||
spendMoney := s.ValidPayMoney * s.CPSRate / 100
|
||
incomeMoney := getConfig(s.AppId).GetIncome(s) // s.DirectAmount
|
||
if spendMoney > 0 {
|
||
s.IncomeAmount = spendMoney
|
||
s.IncomeRate, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", float64(incomeMoney)/float64(spendMoney)), 64)
|
||
}
|
||
}
|
||
return s
|
||
}
|
||
|
||
func (s *ChannelStat) CorrectValidData() *ChannelStat {
|
||
//if s.ValidDirectCount == 0 && s.ValidPayMoney == 0 {
|
||
s.ValidDirectCount, s.ValidPayMoney, s.ValidPayCoin, s.ValidDeductionCount = GetChannelStatValidData(s)
|
||
//}
|
||
if s.TotalVisitCount != s.DirectVisitCount+s.FissionVisitCount {
|
||
s.TotalVisitCount = s.DirectVisitCount + s.FissionVisitCount
|
||
}
|
||
if s.NewTotalCount != s.NewDirectCount+s.NewFissionCount+s.NewDeductionCount {
|
||
s.NewTotalCount = s.NewDirectCount + s.NewFissionCount + s.NewDeductionCount
|
||
}
|
||
if s.DirectAmount+s.FissionAmount+s.DeductionAmount != s.TotalAmount {
|
||
s.TotalAmount = s.DirectAmount + s.FissionAmount + s.DeductionAmount
|
||
}
|
||
if s.VipPayMoney+s.VipPayDeduction+s.VipPayCoin != s.TotalAmount {
|
||
s.VipPayCoin = s.TotalAmount - s.VipPayMoney - s.VipPayDeduction
|
||
}
|
||
return s
|
||
}
|
||
|
||
func (s *ChannelSettlement) CorrectValidData() *ChannelSettlement {
|
||
//if s.ValidDirectCount == 0 && s.ValidPayMoney == 0 {
|
||
s.ValidDirectCount, s.ValidPayMoney, s.ValidPayCoin, s.ValidDeductionCount = GetChannelSettlementValidData(s)
|
||
//}
|
||
if s.TotalVisitCount != s.DirectVisitCount+s.FissionVisitCount {
|
||
s.TotalVisitCount = s.DirectVisitCount + s.FissionVisitCount
|
||
}
|
||
if s.NewTotalCount != s.NewDirectCount+s.NewFissionCount+s.NewDeductionCount {
|
||
s.NewTotalCount = s.NewDirectCount + s.NewFissionCount + s.NewDeductionCount
|
||
}
|
||
if s.DirectAmount+s.FissionAmount+s.DeductionAmount != s.TotalAmount {
|
||
s.TotalAmount = s.DirectAmount + s.FissionAmount + s.DeductionAmount
|
||
}
|
||
if s.VipPayMoney+s.VipPayDeduction+s.VipPayCoin != s.TotalAmount {
|
||
s.VipPayCoin = s.TotalAmount - s.VipPayMoney - s.VipPayDeduction
|
||
}
|
||
return s
|
||
}
|
||
|
||
func GetChannelStatValidData(stat *ChannelStat) (count int64, amount int64, coin int64, deduction int64) {
|
||
switch stat.AppType {
|
||
case AppTypePkg:
|
||
count = stat.NewAndroidDirectCount + stat.NewIosDirectCount
|
||
deduction = stat.NewAndroidDeductionCount + stat.NewIosDeductionCount
|
||
amount = stat.VipPayMoney
|
||
coin = stat.ValidPayCoin
|
||
case AppTypeLight:
|
||
if stat.PromoteMode == PromoteModeRegister {
|
||
count = stat.NewLightFormalDirectCount
|
||
deduction = stat.NewLightFormalDeductionCount
|
||
} else {
|
||
count = stat.NewLightDirectCount
|
||
deduction = stat.NewLightDeductionCount
|
||
}
|
||
amount = stat.VipPayMoney
|
||
coin = stat.ValidPayCoin
|
||
case AppTypeH5:
|
||
if stat.PromoteMode == PromoteModeRegister {
|
||
count = stat.NewH5FormalDirectCount
|
||
deduction = stat.NewH5FormalDeductionCount
|
||
} else {
|
||
count = stat.NewH5DirectCount
|
||
deduction = stat.NewH5DeductionCount
|
||
}
|
||
amount = stat.VipPayMoney
|
||
coin = stat.ValidPayCoin
|
||
default:
|
||
count = stat.NewDirectCount
|
||
deduction = stat.NewDeductionCount
|
||
amount = stat.VipPayMoney
|
||
if stat.AppId == 6666 && amount == 0 { // 咻车宝按照充值金币计算
|
||
amount += stat.VipPayCoin
|
||
}
|
||
coin = stat.ValidPayCoin
|
||
}
|
||
return
|
||
}
|
||
|
||
func GetChannelSettlementValidData(stat *ChannelSettlement) (count int64, amount int64, coin int64, deduction int64) {
|
||
switch stat.AppType {
|
||
case AppTypePkg:
|
||
count = stat.NewAndroidDirectCount + stat.NewIosDirectCount
|
||
deduction = stat.NewAndroidDeductionCount + stat.NewIosDeductionCount
|
||
amount = stat.VipPayMoney
|
||
coin = stat.ValidPayCoin
|
||
case AppTypeLight:
|
||
if stat.PromoteMode == PromoteModeRegister {
|
||
count = stat.NewLightFormalDirectCount
|
||
deduction = stat.NewLightFormalDeductionCount
|
||
} else {
|
||
count = stat.NewLightDirectCount
|
||
deduction = stat.NewLightDeductionCount
|
||
}
|
||
amount = stat.VipPayMoney
|
||
coin = stat.ValidPayCoin
|
||
case AppTypeH5:
|
||
if stat.PromoteMode == PromoteModeRegister {
|
||
count = stat.NewH5FormalDirectCount
|
||
deduction = stat.NewH5FormalDeductionCount
|
||
} else {
|
||
count = stat.NewH5DirectCount
|
||
deduction = stat.NewH5DeductionCount
|
||
}
|
||
amount = stat.VipPayMoney
|
||
coin = stat.ValidPayCoin
|
||
default:
|
||
count = stat.NewDirectCount
|
||
deduction = stat.NewDeductionCount
|
||
amount = stat.VipPayMoney
|
||
coin = stat.ValidPayCoin
|
||
}
|
||
return
|
||
}
|
||
|
||
func ChannelStatSummation(base, value *ChannelStat) {
|
||
value.CorrectValidData()
|
||
|
||
base.ValidDirectCount += value.ValidDirectCount
|
||
base.ValidDeductionCount += value.ValidDeductionCount
|
||
base.ValidPayMoney += value.ValidPayMoney
|
||
base.ValidPayCoin += value.ValidPayCoin
|
||
|
||
base.NewTotalIpCount += value.NewTotalIpCount
|
||
base.NewTotalCount += value.NewTotalCount
|
||
base.NewDirectCount += value.NewDirectCount
|
||
base.NewFissionCount += value.NewFissionCount
|
||
base.NewDeductionCount += value.NewDeductionCount
|
||
base.NewAndroidCount += value.NewAndroidCount
|
||
base.NewAndroidDirectCount += value.NewAndroidDirectCount
|
||
base.NewAndroidFissionCount += value.NewAndroidFissionCount
|
||
base.NewAndroidDeductionCount += value.NewAndroidDeductionCount
|
||
|
||
base.NewIosCount += value.NewIosCount
|
||
base.NewIosDirectCount += value.NewIosDirectCount
|
||
base.NewIosFissionCount += value.NewIosFissionCount
|
||
base.NewIosDeductionCount += value.NewIosDeductionCount
|
||
|
||
base.NewLightCount += value.NewLightCount
|
||
base.NewLightGuestCount += value.NewLightGuestCount
|
||
base.NewLightGuestDirectCount += value.NewLightGuestDirectCount
|
||
base.NewLightGuestFissionCount += value.NewLightGuestFissionCount
|
||
base.NewLightGuestDeductionCount += value.NewLightGuestDeductionCount
|
||
|
||
base.NewLightFormalCount += value.NewLightFormalCount
|
||
base.NewLightFormalDirectCount += value.NewLightFormalDirectCount
|
||
base.NewLightFormalFissionCount += value.NewLightFormalFissionCount
|
||
base.NewLightFormalDeductionCount += value.NewLightFormalDeductionCount
|
||
|
||
base.NewLightDirectCount += value.NewLightDirectCount
|
||
base.NewLightFissionCount += value.NewLightFissionCount
|
||
base.NewLightDeductionCount += value.NewLightDeductionCount
|
||
base.NewLightNaturalCount += value.NewLightNaturalCount
|
||
base.NewH5Count += value.NewH5Count
|
||
base.NewH5DirectCount += value.NewH5DirectCount
|
||
base.NewH5FissionCount += value.NewH5FissionCount
|
||
base.NewH5DeductionCount += value.NewH5DeductionCount
|
||
base.NewH5AndroidCount += value.NewH5AndroidCount
|
||
base.NewH5IosCount += value.NewH5IosCount
|
||
base.NewH5PcCount += value.NewH5PcCount
|
||
base.NewH5FormalCount += value.NewH5FormalCount
|
||
base.NewH5FormalDirectCount += value.NewH5FormalDirectCount
|
||
base.NewH5FormalFissionCount += value.NewH5FormalFissionCount
|
||
base.NewH5FormalDeductionCount += value.NewH5FormalDeductionCount
|
||
// 访问
|
||
base.TotalVisitCount += value.TotalVisitCount
|
||
base.DirectVisitCount += value.DirectVisitCount
|
||
base.FissionVisitCount += value.FissionVisitCount
|
||
base.AndroidVisitCount += value.AndroidVisitCount
|
||
base.IosVisitCount += value.IosVisitCount
|
||
base.LightVisitCount += value.LightVisitCount
|
||
base.LightVisitDirectCount += value.LightVisitDirectCount
|
||
base.LightVisitFissionCount += value.LightVisitFissionCount
|
||
base.LightVisitDeductionCount += value.LightVisitDeductionCount
|
||
base.LightVisitNaturalCount += value.LightVisitNaturalCount
|
||
base.H5VisitCount += value.H5VisitCount
|
||
base.H5AndroidVisitCount += value.H5AndroidVisitCount
|
||
base.H5IosVisitCount += value.H5IosVisitCount
|
||
base.H5PcVisitCount += value.H5PcVisitCount
|
||
// 充值
|
||
base.TotalAmount += value.TotalAmount
|
||
base.DirectAmount += value.DirectAmount
|
||
base.DirectAmountCount += value.DirectAmountCount
|
||
base.FissionAmount += value.FissionAmount
|
||
base.FissionAmountCount += value.FissionAmountCount
|
||
base.NaturalAmount += value.NaturalAmount
|
||
base.NaturalAmountCount += value.NaturalAmountCount
|
||
base.DeductionAmount += value.DeductionAmount
|
||
base.DeductionAmountCount += value.DeductionAmountCount
|
||
base.AndroidAmount += value.AndroidAmount
|
||
base.AndroidAmountCount += value.AndroidAmountCount
|
||
base.IosAmount += value.IosAmount
|
||
base.IosAmountCount += value.IosAmountCount
|
||
base.H5Amount += value.H5Amount
|
||
base.H5AmountCount += value.H5AmountCount
|
||
base.LightAmount += value.LightAmount
|
||
base.LightAmountCount += value.LightAmountCount
|
||
base.LightDirectAmount += value.LightDirectAmount
|
||
base.LightDirectAmountCount += value.LightDirectAmountCount
|
||
base.LightFissionAmount += value.LightFissionAmount
|
||
base.LightFissionAmountCount += value.LightFissionAmountCount
|
||
base.LightDeductionAmount += value.LightDeductionAmount
|
||
base.LightDeductionAmountCount += value.LightDeductionAmountCount
|
||
base.LightNaturalAmount += value.LightNaturalAmount
|
||
base.LightNaturalAmountCount += value.LightNaturalAmountCount
|
||
// 其他充值
|
||
base.NewRechargeAmount += value.NewRechargeAmount
|
||
base.VipPayMoney += value.VipPayMoney
|
||
base.VipPayCoin += value.DirectAmount + value.FissionAmount - value.VipPayMoney - value.VipPayDeduction
|
||
base.VipPayDeduction += value.VipPayDeduction
|
||
base.GameRechageAmount += value.GameRechageAmount
|
||
base.GameWithdrawAmount += value.GameWithdrawAmount
|
||
// 落地页访问
|
||
base.LandPageVisitCount += value.LandPageVisitCount
|
||
base.LandpageAndroidClick += value.LandpageAndroidClick
|
||
base.LandpageIosAppstoreClick += value.LandpageIosAppstoreClick
|
||
base.LandpageIosAthorClick += value.LandpageIosAthorClick
|
||
base.LandpageIosH5Click += value.LandpageIosH5Click
|
||
}
|
||
|
||
func CalculateChannelIncome(stat *ChannelStat) (int64, string) {
|
||
var income int64
|
||
var desc string
|
||
if stat.Settlement == SettlementCPA {
|
||
income = stat.ValidDirectCount * stat.CPAPrice
|
||
desc = fmt.Sprintf("CPA:%d * %.2f", stat.ValidDirectCount, float64(stat.CPAPrice)/float64(100))
|
||
} else if stat.Settlement == SettlementCPS {
|
||
income += (stat.ValidPayMoney * stat.CPSRate) / 100
|
||
desc = fmt.Sprintf("CPS:%.2f * %.2f", float64(stat.ValidPayMoney)/float64(100), float64(stat.CPSRate)/float64(100))
|
||
} else {
|
||
income = 0
|
||
desc = fmt.Sprintf("【%s】结算方式,需要自己计算结算金额", stat.Settlement)
|
||
}
|
||
return income, desc
|
||
}
|