diff --git a/internal/model/dto/asset_dto.go b/internal/model/dto/asset_dto.go index 30d3aad..8a207d2 100644 --- a/internal/model/dto/asset_dto.go +++ b/internal/model/dto/asset_dto.go @@ -90,8 +90,8 @@ type AssetPackageResponse struct { 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)"` - ActivatedAt time.Time `json:"activated_at" description:"激活时间"` - ExpiresAt time.Time `json:"expires_at" 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(加油包时有值)"` Priority int `json:"priority" description:"优先级"` CreatedAt time.Time `json:"created_at" description:"创建时间"` diff --git a/internal/service/asset/service.go b/internal/service/asset/service.go index 0f3d680..773e3c0 100644 --- a/internal/service/asset/service.go +++ b/internal/service/asset/service.go @@ -6,6 +6,7 @@ package asset import ( "context" "sort" + "time" "github.com/break/junhong_cmp_fiber/internal/model" "github.com/break/junhong_cmp_fiber/internal/model/dto" @@ -396,8 +397,8 @@ func (s *Service) GetPackages(ctx context.Context, assetType string, id uint) ([ VirtualUsedMB: float64(u.DataUsageMB) / ratio, VirtualRemainMB: float64(u.DataLimitMB-u.DataUsageMB) / ratio, VirtualRatio: ratio, - ActivatedAt: u.ActivatedAt, - ExpiresAt: u.ExpiresAt, + ActivatedAt: nonZeroTimePtr(u.ActivatedAt), + ExpiresAt: nonZeroTimePtr(u.ExpiresAt), MasterUsageID: u.MasterUsageID, Priority: u.Priority, CreatedAt: u.CreatedAt, @@ -449,8 +450,8 @@ func (s *Service) GetCurrentPackage(ctx context.Context, assetType string, id ui VirtualUsedMB: float64(usage.DataUsageMB) / ratio, VirtualRemainMB: float64(usage.DataLimitMB-usage.DataUsageMB) / ratio, VirtualRatio: ratio, - ActivatedAt: usage.ActivatedAt, - ExpiresAt: usage.ExpiresAt, + ActivatedAt: nonZeroTimePtr(usage.ActivatedAt), + ExpiresAt: nonZeroTimePtr(usage.ExpiresAt), MasterUsageID: usage.MasterUsageID, Priority: usage.Priority, CreatedAt: usage.CreatedAt, @@ -470,6 +471,14 @@ func (s *Service) getDeviceProtectStatus(ctx context.Context, deviceID uint) str return "none" } +// nonZeroTimePtr 将非零时间转为指针,零值返回 nil(避免序列化出历史时区偏移 +08:05) +func nonZeroTimePtr(t time.Time) *time.Time { + if t.IsZero() { + return nil + } + return &t +} + // safeVirtualRatio 安全获取虚流量比例,避免除零 func safeVirtualRatio(ratio float64) float64 { if ratio <= 0 {