xiexiang 1 jaar geleden
bovenliggende
commit
df011dc97a

+ 7 - 1
src/main/java/cn/cslg/pas/common/dto/PatentExport/PatentExportVO.java

@@ -11,7 +11,7 @@ public class PatentExportVO {
     /**
      * 字段名
      */
-    private String key;
+    private String value;
 
     /**
      * 字段中文
@@ -32,4 +32,10 @@ public class PatentExportVO {
      * 类型
      */
     private String type;
+
+    private Boolean ifShow;
+
+    private Boolean ifHidden;
+
+    private Integer createType;
 }

+ 75 - 0
src/main/java/cn/cslg/pas/common/dto/business/ScratchWordsDTO.java

@@ -0,0 +1,75 @@
+package cn.cslg.pas.common.dto.business;
+
+import lombok.Data;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/10
+ */
+@Data
+public class ScratchWordsDTO {
+    /**
+     * 创建人
+     */
+    private String createId;
+
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+    /**
+     * 位置
+     */
+    private Integer position;
+
+    /**
+     * 内容
+     */
+    private String text;
+
+    /**
+     * 划词栏位
+     */
+    private String scratchField;
+
+    /**
+     * 划词类型(0下划线,1高亮,2波浪线)
+     */
+    private Integer scratchType;
+
+    /**
+     * 划词颜色
+     */
+    private String color;
+
+    /**
+     * 标引备注
+     */
+    private String remark;
+
+    /**
+     * 创建来源
+     */
+    private Integer createFrom;
+
+    /**
+     * 存放id(专题库id/报告id)
+     */
+    private Integer projectId;
+
+    /**
+     * 公开类型(0私有1公有)
+     */
+    private Integer permissionType;
+
+    /**
+     * 公开范围(true只在来源处可见/false所有地方可见)
+     */
+    private String rangeType;
+}

+ 76 - 0
src/main/java/cn/cslg/pas/common/dto/business/UpdateScratchWordsDTO.java

@@ -0,0 +1,76 @@
+package cn.cslg.pas.common.dto.business;
+
+import lombok.Data;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/10
+ */
+@Data
+public class UpdateScratchWordsDTO {
+    private Integer id;
+    /**
+     * 创建人
+     */
+    private String createId;
+
+    /**
+     * 租户id
+     */
+    private Integer tenantId;
+
+    /**
+     * 专利号
+     */
+    private String patentNo;
+
+    /**
+     * 位置
+     */
+    private Integer position;
+
+    /**
+     * 内容
+     */
+    private String text;
+
+    /**
+     * 划词栏位
+     */
+    private String scratchField;
+
+    /**
+     * 划词类型(0下划线,1高亮,2波浪线)
+     */
+    private Integer scratchType;
+
+    /**
+     * 划词颜色
+     */
+    private String color;
+
+    /**
+     * 标引备注
+     */
+    private String remark;
+
+    /**
+     * 创建来源
+     */
+    private Integer createFrom;
+
+    /**
+     * 存放id(专题库id/报告id)
+     */
+    private Integer projectId;
+
+    /**
+     * 公开类型(0私有1公有)
+     */
+    private Integer permissionType;
+
+    /**
+     * 公开范围(true只在来源处可见/false所有地方可见)
+     */
+    private String rangeType;
+}

+ 11 - 17
src/main/java/cn/cslg/pas/common/utils/GenerateObjectUtil.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
 import org.springframework.cglib.beans.BeanGenerator;
 import org.springframework.stereotype.Component;
 
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Map;
@@ -13,23 +14,6 @@ import java.util.Map;
 @Component
 public class GenerateObjectUtil {
 
-    /*public static Object generateObjectByField(List<DomainFieldDTO> domainFieldDTOS) throws Exception {
-        BeanGenerator generator = new BeanGenerator();
-        for (DomainFieldDTO domainFieldDTO : domainFieldDTOS) {
-            generator.addProperty(domainFieldDTO.getField(), java.lang.String.class);
-        }
-        // 构建对象
-        Object obj = generator.create();
-        // 赋值
-        for (DomainFieldDTO domainFieldDTO : domainFieldDTOS) {
-            BeanUtils.setProperty(obj, domainFieldDTO.getField(), domainFieldDTO.getValue());
-        }
-
-        // json转换去掉前缀
-        String gsonString = JSONObject.toJSONString(obj).replace("$cglib_prop_", "");
-        return JSON.parseObject(gsonString, Object.class);
-
-    }*/
 
     public static void setObjectProperty(Object obj, String propertyName, Object value) throws Exception {
         String setMethodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
@@ -37,4 +21,14 @@ public class GenerateObjectUtil {
         method.invoke(obj, value);
     }
 
+    public static Object getPropertyValue(Object obj, String propertyName){
+        try {
+            String getMethodName = "get" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
+            Method method = obj.getClass().getMethod(getMethodName);
+            return method.invoke(obj);
+        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
 }

+ 3 - 0
src/main/java/cn/cslg/pas/common/vo/es/EsCustomFieldBatchVO.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.vo.es;
 
+import cn.cslg.pas.common.dto.PatentExport.PatentExportVO;
 import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
 import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
 import lombok.Data;
@@ -27,4 +28,6 @@ public class EsCustomFieldBatchVO {
 
     private List<EsCustomFieldDTO> esCustomFieldDTOS;
 
+    private List<PatentExportVO> selected;
+
 }

+ 11 - 14
src/main/java/cn/cslg/pas/controller/PatentController.java

@@ -191,7 +191,7 @@ public class PatentController {
     @PostMapping("/exportPDFFirstPage")
     @Operation(summary = "导出专利PDF")
     public ResponseEntity<InputStreamResource> exportPDFFirstPage(@RequestBody EsCustomFieldBatchVO EsVO) throws IOException {
-        byte[] fileData = pdfExportFirstPageService.mergePDFFirstPage(EsVO);
+        byte[] fileData = pdfExportFirstPageService.mergePdfFirstPage(EsVO);
         //保存生成excel的地址
         String fileName = IdUtil.simpleUUID() + ".pdf";
         //文件原始名中的中文字符可能会乱码,对文件名进行URL编码
@@ -204,20 +204,17 @@ public class PatentController {
 
     @PostMapping("/export")
     @Operation(summary = "导出专利")
-    public ResponseEntity<InputStreamResource> export(@RequestBody PatentExportParams params) throws IOException {
-        Integer taskId = 1;
-        TaskParams taskParams = new TaskParams();
-        taskParams.setTaskId(taskId);
-        taskParams.setTaskType(2);
-        taskParams.setProjectId(params.getProjectId());
-        taskParams.setSelected(JsonUtils.objectToJson(params.getSelected()));
-        taskParams.setCreateId("328");
-        byte[] fileData = patentExportService.exportPatent(taskParams);
+    public ResponseEntity<InputStreamResource> export(@RequestBody EsCustomFieldBatchVO EsVO) throws IOException {
+//        Integer taskId = 1;
+//        TaskParams taskParams = new TaskParams();
+//        taskParams.setTaskId(taskId);
+//        taskParams.setTaskType(2);
+//        taskParams.setProjectId(EsVO.getProjectId());
+//        taskParams.setSelected(JsonUtils.objectToJson(EsVO.getSelected()));
+//        taskParams.setCreateId("328");
+        byte[] fileData = patentExportService.exportPatent(EsVO);
         //保存生成excel的地址
-        String fileName = "导出专利报表.xlsx";
-//        String fileName = IdUtil.simpleUUID() + ".xls";
-//        String directoryName = fileUtils.createDirectory();
-//        String savePath = fileUtils.getSavePath(directoryName);
+        String fileName = IdUtil.simpleUUID() + ".xls";
         //文件原始名中的中文字符可能会乱码,对文件名进行URL编码
         String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
         return ResponseEntity.ok().contentLength(fileData.length)

+ 92 - 0
src/main/java/cn/cslg/pas/controller/ScratchWordsController.java

@@ -0,0 +1,92 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.business.ScratchWordsDTO;
+import cn.cslg.pas.common.dto.business.UpdateScratchWordsDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.service.business.ScratchWordsService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/10
+ */
+@Tag(name = "划词高亮")
+@CrossOrigin
+@RestController
+@RequestMapping(Constants.API_XiaoSHI + "/scratchWords")
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class ScratchWordsController {
+    private final ScratchWordsService scratchWordsService;
+
+    @Operation(summary = "新增划词高亮")
+    @PostMapping("/add")
+    public Response add(@RequestBody ScratchWordsDTO scratchWordsDTO) {
+        if (scratchWordsDTO != null) {
+            Integer id = scratchWordsService.add(scratchWordsDTO);
+            Records records = new Records();
+            records.setData(id);
+            return Response.success(records);
+        } else {
+            return Response.error("请求参数为null");
+        }
+    }
+
+//    @Operation(summary = "查询划词高亮")
+//    @PostMapping("/query")
+//    public Response query(@RequestBody SWQueryDTO swQueryDTO) {
+//        if (swQueryDTO != null) {
+//            return Response.success(scratchWordsService.queryAll(swQueryDTO));
+//        } else {
+//            return Response.error("查询失败");
+//        }
+//    }
+
+//    @Operation(summary = "分页查询标注清单")
+//    @PostMapping("/queryScratchs")
+//    public String queryScratchs(@RequestBody QueryScratchsDTO queryScratchsDTO) throws IOException {
+//        return Response.success(scratchWordsService.queryScratchs(queryScratchsDTO));
+//    }
+//
+//    @Operation(summary = "分页分组查询标注清单")
+//    @PostMapping("/queryGroupScratchs")
+//    public String queryGroupScratchs(@RequestBody QueryGroupScratchsDTO queryGroupScratchsDTO) throws IOException {
+//        return Response.success(scratchWordsService.queryGroupScratchs(queryGroupScratchsDTO));
+//    }
+
+    @Operation(summary = "更新划词高亮")
+    @PostMapping("/update")
+    public Response update(@RequestBody UpdateScratchWordsDTO updateScratchWordsDTO) {
+        if (updateScratchWordsDTO != null) {
+            Integer id = scratchWordsService.update(updateScratchWordsDTO);
+            Records records = new Records();
+            records.setData(records);
+            return Response.success(records);
+        } else {
+            return Response.error("更新失败");
+        }
+    }
+
+    @Operation(summary = "删除标注")
+    @PostMapping("/delete")
+    public Response delete(@RequestBody List<Integer> ids) {
+        if (ids != null && !ids.isEmpty()) {
+            List<Integer> deleteIds = scratchWordsService.delete(ids);
+            Records records = new Records();
+            records.setData(deleteIds);
+            return Response.success(records);
+        } else {
+            return Response.error("删除失败");
+        }
+    }
+
+
+}

+ 111 - 0
src/main/java/cn/cslg/pas/domain/business/ScratchWords.java

@@ -0,0 +1,111 @@
+package cn.cslg.pas.domain.business;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 标注
+ * @Author xiexiang
+ * @Date 2024/1/10
+ */
+@Data
+@TableName("scratch_words")
+/*数据库中的表对应的类
+ */
+public class ScratchWords extends BaseEntity<ScratchWords> {
+
+    /**
+     * 创建人
+     */
+    @TableField("create_id")
+    private String createId;
+
+    /**
+     * 租户id
+     */
+    @TableField("tenant_id")
+    private Integer tenantId;
+
+    /**
+     * 专利号
+     */
+    @TableField("patent_no")
+    private String patentNo;
+
+    /**
+     * 位置
+     */
+    @TableField("position")
+    private Integer position;
+
+    /**
+     * 内容
+     */
+    @TableField("text")
+    private String text;
+
+    /**
+     * 划词栏位
+     */
+    @TableField("scratch_field")
+    private String scratchField;
+
+    /**
+     * 划词类型(0下划线,1高亮,2波浪线)
+     */
+    @TableField("scratch_type")
+    private Integer scratchType;
+
+    /**
+     * 划词颜色
+     */
+    @TableField("color")
+    private String color;
+
+    /**
+     * 标引备注
+     */
+    @TableField("remark")
+    private String remark;
+
+    /**
+     * 创建来源
+     */
+    @TableField("create_from")
+    private Integer createFrom;
+
+    /**
+     * 存放id(专题库id/报告id)
+     */
+    @TableField("project_id")
+    private Integer projectId;
+
+    /**
+     * 公开类型(0私有1公有)
+     */
+    @TableField("permission_type")
+    private Integer permissionType;
+
+    /**
+     * 公开范围(true只在来源处可见/false所有地方可见)
+     */
+    @TableField("range_type")
+    private String rangeType;
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+
+
+    /**
+     * 创建人名称
+     */
+    @TableField(exist = false)
+    private String createName;
+
+}

+ 13 - 0
src/main/java/cn/cslg/pas/mapper/ScratchWordsMapper.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.ScratchWords;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/10
+ */
+@Repository
+public interface ScratchWordsMapper extends BaseMapper<ScratchWords> {
+}

+ 138 - 94
src/main/java/cn/cslg/pas/service/business/PDFExportFirstPageService.java

@@ -13,6 +13,7 @@ import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.common.FileManagerService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.input.XmlStreamReaderException;
 import org.apache.pdfbox.multipdf.PDFMergerUtility;
 import org.apache.pdfbox.io.MemoryUsageSetting;
 import org.apache.pdfbox.pdmodel.PDDocument;
@@ -45,36 +46,79 @@ public class PDFExportFirstPageService {
     @Autowired
     private EsPatentService patentService;
 
-    public byte[] mergePDFFirstPage(EsCustomFieldBatchVO EsVO) throws IOException {
+
+    public byte[] mergePdfFirstPage(EsCustomFieldBatchVO EsVO){
+        try {
+            List<String> patentNos = this.getPatentNo(EsVO);
+            byte[] result = this.mergePerPatentPDF(patentNos);
+            return result;
+        } catch (Exception e) {
+            throw new XiaoShiException("合并错误");
+        }
+    }
+
+    /**
+     * 获取专利号
+     * @param EsVO
+     * @return
+     * @throws IOException
+     */
+    public List<String> getPatentNo(EsCustomFieldBatchVO EsVO) throws IOException {
         //初始化
         Integer startNum = EsVO.getStartNumber();
         Integer endNum = EsVO.getEndNumber();
         List<String> isAdd = EsVO.getIsAdd();
         List<String> isDel = EsVO.getIsDelete();
-        // 创建一个PDFMergerUtility实例
         try {
             if (!CollectionUtils.isEmpty(isAdd) && startNum <= 1 && endNum < 1) {
                 isAdd.removeAll(isDel);
                 //创建一个输出流
-                byte[] result = this.mergePerPatentPDF(isAdd);
-                return result;
+                return isAdd;
             } else if (startNum > 1 && endNum > 0){
                 List<String> patentNos = new ArrayList<>();
                 try {
                     patentNos = esCustomFieldService.getPatentNos(EsVO);
-                    byte[] result = this.mergePerPatentPDF(patentNos);
-                    return result;
+                    return patentNos;
                 } catch (Exception e) {
                     throw new XiaoShiException("");
                 }
             } else {
-                return new byte[0];
+                throw new XiaoShiException("入参错误");
             }
-        } catch (FileNotFoundException e) {
-            throw new FileNotFoundException();
+        } catch (Exception e) {
+            throw new XiaoShiException("获取专利号错误");
         }
     }
 
+//    public byte[] mergePDFFirstPage(EsCustomFieldBatchVO EsVO) throws IOException {
+//        //初始化
+//        Integer startNum = EsVO.getStartNumber();
+//        Integer endNum = EsVO.getEndNumber();
+//        List<String> isAdd = EsVO.getIsAdd();
+//        List<String> isDel = EsVO.getIsDelete();
+//        try {
+//            if (!CollectionUtils.isEmpty(isAdd) && startNum <= 1 && endNum < 1) {
+//                isAdd.removeAll(isDel);
+//                //创建一个输出流
+//                byte[] result = this.mergePerPatentPDF(isAdd);
+//                return result;
+//            } else if (startNum > 1 && endNum > 0){
+//                List<String> patentNos = new ArrayList<>();
+//                try {
+//                    patentNos = esCustomFieldService.getPatentNos(EsVO);
+//                    byte[] result = this.mergePerPatentPDF(patentNos);
+//                    return result;
+//                } catch (Exception e) {
+//                    throw new XiaoShiException("");
+//                }
+//            } else {
+//                throw new XiaoShiException("入参错误");
+//            }
+//        } catch (FileNotFoundException e) {
+//            throw new FileNotFoundException();
+//        }
+//    }
+
 
 
 //    /**
@@ -103,93 +147,93 @@ public class PDFExportFirstPageService {
 //        return pdfData;
 //    }
 
-    /**
-     * 判断文件数组是否为空
-     * @param pdfDocuments
-     * @return
-     */
-    private boolean isByteEmpty(byte[][] pdfDocuments) {
-        return pdfDocuments == null || pdfDocuments.length == 0 || Arrays.stream(pdfDocuments).allMatch(array -> array == null || array.length == 0);
-    }
-
-    /**
-     * 3
-     * @param pdfDatas
-     * @return
-     * @throws IOException
-     */
-    public byte[] mergeFirstPage(byte[][] pdfDatas) throws IOException{
-        //创建一个输出流
-        try {
-            // 创建一个PDFMergerUtility实例
-            PDFMergerUtility merger = new PDFMergerUtility();
-            PDDocument resultDocument = new PDDocument();
-            //逐个处理每个pdf文件
-            for (byte[] pdfData : pdfDatas) {
-                // 加载每个输入的PDF文档
-                PDDocument document = PDDocument.load(pdfData);
-                // 获取第一页
-                PDPage firstPage = document.getPage(0);
-                // 创建一个新的文档用于保存第一页
-                PDDocument firstPageDocument = new PDDocument();
-                firstPageDocument.addPage(firstPage);
-                // 将第一页添加到合并器中
-                merger.appendDocument(resultDocument, firstPageDocument);
-                // 关闭当前处理的文档
-                document.close();
-                firstPageDocument.close();
-            }
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            resultDocument.save(out);
-            resultDocument.close();
-            return out.toByteArray();
-        } catch (FileNotFoundException e) {
-            throw new FileNotFoundException();
-        }
-    }
+//    /**
+//     * 判断文件数组是否为空
+//     * @param pdfDocuments
+//     * @return
+//     */
+//    private boolean isByteEmpty(byte[][] pdfDocuments) {
+//        return pdfDocuments == null || pdfDocuments.length == 0 || Arrays.stream(pdfDocuments).allMatch(array -> array == null || array.length == 0);
+//    }
 
-    /**
-     * 2
-     * 根据查询到的专利信息获取它公告或公开专利的pdf文档数据流
-     * @param patents
-     * @return
-     */
-    public byte[][] getPDFByteByAppNo(List<PatentColumnDTO> patents){
-        List<byte[]> pdfDatas = new ArrayList<>();
-        //遍历传入专利集合
-        for (PatentColumnDTO item : patents) {
-            //判断申请号是否为空
-            if (item.getAppNo() != null) {
-                String appNo = item.getAppNo();
-                Integer type = 1;
-                //获取公告专利pdf文档guid
-                String pdfGuid = FormatUtil.getPDFFormat(appNo, type);
+//    /**
+//     * 3
+//     * @param pdfDatas
+//     * @return
+//     * @throws IOException
+//     */
+//    public byte[] mergeFirstPage(byte[][] pdfDatas) throws IOException{
+//        //创建一个输出流
+//        try {
+//            // 创建一个PDFMergerUtility实例
+//            PDFMergerUtility merger = new PDFMergerUtility();
+//            PDDocument resultDocument = new PDDocument();
+//            //逐个处理每个pdf文件
+//            for (byte[] pdfData : pdfDatas) {
+//                // 加载每个输入的PDF文档
+//                PDDocument document = PDDocument.load(pdfData);
+//                // 获取第一页
+//                PDPage firstPage = document.getPage(0);
+//                // 创建一个新的文档用于保存第一页
+//                PDDocument firstPageDocument = new PDDocument();
+//                firstPageDocument.addPage(firstPage);
+//                // 将第一页添加到合并器中
+//                merger.appendDocument(resultDocument, firstPageDocument);
+//                // 关闭当前处理的文档
+//                document.close();
+//                firstPageDocument.close();
+//            }
+//            ByteArrayOutputStream out = new ByteArrayOutputStream();
+//            resultDocument.save(out);
+//            resultDocument.close();
+//            return out.toByteArray();
+//        } catch (FileNotFoundException e) {
+//            throw new FileNotFoundException();
+//        }
+//    }
 
-                byte[] pdfData = new byte[0];
-                try {
-                    pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid);
-                    if (pdfData == null  || pdfData.length == 0) {
-                        //获取公开专利pdf文档guid
-                        Integer type2 = 0;
-                        String pdfGuid2 = FormatUtil.getPDFFormat(appNo, type2);
-                        pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid2);
-                        if (pdfData == null  || pdfData.length == 0) {
-                            continue;
-                        } else {
-                            pdfDatas.add(pdfData);
-                        }
-                    } else {
-                        pdfDatas.add(pdfData);
-                    }
-                } catch (IOException e) {
-                    e.printStackTrace();
-                    continue;//继续处理下一件专利
-                }
-            }
-        }
-        byte[][] pdfDataArray = new byte[pdfDatas.size()][];
-        return pdfDatas.toArray(pdfDataArray);
-    }
+//    /**
+//     * 2
+//     * 根据查询到的专利信息获取它公告或公开专利的pdf文档数据流
+//     * @param patents
+//     * @return
+//     */
+//    public byte[][] getPDFByteByAppNo(List<PatentColumnDTO> patents){
+//        List<byte[]> pdfDatas = new ArrayList<>();
+//        //遍历传入专利集合
+//        for (PatentColumnDTO item : patents) {
+//            //判断申请号是否为空
+//            if (item.getAppNo() != null) {
+//                String appNo = item.getAppNo();
+//                Integer type = 1;
+//                //获取公告专利pdf文档guid
+//                String pdfGuid = FormatUtil.getPDFFormat(appNo, type);
+//
+//                byte[] pdfData = new byte[0];
+//                try {
+//                    pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid);
+//                    if (pdfData == null  || pdfData.length == 0) {
+//                        //获取公开专利pdf文档guid
+//                        Integer type2 = 0;
+//                        String pdfGuid2 = FormatUtil.getPDFFormat(appNo, type2);
+//                        pdfData = fileManagerService.downloadSystemFileFromFMS(pdfGuid2);
+//                        if (pdfData == null  || pdfData.length == 0) {
+//                            continue;
+//                        } else {
+//                            pdfDatas.add(pdfData);
+//                        }
+//                    } else {
+//                        pdfDatas.add(pdfData);
+//                    }
+//                } catch (IOException e) {
+//                    e.printStackTrace();
+//                    continue;//继续处理下一件专利
+//                }
+//            }
+//        }
+//        byte[][] pdfDataArray = new byte[pdfDatas.size()][];
+//        return pdfDatas.toArray(pdfDataArray);
+//    }
 
     public byte[] mergePerPatentPDF(List<String> patentNos) throws IOException {
         PDFMergerUtility merger = new PDFMergerUtility();

+ 35 - 46
src/main/java/cn/cslg/pas/service/business/PatentExportService.java

@@ -8,25 +8,22 @@ import cn.cslg.pas.common.dto.PatentExport.TaskParams;
 import cn.cslg.pas.common.model.request.QueryRequest;
 import cn.cslg.pas.common.utils.*;
 import cn.cslg.pas.common.vo.TaskWebSocketDTO;
+import cn.cslg.pas.common.vo.business.PatentNoVO;
+import cn.cslg.pas.common.vo.es.EsCustomFieldBatchVO;
 import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.business.es.EsService;
-import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.core.util.StrUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.io.input.XmlStreamReaderException;
 import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.hssf.util.HSSFColor;
 import org.apache.poi.ss.usermodel.FillPatternType;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.io.ByteArrayOutputStream;
 import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -45,24 +42,33 @@ public class PatentExportService {
     @Autowired
     private EsService esService;
 
+    @Autowired
+    private PDFExportFirstPageService pdfExportFirstPageService;
+
+    @Autowired
+    private EsPatentService patentService;
+
+
+
     /**
      * 导出专利
-     * @param taskParams
+     * @param EsVO
      * @return
      * @throws IOException
      */
-    public byte[] exportPatent(TaskParams taskParams) throws IOException {
+    public byte[] exportPatent(EsCustomFieldBatchVO EsVO) throws IOException {
         try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            String esSelected = JsonUtils.objectToJson(EsVO.getSelected());
             //selected字符串转PatentExportVO集合
-            List<PatentExportVO> selected = Optional.ofNullable(JsonUtils.jsonToList(taskParams.getSelected(), PatentExportVO.class))
+            List<PatentExportVO> selected = Optional.ofNullable(JsonUtils.jsonToList(esSelected, PatentExportVO.class))
                     .orElse(new ArrayList<>());
             //导出文件名
             if (selected.isEmpty()) {
-                throw new IllegalArgumentException("没有选择要导出的数据");
+                throw new IllegalArgumentException("没有选择要导出的字段数据");
             }
 
             //key的集合(标头:例如patentNo)
-            List<String> columns = selected.stream().filter(PatentExportVO::getSelected).map(PatentExportVO::getKey).distinct().collect(Collectors.toList());
+            List<String> columns = selected.stream().filter(PatentExportVO::getSelected).map(PatentExportVO::getValue).distinct().collect(Collectors.toList());
             //name的集合
             List<String> headers = selected.stream().filter(PatentExportVO::getSelected).map(PatentExportVO::getName).distinct().collect(Collectors.toList());
             if (columns.size() != headers.size()) {
@@ -70,7 +76,7 @@ public class PatentExportService {
             }
             //新建工作簿
             HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
-            //新sheet页
+            //新sheet页
             HSSFSheet sheet = hssfWorkbook.createSheet();
             sheet.setDefaultColumnWidth(30);
             //新建标头行
@@ -93,48 +99,26 @@ public class PatentExportService {
                 cell.setCellValue(headers.get(i));
             }
             //根据projectId查询专利信息
-            QueryRequest queryRequest = new QueryRequest();
-            queryRequest.setProjectId(taskParams.getProjectId());
-            PatentDTO patentDTO;
-            try {
-                patentDTO = esService.esSearch(queryRequest);
-            } catch (Exception e) {
-                throw new XiaoShiException("错误");
+            List<String> patentNos = pdfExportFirstPageService.getPatentNo(EsVO);
+            if (patentNos.isEmpty()) {
+                return null;
             }
-
-            List<PatentColumnDTO> patents = patentDTO.getPatents();
-            for (int i = 0; i < patents.size(); i++) {
+            for (int i = 0; i < patentNos.size(); i++) {
                 Map<String, Object> map = new LinkedHashMap<>();
-                PatentColumnDTO patent = patents.get(i);
+                PatentNoVO patentNoVO = new PatentNoVO();
+                patentNoVO.setPatentNo(patentNos.get(i));
+
+                PatentColumnDTO patent = patentService.selectPatentDetail(patentNoVO);
+
                 if (patent == null) {
                     continue;
                 }
 
                 for (int j = 0; j < columns.size(); j++) {
                     String column = columns.get(j);
-                    PatentExportVO patentExportVO = selected.stream().filter(item -> item.getKey().equals(column)).findFirst().orElse(new PatentExportVO());
-                    Object value = null;
-                    switch (column) {
-                        case "patentno":
-                            value = patent.getPatentNo();
-                            break;
-                        case "abstract":
-                            value = patent.getAbstractStr();
-                            break;
-                        case "abstract_path":
-                            break;
-                        case "publicno":
-                            value = patent.getPublicNo();
-                            break;
-                        case "publicdate":
-                            value = patent.getPublicDate();
-                            break;
-                        case "pstatus":
-                            value = patent.getSimpleStatus();
-                            break;
-                        default:
-                            value = null;
-                    }
+                    PatentExportVO patentExportVO = selected.stream().filter(item -> item.getValue().equals(column)).findFirst().orElse(new PatentExportVO());
+                    // 使用反射获取属性值
+                    Object value = GenerateObjectUtil.getPropertyValue(patent, patentExportVO.getValue());
                     map.put(patentExportVO.getName(), value);
                 }
                 //新建一普通行
@@ -156,9 +140,14 @@ public class PatentExportService {
             }
             hssfWorkbook.write(out);
             return out.toByteArray();
+
         } catch (FileNotFoundException e) {
             throw new FileNotFoundException();
         }
     }
 
+
+
+
+
 }

+ 309 - 0
src/main/java/cn/cslg/pas/service/business/ScratchWordsService.java

@@ -0,0 +1,309 @@
+package cn.cslg.pas.service.business;
+
+import cn.cslg.pas.common.dto.business.ScratchWordsDTO;
+import cn.cslg.pas.common.dto.business.UpdateScratchWordsDTO;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.domain.business.ScratchWords;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.ProjectMapper;
+import cn.cslg.pas.mapper.ScratchWordsMapper;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Author xiexiang
+ * @Date 2024/1/10
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, ScratchWords> {
+    private final ScratchWordsMapper scratchWordsMapper;
+    private final CacheUtils cacheUtils;
+    private final LoginUtils loginUtils;
+    private final ProjectService projectService;
+    private final ProjectMapper projectMapper;
+    private final PatentService patentService;
+
+    /**
+     * 新增划词高亮
+     *
+     * @param scratchWordsDTO
+     */
+    public Integer add(ScratchWordsDTO scratchWordsDTO) {
+        if (scratchWordsDTO.getCreateFrom() == null) {
+            scratchWordsDTO.setCreateFrom(0);
+        }
+        ScratchWords scratchWords = new ScratchWords();
+        BeanUtils.copyProperties(scratchWordsDTO, scratchWords);
+        //获取当前登陆人信息
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        if (personnelVO != null) {
+            //设置创建人id
+            scratchWords.setCreateId(personnelVO.getId());
+            //设置租户id
+            scratchWords.setTenantId(personnelVO.getTenantId());
+        } else {
+            throw new XiaoShiException("未查询到创建人信息");
+        }
+        //数据入表
+        scratchWords.insert();
+        return scratchWords.getId();
+    }
+
+    /**
+     * 更新划词高亮
+     *
+     * @param updateScratchWordsDTO
+     */
+    public Integer update(UpdateScratchWordsDTO updateScratchWordsDTO) {
+        //判断传入列表不为空
+        if (updateScratchWordsDTO.getId() != null) {
+            ScratchWords scratchWords = this.getById(updateScratchWordsDTO.getId());
+            BeanUtils.copyProperties(updateScratchWordsDTO, scratchWords);
+            scratchWords.updateById();
+            return scratchWords.getId();
+        } else {
+            throw new XiaoShiException("传入对象的id不能为空");
+        }
+    }
+
+//    /**
+//     * 查询划词高亮
+//     *
+//     * @param swQueryDTO
+//     * @return
+//     */
+//    public List<ScratchWordsVO> queryAll(SWQueryDTO swQueryDTO) {
+//        if (swQueryDTO.getPatentNo() != null) {
+//            //获取当前登陆人信息
+//            PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+//            Integer tenantId = personnelVO.getTenantId();
+//            Integer createId = personnelVO.getId();
+//            //创建来源(默认0/专题库1/报告2)
+//            if (swQueryDTO.getCreateFrom().equals(1)) {
+//                Integer projectId = swQueryDTO.getId();
+//                Integer reportId = -1;
+//                List<ScratchWordsVO> scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId);
+//                return scratchWords;
+//            }
+//            //创建来源(默认0/专题库1/报告2)
+//            else if (swQueryDTO.getCreateFrom().equals(2)) {
+//                Integer reportId = swQueryDTO.getId();
+//                Integer projectId = -1;
+//                List<ScratchWordsVO> scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId);
+//                return scratchWords;
+//            }
+//            //创建来源(默认0/专题库1/报告2)
+//            else if (swQueryDTO.getCreateFrom().equals(0)) {
+//                Integer reportId = -1;
+//                Integer projectId = -1;
+//                List<ScratchWordsVO> scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId);
+//                return scratchWords;
+//            } else {
+//                throw new XiaoShiException("暂无该情况");
+//            }
+//        } else {
+//            throw new XiaoShiException("传入参数不可为空");
+//        }
+//    }
+//
+//
+//    public PageVO queryScratchs(QueryScratchsDTO queryScratchsDTO) throws IOException {
+//        log.info("开始处理【查询标注清单】的业务,参数为:{}", queryScratchsDTO);
+//
+//        List<SearchItem> search = queryScratchsDTO.getSearch();
+//        List<String> names = search.stream().filter(searchItem -> searchItem.getValue().equals("name")).map(SearchItem::getContent).collect(Collectors.toList());
+//        List<Integer> personIds = new ArrayList<>();
+//        if (names.size() > 0) {
+//            //若根据创建人名称模糊查询,调用权限系统根据人员名称获得人员ids并装载到参数中
+//            String res = outInterfaceService.getPersonIdByNamesPCS(names);
+//            personIds = JSON.parseArray(res, Integer.class);
+//            if (personIds.size() == 0) {
+//                personIds.add(-1);
+//            }
+//        }
+//
+//        PageVO pageVO = new PageVO()
+//                .setCurrent(queryScratchsDTO.getCurrent())
+//                .setSize(queryScratchsDTO.getSize());
+//
+//        //获取登陆人id、所属租户id、token
+//        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+//        Integer personId = personnelVO.getId();
+//        Integer tenantId = personnelVO.getTenantId();
+//        String token = "token=" + personnelVO.getToken();
+//
+//        //获取当前登陆人有权查看的专题库projectIds
+//        ProjectVO params = new ProjectVO();
+//        if (personnelVO.getRoleType() == null || personnelVO.getRoleType() != 1) {  //代码控制不同类型的角色查询权限
+//            params.setPersonnelId(personId);
+//            if (personnelVO.getRoleType() != null && personnelVO.getRoleType() == 2) {
+//                params.setTenantId(personnelVO.getTenantId());
+//            }
+//        }
+//        List<Project> projects = projectMapper.getProjects(params);
+//        List<Integer> projectIds = new ArrayList<>();
+//        if (projects == null || projects.size() == 0) {
+//            projectIds.add(-1);
+//        } else {
+//            projectIds = projects.stream().map(Project::getId).collect(Collectors.toList());
+//        }
+//
+//        //获取当前登陆人有权查看的报告reportIds
+//        String res = outInterfaceService.getReportsFromRMS(token);
+//        JSONObject jsonObject = JSONObject.parseObject(res);
+//        List<Integer> reportIds = JSON.parseArray(jsonObject.get("data").toString(), Integer.class);
+//
+//
+//        //开始分页(分组)查询标注表标注清单
+//        if (queryScratchsDTO.getCurrent() != null && queryScratchsDTO.getSize() != null) {
+//            PageHelper.startPage(queryScratchsDTO.getCurrent(), queryScratchsDTO.getSize());
+//        }
+////        if (queryScratchsDTO.getGrouping() == null || queryScratchsDTO.getGrouping().equals("")) {  //不分组
+//        List<ScratchWordVO> scratchWords = scratchWordsMapper.queryScratchWords(personIds, search, tenantId, personId, projectIds, reportIds);
+//        PageInfo<ScratchWordVO> pageInfo = new PageInfo<>(scratchWords);
+//        if (scratchWords.size() > 0) {
+//            //装载创建人名称
+//            List<Integer> createPersonIds = scratchWords.stream().map(ScratchWordVO::getCreateId).collect(Collectors.toList());
+//            res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds);
+//            jsonObject = JSONObject.parseObject(res);
+//            List<Personnel> personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class);
+//            scratchWords.forEach(scratchWord -> {
+//                personnels.forEach(personnel -> {
+//                    if (personnel.getId().equals(scratchWord.getCreateId())) {
+//                        scratchWord.setName(personnel.getPersonnelName());
+//                    }
+//                });
+//            });
+//            //装载专利id和专利标题
+//            List<String> patentNos = scratchWords.stream().map(ScratchWordVO::getPatentNo).collect(Collectors.toList());
+//            List<Patent> patents = patentService.list(new LambdaQueryWrapper<Patent>().in(Patent::getPatentNo, patentNos).or().in(Patent::getPublicNo, patentNos));
+//            scratchWords.forEach(scratchWord -> {
+//                patents.forEach(patent -> {
+//                    if (scratchWord.getPatentNo().equals(patent.getPatentNo()) || scratchWord.getPatentNo().equals(patent.getPublicNo())) {
+//                        scratchWord.setPatentId(patent.getId());
+//                        scratchWord.setPatentTitle(patent.getName());
+//                    }
+//                });
+//            });
+//        }
+//        pageVO.setRecords(scratchWords)
+//                .setTotal((int) pageInfo.getTotal());
+////        } else {  //分组
+////            List<GroupName> groupNames = scratchWordsMapper.queryGroupScratchs(queryScratchsDTO, tenantId, personId, projectIds, reportIds);
+////            PageInfo<GroupName> pageInfo = new PageInfo<>(groupNames);
+////            if (groupNames.size() > 0) {
+////                //装载创建人名称
+////                List<Integer> createPersonIds = groupNames.stream().map(GroupName::getCreateId).collect(Collectors.toList());
+////                res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds);
+////                jsonObject = JSONObject.parseObject(res);
+////                List<Personnel> personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class);
+////                groupNames.forEach(groupName -> {
+////                    personnels.forEach(personnel -> {
+////                        if (personnel.getId().equals(groupName.getCreateId())) {
+////                            groupName.setName(personnel.getPersonnelName());
+////                        }
+////                    });
+////                });
+////            }
+////            pageVO.setRecords(groupNames)
+////                    .setTotal((int) pageInfo.getTotal());
+////        }
+//
+//        return pageVO;
+//    }
+//
+//    public PageVO queryGroupScratchs(QueryGroupScratchsDTO queryGroupScratchsDTO) throws IOException {
+//        log.info("开始处理【分页分组查询标注清单】的业务,参数为:{}", queryGroupScratchsDTO);
+//
+//        List<SearchItem> search = queryGroupScratchsDTO.getSearch();
+//        List<String> names = search.stream().filter(searchItem -> searchItem.getValue().equals("name")).map(SearchItem::getContent).collect(Collectors.toList());
+//        List<Integer> personIds = new ArrayList<>();
+//        if (names.size() > 0) {
+//            //若根据创建人名称模糊查询,调用权限系统根据人员名称获得人员ids并装载到参数中
+//            String res = outInterfaceService.getPersonIdByNamesPCS(names);
+//            personIds = JSON.parseArray(res, Integer.class);
+//            if (personIds.size() == 0) {
+//                personIds.add(-1);
+//            }
+//        }
+//
+//        //获取登陆人id和所属租户id
+//        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+//        Integer personId = personnelVO.getId();
+//        Integer tenantId = personnelVO.getTenantId();
+//        String token = "token=" + personnelVO.getToken();
+//
+//        //查询本系统的专题库表"os_thematic",获取当前登陆人有权查看的专题库projectIds
+//        ProjectVO params = new ProjectVO();
+//        //代码控制不同类型的角色查询权限
+//        if (personnelVO.getRoleType() == null || personnelVO.getRoleType() != 1) {
+//            params.setPersonnelId(personId);
+//            if (personnelVO.getRoleType() != null && personnelVO.getRoleType() == 2) {
+//                params.setTenantId(personnelVO.getTenantId());
+//            }
+//        }
+//        List<Project> projects = projectMapper.getProjects(params);
+//        List<Integer> projectIds = projects.stream().map(Project::getId).collect(Collectors.toList());
+//        //查询报告系统,获取当前登陆人有权查看的报告reportIds
+//        String res = outInterfaceService.getReportsFromRMS(token);
+//        JSONObject jsonObject = JSONObject.parseObject(res);
+//        List<Integer> reportIds = JSON.parseArray(jsonObject.get("data").toString(), Integer.class);
+//
+//        //开始查询标注表标注清单
+//        if (queryGroupScratchsDTO.getCurrent() != null && queryGroupScratchsDTO.getSize() != null) {
+//            PageHelper.startPage(queryGroupScratchsDTO.getCurrent(), queryGroupScratchsDTO.getSize());
+//        }
+//        List<GroupName> groupNames = scratchWordsMapper.queryGroupScratchs(personIds, search, queryGroupScratchsDTO.getGrouping(), tenantId, personId, projectIds, reportIds);
+//        PageInfo<GroupName> pageInfo = new PageInfo<>(groupNames);
+//
+//        //若本次请求是根据创建人分组查询,则装载创建人名称
+//        if (groupNames.size() > 0 && queryGroupScratchsDTO.getGrouping().equals("name")) {
+//            List<Integer> createPersonIds = groupNames.stream().map(GroupName::getCreateId).collect(Collectors.toList());
+//            res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds);
+//            jsonObject = JSONObject.parseObject(res);
+//            List<Personnel> personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class);
+//            groupNames.forEach(groupName -> {
+//                personnels.forEach(personnel -> {
+//                    if (personnel.getId().equals(groupName.getCreateId())) {
+//                        groupName.setName(personnel.getPersonnelName());
+//                    }
+//                });
+//            });
+//        }
+//        PageVO pageVO = new PageVO()
+//                .setRecords(groupNames)
+//                .setCurrent(queryGroupScratchsDTO.getCurrent())
+//                .setSize(queryGroupScratchsDTO.getSize())
+//                .setTotal((int) pageInfo.getTotal());
+//        return pageVO;
+//
+//    }
+
+    /**
+     * 删除划词高亮
+     *
+     * @param ids
+     */
+    public List<Integer> delete(List<Integer> ids) {
+        this.removeBatchByIds(ids);
+        return ids;
+    }
+}