package dbsync import ( "fmt" "time" ) // DefaultManualReconcileInterval 公司管理员手动对账最小间隔。 const DefaultManualReconcileInterval = 5 * time.Minute // CanReconcile 限流:距上次对账不足 minInterval 则拒绝。 func CanReconcile(ch *Channel, minInterval time.Duration) (bool, time.Duration) { if ch == nil || ch.LastReconcileAt == nil || ch.LastReconcileAt.IsZero() { return true, 0 } if minInterval <= 0 { minInterval = DefaultManualReconcileInterval } elapsed := time.Since(ch.LastReconcileAt.UTC()) if elapsed >= minInterval { return true, 0 } return false, minInterval - elapsed } // ReconcileTooSoonError 供 handler 返回 429。 func ReconcileTooSoonError(wait time.Duration) error { sec := int(wait.Seconds()) + 1 return fmt.Errorf("对账过于频繁,请 %d 秒后再试", sec) }