doc/20261016_É豸±£ÑøÏîÄ¿ÍêÕû½Å±¾.sql
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/device/controller/MaintenanceItemController.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/device/controller/MaintenanceTaskController.java
@@ -2,38 +2,39 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.device.pojo.MaintenanceTask; import com.ruoyi.device.service.MaintenanceItemService; import com.ruoyi.device.service.MaintenanceTaskService; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import io.swagger.v3.oas.annotations.Operation; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; /** * @author :yys * @date : 2025/12/22 14:58 */ @Tag(name = "设å¤ä¿å »å®æ¶ä»»å¡ç®¡ç") @RestController @RequestMapping("/deviceMaintenanceTask") @RequiredArgsConstructor @AllArgsConstructor public class MaintenanceTaskController extends BaseController { private final MaintenanceTaskService maintenanceTaskService; private final MaintenanceItemService maintenanceItemService; private MaintenanceTaskService maintenanceTaskService; @GetMapping("/listPage") @Operation(summary = "设å¤ä¿å »å®æ¶ä»»å¡å表") public AjaxResult listPage(Page page, MaintenanceTask maintenanceTask) { return maintenanceTaskService.listPage(page, maintenanceTask); return maintenanceTaskService.listPage(page,maintenanceTask); } @PostMapping("/add") @Operation(summary = "æ·»å 设å¤ä¿å »å®æ¶ä»»å¡") @@ -56,9 +57,5 @@ return maintenanceTaskService.delete(ids); } @GetMapping("/items") @Operation(summary = "å¯ç¨ç设å¤ä¿å »é¡¹ç®") public AjaxResult items() { return AjaxResult.success(maintenanceItemService.listActive()); } } src/main/java/com/ruoyi/device/mapper/DeviceMaintenanceItemMapper.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/device/mapper/MaintenanceItemMapper.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/device/mapper/MaintenanceTaskItemMapper.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
@@ -95,12 +95,6 @@ @TableField(exist = false) private List<SparePartUse> sparePartsUseList; @TableField(exist = false) private List<Long> maintenanceItemIds; @TableField(exist = false) private List<DeviceMaintenanceItem> maintenanceItems; @Data public static class SparePartUse { private Long id; src/main/java/com/ruoyi/device/pojo/DeviceMaintenanceItem.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/device/pojo/MaintenanceItem.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/device/pojo/MaintenanceTask.java
@@ -13,7 +13,6 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; /** * @author :yys @@ -91,15 +90,6 @@ @TableField(exist = false) private String dateStr; @TableField(exist = false) private List<Long> maintenanceItemIds; @TableField(exist = false) private List<MaintenanceTaskItem> customItems; @TableField(exist = false) private List<MaintenanceTaskItem> maintenanceItems; @Schema(description = "å建该记å½çç¨æ·") @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT) src/main/java/com/ruoyi/device/pojo/MaintenanceTaskItem.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/device/service/MaintenanceItemService.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -11,11 +11,7 @@ import com.ruoyi.device.dto.DeviceMaintenanceDto; import com.ruoyi.device.execl.DeviceMaintenanceExeclDto; import com.ruoyi.device.mapper.DeviceMaintenanceMapper; import com.ruoyi.device.mapper.DeviceMaintenanceItemMapper; import com.ruoyi.device.mapper.MaintenanceItemMapper; import com.ruoyi.device.pojo.DeviceMaintenance; import com.ruoyi.device.pojo.DeviceMaintenanceItem; import com.ruoyi.device.pojo.MaintenanceItem; import com.ruoyi.device.service.IDeviceMaintenanceService; import com.ruoyi.device.vo.DeviceMaintenanceVo; import com.ruoyi.device.vo.DeviceRepairVo; @@ -24,23 +20,15 @@ import com.ruoyi.measuringinstrumentledger.pojo.SpareParts; import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord; import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import java.time.LocalDateTime; @Service @@ -51,29 +39,18 @@ private final SparePartsMapper sparePartsMapper; private final SparePartsRequisitionRecordService sparePartsRequisitionRecordService; private final FileUtil fileUtil; private final DeviceMaintenanceItemMapper deviceMaintenanceItemMapper; private final MaintenanceItemMapper maintenanceItemMapper; @Override public IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto) { IPage<DeviceMaintenanceDto> result = deviceMaintenanceMapper.queryPage(page, deviceMaintenanceDto); if (result.getRecords() != null && !result.getRecords().isEmpty()) { List<Long> ids = result.getRecords().stream().map(DeviceMaintenance::getId).toList(); List<DeviceMaintenanceItem> items = deviceMaintenanceItemMapper.selectList(new LambdaQueryWrapper<DeviceMaintenanceItem>().in(DeviceMaintenanceItem::getDeviceMaintenanceId, ids).orderByAsc(DeviceMaintenanceItem::getSortNum)); Map<Long, List<DeviceMaintenanceItem>> byRecord = items.stream().collect(Collectors.groupingBy(DeviceMaintenanceItem::getDeviceMaintenanceId)); result.getRecords().forEach(record -> record.setMaintenanceItems(byRecord.getOrDefault(record.getId(), new ArrayList<>()))); } return result; return deviceMaintenanceMapper.queryPage(page, deviceMaintenanceDto); } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult saveDeviceRepair(DeviceMaintenanceDto deviceMaintenance) { List<MaintenanceItem> selectedItems = getSelectedItems(deviceMaintenance.getMaintenanceItemIds(), null, deviceMaintenance.getDeviceLedgerId(), deviceMaintenance.getFrequencyType()); if (selectedItems == null) return AjaxResult.error("è¯·éæ©è³å°ä¸ä¸ªææçä¿å »é¡¹ç®"); boolean save = this.save(deviceMaintenance); if (save) { saveRecordItems(deviceMaintenance, selectedItems); if (save){ // å¤çå¾çä¸ä¼ fileUtil.saveStorageAttachmentByRecordTypeAndRecordId("file", RecordTypeEnum.DEVICE_MAINTENANCE, deviceMaintenance.getId(), deviceMaintenance.getStorageBlobDTOs()); return AjaxResult.success(); @@ -85,13 +62,8 @@ @Transactional(rollbackFor = Exception.class) public AjaxResult updateDeviceDeviceMaintenance(DeviceMaintenanceDto deviceMaintenance) { DeviceMaintenance oldDeviceMaintenance = this.getById(deviceMaintenance.getId()); if (oldDeviceMaintenance == null) return AjaxResult.error("ä¿å »è®°å½ä¸åå¨"); if (deviceMaintenance.getMaintenanceItems() != null) { AjaxResult validation = validateRecordItems(deviceMaintenance, oldDeviceMaintenance); if (validation != null) return validation; } // å¤çå¤ä»¶ä½¿ç¨æ åµ if (CollectionUtils.isNotEmpty(deviceMaintenance.getSparePartsUseList())) { if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(deviceMaintenance.getSparePartsUseList())) { List<Long> sparePartIds = new ArrayList<>(); for (DeviceMaintenance.SparePartUse sparePartUse : deviceMaintenance.getSparePartsUseList()) { // è·åå¤ä»¶ä¿¡æ¯ @@ -123,16 +95,6 @@ } } if (deviceMaintenance.getMaintenanceItems() != null) { AjaxResult itemResult = updateRecordItems(deviceMaintenance, oldDeviceMaintenance); if (itemResult != null) return itemResult; } else if (deviceMaintenance.getMaintenanceItemIds() != null) { List<MaintenanceItem> selectedItems = getSelectedItems(deviceMaintenance.getMaintenanceItemIds(), deviceMaintenance.getId(), oldDeviceMaintenance.getDeviceLedgerId(), oldDeviceMaintenance.getFrequencyType()); if (selectedItems == null) return AjaxResult.error("è¯·éæ©è³å°ä¸ä¸ªææçä¿å »é¡¹ç®"); deviceMaintenanceItemMapper.delete(new LambdaQueryWrapper<DeviceMaintenanceItem>().eq(DeviceMaintenanceItem::getDeviceMaintenanceId, deviceMaintenance.getId())); saveRecordItems(deviceMaintenance, selectedItems); } if (this.updateById(deviceMaintenance)) { // å¤çå¾çä¸ä¼ fileUtil.saveStorageAttachmentByRecordTypeAndRecordId("file", RecordTypeEnum.DEVICE_MAINTENANCE, deviceMaintenance.getId(), deviceMaintenance.getStorageBlobDTOs()); @@ -147,9 +109,7 @@ ArrayList<DeviceMaintenanceExeclDto> deviceLedgerExeclDtos = new ArrayList<>(); supplierManageList.forEach(deviceMaintenance -> { DeviceMaintenanceExeclDto deviceRepairExeclDto = new DeviceMaintenanceExeclDto(); BeanUtils.copyProperties(deviceMaintenance, deviceRepairExeclDto); List<DeviceMaintenanceItem> recordItems = deviceMaintenanceItemMapper.selectList(new LambdaQueryWrapper<DeviceMaintenanceItem>().eq(DeviceMaintenanceItem::getDeviceMaintenanceId, deviceMaintenance.getId()).orderByAsc(DeviceMaintenanceItem::getSortNum)); deviceRepairExeclDto.setMachineryCategory(recordItems.stream().map(DeviceMaintenanceItem::getItemName).collect(Collectors.joining("ã"))); BeanUtils.copyProperties(deviceMaintenance,deviceRepairExeclDto); deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "å¾ ç»´ä¿®" : deviceMaintenance.getStatus() == 1 ? "å®ç»" : "失败"); // deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() != null && deviceMaintenance.getMaintenanceResult() == 0 ? "ç»´ä¿®" : "å®å¥½"); deviceLedgerExeclDtos.add(deviceRepairExeclDto); @@ -161,71 +121,7 @@ @Override public DeviceMaintenanceVo detailById(Long id) { DeviceMaintenanceVo vo = deviceMaintenanceMapper.detailById(id); if (vo != null) { vo.setMaintenanceItems(deviceMaintenanceItemMapper.selectList(new LambdaQueryWrapper<DeviceMaintenanceItem>().eq(DeviceMaintenanceItem::getDeviceMaintenanceId, id).orderByAsc(DeviceMaintenanceItem::getSortNum))); } vo.setStorageBlobVOs(fileUtil.getStorageBlobVOsByRecordTypeAndRecordId(RecordTypeEnum.DEVICE_MAINTENANCE, id)); return vo; } private List<MaintenanceItem> getSelectedItems(List<Long> ids, Long recordId, Long deviceId, String frequencyType) { if (deviceId == null || !List.of("DAILY", "WEEKLY", "MONTHLY", "QUARTERLY").contains(frequencyType) || ids == null || ids.isEmpty() || new HashSet<>(ids).size() != ids.size()) return null; 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 = items.stream().collect(Collectors.toMap(MaintenanceItem::getId, item -> item)); Set<Long> existingIds = recordId == null ? Collections.emptySet() : deviceMaintenanceItemMapper.selectList(new LambdaQueryWrapper<DeviceMaintenanceItem>().eq(DeviceMaintenanceItem::getDeviceMaintenanceId, recordId)).stream().map(DeviceMaintenanceItem::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; return ids.stream().map(itemMap::get).toList(); } private void saveRecordItems(DeviceMaintenance record, List<MaintenanceItem> selectedItems) { for (int i = 0; i < selectedItems.size(); i++) { MaintenanceItem source = selectedItems.get(i); DeviceMaintenanceItem item = new DeviceMaintenanceItem(); item.setDeviceMaintenanceId(record.getId()); item.setMaintenanceItemId(source.getId()); item.setItemProject(source.getItemProject()); item.setItemName(source.getItemName()); item.setItemStatus(0); item.setSortNum(i); item.setTenantId(record.getTenantId()); item.setDeptId(record.getDeptId()); deviceMaintenanceItemMapper.insert(item); } } private AjaxResult updateRecordItems(DeviceMaintenanceDto request, DeviceMaintenance record) { AjaxResult validation = validateRecordItems(request, record); if (validation != null) return validation; List<DeviceMaintenanceItem> current = deviceMaintenanceItemMapper.selectList(new LambdaQueryWrapper<DeviceMaintenanceItem>().eq(DeviceMaintenanceItem::getDeviceMaintenanceId, record.getId())); Map<Long, DeviceMaintenanceItem> currentById = current.stream().collect(Collectors.toMap(DeviceMaintenanceItem::getId, item -> item)); for (DeviceMaintenanceItem requested : request.getMaintenanceItems()) { DeviceMaintenanceItem item = currentById.get(requested.getId()); int status = requested.getItemStatus() == null ? 0 : requested.getItemStatus(); item.setItemStatus(status); if (requested.getRemarks() != null) item.setRemarks(requested.getRemarks()); item.setCompletedBy(status == 1 ? request.getMaintenanceActuallyName() : null); item.setCompletedTime(status == 1 ? LocalDateTime.now() : null); deviceMaintenanceItemMapper.updateById(item); } return null; } private AjaxResult validateRecordItems(DeviceMaintenanceDto request, DeviceMaintenance record) { List<DeviceMaintenanceItem> requestedItems = request.getMaintenanceItems(); if (requestedItems.stream().anyMatch(item -> item == null || item.getId() == null || (item.getItemStatus() != null && (item.getItemStatus() < 0 || item.getItemStatus() > 2)))) { return AjaxResult.error("ä¿å »é¡¹ç®ç¶ææ æ"); } List<DeviceMaintenanceItem> current = deviceMaintenanceItemMapper.selectList(new LambdaQueryWrapper<DeviceMaintenanceItem>().eq(DeviceMaintenanceItem::getDeviceMaintenanceId, record.getId())); Set<Long> currentIds = current.stream().map(DeviceMaintenanceItem::getId).collect(Collectors.toSet()); Set<Long> requestedIds = requestedItems.stream().map(DeviceMaintenanceItem::getId).collect(Collectors.toSet()); if (requestedIds.size() != current.size() || !requestedIds.equals(currentIds)) { return AjaxResult.error("ä¿å »é¡¹ç®æ¸ åå·²ååï¼è¯·å·æ°åéè¯"); } return null; } } src/main/java/com/ruoyi/device/service/impl/MaintenanceItemServiceImpl.java
ÎļþÒÑɾ³ý src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskJob.java
@@ -1,11 +1,6 @@ package com.ruoyi.device.service.impl; import com.ruoyi.device.pojo.DeviceMaintenance; import com.ruoyi.device.mapper.MaintenanceTaskItemMapper; import com.ruoyi.device.mapper.DeviceMaintenanceItemMapper; import com.ruoyi.device.pojo.MaintenanceTaskItem; import com.ruoyi.device.pojo.DeviceMaintenanceItem; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.device.pojo.MaintenanceTask; import lombok.RequiredArgsConstructor; import org.quartz.*; @@ -34,12 +29,6 @@ @Autowired private JdbcTemplate jdbcTemplate; @Autowired private MaintenanceTaskItemMapper maintenanceTaskItemMapper; @Autowired private DeviceMaintenanceItemMapper deviceMaintenanceItemMapper; @Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); @@ -60,26 +49,9 @@ throw new JobExecutionException("MaintenanceTaskJobæ¾ä¸å°å®æ¶ä»»å¡: " + taskId); } List<MaintenanceTaskItem> taskItems = maintenanceTaskItemMapper.selectByTaskId(timingTask.getId()); if (taskItems.isEmpty()) { throw new JobExecutionException("ä¿å »ä»»å¡æªé ç½®ä¿å »é¡¹ç®: " + taskId); } // æä»»å¡é¡¹ç®å¿«ç §çææ¬æ¬¡ä¿å »è®°å½åé¡¹ç®æ¸ åã // 2. å建并ä¿åå·¡æ£ä»»å¡è®°å½ - è¿å°±æ¯æ¨æä¾ç代ç åºè¯¥æ¾çä½ç½® DeviceMaintenance deviceMaintenance = createInspectionTask(timingTask); deviceMaintenanceService.save(deviceMaintenance); for (MaintenanceTaskItem taskItem : taskItems) { DeviceMaintenanceItem recordItem = new DeviceMaintenanceItem(); recordItem.setDeviceMaintenanceId(deviceMaintenance.getId()); recordItem.setMaintenanceTaskItemId(taskItem.getId()); recordItem.setMaintenanceItemId(taskItem.getMaintenanceItemId()); recordItem.setItemProject(taskItem.getItemProject()); recordItem.setItemName(taskItem.getItemName()); recordItem.setItemStatus(0); recordItem.setSortNum(taskItem.getSortNum()); recordItem.setTenantId(deviceMaintenance.getTenantId()); recordItem.setDeptId(timingTask.getDeptId()); deviceMaintenanceItemMapper.insert(recordItem); } // 3. æ´æ°å®æ¶ä»»å¡çæ§è¡æ¶é´ if (!tasks.isEmpty()) { @@ -258,29 +230,14 @@ for (String dayStr : dayStrs) { switch (dayStr) { case "MON": days.add(DayOfWeek.MONDAY); break; case "TUE": days.add(DayOfWeek.TUESDAY); break; case "WED": days.add(DayOfWeek.WEDNESDAY); break; case "THU": days.add(DayOfWeek.THURSDAY); break; case "FRI": days.add(DayOfWeek.FRIDAY); break; case "SAT": days.add(DayOfWeek.SATURDAY); break; case "SUN": days.add(DayOfWeek.SUNDAY); break; default: throw new IllegalArgumentException("æ æçææå : " + dayStr); case "MON": days.add(DayOfWeek.MONDAY); break; case "TUE": days.add(DayOfWeek.TUESDAY); break; case "WED": days.add(DayOfWeek.WEDNESDAY); break; case "THU": days.add(DayOfWeek.THURSDAY); break; case "FRI": days.add(DayOfWeek.FRIDAY); break; case "SAT": days.add(DayOfWeek.SATURDAY); break; case "SUN": days.add(DayOfWeek.SUNDAY); break; default: throw new IllegalArgumentException("æ æçææå : " + dayStr); } } src/main/java/com/ruoyi/device/service/impl/MaintenanceTaskServiceImpl.java
@@ -5,11 +5,7 @@ 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; @@ -19,18 +15,9 @@ 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.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; import java.util.*; /** * @author :yys @@ -42,15 +29,13 @@ 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. å¦ææ²¡ææ°æ®ï¼ç´æ¥è¿å空å页 @@ -80,17 +65,11 @@ 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()); @@ -99,7 +78,6 @@ 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); @@ -109,16 +87,11 @@ } @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(); @@ -127,9 +100,6 @@ 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) { // æ°ç¶æä¸ºå¯ç¨ï¼æ·»å å°å®æ¶ä»»å¡è°åº¦å¨ @@ -164,88 +134,8 @@ // å仿°æ®åºä¸å é¤è®°å½ 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())); } }