Browse Source

编写查询专题库专利pdf首页清单接口(未完成已注释掉)

chendayu 2 years ago
parent
commit
2a5d0e5eda

+ 4 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/PatentDTO.java

@@ -351,6 +351,10 @@ public class PatentDTO {
      */
     private String epStatus;
 
+    /**
+     * pdf首页文件base64位字节流
+     */
+    private String pdfFirstPage;
 
 
 }

+ 17 - 7
PAS/src/main/java/cn/cslg/pas/controller/PatentInstructionController.java

@@ -3,6 +3,7 @@ package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.annotation.Permission;
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.model.dto.PatentDTO;
 import cn.cslg.pas.common.model.vo.PatentInstructionVO;
 import cn.cslg.pas.common.model.vo.PatentVO;
 import cn.cslg.pas.common.utils.FileUtils;
@@ -13,6 +14,7 @@ import cn.cslg.pas.domain.PatentInstruction;
 import cn.cslg.pas.service.PatentInstructionService;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.IoUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -96,13 +98,21 @@ public class PatentInstructionController {
         }
     }
 
-    @PostMapping("/pdfFirstPage")
-    @Operation(summary = "下载多件专利的说明书首页pdf")
-    public String pdfFileFirstPage(@RequestBody PatentVO params) throws IOException {
-        log.info("开始处理【合并多个专利pdf首页】的请求,请求参数为:{}", params);
-        patentInstructionService.queryPatentPdfFirstPages(params);
-        return Response.success();
-    }
+//    @PostMapping("/pdfFirstPage")
+//    @Operation(summary = "合并导出专题库专利的pdf首页文件")
+//    public String exportPatentPdfFirstPages(@RequestBody PatentVO params) throws IOException {
+//        log.info("开始处理【合并导出专题库专利的pdf首页文件】的请求,请求参数为:{}", params);
+//        patentInstructionService.exportPatentPdfFirstPages(params);
+//        return Response.success();
+//    }
+//
+//    @Operation(summary = "查询专题库专利的pdf首页清单")
+//    @PostMapping("/queryPatentPdfFirstPages")
+//    public String queryPatentPdfFirstPages(@RequestBody PatentVO params) throws IOException {
+//        log.info("开始处理【查询专题库专利的pdf首页清单】的业务,业务参数为:{}", params);
+//        IPage<PatentDTO> patentDTOs = patentInstructionService.queryPatentPdfFirstPages(params);
+//        return Response.success(patentDTOs);
+//    }
 
 }
 

+ 282 - 227
PAS/src/main/java/cn/cslg/pas/service/PatentInstructionService.java

@@ -2,23 +2,17 @@ package cn.cslg.pas.service;
 
 
 import cn.cslg.pas.common.core.base.Constants;
-import cn.cslg.pas.common.model.dto.PatentDTO;
 import cn.cslg.pas.common.model.dto.UploadFileDTO;
 import cn.cslg.pas.common.model.vo.PatentInstructionVO;
-import cn.cslg.pas.common.model.vo.PatentVO;
-import cn.cslg.pas.common.model.vo.SystemFile;
 import cn.cslg.pas.common.utils.*;
 import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.pas.domain.Patent;
 import cn.cslg.pas.domain.PatentInstruction;
-import cn.cslg.pas.domain.Task;
 import cn.cslg.pas.mapper.PatentInstructionMapper;
 import cn.cslg.pas.service.upLoadPatent.MessageService;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ZipUtil;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -26,16 +20,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.pdfbox.multipdf.PDFMergerUtility;
-import org.apache.pdfbox.multipdf.Splitter;
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.PDPageContentStream;
-import org.apache.pdfbox.pdmodel.common.PDRectangle;
-import org.apache.pdfbox.pdmodel.font.PDFont;
-import org.apache.pdfbox.pdmodel.font.PDType1Font;
-import org.apache.pdfbox.rendering.ImageType;
-import org.apache.pdfbox.rendering.PDFRenderer;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
@@ -43,12 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.imageio.ImageIO;
-import java.awt.*;
-import java.awt.image.RenderedImage;
 import java.io.File;
-import java.io.IOException;
-import java.util.List;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -309,211 +288,287 @@ public class PatentInstructionService extends ServiceImpl<PatentInstructionMappe
         });
     }
 
-    public void queryPatentPdfFirstPages(PatentVO params) throws IOException {
-        log.info("开始处理【合并多个专利pdf首页】的业务,业务参数为:{}", params);
-
-        //根据筛选条件分页查询专利清单(这一次查询目的只是获得专利总数和总页数)
-        IPage<PatentDTO> pageList0 = patentService.getPageList(params);
-        if (pageList0 == null || pageList0.getRecords() == null || pageList0.getRecords().size() == 0) {
-            ThrowException.throwXiaoShiException("合并专利pdf首页文档失败,无专利信息!");
-        }
-
-        int total = (int) pageList0.getTotal();  //专利总数(作为任务进度总数)
-        long pages = pageList0.getPages();  //总页数(用来计算要检索几次)
-
-        ArrayList<String> filePaths = new ArrayList<>();  //存放所有临时文件(说明书pdf首页的文件)路径
-        String mergedFilePath = StringUtils.getUUID() + ".pdf";  //合并后的pdf文件路径
-        PDFMergerUtility pdfMerger = new PDFMergerUtility();  //pdf合并工具
-
-        //上传任务
-        Task task = new Task()
-                .setFileName(mergedFilePath)
-                .setProjectId(params.getProjectId())
-                .setType(6)
-                .setCreateBy(loginUtils.getId())
-                .setStartTime(DateUtils.getDateTime())
-                .setTotal(total)
-                .setStatus(6)
-                .setDefaultNum(0)
-                .setSuccessNum(0)
-                .setTrueSuccessNum(0);
-        taskService.save(task);
-
-        //一页一页检索
-        for (long i = 1; i <= pages; i++) {
-            params.setCurrent(i);
-            IPage<PatentDTO> pageList = patentService.getPageList(params);  //根据筛选条件分页查询专利清单
-            List<PatentDTO> patents = pageList.getRecords();  //取出专利清单
-            List<String> patentNos = patents.stream().map(PatentDTO::getPatentNo).collect(Collectors.toList());  //过滤取出专利号
-
-            //根据专利号patentNos查询出所有pdf文档数据
-            List<PatentInstruction> patentInstructions = this.list(new LambdaQueryWrapper<PatentInstruction>().in(PatentInstruction::getPatentNo, patentNos));
-
-            //遍历当前专利号清单
-            for (String patentNo : patentNos) {
-                List<PatentInstruction> patentInstructionList = patentInstructions.stream().filter(item -> item.getPatentNo().equals(patentNo)).collect(Collectors.toList());
-                //若有说明书pdf数据
-                PatentInstruction patentInstruction = new PatentInstruction();
-                if (patentInstructionList.size() > 1) {  //若有多个,则过滤取出授权文档
-                    patentInstruction = patentInstructionList.stream().filter(item -> item.getType() == 2).collect(Collectors.toList()).get(0);
-                } else if (patentInstructionList.size() == 1) {  //若只有一个pdf,则直接取出
-                    patentInstruction = patentInstructionList.get(0);
-                }
-                String filePath = fileUtils.getSystemPath() + patentInstruction.getUrl();
-                File pdfFile = new File(filePath);
-
-                //若没有说明书pdf数据,则手写空白页显示该专利没有说明书pdf
-                if (patentInstructionList.size() == 0 || !pdfFile.exists()) {
-                    //创建文件,设置页码
-                    PDDocument doc = new PDDocument();
-                    PDPage pageOne = new PDPage(PDRectangle.A4);
-                    doc.addPage(pageOne);
-                    //创建页面内容流
-                    PDPageContentStream contents = new PDPageContentStream(doc, pageOne, true, true, true);
-                    //设置要使用的字体类型
-                    //PDFont font = PDType1Font.COURIER_BOLD_OBLIQUE;
-                    PDFont font = PDType1Font.HELVETICA;
-                    //要写入的文本内容
-                    String message = "no pdf of " + patentNo;
-                    float fontSize = 36.0f;
-                    PDRectangle pageSize = pageOne.getMediaBox();
-                    float stringWidth = font.getStringWidth(message) * fontSize / 1000f;
-                    //计算页中心位置
-                    int rotation = pageOne.getRotation();
-                    boolean rotate = rotation == 90 || rotation == 270;
-                    float pageWidth = rotate ? pageSize.getHeight() : pageSize.getWidth();
-                    float pageHeight = rotate ? pageSize.getWidth() : pageSize.getHeight();
-                    double centeredXPosition = rotate ? pageHeight / 2f : (pageWidth - stringWidth) / 2f;
-                    double centeredYPosition = rotate ? (pageWidth - stringWidth) / 2f : pageHeight / 2f;
-                    contents.beginText();
-                    //设置字体和大小
-                    contents.setFont(font, fontSize);
-                    //设置文本颜色
-                    contents.setNonStrokingColor(Color.BLACK);
-                    if (rotate) {
-                        // rotate the text according to the page rotation
-                        contents.setTextRotation(Math.PI / 2, centeredXPosition, centeredYPosition);
-                    } else {
-                        contents.setTextTranslation(centeredXPosition, centeredYPosition);
-                    }
-                    contents.showText(message);
-                    contents.endText();
-                    //记得关闭流对象要不然是无法成功保存pdf文档的
-                    contents.close();
-                    String newFilePath = StringUtils.getUUID() + ".pdf";
-                    doc.save(newFilePath);
-                    filePaths.add(newFilePath);
-                    pdfMerger.addSource(newFilePath);
-                    doc.close();
-                    //更新任务表(完成数量+1)并发送进度
-                    task.setSuccessNum(task.getSuccessNum() + 1);
-                    task.setTrueSuccessNum(task.getTrueSuccessNum() + 1);
-                    sendMessage(total, task);
-                    //continue;
-                } else {
-                    PDDocument doc = PDDocument.load(pdfFile);
-                    Splitter splitter = new Splitter();
-                    splitter.setStartPage(1);
-                    splitter.setEndPage(1);
-                    PDDocument needDoc = splitter.split(doc).get(0);
-                    String newFilePath = StringUtils.getUUID() + ".pdf";
-                    needDoc.save(newFilePath);
-                    filePaths.add(newFilePath);
-                    pdfMerger.addSource(newFilePath);
-                    needDoc.close();
-                    doc.close();
-                    //更新任务表(完成数量+1)并发送进度
-                    task.setSuccessNum(task.getSuccessNum() + 1);
-                    task.setTrueSuccessNum(task.getTrueSuccessNum() + 1);
-                    sendMessage(total, task);
-                }
-            }
-
-        }
-
-        // 设置合并生成pdf文件名称
-        pdfMerger.setDestinationFileName(mergedFilePath);
-        // 合并PDF
-        pdfMerger.mergeDocuments();
-
-        //若最终合并成的pdf文件不存在
-        if (!new File(mergedFilePath).exists()) {
-            ThrowException.throwXiaoShiException("当前批次所有专利的说明书文档不存在或已丢失");
-        }
-
-        //File文件转成MultipartFile
-        MultipartFile multipartFile = FileToMultipartFileUtiles.fileToMultipartFile(mergedFilePath);
-        ArrayList<MultipartFile> multipartFiles = new ArrayList<>();
-        multipartFiles.add(multipartFile);
-
-        String res = fileManagerService.uploadFile(multipartFiles);
-        JSONObject jsonObject = JSONObject.parseObject(res);
-        List<Integer> fileIds = JSONArray.parseArray(jsonObject.get("data").toString(), Integer.class);
-        res = fileManagerService.getSystemFileFromFMS(fileIds);
-        List<SystemFile> systemFiles = JSONArray.parseArray(res, SystemFile.class);
-        SystemFile systemFile = systemFiles.get(0);
-        Task updateTask = new Task();
-        updateTask.setId(task.getId());
-        updateTask.setSystemFileId(fileIds.get(0));
-        updateTask.setUrl(systemFile.getFilePath().substring(systemFile.getFilePath().indexOf("file") + 4));
-        updateTask.setFileSize(Long.valueOf(systemFile.getFileLength()));
-        taskService.updateById(updateTask);
-
-        //最后要记得删除所有PDF首页临时文件
-        for (String filePath : filePaths) {  //删除每个pdf首页文件
-            new File(filePath).delete();
-        }
-        //删除最终合并的pdf首页文件
-        new File(mergedFilePath).delete();
-
-    }
-
-    /**
-     * 更新任务表(完成数量+1)、发送websocket进度
-     *
-     * @param total 任务专利总数量
-     * @param task  任务对象
-     */
-    private void sendMessage(int total, Task task) {
-        //更新任务表(完成数量+1),并发送进度+1
-        Task updateTask = new Task();
-        updateTask.setId(task.getId());
-        updateTask.setSuccessNum(task.getSuccessNum());
-        updateTask.setTrueSuccessNum(task.getTrueSuccessNum());
-        taskService.updateById(updateTask);
-        long percentage = (long) Math.floor((task.getSuccessNum() + 0D) / total * 100D);
-        //当全部完成时
-        if (task.getSuccessNum().equals(total)) {
-            percentage = 100L;
-            //任务表更新最终数据
-            task.setStatus(2);
-            updateTask.setStatus(task.getStatus());
-            updateTask.setEndTime(DateUtils.getDateTime());
-            taskService.updateById(updateTask);
-        }
-        //websocket发送进度
-        messageService.sendWebsocketMessage(task, total, task.getSuccessNum(), percentage);
-    }
-
-    public void generateBookIamge(File inputFile, File outputFile) {
-
-        try {
-            PDDocument doc = PDDocument.load(inputFile);
-            PDFRenderer pdfRenderer = new PDFRenderer(doc);
-            // 提取的页码
-            int pageNumber = 0;
-            // 以300 dpi 读取存入 BufferedImage 对象
-            int dpi = 300;
-            RenderedImage buffImage = pdfRenderer.renderImageWithDPI(pageNumber, dpi, ImageType.RGB);
-            // 将 BufferedImage 写入到 png
-            ImageIO.write(buffImage, "png", outputFile);
-
-            // 关闭文档
-            doc.close();
-
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
+//    /**
+//     * 合并导出专题库专利的pdf首页文件
+//     *
+//     * @param params 查询条件
+//     */
+//    public void exportPatentPdfFirstPages(PatentVO params) throws IOException {
+//        log.info("开始处理【合并导出专题库专利的pdf首页文件】的业务,业务参数为:{}", params);
+//
+//        //根据筛选条件分页查询专利清单(这一次查询目的只是获得专利总数和总页数)
+//        IPage<PatentDTO> pageList0 = patentService.getPageList(params);
+//        if (pageList0 == null || pageList0.getRecords() == null || pageList0.getRecords().size() == 0) {
+//            ThrowException.throwXiaoShiException("合并专利pdf首页文档失败,无专利信息!");
+//        }
+//
+//        int total = (int) pageList0.getTotal();  //专利总数(作为任务进度总数)
+//        long pages = pageList0.getPages();  //总页数(用来计算要检索几次)
+//
+//        ArrayList<String> filePaths = new ArrayList<>();  //存放所有临时文件(说明书pdf首页的文件)路径
+//        String mergedFilePath = StringUtils.getUUID() + ".pdf";  //合并后的pdf文件路径
+//        PDFMergerUtility pdfMerger = new PDFMergerUtility();  //pdf合并工具
+//
+//        //上传任务
+//        Task task = new Task()
+//                .setFileName(mergedFilePath)
+//                .setProjectId(params.getProjectId())
+//                .setType(6)
+//                .setCreateBy(loginUtils.getId())
+//                .setStartTime(DateUtils.getDateTime())
+//                .setTotal(total)
+//                .setStatus(6)
+//                .setDefaultNum(0)
+//                .setSuccessNum(0)
+//                .setTrueSuccessNum(0);
+//        taskService.save(task);
+//
+//        //一页一页检索
+//        for (long i = 1; i <= pages; i++) {
+//            params.setCurrent(i);
+//            IPage<PatentDTO> pageList = patentService.getPageList(params);  //根据筛选条件分页查询专利清单
+//            List<PatentDTO> patents = pageList.getRecords();  //取出专利清单
+//            List<String> patentNos = patents.stream().map(PatentDTO::getPatentNo).collect(Collectors.toList());  //过滤取出专利号
+//
+//            //根据专利号patentNos查询出所有pdf文档数据
+//            List<PatentInstruction> patentInstructions = this.list(new LambdaQueryWrapper<PatentInstruction>().in(PatentInstruction::getPatentNo, patentNos));
+//
+//            //遍历当前专利号清单
+//            for (String patentNo : patentNos) {
+//                List<PatentInstruction> patentInstructionList = patentInstructions.stream().filter(item -> item.getPatentNo().equals(patentNo)).collect(Collectors.toList());
+//                //若有说明书pdf数据
+//                PatentInstruction patentInstruction = new PatentInstruction();
+//                if (patentInstructionList.size() > 1) {  //若有多个,则过滤取出授权文档
+//                    patentInstruction = patentInstructionList.stream().filter(item -> item.getType() == 2).collect(Collectors.toList()).get(0);
+//                } else if (patentInstructionList.size() == 1) {  //若只有一个pdf,则直接取出
+//                    patentInstruction = patentInstructionList.get(0);
+//                }
+//                String filePath = fileUtils.getSystemPath() + patentInstruction.getUrl();
+//                File pdfFile = new File(filePath);
+//
+//                //若没有说明书pdf数据,则手写空白页显示该专利没有说明书pdf
+//                if (patentInstructionList.size() == 0 || !pdfFile.exists()) {
+//                    //创建文件,设置页码
+//                    PDDocument doc = new PDDocument();
+//                    PDPage pageOne = new PDPage(PDRectangle.A4);
+//                    doc.addPage(pageOne);
+//                    //创建页面内容流
+//                    PDPageContentStream contents = new PDPageContentStream(doc, pageOne, true, true, true);
+//                    //设置要使用的字体类型
+//                    //PDFont font = PDType1Font.COURIER_BOLD_OBLIQUE;
+//                    PDFont font = PDType1Font.HELVETICA;
+//                    //要写入的文本内容
+//                    String message = "no pdf of " + patentNo;
+//                    //设置字体大小
+//                    float fontSize = 36.0f;
+//                    PDRectangle pageSize = pageOne.getMediaBox();
+//                    float stringWidth = font.getStringWidth(message) * fontSize / 1000f;
+//                    //计算页中心位置
+//                    int rotation = pageOne.getRotation();
+//                    boolean rotate = rotation == 90 || rotation == 270;
+//                    float pageWidth = rotate ? pageSize.getHeight() : pageSize.getWidth();
+//                    float pageHeight = rotate ? pageSize.getWidth() : pageSize.getHeight();
+//                    double centeredXPosition = rotate ? pageHeight / 2f : (pageWidth - stringWidth) / 2f;
+//                    double centeredYPosition = rotate ? (pageWidth - stringWidth) / 2f : pageHeight / 2f;
+//                    contents.beginText();
+//                    //设置字体和大小
+//                    contents.setFont(font, fontSize);
+//                    //设置文本颜色
+//                    contents.setNonStrokingColor(Color.BLACK);
+//                    if (rotate) {
+//                        // rotate the text according to the page rotation
+//                        contents.setTextRotation(Math.PI / 2, centeredXPosition, centeredYPosition);
+//                    } else {
+//                        contents.setTextTranslation(centeredXPosition, centeredYPosition);
+//                    }
+//                    //开始写出文本内容
+//                    contents.showText(message);
+//                    contents.endText();
+//                    //记得关闭流对象要不然是无法成功保存pdf文档的
+//                    contents.close();
+//                    //创建临时文件 newFilePath
+//                    String newFilePath = StringUtils.getUUID() + ".pdf";
+//                    //将pdf首页写入临时文件
+//                    doc.save(newFilePath);
+//                    filePaths.add(newFilePath);
+//                    pdfMerger.addSource(newFilePath);
+//                    doc.close();
+//                } else {
+//                    PDDocument doc = PDDocument.load(pdfFile);
+//                    Splitter splitter = new Splitter();
+//                    splitter.setStartPage(1);
+//                    splitter.setEndPage(1);
+//                    PDDocument needDoc = splitter.split(doc).get(0);
+//                    String newFilePath = StringUtils.getUUID() + ".pdf";
+//                    needDoc.save(newFilePath);
+//                    filePaths.add(newFilePath);
+//                    pdfMerger.addSource(newFilePath);
+//                    needDoc.close();
+//                    doc.close();
+//                }
+//                //更新任务表(完成数量+1)并发送进度
+//                task.setSuccessNum(task.getSuccessNum() + 1);
+//                task.setTrueSuccessNum(task.getTrueSuccessNum() + 1);
+//                sendMessage(total, task);
+//            }
+//
+//        }
+//
+//        // 设置合并生成pdf文件的名称
+//        pdfMerger.setDestinationFileName(mergedFilePath);
+//        // 合并PDF
+//        pdfMerger.mergeDocuments();
+//
+//        //若最终合并成的pdf文件不存在
+//        if (!new File(mergedFilePath).exists()) {
+//            ThrowException.throwXiaoShiException("当前批次所有专利的说明书文档不存在或已丢失");
+//        }
+//
+//        //File文件转成MultipartFile,上传文件至服务器,获得文件信息,更新任务表数据
+//        MultipartFile multipartFile = FileToMultipartFileUtiles.fileToMultipartFile(mergedFilePath);
+//        ArrayList<MultipartFile> multipartFiles = new ArrayList<>();
+//        multipartFiles.add(multipartFile);
+//        String res = fileManagerService.uploadFile(multipartFiles);
+//        JSONObject jsonObject = JSONObject.parseObject(res);
+//        List<Integer> fileIds = JSONArray.parseArray(jsonObject.get("data").toString(), Integer.class);
+//        res = fileManagerService.getSystemFileFromFMS(fileIds);
+//        List<SystemFile> systemFiles = JSONArray.parseArray(res, SystemFile.class);
+//        SystemFile systemFile = systemFiles.get(0);
+//        Task updateTask = new Task();
+//        updateTask.setId(task.getId());
+//        updateTask.setSystemFileId(fileIds.get(0));
+//        updateTask.setUrl(systemFile.getFilePath().substring(systemFile.getFilePath().indexOf("file") + 4));
+//        updateTask.setFileSize(Long.valueOf(systemFile.getFileLength()));
+//        taskService.updateById(updateTask);
+//
+//        //最后要记得删除所有PDF首页临时文件
+//        for (String filePath : filePaths) {  //删除每个pdf首页文件
+//            new File(filePath).delete();
+//        }
+//        //删除最终合并的pdf首页文件
+//        new File(mergedFilePath).delete();
+//
+//    }
+//
+//    /**
+//     * 更新任务表(完成数量+1)、发送websocket进度
+//     *
+//     * @param total 任务专利总数量
+//     * @param task  任务对象
+//     */
+//    private void sendMessage(int total, Task task) {
+//        //更新任务表(完成数量+1),并发送进度+1
+//        Task updateTask = new Task();
+//        updateTask.setId(task.getId());
+//        updateTask.setSuccessNum(task.getSuccessNum());
+//        updateTask.setTrueSuccessNum(task.getTrueSuccessNum());
+//        taskService.updateById(updateTask);
+//        long percentage = (long) Math.floor((task.getSuccessNum() + 0D) / total * 100D);
+//        //当全部完成时
+//        if (task.getSuccessNum().equals(total)) {
+//            percentage = 100L;
+//            //任务表更新最终数据
+//            task.setStatus(2);
+//            updateTask.setStatus(task.getStatus());
+//            updateTask.setEndTime(DateUtils.getDateTime());
+//            taskService.updateById(updateTask);
+//        }
+//        //websocket发送进度
+//        messageService.sendWebsocketMessage(task, total, task.getSuccessNum(), percentage);
+//    }
+//
+//    public void generateBookIamge(File inputFile, File outputFile) {
+//
+//        try {
+//            PDDocument doc = PDDocument.load(inputFile);
+//            PDFRenderer pdfRenderer = new PDFRenderer(doc);
+//            // 提取的页码
+//            int pageNumber = 0;
+//            // 以300 dpi 读取存入 BufferedImage 对象
+//            int dpi = 300;
+//            RenderedImage buffImage = pdfRenderer.renderImageWithDPI(pageNumber, dpi, ImageType.RGB);
+//            // 将 BufferedImage 写入到 png
+//            ImageIO.write(buffImage, "png", outputFile);
+//
+//            // 关闭文档
+//            doc.close();
+//
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
+//
+//    /**
+//     * 查询专题库专利的pdf首页清单
+//     *
+//     * @param params 查询条件
+//     */
+//    public IPage<PatentDTO> queryPatentPdfFirstPages(PatentVO params) throws IOException {
+//        log.info("开始处理【查询专题库专利的pdf首页清单】的业务,业务参数为:{}", params);
+//
+//        //根据筛选条件分页查询专利清单(这一次查询目的只是获得专利总数和总页数)
+//        IPage<PatentDTO> pageList = patentService.getPageList(params);
+//        if (pageList == null || pageList.getRecords() == null || pageList.getRecords().size() == 0) {
+//            ThrowException.throwXiaoShiException("查询专题库专利的pdf首页清单失败,未获取到任何专利信息!");
+//        }
+//
+//        List<PatentDTO> patents = pageList.getRecords();  //取出专利清单
+//        List<String> patentNos = patents.stream().map(PatentDTO::getPatentNo).collect(Collectors.toList());  //过滤取出专利号
+//        //根据专利号patentNos查询出所有pdf文档数据
+//        List<PatentInstruction> patentInstructions = this.list(new LambdaQueryWrapper<PatentInstruction>().in(PatentInstruction::getPatentNo, patentNos));
+//
+//        //遍历专利,装载数据
+//        for (PatentDTO patent : patents) {
+//            List<PatentInstruction> patentInstructionList = patentInstructions.stream().filter(patentInstruction -> patentInstruction.getPatentNo().equals(patent.getPatentNo())).collect(Collectors.toList());
+//            PatentInstruction patentInstruction = new PatentInstruction();
+//            if (patentInstructionList.size() > 1) {  //若有两个及以上pdf,则取授权文档
+//                patentInstruction = patentInstructionList.stream().filter(item -> item.getType().equals(2)).collect(Collectors.toList()).get(0);
+//            } else if (patentInstructionList.size() == 1) {  //若只有一个pdf,则直接取
+//                patentInstruction = patentInstructionList.get(0);
+//            }
+//
+//            String filePath = fileUtils.getSystemPath() + patentInstruction.getUrl();
+//            File pdfFile = new File(filePath);
+//            if (patentInstructionList.size() == 0 || !pdfFile.exists()) {  //若没有pdf或pdf文件不存在了,则跳过当前专利
+//                continue;
+//            }
+//
+//            //取出pdf首页并存入临时文件 outputFile
+//            PDDocument doc = PDDocument.load(pdfFile);
+//            String newFilePath = StringUtils.getUUID() + ".pdf";
+//            File outputFile = new File(newFilePath);
+//            PDFRenderer pdfRenderer = new PDFRenderer(doc);
+//            // 提取的页码
+//            int pageNumber = 0;
+//            // 以300 dpi 读取存入 BufferedImage 对象
+//            int dpi = 300;
+//            RenderedImage buffImage = pdfRenderer.renderImageWithDPI(pageNumber, dpi, ImageType.RGB);
+//            // 将 BufferedImage 写入到 png
+//            ImageIO.write(buffImage, "png", outputFile);
+//            //needDoc.close();
+//            doc.close();
+//            ByteArrayOutputStream out = new ByteArrayOutputStream();
+//            FileInputStream in = new FileInputStream(outputFile);
+//            int bytesRead;
+//            byte[] buffer = new byte[8192];
+//
+//            //读取pdf首页临时文件
+//            while ((bytesRead = in.read(buffer)) != -1) {
+//                out.write(buffer, 0, bytesRead);
+//            }
+//            //关闭读取流
+//            in.close();
+//            byte[] bytes = out.toByteArray();
+//            String data = Base64.encodeBase64String(bytes);
+//            patent.setPdfFirstPage(data);
+//            //关闭写出流
+//            out.close();
+//            //最后记得删除pdf首页的临时文件
+//            new File(newFilePath).delete();
+//        }
+//
+//        pageList.setRecords(patents);
+//        return pageList;
+//    }
 
 }

+ 18 - 14
PAS/src/main/java/cn/cslg/pas/service/PatentService.java

@@ -108,15 +108,15 @@ public class PatentService extends ServiceImpl<PatentMapper, Patent> {
     public Patent getByPatentNo(String patentNo) {
         LambdaQueryWrapper<Patent> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(Patent::getPatentNo, patentNo);
-        if(patentNo.contains("CN")){
-            queryWrapper.or().eq(Patent::getPublicNo,patentNo)
-                    .or().eq(Patent::getPublicAccreditNo,patentNo);
+        if (patentNo.contains("CN")) {
+            queryWrapper.or().eq(Patent::getPublicNo, patentNo)
+                    .or().eq(Patent::getPublicAccreditNo, patentNo);
         }
         queryWrapper.orderByDesc(Patent::getId);
-      List<Patent> patents = this.list(queryWrapper);
-        Patent patent =null;
-        if(patents.size()>0){
-            patent =patents.get(0);
+        List<Patent> patents = this.list(queryWrapper);
+        Patent patent = null;
+        if (patents.size() > 0) {
+            patent = patents.get(0);
         }
         return patent;
     }
@@ -415,15 +415,15 @@ public class PatentService extends ServiceImpl<PatentMapper, Patent> {
     }
 
 
-    public Map<String,Object> getPatentListIds2(PatentVO params) {
+    public Map<String, Object> getPatentListIds2(PatentVO params) {
         this.setQueryFamilyParams(params);
         params.setSelected(new ArrayList<>());
         List<Patent> patents = this.getQueryPatentIds2(params);
         List<Integer> ids = patents.stream().map(Patent::getId).collect(Collectors.toList());
-        List<String>  patentNos =patents.stream().map(Patent::getPatentNo).collect(Collectors.toList());
-        Map<String,Object> map =new HashMap<>();
+        List<String> patentNos = patents.stream().map(Patent::getPatentNo).collect(Collectors.toList());
+        Map<String, Object> map = new HashMap<>();
         map.put("ids", ids.stream().skip(params.getStartNumber() - 1).limit(params.getEndNumber() - params.getStartNumber() + 1).collect(Collectors.toList()));
-        map.put("patentNos",patentNos.stream().skip(params.getStartNumber() - 1).limit(params.getEndNumber() - params.getStartNumber() + 1).collect(Collectors.toList()));
+        map.put("patentNos", patentNos.stream().skip(params.getStartNumber() - 1).limit(params.getEndNumber() - params.getStartNumber() + 1).collect(Collectors.toList()));
         return map;
     }
 
@@ -643,6 +643,7 @@ public class PatentService extends ServiceImpl<PatentMapper, Patent> {
         });
         return records;
     }
+
     //查询对比文件信息
     public List<PatentDTO> getRmsComparePatent(PatentVO params) {
         List<Patent> dataPage = baseMapper.getPatent(params.getPatentNos(), -1, -1);
@@ -720,6 +721,7 @@ public class PatentService extends ServiceImpl<PatentMapper, Patent> {
         List<Patent> patents = baseMapper.getConPantents(params);
         return Response.success(patents);
     }
+
     public String getConPantentsCount(QueryPatentVO params) {
         if (params.getStartNumber() != null && params.getEndNumber() != null) {
             params.setEndNumber(params.getEndNumber() - params.getStartNumber() + 1);
@@ -727,6 +729,7 @@ public class PatentService extends ServiceImpl<PatentMapper, Patent> {
         Integer count = baseMapper.getConPantentsCount(params);
         return Response.success(count);
     }
+
     public PatentDTO getPatentDTOById(Integer id, Integer projectId) {
         //根据id查询专利
         Patent patent = baseMapper.selectById(id);
@@ -802,9 +805,9 @@ public class PatentService extends ServiceImpl<PatentMapper, Patent> {
     public PatentDTO getPatentDTOById(String patentNo, Integer projectId) {
         LambdaQueryWrapper<Patent> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(Patent::getPatentNo, patentNo);
-        if(patentNo.contains("CN")){
-            wrapper.or().eq(Patent::getPublicNo,patentNo)
-                    .or().eq(Patent::getPublicAccreditNo,patentNo);
+        if (patentNo.contains("CN")) {
+            wrapper.or().eq(Patent::getPublicNo, patentNo)
+                    .or().eq(Patent::getPublicAccreditNo, patentNo);
         }
         List<Patent> patents = this.list(wrapper);
         PatentDTO patentDTO = new PatentDTO();
@@ -926,6 +929,7 @@ public class PatentService extends ServiceImpl<PatentMapper, Patent> {
         List<Patent> patentList = baseMapper.getPageList(params);
         return patentList;
     }
+
     @Async
     public void exportPatent(TaskParams taskParams) {
         try {