package cn.cslg.pas.service; import cn.cslg.pas.common.core.base.Constants; import cn.cslg.pas.common.utils.*; import cn.cslg.pas.common.model.dto.UploadFileDTO; import cn.cslg.pas.domain.Patent; import cn.cslg.pas.domain.PatentImage; import cn.cslg.pas.mapper.PatentImageMapper; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import org.apache.poi.ss.usermodel.PictureData; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *

* 专利信息附图表 服务类 *

* * @author 王岩 * @since 2022-02-24 */ @Service @RequiredArgsConstructor(onConstructor_ = {@Lazy}) public class PatentImageService extends ServiceImpl { private final FileUtils fileUtils; private final PatentService patentService; public List getPatentImageByPatentId(Integer patentId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(PatentImage::getPatentId, patentId); return this.list(queryWrapper); } public List getPatentImageByPatentIds(List patentIds) { if (patentIds == null || patentIds.size() == 0) { return new ArrayList<>(); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(PatentImage::getPatentId, patentIds); return this.list(queryWrapper); } public PatentImage getPatentImageByPatentIdAndStatus(Integer patentId, Integer status) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(PatentImage::getPatentId, patentId); queryWrapper.eq(PatentImage::getStatus, status); return this.getOne(queryWrapper); } /** * 新增专利摘要附图方法 * * @param patentId 专利id * @param pictureData 摘要附图 * @return 返回摘要附图路径 * @throws IOException 抛出IO异常 */ public String updatePatentImage(Integer patentId, PictureData pictureData) throws IOException { //专利附图表"os_patent_img"根据专利id删除该专利的摘要图片数据,以免上传重复 this.deleteByPatentIdAndStatus(patentId, 1); //调用方法将图片上传至本地图片文件夹下,并返回图片的文件名称和文件路径 Map result = ExcelUtils.savePicture(pictureData); //专利附图表实体类装载数据 PatentImage patentImage = new PatentImage(); patentImage.setStatus(1); patentImage.setPatentId(patentId); patentImage.setUrl(result.get("path")); patentImage.setFileName(result.get("name")); //数据入库 patentImage.insert(); return patentImage.getUrl(); } public void delete(Integer id) { PatentImage temp = this.getById(id); this.removeById(id); if (StringUtils.isNotEmpty(temp.getUrl())) { FileUtil.del(fileUtils.getSystemPath(temp.getUrl())); } } public void deleteByPatentIdAndStatus(Integer patentId, Integer status) { this.remove(Wrappers.lambdaQuery().eq(PatentImage::getPatentId, patentId).eq(PatentImage::getStatus, status)); } @Transactional public String add(MultipartFile file, PatentImage patentImage) { if (file == null || file.isEmpty()) { return Response.error("请选择文件"); } UploadFileDTO fileDTO = fileUtils.uploadFile(file); patentImage.setUrl(fileDTO.getPath()); patentImage.setFileName(fileDTO.getFileName()); patentImage.insert(); this.updatePatenAbstractPath(patentImage); return Response.success(patentImage.getId()); } @Transactional public String edit(MultipartFile file, PatentImage patentImage) { if (file != null && !file.isEmpty()) { if (StringUtils.isNotEmpty(patentImage.getUrl())) { FileUtil.del(fileUtils.getSystemPath(patentImage.getUrl())); } UploadFileDTO fileDTO = fileUtils.uploadFile(file); patentImage.setUrl(fileDTO.getPath()); patentImage.setFileName(fileDTO.getFileName()); } patentImage.updateById(); this.updatePatenAbstractPath(patentImage); return Response.success(true); } private void updatePatenAbstractPath(PatentImage patentImage) { if (patentImage.getStatus() == 1) { Patent patent = patentService.getById(patentImage.getPatentId()); patent.setAbstractPath(patentImage.getUrl()); patent.updateById(); } } public void importPatentImage(String tempPath, String patentIdPatentNoJson, String patentImageJson) { List importPatentList = JsonUtils.jsonToList(patentIdPatentNoJson, Patent.class); List localPatentList = patentService.getPatentListByPatentNo(importPatentList.stream().map(Patent::getPatentNo).collect(Collectors.toList())); List localPatentImageList = this.getPatentImageByPatentIds(localPatentList.stream().map(Patent::getId).collect(Collectors.toList())); List importPatentImageList = JsonUtils.jsonToList(patentImageJson, PatentImage.class); for (PatentImage patentImage : importPatentImageList) { String fileName = IdUtil.simpleUUID() + "." + FileUtil.extName(patentImage.getFileName()); String saveUrl = fileUtils.getDirectory(fileName); String savePath = fileUtils.getSystemPath(saveUrl); String tempImage = tempPath + FileUtils.FILE_SEPARATOR + Constants.PATENT_IMAGE_DIRECTORY_NAME + FileUtils.FILE_SEPARATOR + patentImage.getFileName(); String patentNo = importPatentList.stream().filter(item -> item.getId().equals(patentImage.getPatentId())).findFirst().orElse(new Patent()).getPatentNo(); Patent localPatent = localPatentList.stream().filter(item -> item.getPatentNo().equals(patentNo)).findFirst().orElse(null); if (localPatent == null) { continue; } patentImage.setPatentId(localPatent.getId()); patentImage.setUrl(saveUrl); patentImage.setFileName(fileName); patentImage.setId(null); if (FileUtil.exist(tempImage)) { if (patentImage.getStatus().equals(1)) { Patent patent = patentService.getById(localPatent.getId()); patent.setAbstractPath(saveUrl); patent.updateById(); } patentImage.insert(); FileUtil.copy(tempImage, savePath, true); } } localPatentImageList.forEach(item -> { item.deleteById(); FileUtil.del(fileUtils.getSystemPath(item.getUrl())); }); } }