From 45ea70760bf34f52ceb60dd939590072d5fb8cb9 Mon Sep 17 00:00:00 2001 From: Zuncle <34310384@qq.com> Date: Sat, 25 Apr 2026 01:52:19 +0800 Subject: [PATCH] =?UTF-8?q?fix(dashboard):=20=E4=BF=AE=E5=A4=8D=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=8A=A8=E9=94=80=E6=8E=92=E8=A1=8C=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=E7=AD=9B=E9=80=89=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复产品动销排行接口在时间筛选上的两个问题: 1. parseRange 未处理 all,导致前端传入 all 时实际回落到默认分支,查询结果等同最近 7 天。 2. 产品动销排行原先按 activity_draw_logs.created_at 过滤时间,但销量/营收统计口径基于已支付订单,导致不同时间范围下结果失真,自定义区间与全部区间表现异常。 本次调整内容: - 为 parseRange 增加 all 分支,返回从较早时间到当前时间的全量区间。 - OperationsProductPerformance 接口改为接收 start/end 参数,支持前端自定义时间范围透传。 - 将产品动销排行的时间过滤从 activity_draw_logs.created_at 改为 COALESCE(orders.paid_at, orders.created_at),并显式限定 orders.status = 2,使筛选口径与销量/营收统计保持一致。 修复后,全部、7天、30天和自定义时间范围将按支付时间维度返回更符合业务语义的产品动销排行结果。 --- internal/api/admin/dashboard_admin.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/internal/api/admin/dashboard_admin.go b/internal/api/admin/dashboard_admin.go index 4ec72d8..62fc2ed 100755 --- a/internal/api/admin/dashboard_admin.go +++ b/internal/api/admin/dashboard_admin.go @@ -736,6 +736,10 @@ func parseRange(rangeType, startS, endS string) (time.Time, time.Time) { e := now s := e.Add(-30 * 24 * time.Hour) return s, e + case "all": + e := now + s := time.Date(2000, 1, 1, 0, 0, 0, 0, now.Location()) + return s, e case "custom": if startS != "" && endS != "" { if st, err := time.Parse("2006-01-02", startS); err == nil { @@ -1854,7 +1858,7 @@ type productPerformanceItem struct { func (h *handler) OperationsProductPerformance() core.HandlerFunc { return func(ctx core.Context) { - s, e := parseRange(ctx.Request().URL.Query().Get("rangeType"), "", "") + s, e := parseRange(ctx.Request().URL.Query().Get("rangeType"), ctx.Request().URL.Query().Get("start"), ctx.Request().URL.Query().Get("end")) db := h.repo.GetDbR().WithContext(ctx.RequestContext()) type performanceRow struct { @@ -1898,8 +1902,9 @@ func (h *handler) OperationsProductPerformance() core.HandlerFunc { Joins("LEFT JOIN orders ON orders.id = activity_draw_logs.order_id"). Joins("LEFT JOIN user_item_cards ON user_item_cards.id = orders.item_card_id"). Joins("LEFT JOIN system_item_cards ON system_item_cards.id = user_item_cards.card_id"). - Where("activity_draw_logs.created_at >= ?", s). - Where("activity_draw_logs.created_at <= ?", e). + Where("orders.status = ?", 2). + Where("COALESCE(orders.paid_at, orders.created_at) >= ?", s). + Where("COALESCE(orders.paid_at, orders.created_at) <= ?", e). Group("activity_issues.activity_id"). Order("sales_count DESC"). Limit(10).