package task import ( "context" "time" "github.com/zeromicro/go-zero/core/logx" plantModel "sundynix-micro-go/app/plant/model" "sundynix-micro-go/app/plant/rpc/internal/svc" ) // ExpireCareTaskJob 每日检查过期养护任务(status=1 且 due_date < 今天 → 标记为 status=3) type ExpireCareTaskJob struct { svcCtx *svc.ServiceContext } func NewExpireCareTaskJob(svcCtx *svc.ServiceContext) *ExpireCareTaskJob { return &ExpireCareTaskJob{svcCtx: svcCtx} } func (j *ExpireCareTaskJob) Run() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) defer cancel() today := time.Now().Truncate(24 * time.Hour) logx.WithContext(ctx).Infof("[CRON] 开始执行养护任务过期检查, 基准时间: %v", today) res := j.svcCtx.DB.WithContext(ctx). Model(&plantModel.CareTask{}). Where("status = 1 AND due_date < ?", today). Update("status", 3) if res.Error != nil { logx.WithContext(ctx).Errorf("[CRON] 养护任务过期检查失败: %v", res.Error) return } logx.WithContext(ctx).Infof("[CRON] 养护任务过期检查完成,共标记 %d 条任务为过期", res.RowsAffected) }