Initial commit

This commit is contained in:
2026-05-20 16:13:58 +08:00
commit ceffbe382e
500 changed files with 157469 additions and 0 deletions
+810
View File
@@ -0,0 +1,810 @@
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
}