From fc6af43baa57ea23e33d345f60fc08b8c946f8be Mon Sep 17 00:00:00 2001 From: break Date: Wed, 1 Jul 2026 12:06:19 +0900 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E6=BA=A2=E5=87=BA?= =?UTF-8?q?=E6=B5=81=E9=87=8F=E5=BA=94=E4=BC=98=E5=85=88=E8=AE=B0=E5=88=B0?= =?UTF-8?q?=E4=B8=BB=E5=A5=97=E9=A4=90=E8=80=8C=E9=9D=9E=E5=8A=A0=E6=B2=B9?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 主套餐和加油包同时 Depleted 时,recordOverflowToDepletedPackage 原先取 id 最大的套餐,可能取到加油包,语义不对。 改为优先查 master_usage_id IS NULL(主套餐),找不到时 再回退取任意 Depleted 套餐。 --- internal/service/package/usage_service.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/internal/service/package/usage_service.go b/internal/service/package/usage_service.go index 323d7a2..a434ca3 100644 --- a/internal/service/package/usage_service.go +++ b/internal/service/package/usage_service.go @@ -470,9 +470,14 @@ func (s *UsageService) recordOverflowToDepletedPackage(ctx context.Context, tx * return nil } + // 优先选主套餐(master_usage_id IS NULL),主套餐不存在时再退而求其次取加油包 var pkg model.PackageUsage - if err := query.Order("id DESC").First(&pkg).Error; err != nil { - // 找不到 Depleted 套餐,静默忽略 + err := query.Where("master_usage_id IS NULL").Order("id DESC").First(&pkg).Error + if err == gorm.ErrRecordNotFound { + err = query.Order("id DESC").First(&pkg).Error + } + if err != nil { + // 找不到任何 Depleted 套餐,静默忽略 return nil }