From 5dc9f034c840ab34b7daaa2f8f9a813c986657fc Mon Sep 17 00:00:00 2001 From: Zuncle <34310384@qq.com> Date: Tue, 14 Apr 2026 23:07:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(dashboard):=20=E4=BF=AE=E6=AD=A3=E6=B4=BB?= =?UTF-8?q?=E5=8A=A8=E5=A5=96=E5=93=81=E5=88=86=E6=9E=90=E6=88=90=E6=9C=AC?= =?UTF-8?q?=E5=8F=A3=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 活动奖品分析接口统一使用 products.cost_price 计算 prizeValue、cost 和 totalCost,避免误用售价导致成本统计偏差。 --- internal/api/admin/dashboard_admin.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/api/admin/dashboard_admin.go b/internal/api/admin/dashboard_admin.go index db73610..7f5f6e5 100755 --- a/internal/api/admin/dashboard_admin.go +++ b/internal/api/admin/dashboard_admin.go @@ -1237,13 +1237,13 @@ func (h *handler) DashboardActivityPrizeAnalysis() core.HandlerFunc { issueTotalWeights[r.IssueID] += int64(r.Weight) } - // 4. 批量查询商品价格和名称 (Product Price and Name) - priceMap := make(map[int64]int64) + // 4. 批量查询商品成本价和名称 (Product Cost and Name) + productCostMap := make(map[int64]int64) productNameMap := make(map[int64]string) if len(productIDs) > 0 { products, _ := h.readDB.Products.WithContext(ctx.RequestContext()).ReadDB().Where(h.readDB.Products.ID.In(productIDs...)).Find() for _, p := range products { - priceMap[p.ID] = p.Price + productCostMap[p.ID] = p.CostPrice productNameMap[p.ID] = p.Name } } @@ -1306,7 +1306,7 @@ func (h *handler) DashboardActivityPrizeAnalysis() core.HandlerFunc { for i, r := range rsAll { dc := drawCounts[r.IssueID] // 该期的总抽奖数 wc := winCounts[r.ID] // 该奖品的中奖数 - price := priceMap[r.ProductID] + cost := productCostMap[r.ProductID] issued := r.OriginalQty - r.Quantity @@ -1332,7 +1332,7 @@ func (h *handler) DashboardActivityPrizeAnalysis() core.HandlerFunc { } return "虚拟/道具" }(), - PrizeValue: price, + PrizeValue: cost, TotalQuantity: r.OriginalQty, IssuedQuantity: issued, DrawCount: dc, @@ -1340,10 +1340,10 @@ func (h *handler) DashboardActivityPrizeAnalysis() core.HandlerFunc { WinRate: actual, Probability: prob, ActualProbability: actual, - Cost: price, + Cost: cost, } - totalCost += price * wc + totalCost += cost * wc winRates = append(winRates, actual) }