src/main/java/com/ruoyi/basic/enums/ApplicationTypeEnum.java
@@ -2,7 +2,10 @@ public enum ApplicationTypeEnum { IMAGE("image"), FILE("file"); FILE("file"), AFTER_FILE("after_file"), BEFORE_FILE("before_file"); private final String type; ApplicationTypeEnum(String type) { this.type = type; } src/main/java/com/ruoyi/basic/enums/RecordTypeEnum.java
@@ -1,7 +1,8 @@ package com.ruoyi.basic.enums; public enum RecordTypeEnum { ShippingInfo("shipping_info"); SHIPPING_INFO("shipping_info"), INSPECTION_TASK("inspection_task"); private final String type; RecordTypeEnum(String type) { this.type = type; } src/main/java/com/ruoyi/basic/utils/FileUtil.java
@@ -104,10 +104,10 @@ * * @param application 文件用途 * @param recordType 关联记录类型 * @param recordId 关联记录id * @param recordIds 关联记录id */ public void deleteStorageBlobsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum application, RecordTypeEnum recordType, Long recordId) { if (recordId == null || recordId <= 0) { public void deleteStorageBlobsByApplicationAndRecordTypeAndRecordIds(ApplicationTypeEnum application, RecordTypeEnum recordType, List<Long> recordIds) { if (recordIds == null || recordIds.isEmpty()) { throw new RuntimeException("关联记录id不能为空"); } if (application == null) { @@ -118,7 +118,7 @@ } List<StorageAttachment> storageAttachments = storageAttachmentMapper.selectList(new LambdaQueryWrapper<StorageAttachment>() .eq(StorageAttachment::getRecordType, recordType.getType()) .eq(StorageAttachment::getRecordId, recordId) .in(StorageAttachment::getRecordId, recordIds) .eq(StorageAttachment::getApplication, application.getType())); if (CollectionUtils.isNotEmpty(storageAttachments)) { List<Long> storageAttachmentIds = storageAttachments.stream().map(StorageAttachment::getStorageBlobId) @@ -137,6 +137,13 @@ storageAttachmentMapper.deleteByIds(storageAttachmentIds); } /** * 删除文件关联信息 * * @param application 文件用途 * @param recordType 关联记录类型 * @param recordId 关联记录id */ public void deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum application, RecordTypeEnum recordType, Long recordId) { if (recordId == null || recordId <= 0) { throw new RuntimeException("关联记录id不能为空"); @@ -147,7 +154,7 @@ if (recordType == null) { throw new RuntimeException("关联记录类型不能为空"); } deleteStorageBlobsByApplicationAndRecordTypeAndRecordId(application, recordType, recordId); deleteStorageBlobsByApplicationAndRecordTypeAndRecordIds(application, recordType, Arrays.asList(recordId)); storageAttachmentMapper.delete(new LambdaQueryWrapper<StorageAttachment>() .eq(StorageAttachment::getRecordType, recordType.getType()) .eq(StorageAttachment::getRecordId, recordId) @@ -155,6 +162,30 @@ } /** * 批量删除文件关联信息 attachment * * @param application 文件用途 * @param recordType 关联记录类型 * @param recordIds 关联记录id */ public void deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordIds(ApplicationTypeEnum application, RecordTypeEnum recordType, List<Long> recordIds) { if (recordIds == null || recordIds.isEmpty()) { throw new RuntimeException("关联记录id不能为空"); } if (application == null) { throw new RuntimeException("文件用途不能为空"); } if (recordType == null) { throw new RuntimeException("关联记录类型不能为空"); } deleteStorageBlobsByApplicationAndRecordTypeAndRecordIds(application, recordType, recordIds); storageAttachmentMapper.delete(new LambdaQueryWrapper<StorageAttachment>() .eq(StorageAttachment::getRecordType, recordType.getType()) .in(StorageAttachment::getRecordId, recordIds) .eq(StorageAttachment::getApplication, application.getType())); } /** * 通过文件关联id获取文件信息 attachment * * @param storageAttachmentIds 文件id src/main/java/com/ruoyi/inspectiontask/controller/InspectionTaskController.java
@@ -59,7 +59,7 @@ @PostMapping("/addOrEditInspectionTask") @Operation(summary = "巡检任务表新增修改") @Transactional(rollbackFor = Exception.class) public R addOrEditInspectionTask(@RequestBody InspectionTaskDto inspectionTaskDto) throws IOException { public R addOrEditInspectionTask(@RequestBody InspectionTaskDto inspectionTaskDto) { return R.ok(inspectionTaskService.addOrEditInspectionTask(inspectionTaskDto)); } src/main/java/com/ruoyi/inspectiontask/dto/InspectionTaskDto.java
@@ -1,7 +1,8 @@ package com.ruoyi.inspectiontask.dto; import com.ruoyi.basic.dto.StorageBlobDTO; import com.ruoyi.basic.dto.StorageBlobVO; import com.ruoyi.inspectiontask.pojo.InspectionTask; import com.ruoyi.sales.pojo.CommonFile; import lombok.Data; import java.util.List; @@ -16,9 +17,12 @@ // // private List<StorageAttachment> attachments; private List<String> tempFileIds; private List<CommonFile> commonFileList; //生产中 private List<CommonFile> commonFileListAfter; //生产后 private List<CommonFile> commonFileListBefore; //生产前 private List<StorageBlobDTO> commonFileListDTO; //生产中 private List<StorageBlobDTO> commonFileListAfterDTO; //生产后 private List<StorageBlobDTO> commonFileListBeforeDTO; //生产前 private List<StorageBlobVO> commonFileListVO; //生产中 private List<StorageBlobVO> commonFileListAfterVO; //生产后 private List<StorageBlobVO> commonFileListBeforeVO; //生产前 } src/main/java/com/ruoyi/inspectiontask/service/InspectionTaskService.java
@@ -6,8 +6,6 @@ import com.ruoyi.inspectiontask.dto.InspectionTaskDto; import com.ruoyi.inspectiontask.pojo.InspectionTask; import java.io.IOException; /** * @author :yys * @date : 2025/9/19 10:49 @@ -16,7 +14,7 @@ IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto); int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) throws IOException; int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto); int delByIds(Long[] ids); } src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -5,10 +5,9 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.mapper.StorageAttachmentMapper; import com.ruoyi.basic.mapper.StorageBlobMapper; import com.ruoyi.basic.service.StorageAttachmentService; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.basic.enums.ApplicationTypeEnum; import com.ruoyi.basic.enums.RecordTypeEnum; import com.ruoyi.basic.utils.FileUtil; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; @@ -18,18 +17,13 @@ import com.ruoyi.inspectiontask.service.InspectionTaskService; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.sales.mapper.CommonFileMapper; import com.ruoyi.sales.pojo.CommonFile; import com.ruoyi.sales.service.impl.CommonFileServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; import java.util.stream.Collectors; @@ -45,17 +39,9 @@ private final InspectionTaskMapper inspectionTaskMapper; private final StorageAttachmentService storageAttachmentService; private final StorageBlobMapper storageBlobMapper; private final StorageAttachmentMapper storageAttachmentMapper; private final SysUserMapper sysUserMapper; private final CommonFileMapper commonFileMapper; private final CommonFileServiceImpl commonFileService; private final FileUtil fileUtil; @Override public IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto) { @@ -109,16 +95,6 @@ SysUser::getUserId, SysUser::getNickName, (existing, replacement) -> existing)); //处理附件 List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>() .in(CommonFile::getCommonId, ids) .in(CommonFile::getType, Arrays.asList(FileNameType.INSPECTION.getValue(), FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue(), FileNameType.INSPECTION_PRODUCTION_AFTER.getValue()))); if(commonFiles == null){ commonFiles = new ArrayList<>(); } AtomicReference<List<CommonFile>> finalCommonFiles = new AtomicReference<>(commonFiles); List<InspectionTaskDto> dtoList = entityPage.getRecords().stream().map(inspectionTask -> { InspectionTaskDto dto = new InspectionTaskDto(); BeanUtils.copyProperties(inspectionTask, dto); // 复制主对象属性 @@ -145,11 +121,10 @@ } dto.setDateStr(inspectionTask.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); finalCommonFiles.set(finalCommonFiles.get().stream().filter(commonFile -> commonFile.getCommonId().equals(inspectionTask.getId())).collect(Collectors.toList())); // 初始化三个附件列表 dto.setCommonFileList(finalCommonFiles.get().stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION.getValue())).collect(Collectors.toList())); dto.setCommonFileListAfter(finalCommonFiles.get().stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_AFTER.getValue())).collect(Collectors.toList())); dto.setCommonFileListBefore(finalCommonFiles.get().stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue())).collect(Collectors.toList())); dto.setCommonFileListVO(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.FILE, RecordTypeEnum.INSPECTION_TASK, inspectionTask.getId())); dto.setCommonFileListAfterVO(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.AFTER_FILE, RecordTypeEnum.INSPECTION_TASK, inspectionTask.getId())); dto.setCommonFileListBeforeVO(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.BEFORE_FILE, RecordTypeEnum.INSPECTION_TASK, inspectionTask.getId())); return dto; @@ -164,7 +139,7 @@ @Override @Transactional(rollbackFor = Exception.class) public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) throws IOException { public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) { InspectionTask inspectionTask = new InspectionTask(); BeanUtils.copyProperties(inspectionTaskDto, inspectionTask); inspectionTask.setRegistrantId(SecurityUtils.getLoginUser().getUserId()); @@ -175,7 +150,11 @@ } else { i = inspectionTaskMapper.updateById(inspectionTask); } commonFileService.migrateTempFilesToFormal(inspectionTask.getId(),inspectionTaskDto.getTempFileIds()); // 保存文件 fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.INSPECTION_TASK, inspectionTask.getId(), inspectionTaskDto.getCommonFileListDTO()); fileUtil.saveStorageAttachment(ApplicationTypeEnum.AFTER_FILE, RecordTypeEnum.INSPECTION_TASK, inspectionTask.getId(), inspectionTaskDto.getCommonFileListAfterDTO()); fileUtil.saveStorageAttachment(ApplicationTypeEnum.BEFORE_FILE, RecordTypeEnum.INSPECTION_TASK, inspectionTask.getId(), inspectionTaskDto.getCommonFileListBeforeDTO()); return i; } @@ -186,9 +165,10 @@ if (ids == null || ids.length == 0) { return 0; } commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION.getValue()); commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue()); commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION_PRODUCTION_AFTER.getValue()); // 删除文件 fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordIds(ApplicationTypeEnum.FILE, RecordTypeEnum.INSPECTION_TASK, Arrays.asList(ids)); fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordIds(ApplicationTypeEnum.AFTER_FILE, RecordTypeEnum.INSPECTION_TASK, Arrays.asList(ids)); fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordIds(ApplicationTypeEnum.BEFORE_FILE, RecordTypeEnum.INSPECTION_TASK, Arrays.asList(ids)); return inspectionTaskMapper.deleteBatchIds(Arrays.asList(ids)); } src/main/java/com/ruoyi/sales/service/impl/ShippingInfoServiceImpl.java
@@ -49,7 +49,7 @@ public IPage<ShippingInfoDto> listPage(Page page, ShippingInfo req) { IPage<ShippingInfoDto> listPage = shippingInfoMapper.listPage(page, req); listPage.getRecords().forEach(item ->{ item.setStorageBlobVOs(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.IMAGE, RecordTypeEnum.ShippingInfo, item.getId())); item.setStorageBlobVOs(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.IMAGE, RecordTypeEnum.SHIPPING_INFO, item.getId())); }); return listPage; } @@ -72,7 +72,7 @@ byId.setShippingDate(req.getShippingDate()); boolean update = this.updateById(byId); // 保存文件 fileUtil.saveStorageAttachment(ApplicationTypeEnum.IMAGE, RecordTypeEnum.ShippingInfo, req.getId(), req.getStorageBlobDTOs()); fileUtil.saveStorageAttachment(ApplicationTypeEnum.IMAGE, RecordTypeEnum.SHIPPING_INFO, req.getId(), req.getStorageBlobDTOs()); return update ; }