From 4cdca06289a04754a7dce048ffbecad753f7f825 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 2 Oct 2026 09:38:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=90=E6=B8=A0=E9=81=93?= =?UTF-8?q?=E6=B1=87=E6=80=BB=E5=88=B0=E7=88=B6=E6=B8=A0=E9=81=93=E6=97=B6?= =?UTF-8?q?=E6=9C=AA=E5=8C=BA=E5=88=86=20appId=20=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=9A=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- service/channelSer/settlement.go | 8 ++++---- service/channelSer/stat.go | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/service/channelSer/settlement.go b/service/channelSer/settlement.go index 9b98240..0cb17e6 100644 --- a/service/channelSer/settlement.go +++ b/service/channelSer/settlement.go @@ -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) // 把子渠道的数据累加到父渠道上面 } } diff --git a/service/channelSer/stat.go b/service/channelSer/stat.go index 3fa2143..d9894ab 100644 --- a/service/channelSer/stat.go +++ b/service/channelSer/stat.go @@ -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) } }