Explorar el Código

根据多个专利号生成这些专利的说明书pdf首页,拼成的一个大pdf

chendayu hace 2 años
padre
commit
43b648a350

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/common/config/WebSocketConfig.java

@@ -6,7 +6,7 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
 @Configuration
 public class WebSocketConfig {
-    //@Bean
+    @Bean
     public ServerEndpointExporter serverEndpointExporter() {
         return new ServerEndpointExporter();
     }

+ 3 - 3
PAS/src/main/java/cn/cslg/pas/common/model/vo/QueryTaskVO.java

@@ -21,7 +21,7 @@ public class QueryTaskVO implements Serializable {
      */
     private Integer id;
     /**
-     * 任务类型 1.Excel导入专利任务 2.导出 3.Epo欧专局导入 4.专利之星导入
+     * 任务类型 1.Excel导入 2.导出 3.EPO欧专局导入 4.专利之星导入 5.专利号导入 6.合并PDF首页导出
      */
     private Integer type;
     /**
@@ -53,7 +53,7 @@ public class QueryTaskVO implements Serializable {
      */
     private Integer endTime;
     /**
-     * 任务状态(0.队列中 1.进行中 2.已完成 4.已暂停)
+     * 任务状态(0.队列中 1.进行中 2.已完成 4.已暂停 5.已取消 6.PDF首页合并中
      */
     private Integer status;
     /**
@@ -103,7 +103,7 @@ public class QueryTaskVO implements Serializable {
     /**
      * 文件id
      */
-    private String fileId;
+    private Integer fileId;
 
     //以上若是网站导入的任务,则以下为关联任务条件表数据;以上若是Excel导入的任务,则以下都是null
     /**

+ 34 - 0
PAS/src/main/java/cn/cslg/pas/common/utils/FileToMultipartFileUtiles.java

@@ -0,0 +1,34 @@
+package cn.cslg.pas.common.utils;
+
+import org.apache.commons.compress.utils.IOUtils;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.springframework.http.MediaType;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
+
+import java.io.*;
+
+/**
+ * @author chenyu
+ * @date 2023/9/8
+ */
+public class FileToMultipartFileUtiles implements Serializable {
+
+    public static MultipartFile fileToMultipartFile(String filePath) {
+        File file = new File(filePath);
+        FileItem item = new DiskFileItemFactory().createItem("file"
+                , MediaType.MULTIPART_FORM_DATA_VALUE
+                , true
+                , file.getName());
+        try (InputStream input = new FileInputStream(file);
+             OutputStream os = item.getOutputStream()) {
+            // 流转移
+            IOUtils.copy(input, os);
+        } catch (Exception e) {
+            throw new IllegalArgumentException("Invalid file: " + e, e);
+        }
+        return new CommonsMultipartFile(item);
+    }
+
+}

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

@@ -11,7 +11,6 @@ import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
 import cn.cslg.pas.common.utils.auth.checkAuth;
 import cn.cslg.pas.domain.PatentInstruction;
 import cn.cslg.pas.service.PatentInstructionService;
-import cn.cslg.pas.service.patentPDF.PatentPDFService;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.io.IoUtil;
 import io.swagger.v3.oas.annotations.Operation;
@@ -39,7 +38,6 @@ import java.io.IOException;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class PatentInstructionController {
     private final PatentInstructionService patentInstructionService;
-    private final PatentPDFService patentPDFService;
     private final FileUtils fileUtils;
     private final LoginUtils loginUtils;
 
@@ -96,11 +94,12 @@ public class PatentInstructionController {
         }
     }
 
-    @PostMapping("/pdfFirstPage")
-    @Operation(summary = "下载多件专利的说明书首页pdf")
-    public void pdfFileFirstPage(@RequestBody PatentVO params, HttpServletResponse response) throws IOException {
-        patentPDFService.queryPatentPdfFirstPages(params, response);
-    }
+//    @PostMapping("/pdfFirstPage")
+//    @Operation(summary = "下载多件专利的说明书首页pdf")
+//    public String pdfFileFirstPage(@RequestBody PatentVO params) throws IOException {
+//        patentInstructionService.queryPatentPdfFirstPages(params);
+//        return Response.success();
+//    }
 
 }
 

+ 3 - 3
PAS/src/main/java/cn/cslg/pas/controller/PatentRightController.java

@@ -30,9 +30,9 @@ public class PatentRightController {
 
     @Operation(summary = "查询权利要求树")
     @GetMapping("/queryPatentRightTree")
-    public Response queryPatentRightTree(Integer patentId) {
-        log.info("开始处理【查询权要树】的请求,请求参数为:patentId={}", patentId);
-        List<TreeNode> treeNodes = patentRightService.queryPatentRightTree(patentId);
+    public Response queryPatentRightTree(String patentNo) {
+        log.info("开始处理【查询权要树】的请求,请求参数为:patentNo={}", patentNo);
+        List<TreeNode> treeNodes = patentRightService.queryPatentRightTree(patentNo);
         return Response.ok(treeNodes);
     }
 

+ 0 - 87
PAS/src/main/java/cn/cslg/pas/domain/SystemFile.java

@@ -1,87 +0,0 @@
-package cn.cslg.pas.domain;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-import lombok.experimental.Accessors;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 权限系统 系统文件表实体类
- *
- * @Author chenyu
- * @Date 2023/8/15
- */
-@TableName(value = "PCS_TEST.SYSTEM_FILE")
-@Accessors(chain = true)
-@Data
-public class SystemFile implements Serializable {
-    /**
-     * 主键
-     */
-    @TableId(value = "ID", type = IdType.AUTO)
-    private Integer id;
-    /**
-     * 唯一标识id(暂未使用)
-     */
-    @TableField(value = "GUID")
-    private String guid;
-    /**
-     * 服务器存储目录位置(1.本地project/pas/prod/file 2.本地project/rms/prod/file 3.生产project/pas/prod/file 4.生产project/rms/prod/file)
-     */
-    @TableField(value = "P_TYPE")
-    private Integer pType;
-    /**
-     * 文件路径
-     */
-    @TableField(value = "FILE_PATH")
-    private String filePath;
-    /**
-     * 文件名称
-     */
-    @TableField(value = "FILE_NAME")
-    private String fileName;
-    /**
-     * 原始名称
-     */
-    @TableField(value = "ORIGINAL_NAME")
-    private String originalName;
-    /**
-     * 文件大小
-     */
-    @TableField(value = "FILE_LENGTH")
-    private String fileLength;
-    /**
-     * 是否删除(0存在 1删除)
-     */
-    @TableField(value = "IS_DELETE")
-    private Integer isDelete;
-    /**
-     * 创建人id
-     */
-    @TableField(value = "CREATE_ID")
-    private Integer createId;
-    /**
-     * 创建时间
-     */
-    @TableField(value = "CREATE_TIME")
-    private Date createTime;
-    /**
-     * 更新时间
-     */
-    @TableField(value = "UPDATE_TIME")
-    private Date updateTime;
-
-
-    /**
-     * 文件对应的任务id
-     */
-    @TableField(exist = false)
-    private Integer taskId;
-
-
-}

+ 2 - 2
PAS/src/main/java/cn/cslg/pas/domain/Task.java

@@ -23,7 +23,7 @@ import java.util.List;
 public class Task extends BaseEntity<Task> {
 
     /**
-     * 任务类型 1.Excel导入 2.导出 3.EPO欧专局导入 4.专利之星导入 5.专利号导入
+     * 任务类型 1.Excel导入 2.导出 3.EPO欧专局导入 4.专利之星导入 5.专利号导入 6.合并专利PDF首页导出
      */
     @TableField("type")
     private Integer type;
@@ -75,7 +75,7 @@ public class Task extends BaseEntity<Task> {
     private Integer endTime;
 
     /**
-     * 任务状态(0.队列中 1.进行中 2.已完成 4.已暂停 5.已取消)
+     * 任务状态(0.队列中 1.进行中 2.已完成 4.已暂停 5.已取消 6.专利PDF首页合并中
      */
     @TableField("status")
     private Integer status;

+ 0 - 11
PAS/src/main/java/cn/cslg/pas/mapper/SystemFileMapper.java

@@ -1,11 +0,0 @@
-package cn.cslg.pas.mapper;
-
-import cn.cslg.pas.domain.SystemFile;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * @Author chenyu
- * @Date 2023/8/15
- */
-public interface SystemFileMapper extends BaseMapper<SystemFile> {
-}

+ 212 - 1
PAS/src/main/java/cn/cslg/pas/service/PatentInstructionService.java

@@ -2,30 +2,55 @@ 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;
 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.commons.compress.utils.IOUtils;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+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.http.MediaType;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
-import java.io.File;
+import javax.imageio.ImageIO;
+import java.awt.image.RenderedImage;
+import java.io.*;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -37,9 +62,14 @@ import java.util.stream.Collectors;
  * @author 王岩
  * @since 2022-03-02
  */
+@Slf4j
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class PatentInstructionService extends ServiceImpl<PatentInstructionMapper, PatentInstruction> {
+    private final PatentService patentService;
+    private final TaskService taskService;
+    private final MessageService messageService;
+    private final FileManagerService fileManagerService;
     private final FileUtils fileUtils;
     private final LoginUtils loginUtils;
 
@@ -280,4 +310,185 @@ public class PatentInstructionService extends ServiceImpl<PatentInstructionMappe
             FileUtil.del(fileUtils.getSystemPath(item.getUrl()));
         });
     }
+
+//    public void queryPatentPdfFirstPages(PatentVO params) throws IOException {
+//        log.info("开始处理【导出多件专利pdf首页】的业务,业务参数为:{}", params);
+//
+//        //根据筛选条件分页查询专利清单(这一次查询目的只是获得专利总数和总页数)
+//        IPage<PatentDTO> pageList0 = patentService.getPageList(params);
+//        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
+//                if (patentInstructionList.size() == 0) {
+//                    //创建文件,设置页码
+//                    PDDocument doc = new PDDocument();
+//                    PDPage pageOne = new PDPage(PDRectangle.A4);
+//                    doc.addPage(pageOne);
+//                    //创建页面内容流
+//                    PDPageContentStream contents = new PDPageContentStream(doc, pageOne);
+//                    //设置要使用的字体
+//                    PDFont font =  PDType1Font.COURIER_BOLD_OBLIQUE;
+//                    contents.setFont(font,18);
+//                    contents.beginText();
+//                    //直接写入内容即可
+//                    contents.showText("patentNo " + patentNo + " mission");
+//                    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;
+//                }
+//                //若有说明书pdf
+//                PatentInstruction patentInstruction;
+//                if (patentInstructionList.size() > 1) {  //若有多个,则过滤取出授权文档
+//                    patentInstruction = patentInstructionList.stream().filter(item -> item.getType() == 2).collect(Collectors.toList()).get(0);
+//                } else {  //若只有一个pdf,则直接取出
+//                    patentInstruction = patentInstructionList.get(0);
+//                }
+//
+//                String filePath = fileUtils.getSystemPath() + patentInstruction.getUrl();
+//                if (!new File(filePath).exists()) {  //如果说明书文档不存在了,则跳过,继续下一个
+//                    continue;
+//                }
+//                PDDocument doc = PDDocument.load(new File(filePath));
+//                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();
+//
+//        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();
+//        }
+//
+//    }
+//
+//    /**
+//     * 更新任务表(完成数量+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();
+//        }
+//    }
+
 }

+ 8 - 5
PAS/src/main/java/cn/cslg/pas/service/PatentRightService.java

@@ -483,20 +483,23 @@ public class PatentRightService extends ServiceImpl<PatentRightMapper, PatentRig
     /**
      * 查询权要树
      *
-     * @param patentId 专利id
+     * @param patentNo 专利号
      * @return 返回权要树集合
      */
-    public List<TreeNode> queryPatentRightTree(Integer patentId) {
-        log.info("开始处理【查询权要树】的业务,业务参数为:patentId={}", patentId);
+    public List<TreeNode> queryPatentRightTree(String patentNo) {
+        log.info("开始处理【查询权要树】的业务,业务参数为:patentNo={}", patentNo);
 
         //根据专利id查询出专利
-        Patent patent = patentService.getById(patentId);
+        List<Patent> patents = patentService.list(new LambdaQueryWrapper<Patent>().eq(Patent::getPatentNo, patentNo));
 
         //判断若专利不存在,则返回错误提示"专利已不存在,请尝试刷新页面"
-        if (patent == null) {
+        if (patents == null || patents.size() == 0) {
             ThrowException.throwXiaoShiException("专利已不存在,请尝试刷新页面");
         }
 
+        Patent patent = patents.get(0);
+        Integer patentId = patent.getId();
+
         //根据专利id查询出权要
         List<PatentRight> patentRights = this.list(new LambdaQueryWrapper<PatentRight>().eq(PatentRight::getPatentId, patentId));
 

+ 0 - 14
PAS/src/main/java/cn/cslg/pas/service/SystemFileService.java

@@ -1,14 +0,0 @@
-package cn.cslg.pas.service;
-
-import cn.cslg.pas.domain.SystemFile;
-import cn.cslg.pas.mapper.SystemFileMapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * @Author chenyu
- * @Date 2023/8/15
- */
-@Service
-public class SystemFileService extends ServiceImpl<SystemFileMapper, SystemFile> {
-}

+ 5 - 3
PAS/src/main/java/cn/cslg/pas/service/TaskService.java

@@ -382,11 +382,11 @@ public class TaskService extends ServiceImpl<TaskMapper, Task> implements ITaskS
 //                    String conditions = taskCondition.getConditions();
 //                    String taskNameSuffix = conditions.substring(conditions.indexOf("AN=(") + 4, conditions.indexOf(")")).replace(" OR ", "|");
 //                    type = "专利号" + taskNameSuffix;
-                    type = "专利号";
+                    type = "专利号";
                 } else if (task.getType().equals(3) || task.getType().equals(4)) {
-                    type = "检索式";
+                    type = "检索式";
                 } else if (task.getType().equals(1)) {
-                    type = "Excel";
+                    type = "Excel";
                 }
                 if (task.getProjectName() != null) {
                     to = "专题库";
@@ -400,6 +400,8 @@ public class TaskService extends ServiceImpl<TaskMapper, Task> implements ITaskS
                 }
                 if (task.getType().equals(2)) {  //导出任务
                     taskName = to + "【" + toName + "】导出 - " + task.getCreateName();
+                } else if (task.getType().equals(6)) {  //合并PDF首页导出
+                    taskName = to + "【" + toName + "】【合并专利说明书PDF首页】导出";
                 } else {  //导入任务
                     taskName = type + "导入到" + to + "【" + toName + "】 - " + task.getCreateName();
                 }

+ 0 - 154
PAS/src/main/java/cn/cslg/pas/service/patentPDF/PatentPDFService.java

@@ -1,154 +0,0 @@
-package cn.cslg.pas.service.patentPDF;
-
-import cn.cslg.pas.common.model.dto.PatentDTO;
-import cn.cslg.pas.common.model.vo.PatentVO;
-import cn.cslg.pas.common.utils.DateUtils;
-import cn.cslg.pas.common.utils.FileUtils;
-import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
-import cn.cslg.pas.common.utils.StringUtils;
-import cn.cslg.pas.domain.PatentInstruction;
-import cn.cslg.pas.domain.Task;
-import cn.cslg.pas.mapper.PatentInstructionMapper;
-import cn.cslg.pas.service.PatentService;
-import cn.cslg.pas.service.TaskService;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-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.springframework.stereotype.Service;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 查询专利的说明书pdf首页
- *
- * @author chenyu
- * @date 2023/9/6
- */
-@RequiredArgsConstructor
-@Slf4j
-@Service
-public class PatentPDFService extends ServiceImpl<PatentInstructionMapper, PatentInstruction> {
-    private final PatentService patentService;
-    private final TaskService taskService;
-    private final FileUtils fileUtils;
-    private final LoginUtils loginUtils;
-
-    public void queryPatentPdfFirstPages(PatentVO params, HttpServletResponse response) throws IOException {
-        log.info("开始处理【导出多件专利pdf首页】的业务,业务参数为:{}", params);
-
-        //根据筛选条件分页查询专利清单(这一次查询目的:只是获得专利总数和总页数)
-        IPage<PatentDTO> pageList0 = patentService.getPageList(params);
-        long total = pageList0.getTotal();  //专利总数(作为任务进度总数)
-        long pages = pageList0.getPages();  //总页数(用来计算要检索几次)
-
-        ArrayList<String> filePaths = new ArrayList<>();  //存放所有专利说明书首页pdf的文件路径
-        String mergedFilePath = StringUtils.getUUID() + ".pdf";
-        PDFMergerUtility pdfMerger = new PDFMergerUtility();
-
-        //上传任务
-        Task task = new Task()
-                .setFileName(mergedFilePath)
-                .setProjectId(params.getProjectId())
-                .setType(2)
-                .setCreateBy(loginUtils.getId())
-                .setStartTime(DateUtils.getDateTime())
-                .setTotal((int) total)
-                .setDefaultNum(0)
-                .setSuccessNum(0)
-                .setTrueSuccessNum(0);
-        taskService.save(task);
-
-        int successNum = 0;
-        //一页一页检索
-        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
-                if (patentInstructionList.size() == 0) {
-                    //更新任务表,完成数量+1,发送进度+1
-                    task.setSuccessNum(task.getSuccessNum() + 1);
-                    Task updateTask = new Task();
-                    updateTask.setId(task.getId());
-                    updateTask.setSuccessNum(++successNum);
-                    taskService.save(updateTask);
-                    continue;
-                }
-                //若有说明书pdf
-                PatentInstruction patentInstruction;
-                if (patentInstructionList.size() > 1) {  //若有多个,则过滤取出授权文档
-                    patentInstruction = patentInstructionList.stream().filter(item -> item.getType() == 2).collect(Collectors.toList()).get(0);
-                } else {  //若只有一个pdf,则直接取出
-                    patentInstruction = patentInstructionList.get(0);
-                }
-
-                String filePath = fileUtils.getSystemPath() + patentInstruction.getUrl();
-                PDDocument doc = PDDocument.load(new File(filePath));
-                Splitter splitter = new Splitter();
-                splitter.setStartPage(1);
-                splitter.setEndPage(1);
-                PDDocument needDoc = splitter.split(doc).get(0);
-                String newFilePath = "专利号【" + patentNo + "】的说明书pdf首页.pdf";
-                needDoc.save(newFilePath);
-                filePaths.add(newFilePath);
-                pdfMerger.addSource(filePath);
-
-                //更新任务表,完成数量+1,发送进度+1
-                task.setSuccessNum(task.getSuccessNum() + 1);
-                Task updateTask = new Task();
-                updateTask.setId(task.getId());
-                updateTask.setSuccessNum(++successNum);
-                taskService.save(updateTask);
-
-                needDoc.close();
-                doc.close();
-            }
-
-        }
-
-        // 设置合并生成pdf文件名称
-        pdfMerger.setDestinationFileName(mergedFilePath);
-        // 合并PDF
-        pdfMerger.mergeDocuments();
-
-//        InputStream fis = new BufferedInputStream(new FileInputStream(mergedFilePath));
-//        byte[] buffer = new byte[fis.available()];
-//        fis.read(buffer);
-//        fis.close();
-//        // 清空response
-//        response.reset();
-//        // 设置response的Header
-//        response.addHeader("Content-Disposition", "attachment;filename=" + new String(mergedFilePath.getBytes()));
-//        response.addHeader("Content-Length", "" + new File(mergedFilePath).length());
-//        OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
-//        response.setContentType("application/octet-stream");
-//        toClient.write(buffer);
-//        toClient.flush();
-//        toClient.close();
-
-        //最后要记得删除所有文件
-        for (String filePath : filePaths) {  //删除每个pdf首页文件
-            new File(filePath).delete();
-        }
-//        new File(mergedFilePath).delete();  //删除合并的pdf文件
-
-    }
-
-}

+ 2 - 2
PAS/src/main/java/cn/cslg/pas/service/upLoadPatent/MessageService.java

@@ -41,8 +41,8 @@ public class MessageService {
                 .setIndex(i)
                 .setTaskType(task.getType())
                 .setPercentage(percentage)
-                .setFileName("")
-                .setOldName(task.getOldName())
+                .setFileName(task.getFileName())
+                .setOldName("")
                 .setUrl("")
                 .setTotal(total), ResponseEnum.PATENT_IMPORT_TASK_SUCCESS), task.getCreateBy() + "");
     }