From 3b4afd287e36d8908a35696f4332a82473b485ec Mon Sep 17 00:00:00 2001 From: break Date: Wed, 9 Sep 2026 17:41:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8D=A2=E8=B4=A7=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E5=90=8E=20after=5Forder=20=E5=AE=9E=E5=90=8D?= =?UTF-8?q?=E9=97=A8=E6=A7=9B=E8=AF=AF=E5=88=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 换货迁移只迁移套餐权益不迁移订单,已支付订单仍挂在旧资产上, 导致新资产 HasValidRechargeOrPaidOrder 查不到支付事实,返回 1189。 现增加套餐权益兜底:当前世代存在未退款套餐权益且其关联订单已支付, 即视为满足充值/购买条件。 --- internal/service/asset/service.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/internal/service/asset/service.go b/internal/service/asset/service.go index 3de6ec8..d4079a9 100644 --- a/internal/service/asset/service.go +++ b/internal/service/asset/service.go @@ -1387,9 +1387,34 @@ func (s *Service) HasValidRechargeOrPaidOrder(ctx context.Context, assetType str } } + if assetType == "card" || assetType == "device" { + return s.hasPaidPackageUsage(ctx, assetType, assetID, generation) + } + return false, nil } +// hasPaidPackageUsage 检查资产在当前世代是否存在已支付订单购买且未退款的套餐权益 +// 换货迁移只迁移套餐权益不迁移订单,订单仍挂在旧资产上,需要按套餐权益兜底判定 +func (s *Service) hasPaidPackageUsage(ctx context.Context, assetType string, assetID uint, generation int) (bool, error) { + assetColumn := "tb_package_usage.iot_card_id" + if assetType == "device" { + assetColumn = "tb_package_usage.device_id" + } + + var count int64 + err := s.db.WithContext(ctx).Model(&model.PackageUsage{}). + Joins("JOIN tb_order ON tb_order.id = tb_package_usage.order_id AND tb_order.deleted_at IS NULL"). + Where(assetColumn+" = ? AND tb_package_usage.generation = ?", assetID, generation). + Where("tb_package_usage.refund_id IS NULL"). + Where("tb_order.payment_status = ?", model.PaymentStatusPaid). + Count(&count).Error + if err != nil { + return false, errors.Wrap(errors.CodeDatabaseError, err, "查询套餐权益订单失败") + } + return count > 0, nil +} + // packageStatusName 套餐状态码转中文名称 func packageStatusName(status int) string { switch status {