From ef8ec025bdef568f8781c778f65635345a078b08 Mon Sep 17 00:00:00 2001 From: huang Date: Fri, 10 Apr 2026 14:33:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B5=84=E4=BA=A7=E5=A5=97=E9=A4=90?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E=E6=98=AF=E5=90=A6=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E8=99=9A=E6=B5=81=E9=87=8F=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit current-package 和 packages 两个接口的响应中新增 enable_virtual_data 字段,表示该套餐是否启用虚流量 Co-Authored-By: Claude Sonnet 4.6 --- internal/model/dto/asset_dto.go | 3 +- internal/service/asset/service.go | 78 +++++++++++++++++-------------- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/internal/model/dto/asset_dto.go b/internal/model/dto/asset_dto.go index 9f8b688..8bec7b1 100644 --- a/internal/model/dto/asset_dto.go +++ b/internal/model/dto/asset_dto.go @@ -100,7 +100,8 @@ type AssetPackageResponse struct { DataUsageMB int64 `json:"data_usage_mb" description:"已用真流量(MB)"` VirtualUsedMB float64 `json:"virtual_used_mb" description:"已用虚流量(MB),按virtual_ratio换算"` VirtualRemainMB float64 `json:"virtual_remain_mb" description:"剩余虚流量(MB),按virtual_ratio换算"` - VirtualRatio float64 `json:"virtual_ratio" description:"虚流量比例(real/virtual)"` + VirtualRatio float64 `json:"virtual_ratio" description:"虚流量比例(real/virtual)"` + EnableVirtualData bool `json:"enable_virtual_data" description:"是否启用虚流量"` ActivatedAt *time.Time `json:"activated_at,omitempty" description:"激活时间(待生效套餐为空)"` ExpiresAt *time.Time `json:"expires_at,omitempty" description:"到期时间(待生效套餐为空)"` MasterUsageID *uint `json:"master_usage_id,omitempty" description:"主套餐ID(加油包时有值)"` diff --git a/internal/service/asset/service.go b/internal/service/asset/service.go index db1a2e0..c09e8e3 100644 --- a/internal/service/asset/service.go +++ b/internal/service/asset/service.go @@ -654,31 +654,34 @@ func (s *Service) GetPackages(ctx context.Context, assetType string, id uint, pa ratio := 1.0 pkgName := "" pkgType := "" + enableVirtualData := false if pkg != nil { ratio = safeVirtualRatio(pkg.VirtualRatio) pkgName = pkg.PackageName pkgType = pkg.PackageType + enableVirtualData = pkg.EnableVirtualData } item := &dto.AssetPackageResponse{ - PackageUsageID: u.ID, - PackageID: u.PackageID, - PackageName: pkgName, - PackageType: pkgType, - UsageType: u.UsageType, - Status: u.Status, - StatusName: packageStatusName(u.Status), - DataLimitMB: u.DataLimitMB, - VirtualLimitMB: int64(float64(u.DataLimitMB) / ratio), - DataUsageMB: u.DataUsageMB, - VirtualUsedMB: float64(u.DataUsageMB) / ratio, - VirtualRemainMB: float64(u.DataLimitMB-u.DataUsageMB) / ratio, - VirtualRatio: ratio, - ActivatedAt: nonZeroTimePtr(u.ActivatedAt), - ExpiresAt: nonZeroTimePtr(u.ExpiresAt), - MasterUsageID: u.MasterUsageID, - Priority: u.Priority, - CreatedAt: u.CreatedAt, + PackageUsageID: u.ID, + PackageID: u.PackageID, + PackageName: pkgName, + PackageType: pkgType, + UsageType: u.UsageType, + Status: u.Status, + StatusName: packageStatusName(u.Status), + DataLimitMB: u.DataLimitMB, + VirtualLimitMB: int64(float64(u.DataLimitMB) / ratio), + DataUsageMB: u.DataUsageMB, + VirtualUsedMB: float64(u.DataUsageMB) / ratio, + VirtualRemainMB: float64(u.DataLimitMB-u.DataUsageMB) / ratio, + VirtualRatio: ratio, + EnableVirtualData: enableVirtualData, + ActivatedAt: nonZeroTimePtr(u.ActivatedAt), + ExpiresAt: nonZeroTimePtr(u.ExpiresAt), + MasterUsageID: u.MasterUsageID, + Priority: u.Priority, + CreatedAt: u.CreatedAt, } all = append(all, item) } @@ -728,31 +731,34 @@ func (s *Service) GetCurrentPackage(ctx context.Context, assetType string, id ui ratio := 1.0 pkgName := "" pkgType := "" + enableVirtualData := false if pkgErr == nil && pkg != nil { ratio = safeVirtualRatio(pkg.VirtualRatio) pkgName = pkg.PackageName pkgType = pkg.PackageType + enableVirtualData = pkg.EnableVirtualData } return &dto.AssetPackageResponse{ - PackageUsageID: usage.ID, - PackageID: usage.PackageID, - PackageName: pkgName, - PackageType: pkgType, - UsageType: usage.UsageType, - Status: usage.Status, - StatusName: packageStatusName(usage.Status), - DataLimitMB: usage.DataLimitMB, - VirtualLimitMB: int64(float64(usage.DataLimitMB) / ratio), - DataUsageMB: usage.DataUsageMB, - VirtualUsedMB: float64(usage.DataUsageMB) / ratio, - VirtualRemainMB: float64(usage.DataLimitMB-usage.DataUsageMB) / ratio, - VirtualRatio: ratio, - ActivatedAt: nonZeroTimePtr(usage.ActivatedAt), - ExpiresAt: nonZeroTimePtr(usage.ExpiresAt), - MasterUsageID: usage.MasterUsageID, - Priority: usage.Priority, - CreatedAt: usage.CreatedAt, + PackageUsageID: usage.ID, + PackageID: usage.PackageID, + PackageName: pkgName, + PackageType: pkgType, + UsageType: usage.UsageType, + Status: usage.Status, + StatusName: packageStatusName(usage.Status), + DataLimitMB: usage.DataLimitMB, + VirtualLimitMB: int64(float64(usage.DataLimitMB) / ratio), + DataUsageMB: usage.DataUsageMB, + VirtualUsedMB: float64(usage.DataUsageMB) / ratio, + VirtualRemainMB: float64(usage.DataLimitMB-usage.DataUsageMB) / ratio, + VirtualRatio: ratio, + EnableVirtualData: enableVirtualData, + ActivatedAt: nonZeroTimePtr(usage.ActivatedAt), + ExpiresAt: nonZeroTimePtr(usage.ExpiresAt), + MasterUsageID: usage.MasterUsageID, + Priority: usage.Priority, + CreatedAt: usage.CreatedAt, }, nil }