// Package job 实现异步任务执行系统:并发拉取 + 批量写入 + 进度上报。 // // 核心设计: // - Manager 管理任务注册表和全局限速器,允许多任务并发 // - Runner 是单任务执行器:N worker 并发拉取,单 collector 串行写 SQLite // - Redis 存实时进度,SQLite 存持久化任务记录 package job import ( "context" "stock-analysis/internal/cache" "stock-analysis/internal/model" ) // Store 定义 job 运行期需要的存储能力(K线 + 任务 CRUD)。 // *sqlite.Store 实现此接口(编译期断言)。 type Store interface { // K线批量写入(单事务,collector 调用) SaveKlinesBatch(ctx context.Context, batch map[string][]model.Kline) error // 返回所有已入库 code(全量断点续跑跳过判断) ListCodes(ctx context.Context) ([]string, error) // 一次性返回 code -> 最后K线日期 映射(增量起点预加载) LastKlineDates(ctx context.Context) (map[string]string, error) // 任务持久化 SaveTask(ctx context.Context, t *cache.Task) error UpdateTaskProgress(ctx context.Context, id string, total, done, success, failed int, failedCodes []string) error FinishTask(ctx context.Context, id string, status cache.TaskStatus, errMsg, finishedAt string) error GetTask(ctx context.Context, id string) (*cache.Task, error) ListTasks(ctx context.Context, limit int) ([]*cache.Task, error) } // BondLister 全量转债列表获取接口(eastmoney.Client 实现)。 type BondLister interface { FetchAllBondCodes(ctx context.Context) ([]model.ConvertibleBond, error) }