package com.ruoyi.business.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
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.entity.StorageAttachment;
|
import com.ruoyi.basic.entity.StorageBlob;
|
import com.ruoyi.basic.entity.dto.StorageBlobDTO;
|
import com.ruoyi.basic.mapper.StorageAttachmentMapper;
|
import com.ruoyi.basic.mapper.StorageBlobMapper;
|
import com.ruoyi.basic.service.StorageAttachmentService;
|
import com.ruoyi.business.dto.InspectionTaskDto;
|
import com.ruoyi.business.entity.InspectionTask;
|
import com.ruoyi.business.mapper.InspectionTaskMapper;
|
import com.ruoyi.business.service.InspectionTaskService;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.common.utils.bean.BeanUtils;
|
import com.ruoyi.common.utils.file.MinioUtils;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
|
import java.util.*;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
import static com.ruoyi.common.constant.StorageAttachmentConstants.StorageAttachmentFile;
|
import static com.ruoyi.common.enums.StorageAttachmentRecordType.InspectionTasks;
|
|
/**
|
* <p>
|
* 巡检任务表 服务实现类
|
* </p>
|
*
|
* @author ld
|
* @since 2025-06-14
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class InspectionTaskServiceImpl extends ServiceImpl<InspectionTaskMapper, InspectionTask> implements InspectionTaskService {
|
|
private final InspectionTaskMapper inspectionTaskMapper;
|
|
private final StorageAttachmentService storageAttachmentService;
|
|
private final StorageBlobMapper storageBlobMapper;
|
|
private final StorageAttachmentMapper storageAttachmentMapper;
|
|
private final MinioUtils minioUtils;
|
|
@Override
|
public IPage<InspectionTaskDto> selectInspectionTaskList(Page page, InspectionTaskDto inspectionTaskDto) {
|
LambdaQueryWrapper<InspectionTask> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.orderByDesc(InspectionTask::getCreateTime);
|
IPage<InspectionTask> entityPage = inspectionTaskMapper.selectPage(page, queryWrapper);
|
|
// 无数据提前返回
|
if (CollectionUtils.isEmpty(entityPage.getRecords())) {
|
return new Page<>(entityPage.getCurrent(), entityPage.getSize(), entityPage.getTotal());
|
}
|
// 获取id集合
|
List<Long> ids = entityPage.getRecords().stream().map(InspectionTask::getId).collect(Collectors.toList());
|
|
Map<Long, List<StorageAttachment>> attachmentsMap = storageAttachmentMapper.selectList(new LambdaQueryWrapper<StorageAttachment>().in(StorageAttachment::getRecordId, ids)
|
.eq(StorageAttachment::getRecordType, InspectionTasks.ordinal()))
|
.stream()
|
.collect(Collectors.groupingBy(StorageAttachment::getRecordId));
|
// 批量查询所有需要的文件数据
|
Set<Long> blobIds = attachmentsMap.values()
|
.stream()
|
.flatMap(List::stream)
|
.map(StorageAttachment::getStorageBlobId)
|
.collect(Collectors.toSet());
|
Map<Long, StorageBlob> blobMap = blobIds.isEmpty()
|
? Collections.emptyMap()
|
: storageBlobMapper.selectList(new LambdaQueryWrapper<StorageBlob>().in(StorageBlob::getId, blobIds))
|
.stream()
|
.collect(Collectors.toMap(StorageBlob::getId, Function.identity()));
|
|
List<InspectionTaskDto> dtoList = entityPage.getRecords().stream().map(inspectionTask -> {
|
InspectionTaskDto dto = new InspectionTaskDto();
|
BeanUtils.copyProperties(inspectionTask, dto); // 复制主对象属性
|
|
// 初始化三个附件列表
|
dto.setBeforeProduction(new ArrayList<>());
|
dto.setAfterProduction(new ArrayList<>());
|
dto.setProductionIssues(new ArrayList<>());
|
|
// 处理附件分类
|
Optional.ofNullable(attachmentsMap.get(inspectionTask.getId()))
|
.orElse(Collections.emptyList())
|
.forEach(attachment -> {
|
StorageBlob blob = blobMap.get(attachment.getStorageBlobId());
|
if (blob != null) {
|
// 创建附件DTO
|
StorageBlobDTO blobDto = createBlobDto(blob);
|
|
// 根据type分类
|
switch ((int) blob.getType().longValue()) {
|
case 0:
|
dto.getBeforeProduction().add(blobDto);
|
break;
|
case 1:
|
dto.getAfterProduction().add(blobDto);
|
break;
|
case 2:
|
dto.getProductionIssues().add(blobDto);
|
break;
|
default:
|
// 可选:记录未分类类型
|
break;
|
}
|
}
|
});
|
|
return dto;
|
}).collect(Collectors.toList());
|
|
// 7. 构建返回分页对象
|
IPage<InspectionTaskDto> resultPage = new Page<>();
|
resultPage.setRecords(dtoList);
|
return resultPage;
|
}
|
|
// 提取创建BlobDTO的公共方法
|
private StorageBlobDTO createBlobDto(StorageBlob blob) {
|
StorageBlobDTO dto = new StorageBlobDTO();
|
BeanUtils.copyProperties(blob, dto);
|
|
// 设置URL
|
dto.setUrl(minioUtils.getPreviewUrls(
|
blob.getBucketFilename(),
|
blob.getBucketName(),
|
true
|
));
|
|
// 设置下载URL
|
dto.setDownloadUrl(minioUtils.getDownloadUrls(
|
blob.getBucketFilename(),
|
blob.getBucketName(),
|
blob.getOriginalFilename(),
|
true
|
));
|
return dto;
|
}
|
|
@Override
|
public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) {
|
SecurityUtils.getLoginUser().getUserId();
|
InspectionTask inspectionTask = new InspectionTask();
|
BeanUtils.copyProperties(inspectionTaskDto, inspectionTask);
|
inspectionTask.setRegistrantId(SecurityUtils.getLoginUser().getUserId());
|
inspectionTask.setRegistrant(SecurityUtils.getLoginUser().getUsername());
|
int i;
|
if (Objects.isNull(inspectionTaskDto.getId())) {
|
i = inspectionTaskMapper.insert(inspectionTask);
|
} else {
|
i = inspectionTaskMapper.updateById(inspectionTask);
|
}
|
|
if (inspectionTaskDto.getStorageBlobDTO() != null && !inspectionTaskDto.getStorageBlobDTO().isEmpty()) {
|
List<StorageAttachment> attachments = new ArrayList<>();
|
|
for (StorageBlobDTO storageBlobDTO : inspectionTaskDto.getStorageBlobDTO()) {
|
StorageAttachment storageAttachment = new StorageAttachment(
|
StorageAttachmentFile,
|
(long) InspectionTasks.ordinal(),
|
inspectionTask.getId()
|
);
|
storageAttachment.setStorageBlobDTO(storageBlobDTO);
|
attachments.add(storageAttachment);
|
}
|
storageAttachmentService.saveStorageAttachment(attachments, inspectionTask.getId(), InspectionTasks, StorageAttachmentFile);
|
}
|
return i;
|
}
|
|
@Override
|
public int delByIds(Long[] ids) {
|
// 检查参数
|
if (ids == null || ids.length == 0) {
|
return 0;
|
}
|
return inspectionTaskMapper.deleteByIds(Arrays.asList(ids));
|
}
|
}
|