根据需求"定时轮灌的模式A和模式B是可以同时存在的,也可以多条",对系统进行了全面改造,实现了以下功能:
wfauto_v2_task_schedule_ruleCREATE TABLE `wfauto_v2_task_schedule_rule` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`task_id` BIGINT NOT NULL,
`rule_name` VARCHAR(100),
`schedule_type` VARCHAR(20) NOT NULL,
`cron_expression` VARCHAR(100),
`start_time` DATETIME,
`interval_days` INT,
`total_times` INT,
`executed_count` INT DEFAULT 0,
`enabled` TINYINT(1) DEFAULT 1,
`status` VARCHAR(20) DEFAULT 'ACTIVE',
`quartz_job_name` VARCHAR(100),
`quartz_trigger_name` VARCHAR(100),
-- 其他字段...
PRIMARY KEY (`id`),
KEY `idx_task_id` (`task_id`)
);
wfauto_v2_irrigation_task删除了以下字段:
schedule_typecron_expressionstart_timeinterval_daystotal_timesexecuted_countreachedExecutionLimit(), incrementExecutedCount())isCronMode(), isSimpleMode(), reachedExecutionLimit(), isActive()generateJobName(), generateTriggerName(), fillQuartzNames()TaskScheduleRuleMapper.java - 定时规则数据访问接口TaskScheduleRuleRepository.java - 定时规则仓储接口TaskScheduleRuleRepositoryImpl.java - 定时规则仓储实现修改前:
private String scheduleType;
private String cronExpression;
private Integer intervalDays;
private Integer totalTimes;
修改后:
private List<ScheduleRuleDTO> scheduleRules;
public static class ScheduleRuleDTO {
private String ruleName;
private String scheduleType;
private String cronExpression;
private LocalDateTime startTime;
private Integer intervalDays;
private Integer totalTimes;
private Boolean enabled;
}
PARAM_RULE_ID 参数executeInternal() 方法,支持 ruleId 参数taskTriggerService.scheduledTrigger(taskId, ruleId)新增方法:
scheduleTaskRule(IrrigationTask, TaskScheduleRule) - 为单个规则创建调度scheduleAllTaskRules(Long taskId) - 为任务的所有启用规则创建调度unscheduleTaskRule(TaskScheduleRule) - 删除单个规则的调度unscheduleAllTaskRules(Long taskId) - 删除任务的所有规则调度pauseTaskRule(TaskScheduleRule) - 暂停规则调度resumeTaskRule(TaskScheduleRule) - 恢复规则调度triggerRuleNow(TaskScheduleRule) - 立即触发规则ruleJobExists(TaskScheduleRule) - 检查规则调度是否存在废弃方法:
addCronJob(Long, String) - 已废弃addSimpleJob(Long, int, int) - 已废弃pauseJob(Long) - 已废弃resumeJob(Long) - 已废弃triggerJobNow(Long) - 已废弃jobExists(Long) - 已废弃修改的方法:
createTask() - 支持创建多个定时规则
// 保存定时规则
if (request.getScheduleRules() != null && !request.getScheduleRules().isEmpty()) {
for (ScheduleRuleDTO ruleDTO : request.getScheduleRules()) {
// 创建规则
// 创建Quartz调度
}
}
deleteTask() - 删除所有规则的调度
quartzManagementService.unscheduleAllTaskRules(id);
taskScheduleRuleMapper.deleteByTaskId(id);
enableTask() - 启用所有规则
quartzManagementService.scheduleAllTaskRules(id);
disableTask() - 禁用所有规则
quartzManagementService.unscheduleAllTaskRules(id);
executeNow() - 已删除(废弃)
已创建迁移脚本:docs/migration-multi-schedule-rules.sql
迁移规则-{任务名称}quartz_job_name 和 quartz_trigger_nameCOMPLETEDPOST /api/tasks
Content-Type: application/json
{
"taskName": "农场A区智能轮灌",
"triggerType": "SCHEDULED",
"scheduleRules": [
{
"ruleName": "每周一三五凌晨2点",
"scheduleType": "CRON",
"cronExpression": "0 0 2 ? * MON,WED,FRI",
"enabled": true
},
{
"ruleName": "每月1号和15号",
"scheduleType": "CRON",
"cronExpression": "0 0 2 1,15 * ?",
"enabled": true
},
{
"ruleName": "连续10天灌溉计划",
"scheduleType": "SIMPLE",
"startTime": "2026-03-10 06:00:00",
"intervalDays": 1,
"totalTimes": 10,
"enabled": true
}
],
"pumpId": "pump-001",
"pressureMode": "PUMP_UNIFIED",
"targetPressureKpa": 300,
"groupConfigs": [
{
"groupId": 101,
"sortOrder": 1,
"irrigationDurationMinutes": 30
}
],
"tenantId": 1
}
SELECT * FROM wfauto_v2_task_schedule_rule
WHERE task_id = 1 AND deleted = 0
ORDER BY id;
SELECT
r.id,
r.rule_name,
r.schedule_type,
r.enabled,
r.status,
r.executed_count,
r.total_times,
CASE
WHEN r.schedule_type = 'CRON' THEN r.cron_expression
WHEN r.schedule_type = 'SIMPLE' THEN CONCAT('每', r.interval_days, '天执行')
END AS schedule_info
FROM wfauto_v2_task_schedule_rule r
WHERE r.task_id = 1 AND r.deleted = 0;
COMPLETEDACTIVE 并重建调度IrrigationScheduledJob 现在调用 scheduledTrigger(taskId, ruleId)TaskTriggerService 支持 ruleId 参数TaskTriggerService 还未更新,需要同步修改src/main/java/cn/sciento/farm/automationv2/domain/entity/TaskScheduleRule.javasrc/main/java/cn/sciento/farm/automationv2/domain/repository/TaskScheduleRuleRepository.javasrc/main/java/cn/sciento/farm/automationv2/infra/repository/impl/TaskScheduleRuleRepositoryImpl.javasrc/main/java/cn/sciento/farm/automationv2/infra/mapper/TaskScheduleRuleMapper.javadocs/migration-multi-schedule-rules.sqlsrc/main/java/cn/sciento/farm/automationv2/domain/entity/IrrigationTask.javasrc/main/java/cn/sciento/farm/automationv2/api/dto/CreateTaskRequest.javasrc/main/java/cn/sciento/farm/automationv2/api/controller/IrrigationTaskController.javasrc/main/java/cn/sciento/farm/automationv2/app/job/IrrigationScheduledJob.javasrc/main/java/cn/sciento/farm/automationv2/app/service/QuartzManagementService.javadocs/球阀轮灌技术方案.md修改完成时间: 2026-03-02 修改人: Claude Sonnet 4.5 版本: v2.0