From da6b322fb0b3e80ad8bb3e0f5bdbf9e5113dbb5e Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期二, 20 十月 2026 15:22:30 +0800
Subject: [PATCH] feat: 设备保养优化,保养项目拆分
---
src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 112 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
index 0d2b421..5808c73 100644
--- a/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -5,7 +5,11 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.device.mapper.MaintenanceTaskMapper;
+import com.ruoyi.device.mapper.MaintenanceItemMapper;
+import com.ruoyi.device.mapper.MaintenanceTaskItemMapper;
+import com.ruoyi.device.pojo.MaintenanceItem;
import com.ruoyi.device.pojo.MaintenanceTask;
+import com.ruoyi.device.pojo.MaintenanceTaskItem;
import com.ruoyi.device.service.MaintenanceTaskService;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.inspectiontask.pojo.TimingTask;
@@ -15,9 +19,18 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
/**
* @author :yys
@@ -29,13 +42,15 @@
public class MaintenanceTaskServiceImpl extends ServiceImpl<MaintenanceTaskMapper, MaintenanceTask> implements MaintenanceTaskService {
private final MaintenanceTaskMapper maintenanceTaskMapper;
+ private final MaintenanceItemMapper maintenanceItemMapper;
+ private final MaintenanceTaskItemMapper maintenanceTaskItemMapper;
private final SysUserMapper sysUserMapper;
private final TimingTaskServiceImpl timingTaskService;
private final MaintenanceTaskScheduler maintenanceTaskScheduler;
@Override
public AjaxResult listPage(Page page, MaintenanceTask maintenanceTask) {
- LambdaQueryWrapper<MaintenanceTask> queryWrapper = new LambdaQueryWrapper<>();
+ LambdaQueryWrapper<MaintenanceTask> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(MaintenanceTask::getId);
Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, queryWrapper);
// 2. 濡傛灉娌℃湁鏁版嵁锛岀洿鎺ヨ繑鍥炵┖鍒嗛〉
@@ -65,11 +80,17 @@
task.setRegistrant(userNickNameMap.getOrDefault(task.getRegistrantId(), "鏈煡鐢ㄦ埛"));
}
});
+ taskPage.getRecords().forEach(this::fillTaskItems);
return AjaxResult.success(taskPage);
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public AjaxResult add(MaintenanceTask maintenanceTask) {
+ List<MaintenanceItem> selectedItems = getSelectedItems(maintenanceTask.getMaintenanceItemIds(), null, maintenanceTask.getTaskId(), maintenanceTask.getFrequencyType());
+ List<MaintenanceTaskItem> customItems = normalizeCustomItems(maintenanceTask.getCustomItems());
+ if (selectedItems == null || selectedItems.size() + customItems.size() == 0)
+ return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�涓湁鏁堢殑淇濆吇椤圭洰");
// 璁$畻棣栨鎵ц鏃堕棿
TimingTask task = new TimingTask();
task.setFrequencyType(maintenanceTask.getFrequencyType());
@@ -78,6 +99,7 @@
maintenanceTask.setNextExecutionTime(firstExecutionTime);
int insert = maintenanceTaskMapper.insert(maintenanceTask);
if (insert > 0) {
+ saveTaskItems(maintenanceTask, selectedItems, customItems);
// 鍙湁褰� isActive 涓� 1 鏃舵墠娣诲姞鍒板畾鏃朵换鍔¤皟搴﹀櫒
if (maintenanceTask.getIsActive() != null && maintenanceTask.getIsActive() == 1) {
maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask);
@@ -87,11 +109,16 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public AjaxResult updateByMaintenanceTaskId(MaintenanceTask maintenanceTask) {
MaintenanceTask maintenanceTask1 = maintenanceTaskMapper.selectById(maintenanceTask.getId());
if (maintenanceTask1 == null) {
return AjaxResult.warn("娌℃湁姝ゆ暟鎹�");
}
+ List<MaintenanceItem> selectedItems = getSelectedItems(maintenanceTask.getMaintenanceItemIds(), maintenanceTask1.getId(), maintenanceTask.getTaskId(), maintenanceTask.getFrequencyType());
+ List<MaintenanceTaskItem> customItems = normalizeCustomItems(maintenanceTask.getCustomItems());
+ if (selectedItems == null || selectedItems.size() + customItems.size() == 0)
+ return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�涓湁鏁堢殑淇濆吇椤圭洰");
// 淇濆瓨鏃х殑 isActive 鐘舵��
Integer oldIsActive = maintenanceTask1.getIsActive();
@@ -100,6 +127,9 @@
BeanUtils.copyProperties(maintenanceTask, maintenanceTask1);
int update = maintenanceTaskMapper.updateById(maintenanceTask1);
if (update > 0) {
+ maintenanceTaskItemMapper.delete(new LambdaQueryWrapper<MaintenanceTaskItem>()
+ .eq(MaintenanceTaskItem::getMaintenanceTaskId, maintenanceTask1.getId()));
+ saveTaskItems(maintenanceTask1, selectedItems, customItems);
// 澶勭悊 isActive 鐘舵�佸彉鍖�
if (newIsActive != null && newIsActive == 1) {
// 鏂扮姸鎬佷负鍚敤锛氭坊鍔犲埌瀹氭椂浠诲姟璋冨害鍣�
@@ -134,8 +164,88 @@
// 鍐嶄粠鏁版嵁搴撲腑鍒犻櫎璁板綍
int delete = maintenanceTaskMapper.deleteBatchIds(ids);
if (delete > 0) {
+ maintenanceTaskItemMapper.delete(new LambdaQueryWrapper<MaintenanceTaskItem>()
+ .in(MaintenanceTaskItem::getMaintenanceTaskId, ids));
+ }
+ if (delete > 0) {
return AjaxResult.success("鍒犻櫎鎴愬姛");
}
return AjaxResult.error("鍒犻櫎澶辫触");
}
+
+ private List<MaintenanceTaskItem> normalizeCustomItems(List<MaintenanceTaskItem> customItems) {
+ if (customItems == null) return new ArrayList<>();
+ return customItems.stream().filter(Objects::nonNull)
+ .filter(item -> item.getItemProject() != null && !item.getItemProject().trim().isEmpty()
+ && item.getItemName() != null && !item.getItemName().trim().isEmpty())
+ .peek(item -> {
+ item.setItemProject(item.getItemProject().trim());
+ item.setItemName(item.getItemName().trim());
+ })
+ .toList();
+ }
+
+ private List<MaintenanceItem> getSelectedItems(List<Long> ids, Long taskId, Long deviceId, String frequencyType) {
+ if (deviceId == null || !List.of("DAILY", "WEEKLY", "MONTHLY", "QUARTERLY").contains(frequencyType)
+ || (ids != null && new HashSet<>(ids).size() != ids.size())) return null;
+ if (ids == null || ids.isEmpty()) return new ArrayList<>();
+ List<MaintenanceItem> items = maintenanceItemMapper.selectList(new LambdaQueryWrapper<MaintenanceItem>()
+ .in(MaintenanceItem::getId, ids));
+ if (items.size() != ids.size()) return null;
+ if (items.stream().anyMatch(item -> (item.getDeviceLedgerId() != null && !deviceId.equals(item.getDeviceLedgerId()))
+ || !(frequencyType.equals(item.getFrequencyType()) || "ALL".equals(item.getFrequencyType()))))
+ return null;
+ Map<Long, MaintenanceItem> itemMap = new HashMap<>();
+ items.forEach(item -> itemMap.put(item.getId(), item));
+ Set<Long> existingIds = taskId == null ? Collections.emptySet() : maintenanceTaskItemMapper.selectList(
+ new LambdaQueryWrapper<MaintenanceTaskItem>()
+ .eq(MaintenanceTaskItem::getMaintenanceTaskId, taskId))
+ .stream().map(MaintenanceTaskItem::getMaintenanceItemId).collect(Collectors.toSet());
+ if (items.stream().anyMatch(item -> (item.getDeleted() != null && item.getDeleted() == 1
+ || item.getIsActive() == null || item.getIsActive() != 1)
+ && !existingIds.contains(item.getId()))) return null;
+ List<MaintenanceItem> sorted = new ArrayList<>();
+ ids.forEach(id -> sorted.add(itemMap.get(id)));
+ return sorted;
+ }
+
+ private void saveTaskItems(MaintenanceTask task, List<MaintenanceItem> selectedItems, List<MaintenanceTaskItem> customItems) {
+ for (int i = 0; i < selectedItems.size(); i++) {
+ MaintenanceItem source = selectedItems.get(i);
+ MaintenanceTaskItem link = new MaintenanceTaskItem();
+ link.setMaintenanceTaskId(task.getId());
+ link.setMaintenanceItemId(source.getId());
+ link.setItemProject(source.getItemProject());
+ link.setItemName(source.getItemName());
+ link.setSortNum(i);
+ link.setTenantId(task.getTenantId());
+ link.setDeptId(task.getDeptId());
+ maintenanceTaskItemMapper.insert(link);
+ }
+ for (int i = 0; i < customItems.size(); i++) {
+ MaintenanceTaskItem link = new MaintenanceTaskItem();
+ link.setMaintenanceTaskId(task.getId());
+ link.setMaintenanceItemId(null);
+ link.setItemProject(customItems.get(i).getItemProject());
+ link.setItemName(customItems.get(i).getItemName());
+ link.setSortNum(selectedItems.size() + i);
+ link.setTenantId(task.getTenantId());
+ link.setDeptId(task.getDeptId());
+ maintenanceTaskItemMapper.insert(link);
+ }
+ task.setMaintenanceItems(maintenanceTaskItemMapper.selectList(new LambdaQueryWrapper<MaintenanceTaskItem>()
+ .eq(MaintenanceTaskItem::getMaintenanceTaskId, task.getId())
+ .orderByAsc(MaintenanceTaskItem::getSortNum)));
+ task.setMaintenanceItemIds(task.getMaintenanceItems().stream()
+ .map(MaintenanceTaskItem::getMaintenanceItemId).filter(Objects::nonNull).collect(Collectors.toList()));
+ }
+
+ private void fillTaskItems(MaintenanceTask task) {
+ List<MaintenanceTaskItem> items = maintenanceTaskItemMapper.selectList(new LambdaQueryWrapper<MaintenanceTaskItem>()
+ .eq(MaintenanceTaskItem::getMaintenanceTaskId, task.getId())
+ .orderByAsc(MaintenanceTaskItem::getSortNum));
+ task.setMaintenanceItems(items);
+ task.setMaintenanceItemIds(items.stream().map(MaintenanceTaskItem::getMaintenanceItemId).filter(Objects::nonNull)
+ .collect(Collectors.toList()));
+ }
}
--
Gitblit v1.9.3