From f818fa5eca223270f0656e0455c338ec1f2fac88 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 09 六月 2026 10:04:49 +0800
Subject: [PATCH] ``` refactor(knowledge-base): 重构RAG向量检索功能的文件关联和异步处理
---
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java | 73 +++++++++++++++++++++++++++++++++---
1 files changed, 67 insertions(+), 6 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 ebe615d..3ad8951 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -6,6 +6,8 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.device.mapper.DeviceAreaMapper;
+import com.ruoyi.device.pojo.DeviceArea;
import com.ruoyi.inspectiontask.dto.TimingTaskDto;
import com.ruoyi.inspectiontask.mapper.TimingTaskMapper;
import com.ruoyi.inspectiontask.pojo.TimingTask;
@@ -35,6 +37,7 @@
private final TimingTaskMapper timingTaskMapper;
private final TimingTaskScheduler timingTaskScheduler;
private final SysUserMapper sysUserMapper;
+ private final DeviceAreaMapper deviceAreaMapper;
private static final int ENABLED = 1;
private static final int DISABLED = 0;
@@ -52,6 +55,12 @@
}
if (timingTask.getIsEnabled() != null) {
queryWrapper.eq(TimingTask::getIsEnabled, timingTask.getIsEnabled());
+ }
+ if (timingTask.getAreaId() != null) {
+ queryWrapper.eq(TimingTask::getAreaId, timingTask.getAreaId());
+ }
+ if (StringUtils.isNotBlank(timingTask.getTaskIdsStr())) {
+ queryWrapper.like(TimingTask::getTaskIdsStr, timingTask.getTaskIdsStr());
}
queryWrapper.orderByDesc(TimingTask::getCreateTime);
IPage<TimingTask> taskPage = timingTaskMapper.selectPage(page, queryWrapper);
@@ -89,6 +98,17 @@
users.forEach(user -> userNickNameMap.put(user.getUserId(), user.getNickName()));
}
+ // 4.1 鎵归噺鏌ヨ鍖哄煙鍚嶇О
+ Set<Long> areaIds = taskPage.getRecords().stream()
+ .map(TimingTask::getAreaId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ Map<Long, String> areaNameMap = new HashMap<>();
+ if (!areaIds.isEmpty()) {
+ List<DeviceArea> areas = deviceAreaMapper.selectBatchIds(new ArrayList<>(areaIds));
+ areas.forEach(area -> areaNameMap.put(area.getId(), area.getAreaName()));
+ }
+
// 5. 杞崲涓篋TO
List<TimingTaskDto> dtoList = taskPage.getRecords().stream().map(task -> {
TimingTaskDto dto = new TimingTaskDto();
@@ -112,6 +132,11 @@
dto.setInspector(inspectorNickNames);
}
+ // 璁剧疆鍖哄煙鍚嶇О
+ if (task.getAreaId() != null) {
+ dto.setAreaName(areaNameMap.getOrDefault(task.getAreaId(), ""));
+ }
+
return dto;
}).collect(Collectors.toList());
@@ -122,7 +147,7 @@
}
@Override
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
public int addOrEditTimingTask(TimingTaskDto timingTaskDto) throws SchedulerException {
TimingTask oldTimingTask = null;
if (Objects.nonNull(timingTaskDto.getId())) {
@@ -181,6 +206,34 @@
}
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int changeEnable(Long id, Integer isEnabled) throws SchedulerException {
+ TimingTask oldTimingTask = timingTaskMapper.selectById(id);
+ if (oldTimingTask == null) {
+ throw new IllegalArgumentException("瀹氭椂浠诲姟涓嶅瓨鍦�");
+ }
+ TimingTask update = new TimingTask();
+ update.setId(id);
+ update.setIsEnabled(resolveEnabledValue(isEnabled, oldTimingTask));
+ update.setActive(ENABLED == update.getIsEnabled());
+
+ int result = timingTaskMapper.updateById(update);
+ if (result <= 0) {
+ return result;
+ }
+
+ boolean enabled = isEnabled(update.getIsEnabled(), update.isActive());
+ if (!enabled) {
+ timingTaskScheduler.unscheduleTimingTask(id);
+ } else if (oldTimingTask.getIsEnabled() != null && oldTimingTask.getIsEnabled() == DISABLED) {
+ timingTaskScheduler.scheduleTimingTask(oldTimingTask);
+ } else {
+ timingTaskScheduler.resumeTimingTask(id);
+ }
+ return result;
+ }
+
public LocalDateTime calculateFirstExecutionTime(TimingTask task) {
// 鏍规嵁棰戠巼绫诲瀷鍜岃鎯呰绠楅娆℃墽琛屾椂闂�
String frequencyType = task.getFrequencyType();
@@ -194,8 +247,11 @@
// 濡傛灉鏄瘡鏈堟墽琛岋紝璁$畻涓嬩釜鏈堢殑鍏蜂綋鏃ユ湡
return calculateMonthlyFirstExecution(task.getFrequencyDetail());
} else if ("QUARTERLY".equals(frequencyType)) {
- // 鑷畾涔夐鐜囷紝濡傛瘡灏忔椂銆佹瘡30鍒嗛挓绛�
- return calculateCustomFirstExecution(task.getFrequencyDetail());
+ // 姣忓搴︽墽琛�
+ return TimingTaskScheduleUtils.calculateFirstExecutionTime("QUARTERLY", task.getFrequencyDetail());
+ } else if ("YEARLY".equals(frequencyType)) {
+ // 姣忓勾鎵ц
+ return TimingTaskScheduleUtils.calculateFirstExecutionTime("YEARLY", task.getFrequencyDetail());
} else {
throw new IllegalArgumentException("涓嶆敮鎸佺殑棰戠巼绫诲瀷: " + task.getFrequencyType());
}
@@ -315,7 +371,7 @@
}
private LocalDateTime calculateCustomFirstExecution(String frequencyDetail) {
- return null;
+ return TimingTaskScheduleUtils.calculateFirstExecutionTime("QUARTERLY", frequencyDetail);
}
@Override
@@ -356,7 +412,9 @@
case "MONTHLY":
return calculateMonthlyNextTime(frequencyDetail, currentTime);
case "QUARTERLY":
- return calculateQuarterlyNextTime(frequencyDetail, currentTime);
+ return TimingTaskScheduleUtils.calculateNextExecutionTime("QUARTERLY", frequencyDetail, currentTime);
+ case "YEARLY":
+ return TimingTaskScheduleUtils.calculateNextExecutionTime("YEARLY", frequencyDetail, currentTime);
default:
throw new IllegalArgumentException("涓嶆敮鎸佺殑棰戠巼绫诲瀷: " + frequencyType);
}
@@ -421,7 +479,7 @@
/**
* 璁$畻姣忓搴︿换鍔$殑涓嬫鎵ц鏃堕棿
*/
- private LocalDateTime calculateQuarterlyNextTime(String detail, LocalDateTime current) {
+ private LocalDateTime calculateQuarterlyNextTimeLegacy(String detail, LocalDateTime current) {
String[] parts = detail.split(",");
int quarterMonth = Integer.parseInt(parts[0]); // 1=绗�1涓湀锛�2=绗�2涓湀锛�3=绗�3涓湀
int dayOfMonth = Integer.parseInt(parts[1]);
@@ -457,6 +515,9 @@
/**
* 瑙f瀽鏄熸湡鍑犲瓧绗︿覆
*/
+ private LocalDateTime calculateQuarterlyNextTime(String detail, LocalDateTime current) {
+ return TimingTaskScheduleUtils.calculateNextExecutionTime("QUARTERLY", detail, current);
+ }
private Set<DayOfWeek> parseDayOfWeeks(String dayOfWeekStr) {
Set<DayOfWeek> days = new HashSet<>();
String[] dayStrs = dayOfWeekStr.split("\\|");
--
Gitblit v1.9.3