From 55d694aaae4e421b5e55cd941500e08f85cb5d4d Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 27 八月 2026 18:21:33 +0800
Subject: [PATCH] feat(sales): 添加框架合同订单功能并优化销售台账管理
---
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java | 45 ++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 44 insertions(+), 1 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 779dc5f..02a444b 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -35,6 +35,7 @@
private final TimingTaskMapper timingTaskMapper;
private final TimingTaskScheduler timingTaskScheduler;
private final SysUserMapper sysUserMapper;
+ private final com.ruoyi.device.mapper.DeviceLedgerMapper deviceLedgerMapper;
private static final int ENABLED = 1;
private static final int DISABLED = 0;
@@ -53,6 +54,7 @@
if (timingTask.getIsEnabled() != null) {
queryWrapper.eq(TimingTask::getIsEnabled, timingTask.getIsEnabled());
}
+ queryWrapper.orderByDesc(TimingTask::getCreateTime);
IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, queryWrapper);
// 2. 濡傛灉娌℃湁鏁版嵁锛岀洿鎺ヨ繑鍥炵┖鍒嗛〉
@@ -130,6 +132,7 @@
throw new IllegalArgumentException("瀹氭椂浠诲姟涓嶅瓨鍦�");
}
}
+ validateDeviceExists(timingTaskDto, oldTimingTask);
TimingTask timingTask = new TimingTask();
BeanUtils.copyProperties(timingTaskDto, timingTask);
timingTask.setIsEnabled(resolveEnabledValue(timingTask.getIsEnabled(), oldTimingTask));
@@ -180,6 +183,19 @@
}
}
+ private void validateDeviceExists(TimingTaskDto timingTaskDto, TimingTask oldTimingTask) {
+ Integer taskId = timingTaskDto.getTaskId();
+ if (taskId == null && oldTimingTask != null) {
+ taskId = oldTimingTask.getTaskId();
+ }
+ if (taskId == null || taskId <= 0) {
+ return;
+ }
+ if (deviceLedgerMapper.selectById(taskId.longValue()) == null) {
+ throw new IllegalArgumentException("鎵�閫夎澶囦笉瀛樺湪锛岃閲嶆柊閫夋嫨");
+ }
+ }
+
public LocalDateTime calculateFirstExecutionTime(TimingTask task) {
// 鏍规嵁棰戠巼绫诲瀷鍜岃鎯呰绠楅娆℃墽琛屾椂闂�
String frequencyType = task.getFrequencyType();
@@ -193,8 +209,9 @@
// 濡傛灉鏄瘡鏈堟墽琛岋紝璁$畻涓嬩釜鏈堢殑鍏蜂綋鏃ユ湡
return calculateMonthlyFirstExecution(task.getFrequencyDetail());
} else if ("QUARTERLY".equals(frequencyType)) {
- // 鑷畾涔夐鐜囷紝濡傛瘡灏忔椂銆佹瘡30鍒嗛挓绛�
return calculateCustomFirstExecution(task.getFrequencyDetail());
+ } else if ("YEARLY".equals(frequencyType)) {
+ return calculateAnnualFirstExecution(task.getFrequencyDetail());
} else {
throw new IllegalArgumentException("涓嶆敮鎸佺殑棰戠巼绫诲瀷: " + task.getFrequencyType());
}
@@ -313,6 +330,32 @@
return targetDateTime;
}
+ private LocalDateTime calculateAnnualFirstExecution(String frequencyDetail) {
+ String[] parts = frequencyDetail.split(",");
+ if (parts.length != 3) {
+ throw new IllegalArgumentException("鍙傛暟鏍煎紡閿欒锛屽簲涓�'12,31,09:00'鏍煎紡");
+ }
+
+ int month;
+ int day;
+ try {
+ month = Integer.parseInt(parts[0].trim());
+ day = Integer.parseInt(parts[1].trim());
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException("鏈堜唤鎴栨棩鏈熸牸寮忛敊璇�", e);
+ }
+ if (month < 1 || month > 12 || day < 1 || day > 31) {
+ throw new IllegalArgumentException("鏈堜唤蹇呴』鍦�1-12涔嬮棿锛屾棩鏈熷繀椤诲湪1-31涔嬮棿");
+ }
+
+ LocalTime time = LocalTime.parse(parts[2].trim(), DateTimeFormatter.ofPattern("HH:mm"));
+ LocalDateTime now = LocalDateTime.now();
+ int year = now.getYear();
+ LocalDateTime target = LocalDateTime.of(LocalDate.of(year, month, Math.min(day, YearMonth.of(year, month).lengthOfMonth())), time);
+ return target.isAfter(now) ? target : LocalDateTime.of(LocalDate.of(year + 1, month,
+ Math.min(day, YearMonth.of(year + 1, month).lengthOfMonth())), time);
+ }
+
private LocalDateTime calculateCustomFirstExecution(String frequencyDetail) {
return null;
}
--
Gitblit v1.9.3