From a217dbfc7378ff9cf5b6d3ca8b229a2b9d932e51 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 02 六月 2026 11:52:19 +0800
Subject: [PATCH] feat(device): 添加设备保养验收功能和年度定时任务支持
---
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduleUtils.java | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduleUtils.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduleUtils.java
index 5c488d2..1200c31 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduleUtils.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduleUtils.java
@@ -33,6 +33,8 @@
return calculateMonthlyNextTime(frequencyDetail, currentTime);
case "QUARTERLY":
return calculateQuarterlyNextTime(frequencyDetail, currentTime);
+ case "YEARLY":
+ return calculateYearlyNextTime(frequencyDetail, currentTime);
default:
throw new IllegalArgumentException("涓嶆敮鎸佺殑棰戠巼绫诲瀷: " + frequencyType);
}
@@ -105,6 +107,30 @@
throw new IllegalArgumentException("鏃犳硶鎵惧埌涓嬩竴娆℃墽琛屾椂闂�");
}
+ private static LocalDateTime calculateYearlyNextTime(String detail, LocalDateTime current) {
+ String[] parts = validateAndSplit(detail, ",", 3);
+ int month = validateMonth(parts[0]);
+ int dayOfMonth = validateDayOfMonth(parts[1]);
+ LocalTime time = parseTime(parts[2]);
+
+ for (int i = 0; i < 5; i++) {
+ int year = current.getYear() + i;
+ YearMonth targetYearMonth = YearMonth.of(year, month);
+ int adjustedDay = Math.min(dayOfMonth, targetYearMonth.lengthOfMonth());
+ LocalDateTime target = LocalDateTime.of(
+ year,
+ month,
+ adjustedDay,
+ time.getHour(),
+ time.getMinute()
+ );
+ if (target.isAfter(current)) {
+ return target;
+ }
+ }
+ throw new IllegalArgumentException("鏃犳硶鎵惧埌涓嬩竴娆℃墽琛屾椂闂�");
+ }
+
private static LocalTime parseTime(String timeStr) {
try {
return LocalTime.parse(timeStr, TIME_FORMATTER);
--
Gitblit v1.9.3