package server import ( "context" "fmt" "github.com/go-kratos/kratos/v2/log" "github.com/go-kratos/kratos/v2/transport" "github.com/robfig/cron" "voucher/internal/conf" "voucher/internal/service" ) var _ transport.Server = (*CronServer)(nil) type CronServer struct { conf *conf.Bootstrap cron *cron.Cron VoucherService *service.VoucherService } func NewCronServer( conf *conf.Bootstrap, cron *cron.Cron, VoucherService *service.VoucherService, ) *CronServer { return &CronServer{ conf: conf, cron: cron, VoucherService: VoucherService, } } // Start . // 每五秒: */5 * * * * ? // 每隔1分钟执行一次:"0 */1 * * * ?" // 每天23点执行一次:"0 0 23 * * ?" // 每天凌晨1点执行一次:"0 0 1 * * ?" // 每月1号凌晨1点执行一次:"0 0 1 1 * ?" // 在26分、29分、33分执行一次:"0 26,29,33 * * * ?" // 每天的0点、13点、18点、21点都执行一次:"0 0 0,13,18,21 * * ?" func (cs *CronServer) Start(ctx context.Context) error { if !cs.conf.Cron.IsOpen { fmt.Printf("cron 未开启...") return nil } if err := cs.VoucherService.CronOrderNotice(ctx); err != nil { log.Error("cron order notice Start err: %v", err) return err } if err := cs.VoucherService.CronWarningBudget(ctx); err != nil { log.Error("cron warning budget Start err: %v", err) return err } cs.cron.Start() return nil } func (cs *CronServer) Stop(_ context.Context) error { if !cs.conf.Cron.IsOpen { return nil } fmt.Printf("cron 关闭中...") cs.cron.Stop() return nil }