// Package job 自动任务模块控制器(绑定 admin 受权限保护组)。 package job import ( "context" jobv1 "service.xpcool.com/api/job" "service.xpcool.com/internal/model/dto" "service.xpcool.com/internal/service/job" ) // Controller 实现自动任务端点。 type Controller struct{} // New 创建自动任务控制器。 func New() *Controller { return &Controller{} } // List 自动任务列表。 func (c *Controller) List(ctx context.Context, req *jobv1.AutoJobListReq) (res *jobv1.AutoJobListRes, err error) { list, err := job.Job().List(ctx) if err != nil { return nil, err } out := make([]*jobv1.JobItem, 0, len(list)) for i := range list { v := &list[i] out = append(out, &jobv1.JobItem{ Id: v.Id, Name: v.Name, Code: v.Code, JobType: v.JobType, CronExpr: v.CronExpr, Enabled: v.Enabled, Remark: v.Remark, LastRunAt: v.LastRunAt, LastResult: v.LastResult, LastError: v.LastError, }) } return &jobv1.AutoJobListRes{List: out}, nil } // Save 保存自动任务(cron/启用/备注)。 func (c *Controller) Save(ctx context.Context, req *jobv1.AutoJobSaveReq) (res *jobv1.AutoJobSaveRes, err error) { if err = job.Job().Save(ctx, dto.JobInput{Id: req.Id, CronExpr: req.CronExpr, Enabled: req.Enabled, Remark: req.Remark}); err != nil { return nil, err } return &jobv1.AutoJobSaveRes{}, nil } // Trigger 手动触发任务。 func (c *Controller) Trigger(ctx context.Context, req *jobv1.AutoJobTriggerReq) (res *jobv1.AutoJobTriggerRes, err error) { summary, ok, err := job.Job().Trigger(ctx, req.Id) if err != nil { return nil, err } return &jobv1.AutoJobTriggerRes{Summary: summary, Ok: ok}, nil } // LogList 任务运行日志分页。 func (c *Controller) LogList(ctx context.Context, req *jobv1.AutoJobLogListReq) (res *jobv1.AutoJobLogListRes, err error) { list, total, err := job.Job().LogList(ctx, dto.JobLogFilter{Page: req.Page, Size: req.Size, JobId: req.JobId}) if err != nil { return nil, err } out := make([]*jobv1.JobLogItem, 0, len(list)) for i := range list { v := &list[i] out = append(out, &jobv1.JobLogItem{ Id: v.Id, JobId: v.JobId, JobName: v.JobName, RunAt: v.RunAt, Result: v.Result, Error: v.Error, Summary: v.Summary, DurationMs: v.DurationMs, }) } return &jobv1.AutoJobLogListRes{List: out, Total: total}, nil }