From 83f457a2128e6964b829a76a347b9f000218e14e Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期四, 25 九月 2025 09:26:56 +0800
Subject: [PATCH] yys  修改巡检bug

---
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java |  102 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 99 insertions(+), 3 deletions(-)

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 857a4ee..33c815e 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -19,6 +19,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.*;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -76,7 +77,7 @@
         // 4. 鎵归噺鏌ヨ鐢ㄦ埛淇℃伅
         Map<Long, String> userNickNameMap = new HashMap<>();
         if (!userIds.isEmpty()) {
-            List<SysUser> users = sysUserMapper.selectUserByIds((List<Long>) userIds);
+            List<SysUser> users = sysUserMapper.selectUserByIds((new ArrayList<>(userIds)));
             users.forEach(user -> userNickNameMap.put(user.getUserId(), user.getNickName()));
         }
 
@@ -173,12 +174,107 @@
         return now.isBefore(todayExecution) ? todayExecution : todayExecution.plusDays(1);
     }
 
+    // 鏄犲皠鏄熸湡绠�鍐欎笌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);
+        WEEK_DAY_MAP.put("WED", DayOfWeek.WEDNESDAY);
+        WEEK_DAY_MAP.put("THU", DayOfWeek.THURSDAY);
+        WEEK_DAY_MAP.put("FRI", DayOfWeek.FRIDAY);
+        WEEK_DAY_MAP.put("SAT", DayOfWeek.SATURDAY);
+        WEEK_DAY_MAP.put("SUN", DayOfWeek.SUNDAY);
+    }
+
     private LocalDateTime calculateWeeklyFirstExecution(String frequencyDetail) {
-        return null;
+        // 瑙f瀽杈撳叆鍙傛暟
+        String[] parts = frequencyDetail.split(",");
+        if (parts.length != 2) {
+            throw new IllegalArgumentException("鍙傛暟鏍煎紡閿欒锛屽簲涓�'MON,13:43'鏍煎紡");
+        }
+
+        String weekDayStr = parts[0].trim();
+        String timeStr = parts[1].trim();
+
+        // 鑾峰彇瀵瑰簲鐨勬槦鏈熷嚑
+        DayOfWeek targetDay = WEEK_DAY_MAP.get(weekDayStr);
+        if (targetDay == null) {
+            throw new IllegalArgumentException("鏃犳晥鐨勬槦鏈熺畝鍐�: " + weekDayStr);
+        }
+
+        // 瑙f瀽鏃堕棿
+        LocalTime targetTime = LocalTime.parse(timeStr, DateTimeFormatter.ofPattern("HH:mm"));
+
+        // 鑾峰彇褰撳墠鏃堕棿
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime targetDateTime = now.with(targetDay).with(targetTime);
+
+        // 濡傛灉璁$畻鍑虹殑鏃堕棿鍦ㄥ綋鍓嶆椂闂翠箣鍓嶏紝鍒欏姞涓�鍛�
+        if (targetDateTime.isBefore(now)) {
+            targetDateTime = targetDateTime.plusWeeks(1);
+        }
+
+        return targetDateTime;
     }
 
     private LocalDateTime calculateMonthlyFirstExecution(String frequencyDetail) {
-        return null;
+        // 瑙f瀽杈撳叆鍙傛暟
+        String[] parts = frequencyDetail.split(",");
+        if (parts.length != 2) {
+            throw new IllegalArgumentException("鍙傛暟鏍煎紡閿欒锛屽簲涓�'03,17:00'鏍煎紡");
+        }
+
+        String dayStr = parts[0].trim();
+        String timeStr = parts[1].trim();
+
+        // 瑙f瀽鏃ユ湡
+        int dayOfMonth;
+        try {
+            dayOfMonth = Integer.parseInt(dayStr);
+        } catch (NumberFormatException e) {
+            throw new IllegalArgumentException("鏃犳晥鐨勬棩鏈熸牸寮�: " + dayStr, e);
+        }
+
+        // 楠岃瘉鏃ユ湡鏈夋晥鎬э紙1-31涔嬮棿锛�
+        if (dayOfMonth < 1 || dayOfMonth > 31) {
+            throw new IllegalArgumentException("鏃ユ湡蹇呴』鍦�1-31涔嬮棿: " + dayOfMonth);
+        }
+
+        // 瑙f瀽鏃堕棿
+        LocalTime targetTime;
+        try {
+            targetTime = LocalTime.parse(timeStr, DateTimeFormatter.ofPattern("HH:mm"));
+        } catch (DateTimeException e) {
+            throw new IllegalArgumentException("鏃犳晥鐨勬椂闂存牸寮�: " + timeStr, e);
+        }
+
+        // 鑾峰彇褰撳墠鏃堕棿
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime targetDateTime = now.withDayOfMonth(dayOfMonth).with(targetTime);
+
+        // 妫�鏌ユ棩鏈熸槸鍚﹁鑷姩璋冩暣锛堝31鏃ュ湪灏忔湀浼氳璋冩暣锛�
+        boolean isDateAdjusted = targetDateTime.getDayOfMonth() != dayOfMonth;
+
+        // 濡傛灉鐩爣鏃堕棿鍦ㄥ綋鍓嶆椂闂翠箣鍓嶏紝鎴栬�呮棩鏈熻绯荤粺鑷姩璋冩暣浜�
+        if (targetDateTime.isBefore(now) || isDateAdjusted) {
+            // 璁$畻涓嬩釜鏈堢殑鏃ユ湡
+            LocalDateTime nextMonth = now.plusMonths(1);
+            // 灏濊瘯璁剧疆涓嬩釜鏈堢殑鐩爣鏃ユ湡
+            LocalDateTime nextMonthTarget = nextMonth.withDayOfMonth(dayOfMonth).with(targetTime);
+
+            // 濡傛灉涓嬩釜鏈堢殑鏃ユ湡涔熻璋冩暣浜嗭紝灏辩敤涓嬩釜鏈堢殑鏈�鍚庝竴澶�
+            if (nextMonthTarget.getDayOfMonth() != dayOfMonth) {
+                // 姝g‘鑾峰彇涓嬩釜鏈堢殑鏈�鍚庝竴澶╋紙淇isLeapYear璋冪敤闂锛�
+                int lastDayOfMonth = nextMonth.getMonth().length(
+                        Year.of(nextMonth.getYear()).isLeap()
+                );
+                nextMonthTarget = nextMonth.withDayOfMonth(lastDayOfMonth).with(targetTime);
+            }
+
+            targetDateTime = nextMonthTarget;
+        }
+
+        return targetDateTime;
     }
 
     private LocalDateTime calculateCustomFirstExecution(String frequencyDetail) {

--
Gitblit v1.9.3