tasks.md 2.6 KB

定时任务一次性与时区 Implementation Plan

status: complete scope: V3 only

进度

Task 状态 完成度
Task 1 调度类型和时区迁移 completed 3/3
Task 2 时间领域校验 completed 1/1
Task 3 Quartz Trigger 扩展 completed 3/3
Task 4 一次性完成语义 completed 3/3
Task 5 全屏任务编辑工作台 completed 3/3
Task 6 验证 completed 4/4

Task 1: 调度类型和时区迁移

  • 涉及文件:
    • Create: forge-server/db/migration/V1.0.42__add_job_once_schedule_and_timezone.sql
    • Modify: entity/SysJobConfig.java
    • Test: migration/JobOnceTimezoneMigrationContractTest.java
  • 增加 schedule_type、fire_once_time、timezone 并调整 cron_expression 可空。
  • 回填存量 CRON 和实际默认时区。
  • 增加状态字典 2=已结束。

Task 2: 时间领域校验

  • 涉及文件:
    • Create: constant/JobScheduleType.java
    • Create/Modify: service/JobScheduleDomainService.java
    • Modify: support/JobConfigValidator.java
  • 关键签名:
    • ZoneId requireZoneId(String timezone)
    • Instant resolveOnceInstant(LocalDateTime fireOnceTime, ZoneId zoneId)
  • 测试互斥字段、过去时间、非法时区和 DST 边界。

Task 3: Quartz Trigger 扩展

  • 涉及文件:
    • Modify: scheduler/JobScheduler.java
    • Test: scheduler/JobSchedulerTriggerTest.java
  • CRON 构建带时区 CronTrigger。
  • ONCE 构建 SimpleTrigger。
  • 运行态快照返回 nextFireTime。

Task 4: 一次性完成语义

  • 涉及文件:
    • Modify: scheduler/QuartzJobExecutor.java
    • Modify: mapper/SysJobConfigMapper.java、SysJobConfigMapper.xml
  • 只在计划 ONCE 触发结束后标记 COMPLETED。
  • 成功和失败均结束,手动触发不结束。
  • 测试重启恢复不会复活已结束任务。

Task 5: 全屏任务编辑工作台

  • 涉及文件:
    • Modify: forge-admin-ui/src/views/system/job-config/components/JobConfigWorkbench.vue
    • Modify: forge-admin-ui/src/views/system/job-config/components/JobScheduleSection.vue
    • Modify: forge-admin-ui/src/views/system/job-config/components/JobSchedulePreview.vue
    • Modify: forge-admin-ui/src/views/system/job-config.vue、job-config-form.js
  • 根据 CRON/ONCE 显示互斥配置。
  • 增加时区选择和下一次触发预览。
  • 禁止过去的一次性时间提交。

Task 6: 验证

  • 创建 test-spec.md 和 execution-log.md。
  • 运行后端时间/Quartz 测试和 admin 聚合构建。
  • 运行前端单元测试、Lint 和构建。
  • UI 自动化验收由用户自行执行,本阶段不启动浏览器验证。