package com.ruoyi.project.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.project.domain.ServiceDonatebaseinfoReportFile; import com.ruoyi.project.mapper.ServiceDonatebaseinfoReportFileMapper; import com.ruoyi.project.service.IServiceDonatebaseinfoReportFileService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * 案例上报附件Service业务层处理 * * @author ruoyi * @date 2025-12-15 */ @Service public class ServiceDonatebaseinfoReportFileServiceImpl extends ServiceImpl implements IServiceDonatebaseinfoReportFileService { /** * 查询案例上报附件列表 * * @param serviceDonatebaseinfoReportFile 案例上报附件 * @return 案例上报附件 */ @Override public List queryList(ServiceDonatebaseinfoReportFile serviceDonatebaseinfoReportFile) { LambdaQueryWrapper wrappers = Wrappers.lambdaQuery(); if (serviceDonatebaseinfoReportFile.getDonatebaseinfoReportId() != null) { wrappers.eq(ServiceDonatebaseinfoReportFile::getDonatebaseinfoReportId, serviceDonatebaseinfoReportFile.getDonatebaseinfoReportId()); } if (StringUtils.isNotBlank(serviceDonatebaseinfoReportFile.getFileName())) { wrappers.eq(ServiceDonatebaseinfoReportFile::getFileName, serviceDonatebaseinfoReportFile.getFileName()); } if (StringUtils.isNotBlank(serviceDonatebaseinfoReportFile.getType())) { wrappers.eq(ServiceDonatebaseinfoReportFile::getType, serviceDonatebaseinfoReportFile.getType()); } if (StringUtils.isNotBlank(serviceDonatebaseinfoReportFile.getPath())) { wrappers.eq(ServiceDonatebaseinfoReportFile::getPath, serviceDonatebaseinfoReportFile.getPath()); } if (StringUtils.isNotBlank(serviceDonatebaseinfoReportFile.getRemart())) { wrappers.eq(ServiceDonatebaseinfoReportFile::getRemart, serviceDonatebaseinfoReportFile.getRemart()); } if (StringUtils.isNotBlank(serviceDonatebaseinfoReportFile.getCaseNo())) { wrappers.eq(ServiceDonatebaseinfoReportFile::getCaseNo, serviceDonatebaseinfoReportFile.getCaseNo()); } return this.list(wrappers); } @Transactional(rollbackFor = Exception.class) @Override public Boolean addList(List serviceDonatebaseinfoReportFiles,String caseNo,String createName) { boolean save = false; if (CollectionUtils.isNotEmpty(serviceDonatebaseinfoReportFiles)) { for (ServiceDonatebaseinfoReportFile serviceDonatebaseinfoReportFile : serviceDonatebaseinfoReportFiles) { serviceDonatebaseinfoReportFile.setCreateTime(new Date()); serviceDonatebaseinfoReportFile.setCreateBy(createName); serviceDonatebaseinfoReportFile.setCaseNo(caseNo); serviceDonatebaseinfoReportFile.setCreateTime(new Date()); save = save(serviceDonatebaseinfoReportFile); } } return save; } @Transactional(rollbackFor = Exception.class) @Override public Boolean updateList(List serviceDonatebaseinfoReportFiles, Long reportId,String caseNo,String updateName) { // 先将数据查出来 List list = list(new LambdaQueryWrapper().eq(ServiceDonatebaseinfoReportFile::getDonatebaseinfoReportId, reportId)); // 提取现有记录的路径集合,用于高效比较 Set existingPaths = list.stream().map(file -> StringUtils.isNotEmpty(file.getFileName()) ? file.getFileName().trim() : "").filter(StringUtils::isNotEmpty).collect(Collectors.toSet()); // 提取待处理路径集合 Set newPathSet = serviceDonatebaseinfoReportFiles.stream().map(serviceDonatebaseinfoReportFile -> StringUtils.isNotEmpty(serviceDonatebaseinfoReportFile.getFileName()) ? serviceDonatebaseinfoReportFile.getFileName().trim() : "").filter(StringUtils::isNotEmpty).collect(Collectors.toSet()); boolean result = true; // 标记需要删除的记录(存在于数据库但不在新列表中) for (ServiceDonatebaseinfoReportFile file : list) { if (StringUtils.isNotEmpty(file.getPath()) && !newPathSet.contains(file.getPath().trim())) { file.setDelFlag(1); file.setUpdateTime(new Date()); file.setUpdateBy(updateName); result &= updateById(file); } } // 添加新的记录 for (ServiceDonatebaseinfoReportFile serviceDonatebaseinfoReportFile : serviceDonatebaseinfoReportFiles) { if (StringUtils.isNotEmpty(serviceDonatebaseinfoReportFile.getFileName()) && !existingPaths.contains(serviceDonatebaseinfoReportFile.getFileName().trim())) { serviceDonatebaseinfoReportFile.setUpdateBy(updateName); serviceDonatebaseinfoReportFile.setUpdateTime(new Date()); serviceDonatebaseinfoReportFile.setCaseNo(caseNo); result &= save(serviceDonatebaseinfoReportFile); } } return result; } }