39 lines
1.1 KiB
Go
39 lines
1.1 KiB
Go
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)
|
||
}
|