PatentImageService.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package cn.cslg.pas.service;
  2. import cn.cslg.pas.common.core.base.Constants;
  3. import cn.cslg.pas.common.utils.*;
  4. import cn.cslg.pas.common.model.dto.UploadFileDTO;
  5. import cn.cslg.pas.domain.Patent;
  6. import cn.cslg.pas.domain.PatentImage;
  7. import cn.cslg.pas.mapper.PatentImageMapper;
  8. import cn.hutool.core.io.FileUtil;
  9. import cn.hutool.core.util.IdUtil;
  10. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  11. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  12. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  13. import lombok.RequiredArgsConstructor;
  14. import org.apache.poi.ss.usermodel.PictureData;
  15. import org.springframework.context.annotation.Lazy;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import org.springframework.web.multipart.MultipartFile;
  19. import java.io.IOException;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. import java.util.Map;
  23. import java.util.stream.Collectors;
  24. /**
  25. * <p>
  26. * 专利信息附图表 服务类
  27. * </p>
  28. *
  29. * @author 王岩
  30. * @since 2022-02-24
  31. */
  32. @Service
  33. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  34. public class PatentImageService extends ServiceImpl<PatentImageMapper, PatentImage> {
  35. private final FileUtils fileUtils;
  36. private final PatentService patentService;
  37. public List<PatentImage> getPatentImageByPatentId(Integer patentId) {
  38. LambdaQueryWrapper<PatentImage> queryWrapper = new LambdaQueryWrapper<>();
  39. queryWrapper.eq(PatentImage::getPatentId, patentId);
  40. return this.list(queryWrapper);
  41. }
  42. public List<PatentImage> getPatentImageByPatentIds(List<Integer> patentIds) {
  43. if (patentIds == null || patentIds.size() == 0) {
  44. return new ArrayList<>();
  45. }
  46. LambdaQueryWrapper<PatentImage> queryWrapper = new LambdaQueryWrapper<>();
  47. queryWrapper.in(PatentImage::getPatentId, patentIds);
  48. return this.list(queryWrapper);
  49. }
  50. public PatentImage getPatentImageByPatentIdAndStatus(Integer patentId, Integer status) {
  51. LambdaQueryWrapper<PatentImage> queryWrapper = new LambdaQueryWrapper<>();
  52. queryWrapper.eq(PatentImage::getPatentId, patentId);
  53. queryWrapper.eq(PatentImage::getStatus, status);
  54. return this.getOne(queryWrapper);
  55. }
  56. /**
  57. * 新增专利摘要附图方法
  58. *
  59. * @param patentId 专利id
  60. * @param pictureData 摘要附图
  61. * @return 返回摘要附图路径
  62. * @throws IOException 抛出IO异常
  63. */
  64. public String updatePatentImage(Integer patentId, PictureData pictureData) throws IOException {
  65. //专利附图表"os_patent_img"根据专利id删除该专利的摘要图片数据,以免上传重复
  66. this.deleteByPatentIdAndStatus(patentId, 1);
  67. //调用方法将图片上传至本地图片文件夹下,并返回图片的文件名称和文件路径
  68. Map<String, String> result = ExcelUtils.savePicture(pictureData);
  69. //专利附图表实体类装载数据
  70. PatentImage patentImage = new PatentImage();
  71. patentImage.setStatus(1);
  72. patentImage.setPatentId(patentId);
  73. patentImage.setUrl(result.get("path"));
  74. patentImage.setFileName(result.get("name"));
  75. //数据入库
  76. patentImage.insert();
  77. return patentImage.getUrl();
  78. }
  79. public void delete(Integer id) {
  80. PatentImage temp = this.getById(id);
  81. this.removeById(id);
  82. if (StringUtils.isNotEmpty(temp.getUrl())) {
  83. FileUtil.del(fileUtils.getSystemPath(temp.getUrl()));
  84. }
  85. }
  86. public void deleteByPatentIdAndStatus(Integer patentId, Integer status) {
  87. this.remove(Wrappers.<PatentImage>lambdaQuery().eq(PatentImage::getPatentId, patentId).eq(PatentImage::getStatus, status));
  88. }
  89. @Transactional
  90. public String add(MultipartFile file, PatentImage patentImage) {
  91. if (file == null || file.isEmpty()) {
  92. return Response.error("请选择文件");
  93. }
  94. UploadFileDTO fileDTO = fileUtils.uploadFile(file);
  95. patentImage.setUrl(fileDTO.getPath());
  96. patentImage.setFileName(fileDTO.getFileName());
  97. patentImage.insert();
  98. this.updatePatenAbstractPath(patentImage);
  99. return Response.success(patentImage.getId());
  100. }
  101. @Transactional
  102. public String edit(MultipartFile file, PatentImage patentImage) {
  103. if (file != null && !file.isEmpty()) {
  104. if (StringUtils.isNotEmpty(patentImage.getUrl())) {
  105. FileUtil.del(fileUtils.getSystemPath(patentImage.getUrl()));
  106. }
  107. UploadFileDTO fileDTO = fileUtils.uploadFile(file);
  108. patentImage.setUrl(fileDTO.getPath());
  109. patentImage.setFileName(fileDTO.getFileName());
  110. }
  111. patentImage.updateById();
  112. this.updatePatenAbstractPath(patentImage);
  113. return Response.success(true);
  114. }
  115. private void updatePatenAbstractPath(PatentImage patentImage) {
  116. if (patentImage.getStatus() == 1) {
  117. Patent patent = patentService.getById(patentImage.getPatentId());
  118. patent.setAbstractPath(patentImage.getUrl());
  119. patent.updateById();
  120. }
  121. }
  122. public void importPatentImage(String tempPath, String patentIdPatentNoJson, String patentImageJson) {
  123. List<Patent> importPatentList = JsonUtils.jsonToList(patentIdPatentNoJson, Patent.class);
  124. List<Patent> localPatentList = patentService.getPatentListByPatentNo(importPatentList.stream().map(Patent::getPatentNo).collect(Collectors.toList()));
  125. List<PatentImage> localPatentImageList = this.getPatentImageByPatentIds(localPatentList.stream().map(Patent::getId).collect(Collectors.toList()));
  126. List<PatentImage> importPatentImageList = JsonUtils.jsonToList(patentImageJson, PatentImage.class);
  127. for (PatentImage patentImage : importPatentImageList) {
  128. String fileName = IdUtil.simpleUUID() + "." + FileUtil.extName(patentImage.getFileName());
  129. String saveUrl = fileUtils.getDirectory(fileName);
  130. String savePath = fileUtils.getSystemPath(saveUrl);
  131. String tempImage = tempPath + FileUtils.FILE_SEPARATOR + Constants.PATENT_IMAGE_DIRECTORY_NAME + FileUtils.FILE_SEPARATOR + patentImage.getFileName();
  132. String patentNo = importPatentList.stream().filter(item -> item.getId().equals(patentImage.getPatentId())).findFirst().orElse(new Patent()).getPatentNo();
  133. Patent localPatent = localPatentList.stream().filter(item -> item.getPatentNo().equals(patentNo)).findFirst().orElse(null);
  134. if (localPatent == null) {
  135. continue;
  136. }
  137. patentImage.setPatentId(localPatent.getId());
  138. patentImage.setUrl(saveUrl);
  139. patentImage.setFileName(fileName);
  140. patentImage.setId(null);
  141. if (FileUtil.exist(tempImage)) {
  142. if (patentImage.getStatus().equals(1)) {
  143. Patent patent = patentService.getById(localPatent.getId());
  144. patent.setAbstractPath(saveUrl);
  145. patent.updateById();
  146. }
  147. patentImage.insert();
  148. FileUtil.copy(tempImage, savePath, true);
  149. }
  150. }
  151. localPatentImageList.forEach(item -> {
  152. item.deleteById();
  153. FileUtil.del(fileUtils.getSystemPath(item.getUrl()));
  154. });
  155. }
  156. }