From f1bfc78d6681db6964005b8a8d6bb3d934777220 Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Mon, 20 Apr 2026 22:36:16 -0700 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BB=9F=E4=B8=80=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=9F=A5=E8=AF=A2=E6=96=B9=E5=BC=8F=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20DATE=5FFORMAT=20=E6=9B=BF=E4=BB=A3=20time.?= =?UTF-8?q?Time=20=E8=BE=B9=E7=95=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QueryDateOrders 和 QueryDateUserCounts 改用 DATE_FORMAT 字符串比较, 与 QueryDailyOrdersList 的 GROUP BY 逻辑一致,避免 go-sql-driver 时区转换导致金额不一致。 Co-Authored-By: claude-flow --- internal/model/order/model.go | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/internal/model/order/model.go b/internal/model/order/model.go index 51141d3..e175b19 100644 --- a/internal/model/order/model.go +++ b/internal/model/order/model.go @@ -166,12 +166,11 @@ func (m *customOrderModel) QueryMonthlyOrders(ctx context.Context, date time.Tim // QueryDateOrders Query orders by date func (m *customOrderModel) QueryDateOrders(ctx context.Context, date time.Time) (OrdersTotal, error) { - start := time.Date(date.Year(), date.Month(), date.Day(), 0, 0, 0, 0, date.Location()) - end := start.AddDate(0, 0, 1).Add(-time.Nanosecond) + dateStr := date.Format("2006-01-02") var result OrdersTotal err := m.QueryNoCacheCtx(ctx, &result, func(conn *gorm.DB, v interface{}) error { return conn.Model(&Order{}). - Where("status IN ? AND created_at BETWEEN ? AND ? AND method != ?", []int64{2, 5}, start, end, "balance"). + Where("status IN ? AND DATE_FORMAT(created_at, '%Y-%m-%d') = ? AND method != ?", []int64{2, 5}, dateStr, "balance"). Select( "SUM(amount) as amount_total, " + "SUM(CASE WHEN is_new = 1 THEN amount ELSE 0 END) as new_order_amount, " + @@ -222,10 +221,7 @@ func (m *customOrderModel) QueryMonthlyUserCounts(ctx context.Context, date time return counts.NewUsers, counts.RenewalUsers, err } func (m *customOrderModel) QueryDateUserCounts(ctx context.Context, date time.Time) (int64, int64, error) { - // 当天 00:00:00 - start := time.Date(date.Year(), date.Month(), date.Day(), 0, 0, 0, 0, date.Location()) - // 下一天 00:00:00 - nextDay := start.Add(24 * time.Hour) + dateStr := date.Format("2006-01-02") var counts UserCounts @@ -235,8 +231,8 @@ func (m *customOrderModel) QueryDateUserCounts(ctx context.Context, date time.Ti COUNT(DISTINCT CASE WHEN is_new = 1 THEN user_id END) AS new_users, COUNT(DISTINCT CASE WHEN is_new = 0 THEN user_id END) AS renewal_users `). - Where("status IN ? AND created_at >= ? AND created_at < ? AND method != ?", - []int64{2, 5}, start, nextDay, "balance"). + Where("status IN ? AND DATE_FORMAT(created_at, '%Y-%m-%d') = ? AND method != ?", + []int64{2, 5}, dateStr, "balance"). Scan(&counts).Error })