修复子渠道汇总到父渠道时未区分 appId 导致数据多加
ChannelStat 按 (channel, sumDate, appId) 三维存储,但子渠道累加到父渠道的
匹配条件只比了 ParentChannel 和 SumDate,漏了 AppId。
当父渠道在多个 app 下都有记录时(如 appId=[2,3,4] 查同一渠道码),一个子渠道
的数据会被同时累加进该 (channel, sumDate) 下所有 app 的父渠道行,选几个 app
就多加几倍。settlement 的三处子查询本身也没有 appId 约束,父列表虽锁定单个
appId,子列表却跨 app,同样会把其他 app 的子渠道数据算进结算金额。
5 处匹配条件统一补上 child.AppId == parent.AppId:
- stat.go:162 SearchChannelStat (列表接口,多值 appId)
- settlement.go:200 ChannelSettlementCalc (结算计算,影响金额)
- settlement.go:327 SearchChannelSettlementStat2 (原本父子共用同一 filter
而侥幸正确,补上以免后续改动破坏该前提)
- settlement.go:857 AddSettlementInfo2 (影响金额)
- settlement.go:1138 DetailSettlementInfo
本次只改匹配条件。settlement 三处 childFilter 缺少 appId 约束的冗余查询,
以及 SearchChannelStat 在无 start/end 时 resp.Total 硬编码为 1000000、
withChild 累加被 canSum 跳过的问题,均未处理。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -197,7 +197,7 @@ func ChannelSettlementCalc(ctx context.Context, req *proto.SettlementCalcReq) (*
|
||||
for _, parent := range ParentList {
|
||||
parent.CorrectValidData()
|
||||
for _, child := range ChildList {
|
||||
if child.ParentChannel == parent.Channel && child.SumDate.Equal(parent.SumDate) {
|
||||
if child.ParentChannel == parent.Channel && child.AppId == parent.AppId && child.SumDate.Equal(parent.SumDate) {
|
||||
channelmod.ChannelStatSummation(parent, child.CorrectValidData()) // 把子渠道的数据累加到父渠道上面
|
||||
}
|
||||
}
|
||||
@@ -324,7 +324,7 @@ func SearchChannelSettlementStat2(ctx context.Context, req *proto.ChannelStatSet
|
||||
for _, parent := range ParentsChannelStatList {
|
||||
parent.CorrectValidData()
|
||||
for _, child := range ChildChannelStatList {
|
||||
if child.ParentChannel == parent.Channel && child.SumDate.Equal(parent.SumDate) {
|
||||
if child.ParentChannel == parent.Channel && child.AppId == parent.AppId && child.SumDate.Equal(parent.SumDate) {
|
||||
channelmod.ChannelStatSummation(parent, child) // 把子渠道的数据累加到父渠道上面
|
||||
}
|
||||
}
|
||||
@@ -854,7 +854,7 @@ func AddSettlementInfo2(ctx context.Context, req *proto.SettlementInfoAdd2, accT
|
||||
for _, parent := range ParentList {
|
||||
parent.CorrectValidData()
|
||||
for _, child := range ChildList {
|
||||
if child.ParentChannel == parent.Channel && child.SumDate.Equal(parent.SumDate) {
|
||||
if child.ParentChannel == parent.Channel && child.AppId == parent.AppId && child.SumDate.Equal(parent.SumDate) {
|
||||
channelmod.ChannelStatSummation(parent, child) // 把子渠道的数据累加到父渠道上面
|
||||
}
|
||||
}
|
||||
@@ -1138,7 +1138,7 @@ func DetailSettlementInfo(ctx context.Context, req proto.SettlementInfoDetail) (
|
||||
// 把子级记录汇总到一级记录上面
|
||||
for _, parent := range ParentsChannelStatList {
|
||||
for _, child := range ChildsChannelStatList {
|
||||
if child.ParentChannel == parent.Channel && child.SumDate.Equal(parent.SumDate) {
|
||||
if child.ParentChannel == parent.Channel && child.AppId == parent.AppId && child.SumDate.Equal(parent.SumDate) {
|
||||
channelmod.ChannelStatSummation(parent, child) // 把子渠道的数据累加到父渠道上面
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,7 +159,7 @@ func SearchChannelStat(ctx context.Context, req *proto.ChannelStatSearch) (*prot
|
||||
channelmod.ChannelStatSummation(&resp.TotalInfo, item)
|
||||
if req.WithChild != nil && *req.WithChild {
|
||||
for _, v := range ChannelStatList {
|
||||
if item.ParentChannel == v.Channel && v.SumDate.Equal(item.SumDate) {
|
||||
if item.ParentChannel == v.Channel && item.AppId == v.AppId && v.SumDate.Equal(item.SumDate) {
|
||||
channelmod.ChannelStatSummation(v, item)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user