From b5e1c10a57c7b619b779d2d9ad4cb3773bc39447 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 18 五月 2026 20:40:05 +0800
Subject: [PATCH] feat: 设备巡检添加启用/停止

---
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java |   86 +++++++++++++++++++++++++++++-------------
 src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java                    |    2 
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java         |    2 
 src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java    |    2 
 src/main/java/com/ruoyi/inspectiontask/service/TimingTaskService.java          |    2 
 5 files changed, 63 insertions(+), 31 deletions(-)

diff --git a/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java b/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
index ccaf969..b0bb40e 100644
--- a/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
+++ b/src/main/java/com/ruoyi/inspectiontask/controller/TimingTaskController.java
@@ -60,7 +60,7 @@
     @PostMapping("/addOrEditTimingTask")
     @ApiOperation(value = "鏂板淇敼瀹氭椂浠诲姟")
     @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.INSERT)
-    public R addOrEditTimingTask(@RequestBody TimingTaskDto timingTaskDto) throws SchedulerException {
+    public R addOrEditTimingTask(@RequestBody TimingTaskDto timingTaskDto) {
         return R.ok(timingTaskService.addOrEditTimingTask(timingTaskDto));
     }
 
diff --git a/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java b/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
index fb852be..f3f3c8b 100644
--- a/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
+++ b/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
@@ -58,7 +58,7 @@
     private LocalDateTime lastExecutionTime;
 
     @ApiModelProperty(value = "鏄惁婵�娲�")
-    private boolean isActive;
+    private Integer isActive;
 
     @ApiModelProperty(value = "澶囨敞")
     @Excel(name = "澶囨敞")
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/TimingTaskService.java b/src/main/java/com/ruoyi/inspectiontask/service/TimingTaskService.java
index 8d00032..d39d982 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/TimingTaskService.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/TimingTaskService.java
@@ -15,7 +15,7 @@
 
     IPage<TimingTaskDto> selectTimingTaskList(Page<TimingTask> page, TimingTask timingTask);
 
-    int addOrEditTimingTask(TimingTaskDto timingTaskDto) throws SchedulerException;
+    int addOrEditTimingTask(TimingTaskDto timingTaskDto);
 
     int delByIds(Long[] ids);
 
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
index b8ffdf5..92e4114 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -111,7 +111,7 @@
         inspectionTask.setTaskId(timingTask.getTaskId());
         inspectionTask.setInspectorId(timingTask.getInspectorIds());
         inspectionTask.setInspectionLocation(timingTask.getInspectionLocation());
-        inspectionTask.setRemarks("鑷姩鐢熸垚鑷畾鏃朵换鍔D: " + timingTask.getId());
+        inspectionTask.setRemarks(timingTask.getRemarks());
         inspectionTask.setRegistrantId(timingTask.getRegistrantId());
         inspectionTask.setFrequencyType(timingTask.getFrequencyType());
         inspectionTask.setFrequencyDetail(timingTask.getFrequencyDetail());
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
index 6607d68..97f2de1 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.inspectiontask.dto.TimingTaskDto;
@@ -14,7 +15,6 @@
 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;
@@ -122,42 +122,59 @@
 
     @Override
     @Transactional
-    public int addOrEditTimingTask(TimingTaskDto timingTaskDto) throws SchedulerException {
+    public int addOrEditTimingTask(TimingTaskDto timingTaskDto) {
         TimingTask timingTask = new TimingTask();
         BeanUtils.copyProperties(timingTaskDto, timingTask);
-        // 1. 瑙f瀽瀛楃涓蹭负 LocalDate锛堝彧鍖呭惈骞存湀鏃ワ級
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate localDate = LocalDate.now();
-        if(StringUtils.isNotEmpty(timingTaskDto.getDateStr())){
+
+        if (StringUtils.isNotEmpty(timingTaskDto.getDateStr())) {
             localDate = LocalDate.parse(timingTaskDto.getDateStr(), formatter);
         }
-        // 2. 鑾峰彇褰撳墠绯荤粺鐨� LocalTime锛堝寘鍚椂鍒嗙锛�
         LocalTime currentTime = LocalTime.now();
-
-        // 3. 鍚堝苟 LocalDate 鍜屽綋鍓� LocalTime 涓� LocalDateTime
         LocalDateTime localDateTime = LocalDateTime.of(localDate, currentTime);
         timingTask.setCreateTime(localDateTime);
-        // 璁剧疆鍒涘缓浜轰俊鎭拰榛樿鍊�
         if (Objects.isNull(timingTaskDto.getId())) {
             timingTask.setRegistrationDate(LocalDate.now());
-            timingTask.setActive(true);
-
             // 璁$畻棣栨鎵ц鏃堕棿
             LocalDateTime firstExecutionTime = calculateFirstExecutionTime(timingTask);
             timingTask.setNextExecutionTime(firstExecutionTime);
             int result = timingTaskMapper.insert(timingTask);
-            if (result > 0) {
-                // 鏂板鎴愬姛鍚庢坊鍔犲埌璋冨害鍣�
-                timingTaskScheduler.scheduleTimingTask(timingTask);
+            // 鏂板鎴愬姛鍚庝笖鍚敤鐘舵�佹墠娣诲姞鍒拌皟搴﹀櫒
+            if (result > 0 && Integer.valueOf(1).equals(timingTask.getIsActive())) {
+                try {
+                    timingTaskScheduler.scheduleTimingTask(timingTask);
+                } catch (Exception e) {
+                    log.error("娣诲姞宸℃浠诲姟澶辫触 : {}", e.getMessage(), e);
+                    throw new ServiceException("娣诲姞宸℃浠诲姟澶辫触");
+                }
             }
             return result;
         } else {
-
-
+            // 缂栬緫鏃讹紝淇濆瓨鏃х殑鐘舵��
+            TimingTask oldTask = timingTaskMapper.selectById(timingTaskDto.getId());
+            Integer oldIsActive = oldTask != null ? oldTask.getIsActive() : 0;
+            Integer newIsActive = timingTask.getIsActive();
             int result = timingTaskMapper.updateById(timingTask);
             if (result > 0) {
-                // 鏇存柊鎴愬姛鍚庨噸鏂拌皟搴︿换鍔�
-                timingTaskScheduler.rescheduleTimingTask(timingTask);
+                // 浠庡惎鐢ㄥ彉涓哄仠鐢紝绉婚櫎浠诲姟
+                if (Integer.valueOf(1).equals(oldIsActive)
+                        && !Integer.valueOf(1).equals(newIsActive)) {
+                    timingTaskScheduler.unscheduleTimingTask(timingTask.getId());
+                }
+                // 浠庡仠鐢ㄥ彉涓哄惎鐢紝娣诲姞浠诲姟
+                else if (!Integer.valueOf(1).equals(oldIsActive)
+                        && Integer.valueOf(1).equals(newIsActive)) {
+                    // 璁$畻棣栨鎵ц鏃堕棿
+                    LocalDateTime firstExecutionTime = calculateFirstExecutionTime(timingTask);
+                    timingTask.setNextExecutionTime(firstExecutionTime);
+                    try {
+                        timingTaskScheduler.scheduleTimingTask(timingTask);
+                    } catch (Exception e) {
+                        log.error("娣诲姞宸℃浠诲姟澶辫触 : {}", e.getMessage(), e);
+                        throw new ServiceException("娣诲姞宸℃浠诲姟澶辫触");
+                    }
+                }
             }
             return result;
         }
@@ -195,6 +212,7 @@
 
     // 鏄犲皠鏄熸湡绠�鍐欎笌DayOfWeek
     private static final Map<String, DayOfWeek> WEEK_DAY_MAP = new HashMap<>();
+
     static {
         WEEK_DAY_MAP.put("MON", DayOfWeek.MONDAY);
         WEEK_DAY_MAP.put("TUE", DayOfWeek.TUESDAY);
@@ -445,14 +463,29 @@
 
         for (String dayStr : dayStrs) {
             switch (dayStr) {
-                case "MON": days.add(DayOfWeek.MONDAY); break;
-                case "TUE": days.add(DayOfWeek.TUESDAY); break;
-                case "WED": days.add(DayOfWeek.WEDNESDAY); break;
-                case "THU": days.add(DayOfWeek.THURSDAY); break;
-                case "FRI": days.add(DayOfWeek.FRIDAY); break;
-                case "SAT": days.add(DayOfWeek.SATURDAY); break;
-                case "SUN": days.add(DayOfWeek.SUNDAY); break;
-                default: throw new IllegalArgumentException("鏃犳晥鐨勬槦鏈熷嚑: " + dayStr);
+                case "MON":
+                    days.add(DayOfWeek.MONDAY);
+                    break;
+                case "TUE":
+                    days.add(DayOfWeek.TUESDAY);
+                    break;
+                case "WED":
+                    days.add(DayOfWeek.WEDNESDAY);
+                    break;
+                case "THU":
+                    days.add(DayOfWeek.THURSDAY);
+                    break;
+                case "FRI":
+                    days.add(DayOfWeek.FRIDAY);
+                    break;
+                case "SAT":
+                    days.add(DayOfWeek.SATURDAY);
+                    break;
+                case "SUN":
+                    days.add(DayOfWeek.SUNDAY);
+                    break;
+                default:
+                    throw new IllegalArgumentException("鏃犳晥鐨勬槦鏈熷嚑: " + dayStr);
             }
         }
 
@@ -460,11 +493,10 @@
     }
 
 
-
     @Override
     public int delByIds(Long[] ids) {
         int i = timingTaskMapper.deleteBatchIds(Arrays.asList(ids));
-        if(i > 0){
+        if (i > 0) {
             for (Long id : ids) {
                 timingTaskScheduler.unscheduleTimingTask(id);
             }

--
Gitblit v1.9.3