doc/20260516_timing_task_enable_frontend_api.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,140 @@ # 宿¶ä»»å¡ãæ¯å¦å¯ç¨ãå端èè°ææ¡£ ## 1. åæ´èå´ æ¬æ¬¡æ¹å¨è¦ç两个模åç宿¶ä»»å¡ç®¡çï¼ 1. 设å¤å·¡æ£å®æ¶ä»»å¡ï¼`inspectiontask`ï¼ 2. 设å¤ä¿å »å®æ¶ä»»å¡ï¼`device`ï¼ ä¸¤ä¸ªæ¨¡ååæ°å¢å¹¶å¯ç¨å段ï¼`isEnabled`ã ## 2. åæ®µå®ä¹ | åæ®µå | ç±»å | 说æ | åå¼ | |---|---|---|---| | isEnabled | number | æ¯å¦å¯ç¨ | `1`=å¯ç¨ï¼`0`=ç¦ç¨ | 说æï¼ 1. æ°å¢ä»»å¡æ¶ï¼å¦æå端ä¸ä¼ `isEnabled`ï¼å端é»è®¤æ `1`ï¼å¯ç¨ï¼å¤çã 2. ä»»å¡ç¦ç¨åï¼ä¸åçææ°çå·¡æ£/ä¿å »è®°å½ã 3. 忢å¯ç¨ç¶æä¼åæ¥æ´æ° Quartz è°åº¦ï¼å¯ç¨=æ¢å¤ï¼ç¦ç¨=æåï¼ã ## 3. æ°æ®åºèæ¬ æ§è¡èæ¬ï¼ `sql/timing_and_maintenance_task_add_is_enabled.sql` æ°å¢åï¼ 1. `timing_task.is_enabled` 2. `maintenance_task.is_enabled` ## 4. å·¡æ£å®æ¶ä»»å¡æ¥å£ï¼inspectiontaskï¼ åºç¡è·¯å¾ï¼`/timingTask` ### 4.1 å表æ¥è¯¢ - `GET /timingTask/list` - æ¯æçéåæ°ï¼`isEnabled` 示ä¾åæ°ï¼ ```http GET /timingTask/list?current=1&size=10&isEnabled=1 ``` ### 4.2 æ°å¢/ç¼è¾ä»»å¡ - `POST /timingTask/addOrEditTimingTask` - 请æ±ä½å¯å¸¦ `isEnabled` 示ä¾ï¼ ```json { "id": null, "taskName": "ç©ºåæºå·¡æ£", "frequencyType": "DAILY", "frequencyDetail": "09:00", "taskIds": [101, 102], "isEnabled": 1 } ``` ### 4.3 忢å¯ç¨ç¶æï¼æ¨èå端å¼å ³ç´æ¥è°ç¨ï¼ - `POST /timingTask/changeEnable` 示ä¾ï¼ ```json { "id": 12, "isEnabled": 0 } ``` è¿åï¼`R`ï¼`data` 为åå½±åè¡æ°ï¼æåé常为 `1`ï¼ã ## 5. ä¿å »å®æ¶ä»»å¡æ¥å£ï¼deviceï¼ åºç¡è·¯å¾ï¼`/deviceMaintenanceTask` ### 5.1 å表æ¥è¯¢ - `GET /deviceMaintenanceTask/listPage` - æ¯æçéåæ°ï¼`isEnabled` 示ä¾åæ°ï¼ ```http GET /deviceMaintenanceTask/listPage?current=1&size=10&isEnabled=1 ``` ### 5.2 æ°å¢ä»»å¡ - `POST /deviceMaintenanceTask/add` - 请æ±ä½å¯å¸¦ `isEnabled` 示ä¾ï¼ ```json { "taskName": "ååºéä¿å »", "frequencyType": "WEEKLY", "frequencyDetail": "MON,10:00", "deviceLedgerIds": [301, 302], "isEnabled": 1 } ``` ### 5.3 ç¼è¾ä»»å¡ - `POST /deviceMaintenanceTask/update` - 请æ±ä½å¯å¸¦ `isEnabled` ### 5.4 忢å¯ç¨ç¶æï¼æ¨èå端å¼å ³ç´æ¥è°ç¨ï¼ - `POST /deviceMaintenanceTask/changeEnable` 示ä¾ï¼ ```json { "id": 26, "isEnabled": 0 } ``` è¿åï¼`AjaxResult`ã ## 6. å端èè°å»ºè®® 1. å表页æ°å¢ãæ¯å¦å¯ç¨ãåï¼ä½¿ç¨å¼å ³ç»ä»¶æ å°ï¼å¼=`1`ï¼å ³=`0`ã 2. å¼å ³åæ´æ¶ç´æ¥è°ç¨å¯¹åº `changeEnable` æ¥å£ï¼æååå·æ°å½åè¡æå表ã 3. æ°å¢/ç¼è¾å¼¹çªä¸å¢å ãæ¯å¦å¯ç¨ãåæ®µï¼é»è®¤å¾éï¼`1`ï¼ã 4. 妿å端è¿å `idåisEnabledä¸è½ä¸ºç©º`ï¼æ£æ¥å¼å ³æäº¤åæ°æ¯å¦å®æ´ã sql/timing_and_maintenance_task_add_is_enabled.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,5 @@ ALTER TABLE `timing_task` ADD COLUMN `is_enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'æ¯å¦å¯ç¨(1=å¯ç¨,0=ç¦ç¨)' AFTER `last_execution_time`; ALTER TABLE `maintenance_task` ADD COLUMN `is_enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'æ¯å¦å¯ç¨(1=å¯ç¨,0=ç¦ç¨)' AFTER `last_execution_time`; src/main/java/com/ruoyi/device/controller/MaintenanceTaskController.java
@@ -10,51 +10,57 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @author :yys * @date : 2025/12/22 14:58 */ @Api(tags = "设å¤ä¿å »å®æ¶ä»»å¡ç®¡ç") @Api(tags = "Maintenance Timing Task") @RestController @RequestMapping("/deviceMaintenanceTask") public class MaintenanceTaskController extends BaseController { @Autowired private MaintenanceTaskService maintenanceTaskService; @GetMapping("/listPage") @ApiOperation(value = "设å¤ä¿å »å®æ¶ä»»å¡å表") @ApiOperation(value = "Maintenance timing task list") public AjaxResult listPage(Page page, MaintenanceTask maintenanceTask) { return maintenanceTaskService.listPage(page,maintenanceTask); return maintenanceTaskService.listPage(page, maintenanceTask); } @PostMapping("/add") @ApiOperation(value = "æ·»å 设å¤ä¿å »å®æ¶ä»»å¡") @Log(title = "设å¤ä¿å »å®æ¶ä»»å¡", businessType = BusinessType.INSERT) @ApiOperation(value = "Create maintenance timing task") @Log(title = "Maintenance Timing Task", businessType = BusinessType.INSERT) public AjaxResult add(@RequestBody MaintenanceTask maintenanceTask) { return maintenanceTaskService.add(maintenanceTask); } @PostMapping("/update") @ApiOperation(value = "ä¿®æ¹è®¾å¤ä¿å »å®æ¶ä»»å¡") @Log(title = "设å¤ä¿å »å®æ¶ä»»å¡", businessType = BusinessType.UPDATE) @ApiOperation(value = "Update maintenance timing task") @Log(title = "Maintenance Timing Task", businessType = BusinessType.UPDATE) public AjaxResult update(@RequestBody MaintenanceTask maintenanceTask) { return maintenanceTaskService.updateByMaintenanceTaskId(maintenanceTask); } @PostMapping("/changeEnable") @ApiOperation(value = "Change enable status") @Log(title = "Maintenance Timing Task", businessType = BusinessType.UPDATE) public AjaxResult changeEnable(@RequestBody MaintenanceTask maintenanceTask) { if (maintenanceTask.getId() == null || maintenanceTask.getIsEnabled() == null) { return AjaxResult.error("id and isEnabled are required"); } return maintenanceTaskService.changeEnable(maintenanceTask.getId(), maintenanceTask.getIsEnabled()); } @DeleteMapping("/delete") @ApiOperation(value = "å é¤è®¾å¤ä¿å »å®æ¶ä»»å¡") @Log(title = "设å¤ä¿å »å®æ¶ä»»å¡", businessType = BusinessType.DELETE) @ApiOperation(value = "Delete maintenance timing tasks") @Log(title = "Maintenance Timing Task", businessType = BusinessType.DELETE) public AjaxResult delete(@RequestBody List<Long> ids) { return maintenanceTaskService.delete(ids); } } src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
@@ -63,8 +63,8 @@ @ApiModelProperty(value = "æåæ§è¡æ¶é´") private LocalDateTime lastExecutionTime; @ApiModelProperty(value = "æ¯å¦æ¿æ´»") private boolean isActive; @ApiModelProperty(value = "æ¯å¦å¯ç¨(1=å¯ç¨,0=ç¦ç¨)") private Integer isEnabled; @ApiModelProperty(value = "夿³¨") @Excel(name = "夿³¨") src/main/java/com/ruoyi/device/service/MaintenanceTaskService.java
@@ -19,4 +19,6 @@ AjaxResult updateByMaintenanceTaskId(MaintenanceTask maintenanceTask); AjaxResult delete(List<Long> ids); AjaxResult changeEnable(Long taskId, Integer isEnabled); } src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
@@ -55,6 +55,9 @@ if (timingTask == null) { throw new JobExecutionException("MaintenanceTaskJobæ¾ä¸å°å®æ¶ä»»å¡ " + taskId); } if (Integer.valueOf(0).equals(timingTask.getIsEnabled())) { return; } List<Long> deviceIds = resolveDeviceIds(timingTask); List<DeviceMaintenance> maintenanceList = new ArrayList<>(); src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskScheduler.java
@@ -45,8 +45,14 @@ try { TriggerKey triggerKey = new TriggerKey("triggerMaintenanceTask_" + task.getId()); Trigger oldTrigger = scheduler.getTrigger(triggerKey); if (oldTrigger == null) { scheduleMaintenanceTask(task); return; } if (!(oldTrigger instanceof CronTrigger)) { throw new SchedulerException("Existing trigger is not a CronTrigger"); scheduler.unscheduleJob(triggerKey); scheduleMaintenanceTask(task); return; } CronTrigger newTrigger = TriggerBuilder.newTrigger() @@ -234,4 +240,4 @@ throw new IllegalArgumentException("æ æçææ: " + dayName); } } } } src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -17,8 +17,10 @@ import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import lombok.extern.slf4j.Slf4j; import org.quartz.SchedulerException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.ArrayList; @@ -36,14 +38,19 @@ @Autowired private MaintenanceTaskMapper maintenanceTaskMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private TimingTaskServiceImpl timingTaskService; @Autowired private MaintenanceTaskScheduler maintenanceTaskScheduler; @Autowired private IDeviceLedgerService deviceLedgerService; @Autowired private DeviceAreaMapper deviceAreaMapper; @@ -57,6 +64,10 @@ if (maintenanceTask.getAreaId() != null) { queryWrapper.eq(MaintenanceTask::getAreaId, maintenanceTask.getAreaId()); } if (maintenanceTask.getIsEnabled() != null) { queryWrapper.eq(MaintenanceTask::getIsEnabled, maintenanceTask.getIsEnabled()); } Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, queryWrapper); if (taskPage.getRecords().isEmpty()) { return AjaxResult.success(taskPage); @@ -74,6 +85,7 @@ List<SysUser> users = sysUserMapper.selectUserByIds(new ArrayList<>(userIds)); users.forEach(user -> userNickNameMap.put(user.getUserId(), user.getNickName())); } Map<Long, String> areaNameMap = deviceAreaMapper.selectBatchIds(taskPage.getRecords().stream() .map(MaintenanceTask::getAreaId) .filter(java.util.Objects::nonNull) @@ -81,6 +93,7 @@ .collect(Collectors.toList())) .stream() .collect(Collectors.toMap(DeviceArea::getId, DeviceArea::getAreaName, (left, right) -> left, HashMap::new)); taskPage.getRecords().forEach(task -> { if (task.getRegistrantId() != null) { task.setRegistrant(userNickNameMap.getOrDefault(task.getRegistrantId(), "æªç¥ç¨æ·")); @@ -91,37 +104,70 @@ } @Override @Transactional public AjaxResult add(MaintenanceTask maintenanceTask) { if (!prepareMaintenanceTask(maintenanceTask)) { return AjaxResult.error("è¯·éæ©è®¾å¤"); } maintenanceTask.setActive(true); if (maintenanceTask.getIsEnabled() == null) { maintenanceTask.setIsEnabled(1); } TimingTask task = new TimingTask(); task.setFrequencyType(maintenanceTask.getFrequencyType()); task.setFrequencyDetail(maintenanceTask.getFrequencyDetail()); LocalDateTime firstExecutionTime = timingTaskService.calculateFirstExecutionTime(task); maintenanceTask.setNextExecutionTime(firstExecutionTime); int insert = maintenanceTaskMapper.insert(maintenanceTask); if (insert > 0) { maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask); AjaxResult schedulerResult = resetSchedulerStatus(maintenanceTask); if (schedulerResult.isError()) { return schedulerResult; } } return AjaxResult.success("æ·»å æå"); } @Override @Transactional public AjaxResult updateByMaintenanceTaskId(MaintenanceTask maintenanceTask) { MaintenanceTask maintenanceTask1 = maintenanceTaskMapper.selectById(maintenanceTask.getId()); if (maintenanceTask1 == null) { if (maintenanceTask.getId() == null) { return AjaxResult.error("idä¸è½ä¸ºç©º"); } MaintenanceTask currentTask = maintenanceTaskMapper.selectById(maintenanceTask.getId()); if (currentTask == null) { return AjaxResult.warn("æ²¡ææ¤æ°æ®"); } BeanUtils.copyProperties(maintenanceTask, maintenanceTask1); if (!prepareMaintenanceTask(maintenanceTask1)) { Integer oldEnabled = currentTask.getIsEnabled(); LocalDateTime oldNextExecutionTime = currentTask.getNextExecutionTime(); BeanUtils.copyProperties(maintenanceTask, currentTask); if (maintenanceTask.getIsEnabled() == null) { currentTask.setIsEnabled(oldEnabled); } if (maintenanceTask.getNextExecutionTime() == null) { currentTask.setNextExecutionTime(oldNextExecutionTime); } if (!prepareMaintenanceTask(currentTask)) { return AjaxResult.error("è¯·éæ©è®¾å¤"); } maintenanceTask1.setDeviceLedgerIds(null); int update = maintenanceTaskMapper.updateById(maintenanceTask1); currentTask.setDeviceLedgerIds(null); if (currentTask.getNextExecutionTime() == null) { TimingTask task = new TimingTask(); task.setFrequencyType(currentTask.getFrequencyType()); task.setFrequencyDetail(currentTask.getFrequencyDetail()); currentTask.setNextExecutionTime(timingTaskService.calculateFirstExecutionTime(task)); } int update = maintenanceTaskMapper.updateById(currentTask); if (update > 0) { maintenanceTaskScheduler.rescheduleMaintenanceTask(maintenanceTask1); AjaxResult schedulerResult = resetSchedulerStatus(currentTask); if (schedulerResult.isError()) { return schedulerResult; } } return AjaxResult.success("æ´æ°æå"); } @@ -133,6 +179,57 @@ ids.forEach(id -> maintenanceTaskScheduler.unscheduleMaintenanceTask(id)); } return AjaxResult.success("å 餿å"); } @Override @Transactional public AjaxResult changeEnable(Long taskId, Integer isEnabled) { if (taskId == null || isEnabled == null) { return AjaxResult.error("idåisEnabledä¸è½ä¸ºç©º"); } MaintenanceTask task = maintenanceTaskMapper.selectById(taskId); if (task == null) { return AjaxResult.warn("æ²¡ææ¤æ°æ®"); } task.setIsEnabled(isEnabled); if (task.getNextExecutionTime() == null) { TimingTask timingTask = new TimingTask(); timingTask.setFrequencyType(task.getFrequencyType()); timingTask.setFrequencyDetail(task.getFrequencyDetail()); task.setNextExecutionTime(timingTaskService.calculateFirstExecutionTime(timingTask)); } int update = maintenanceTaskMapper.updateById(task); if (update > 0) { AjaxResult schedulerResult = resetSchedulerStatus(task); if (schedulerResult.isError()) { return schedulerResult; } } return AjaxResult.success("æ´æ°æå"); } private AjaxResult resetSchedulerStatus(MaintenanceTask task) { try { maintenanceTaskScheduler.rescheduleMaintenanceTask(task); if (isTaskEnabled(task.getIsEnabled())) { maintenanceTaskScheduler.resumeMaintenanceTask(task.getId()); } else { maintenanceTaskScheduler.pauseMaintenanceTask(task.getId()); } return AjaxResult.success(); } catch (SchedulerException e) { log.error("resetSchedulerStatus error, taskId={}", task.getId(), e); return AjaxResult.error("æ´æ°è°åº¦ç¶æå¤±è´¥"); } catch (RuntimeException e) { log.error("resetSchedulerStatus runtime error, taskId={}", task.getId(), e); return AjaxResult.error("æ´æ°è°åº¦ç¶æå¤±è´¥"); } } private boolean isTaskEnabled(Integer isEnabled) { return isEnabled == null || isEnabled == 1; } private boolean prepareMaintenanceTask(MaintenanceTask task) { @@ -150,6 +247,7 @@ if (validIds.isEmpty()) { return false; } List<DeviceLedger> devices = validIds.stream() .map(deviceLedgerService::getById) .filter(device -> device != null) @@ -157,6 +255,7 @@ if (devices.isEmpty()) { return false; } task.setTaskId(devices.get(0).getId()); if (task.getAreaId() == null) { task.setAreaId(devices.get(0).getAreaId()); src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
@@ -9,7 +9,6 @@ import com.ruoyi.framework.web.domain.R; import com.ruoyi.inspectiontask.dto.InspectionTaskDto; import com.ruoyi.inspectiontask.dto.TimingTaskDto; import com.ruoyi.inspectiontask.pojo.InspectionTask; import com.ruoyi.inspectiontask.pojo.TimingTask; import com.ruoyi.inspectiontask.service.InspectionTaskService; import com.ruoyi.inspectiontask.service.TimingTaskService; @@ -28,12 +27,8 @@ import javax.servlet.http.HttpServletResponse; import java.util.List; /** * @author :yys * @date : 2025/9/19 10:53 */ @RestController @Api(tags = "å·¡æ£ç®¡ç") @Api(tags = "Inspection Timing Task") @RequestMapping("/timingTask") public class TimingTaskController extends BaseController { @@ -44,38 +39,48 @@ private InspectionTaskService inspectionTaskService; @GetMapping("/list") @ApiOperation(value = "宿¶ä»»å¡å表") @ApiOperation(value = "Timing task list") public R<IPage<TimingTaskDto>> list(Page<TimingTask> page, TimingTask timingTask) { IPage<TimingTaskDto> list = timingTaskService.selectTimingTaskList(page, timingTask); return R.ok(list); } @GetMapping("/recordList/{timingId}") @ApiOperation(value = "æ ¹æ®å®æ¶ä»»å¡IDæ¥è¯¢å·¡æ£è®°å½å表") @ApiOperation(value = "Inspection records by timing task id") public R<List<InspectionTaskDto>> recordList(@PathVariable Long timingId) { return R.ok(inspectionTaskService.selectInspectionTaskRecordListByTimingId(timingId)); } @PostMapping("/export") @ApiOperation(value = "导åºå®æ¶ä»»å¡") @ApiOperation(value = "Export timing tasks") public void export(HttpServletResponse response) { Page page = new Page<>(-1, -1); TimingTaskDto timingTask = new TimingTaskDto(); IPage<TimingTaskDto> list = timingTaskService.selectTimingTaskList(page, timingTask); ExcelUtil<TimingTaskDto> util = new ExcelUtil<>(TimingTaskDto.class); util.exportExcel(response, list.getRecords(), "导åºå®æ¶ä»»å¡"); util.exportExcel(response, list.getRecords(), "timing_task_export"); } @PostMapping("/addOrEditTimingTask") @ApiOperation(value = "æ°å¢ä¿®æ¹å®æ¶ä»»å¡") @Log(title = "宿¶ä»»å¡", businessType = BusinessType.INSERT) @ApiOperation(value = "Create or update timing task") @Log(title = "Timing Task", businessType = BusinessType.INSERT) public R addOrEditTimingTask(@RequestBody TimingTaskDto timingTaskDto) throws SchedulerException { return R.ok(timingTaskService.addOrEditTimingTask(timingTaskDto)); } @PostMapping("/changeEnable") @ApiOperation(value = "Change enable status") @Log(title = "Timing Task", businessType = BusinessType.UPDATE) public R changeEnable(@RequestBody TimingTask timingTask) throws SchedulerException { if (timingTask.getId() == null || timingTask.getIsEnabled() == null) { return R.fail("id and isEnabled are required"); } return R.ok(timingTaskService.changeEnable(timingTask.getId(), timingTask.getIsEnabled())); } @DeleteMapping("/delTimingTask") @ApiOperation(value = "å é¤å®æ¶ä»»å¡") @Log(title = "宿¶ä»»å¡", businessType = BusinessType.DELETE) @ApiOperation(value = "Delete timing tasks") @Log(title = "Timing Task", businessType = BusinessType.DELETE) public R remove(@RequestBody Long[] ids) { return R.ok(timingTaskService.delByIds(ids)); } src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
@@ -65,8 +65,8 @@ @ApiModelProperty(value = "æåæ§è¡æ¶é´") private LocalDateTime lastExecutionTime; @ApiModelProperty(value = "æ¯å¦æ¿æ´»") private boolean isActive; @ApiModelProperty(value = "æ¯å¦å¯ç¨(1=å¯ç¨,0=ç¦ç¨)") private Integer isEnabled; @ApiModelProperty(value = "夿³¨") @Excel(name = "夿³¨") src/main/java/com/ruoyi/inspectiontask/service/TimingTaskService.java
@@ -20,4 +20,6 @@ int delByIds(Long[] ids); void updateTaskExecutionTime(Long taskId); int changeEnable(Long taskId, Integer isEnabled) throws SchedulerException; } src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -68,6 +68,9 @@ if (timingTask == null) { throw new RuntimeException("宿¶ä»»å¡ä¸åå¨ï¼ " + taskId); } if (Integer.valueOf(0).equals(timingTask.getIsEnabled())) { return; } List<Long> deviceIds = resolveTaskIds(timingTask); if (deviceIds.isEmpty()) { src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
@@ -37,8 +37,14 @@ public void rescheduleTimingTask(TimingTask task) throws SchedulerException { TriggerKey triggerKey = new TriggerKey("trigger_" + task.getId()); Trigger oldTrigger = scheduler.getTrigger(triggerKey); if (oldTrigger == null) { scheduleTimingTask(task); return; } if (!(oldTrigger instanceof CronTrigger)) { throw new SchedulerException("Existing trigger is not a CronTrigger"); scheduler.unscheduleJob(triggerKey); scheduleTimingTask(task); return; } CronTrigger newTrigger = TriggerBuilder.newTrigger() @@ -223,4 +229,4 @@ throw new IllegalArgumentException("æ æçææ: " + dayName); } } } } src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -77,6 +77,9 @@ if (timingTask.getAreaId() != null) { queryWrapper.eq(TimingTask::getAreaId, timingTask.getAreaId()); } if (timingTask.getIsEnabled() != null) { queryWrapper.eq(TimingTask::getIsEnabled, timingTask.getIsEnabled()); } IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, queryWrapper); if (taskPage.getRecords().isEmpty()) { return new Page<>(taskPage.getCurrent(), taskPage.getSize(), taskPage.getTotal()); @@ -154,18 +157,40 @@ if (Objects.isNull(timingTaskDto.getId())) { timingTask.setRegistrationDate(LocalDate.now()); timingTask.setActive(true); if (timingTask.getIsEnabled() == null) { timingTask.setIsEnabled(1); } timingTask.setNextExecutionTime(calculateFirstExecutionTime(timingTask)); int result = timingTaskMapper.insert(timingTask); if (result > 0) { timingTaskScheduler.scheduleTimingTask(timingTask); resetSchedulerStatus(timingTask); } return result; } TimingTask existingTask = timingTaskMapper.selectById(timingTaskDto.getId()); if (existingTask == null) { throw new IllegalArgumentException("宿¶ä»»å¡ä¸åå¨: " + timingTaskDto.getId()); } if (timingTask.getIsEnabled() == null) { timingTask.setIsEnabled(existingTask.getIsEnabled()); } if (timingTask.getNextExecutionTime() == null) { timingTask.setNextExecutionTime(existingTask.getNextExecutionTime()); } if (timingTask.getRegistrationDate() == null) { timingTask.setRegistrationDate(existingTask.getRegistrationDate()); } int result = timingTaskMapper.updateById(timingTask); if (result > 0) { timingTaskScheduler.rescheduleTimingTask(timingTask); TimingTask latestTask = timingTaskMapper.selectById(timingTask.getId()); if (latestTask != null) { if (latestTask.getNextExecutionTime() == null) { latestTask.setNextExecutionTime(calculateFirstExecutionTime(latestTask)); timingTaskMapper.updateById(latestTask); } resetSchedulerStatus(latestTask); } } return result; } @@ -492,6 +517,41 @@ } @Override @Transactional public int changeEnable(Long taskId, Integer isEnabled) throws SchedulerException { if (taskId == null || isEnabled == null) { throw new IllegalArgumentException("idåisEnabledä¸è½ä¸ºç©º"); } TimingTask task = timingTaskMapper.selectById(taskId); if (task == null) { throw new IllegalArgumentException("宿¶ä»»å¡ä¸åå¨: " + taskId); } task.setIsEnabled(isEnabled); int updated = timingTaskMapper.updateById(task); if (updated > 0) { if (task.getNextExecutionTime() == null) { task.setNextExecutionTime(calculateFirstExecutionTime(task)); timingTaskMapper.updateById(task); } resetSchedulerStatus(task); } return updated; } private void resetSchedulerStatus(TimingTask task) throws SchedulerException { timingTaskScheduler.rescheduleTimingTask(task); if (isTaskEnabled(task.getIsEnabled())) { timingTaskScheduler.resumeTimingTask(task.getId()); } else { timingTaskScheduler.pauseTimingTask(task.getId()); } } private boolean isTaskEnabled(Integer isEnabled) { return isEnabled == null || isEnabled == 1; } @Override public int delByIds(Long[] ids) { int i = timingTaskMapper.deleteBatchIds(Arrays.asList(ids)); if (i > 0) {