diff --git a/cmd/dashboard/controller/domain.go b/cmd/dashboard/controller/domain.go index 3216a28..8e90ce7 100644 --- a/cmd/dashboard/controller/domain.go +++ b/cmd/dashboard/controller/domain.go @@ -140,5 +140,8 @@ func SyncDomainWHOIS(c *gin.Context) (any, error) { func SyncAllDomains(c *gin.Context) (any, error) { singleton.SyncAllDomains() + // 手动触发到期检查,方便调试 + singleton.CronJobForDomainStatus() + singleton.CronJobForServerStatus() return nil, nil } diff --git a/service/singleton/domain.go b/service/singleton/domain.go index ea5aa3b..49e398a 100644 --- a/service/singleton/domain.go +++ b/service/singleton/domain.go @@ -399,7 +399,16 @@ func CronJobForDomainStatus() { continue } - endDate, err := time.Parse(time.RFC3339, billing.EndDate) + // 处理类似 2026-10-10 甚至其他不带时区的格式 + endDateStr := billing.EndDate + var endDate time.Time + var err error + if len(endDateStr) == 10 { // YYYY-MM-DD + endDate, err = time.Parse("2006-01-02", endDateStr) + } else { + endDate, err = time.Parse(time.RFC3339, endDateStr) + } + if err != nil { log.Printf("NEZHA>> Cron::Error parsing end date for domain %s: %v", d.Domain, err) continue @@ -466,21 +475,30 @@ func CronJobForServerStatus() { for i := range servers { s := servers[i] - if s.BillingData == nil { + var pn struct { + BillingDataMod struct { + EndDate string `json:"endDate"` + } `json:"billingDataMod"` + } + if s.PublicNote != "" { + _ = json.Unmarshal([]byte(s.PublicNote), &pn) + } + if pn.BillingDataMod.EndDate == "" { continue } - var billing model.BillingDataMod - if err := json.Unmarshal(s.BillingData, &billing); err != nil { - continue + // 处理类似 2026-10-10 甚至其他不带时区的格式 + endDateStr := pn.BillingDataMod.EndDate + var endDate time.Time + var err error + if len(endDateStr) == 10 { // YYYY-MM-DD + endDate, err = time.Parse("2006-01-02", endDateStr) + } else { + endDate, err = time.Parse(time.RFC3339, endDateStr) } - if billing.EndDate == "" { - continue - } - - endDate, err := time.Parse(time.RFC3339, billing.EndDate) if err != nil { + log.Printf("NEZHA>> Cron::Error parsing end date for VPS %s: %v", s.Name, err) continue }