Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/master'

lwhhszx 1 rok pred
rodič
commit
e8a16841cd

+ 14 - 0
src/main/java/cn/cslg/pas/common/dto/ExternalLegalInfoDTO.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.common.dto;
+
+import cn.cslg.pas.domain.es.LegalEvent;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ExternalLegalInfoDTO {
+
+    private List<String> legalStatus;
+
+    private List<LegalEvent> legalEvents;
+}

+ 48 - 0
src/main/java/cn/cslg/pas/common/dto/ExternalLegalStatusDTO.java

@@ -0,0 +1,48 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+
+@Data
+public class ExternalLegalStatusDTO {
+    private Long ID;
+    private String JUANQI;
+    private String PatentType;
+    private String LegalDate;
+    private String LegalStatus;
+    private String LegalStatusInfo;
+    private String LegalCode;
+    private String VOL;
+    private String NUM;
+    private String PAG;
+    private String IPC;
+    private String SHENQINGH;
+    private String SHENQINGR;
+    private String SHENQINGGBR;
+    private String SHOUQUANGGR;
+    private String WUXIAOXGJDH;
+    private String WUXIAOXGJDR;
+    private String ZHONGZHIR;
+    private String FANGQISXR;
+    private String YUANMINGC;
+    private String YUANGONGGR;
+    private String BIANGENGSXCODE;
+    private String BIANGENGSX;
+    private String BIANGENGQ;
+    private String BIANGENGH;
+    private String DENGJISXR;
+    private String HETONGBAH;
+    private String RANGYUR;
+    private String SHOURANGR;
+    private String ZHUANLIMC;
+    private String XUKEZL;
+    private String BEIANRQ;
+    private String BIANGENGR;
+    private String JIECHUR;
+    private String DENGJIH;
+    private String CHUZHIR;
+    private String ZHIQUANR;
+    private String SHOUJIANR;
+    private String WENJIANMC;
+    private String DETAIL;
+
+}

+ 6 - 0
src/main/java/cn/cslg/pas/common/dto/GetAllPersonDTO.java

@@ -1,18 +1,24 @@
 package cn.cslg.pas.common.dto;
 
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.util.List;
 
 @Data
+@EqualsAndHashCode
 public class GetAllPersonDTO {
 
     private String name;
 
+    private String abbreviation;
+
     private String address;
 
     private String country;
 
+    private String province;
+
     private String remark;
 
     //类型  0 申请人  1 权利人  2 发明人

+ 1 - 1
src/main/java/cn/cslg/pas/common/vo/business/MergePersonAgainVO.java

@@ -9,7 +9,7 @@ public class MergePersonAgainVO {
 
     private List<String> needMergedName;
 
-    private List<String> mergeName;
+    private List<String> mergedName;
 
     private Integer projectId;
 

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

@@ -2,6 +2,7 @@ package cn.cslg.pas.common.vo.es;
 
 import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
 import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
+import cn.cslg.pas.common.model.request.OrderDTO;
 import lombok.Data;
 
 import java.util.List;
@@ -23,6 +24,8 @@ public class EsCustomFieldBatchVO {
 
     private String searchQuery;
 
+    private List<OrderDTO> orderDTOList;
+
     private List<EsCustomFieldValueDTO> customFields;
 
     private List<EsCustomFieldDTO> esCustomFieldDTOS;

+ 7 - 0
src/main/java/cn/cslg/pas/controller/PatentController.java

@@ -215,6 +215,13 @@ public class PatentController {
         return Response.success(allCountry);
     }
 
+    @Operation(summary = "获取国内省份列表查询")
+    @GetMapping("/getAllProvince")
+    public Response getAllProvince() {
+        List<GetAllCountryDTO> allCountry = mergePersonService.getAllProvince();
+        return Response.success(allCountry);
+    }
+
     //--------------------导出-----------------------
     @PostMapping("/exportPDFFirstPage")
     @Operation(summary = "导出专利PDF")

+ 16 - 3
src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java

@@ -1,9 +1,7 @@
 package cn.cslg.pas.controller.outApi;
 
 import cn.cslg.pas.common.core.base.Constants;
-import cn.cslg.pas.common.dto.InnerPatentPdfDTO;
-import cn.cslg.pas.common.dto.PatentColumnDTO;
-import cn.cslg.pas.common.dto.PatentStarListDTO;
+import cn.cslg.pas.common.dto.*;
 import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.Response;
@@ -21,6 +19,7 @@ import org.springframework.context.annotation.Lazy;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
+import java.text.ParseException;
 import java.util.List;
 import java.util.Map;
 
@@ -141,4 +140,18 @@ public class PatentStarController {
         List<String> figures = patentStarApiService.getExternalFigure(appNo);
         return Response.success(figures);
     }
+
+    @GetMapping("/getPictureGuid")
+    @Operation(summary = "外部获取摘要附图")
+    public Response getPictureGuid(String appNo) throws IOException {
+        String pictureGuid = patentStarApiService.getPictureGuid(appNo);
+        return Response.success(pictureGuid);
+    }
+
+    @GetMapping("/getLegalStatus")
+    @Operation(summary = "外部获取法律状态")
+    public Response getLegalStatus(String appNo) throws ParseException {
+        ExternalLegalInfoDTO infoDTO = patentStarApiService.getLegalStatus(appNo);
+        return Response.success(infoDTO);
+    }
 }

+ 68 - 36
src/main/java/cn/cslg/pas/service/business/MergePersonService.java

@@ -184,7 +184,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
     public Integer mergePersonAgain(MergePersonAgainVO vo) throws Exception {
         List<String> mergedNames = vo.getNeedMergedName();
-        List<String> mergeName = vo.getMergeName();
+        List<String> mergeName = vo.getMergedName();
         List<String> nameList = new ArrayList<>();
         if (!CollectionUtils.isEmpty(mergedNames)) {
             for (String mergedName : mergedNames) {
@@ -427,7 +427,6 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         List<GetEsAllPersonDTO> personDTOS = new ArrayList<>();
         for (Hit<Patent> hit : hits) {
             Patent esMess = hit.source();
-            PersonAddress applicantAddr = null;
             GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
             personDTO.setApplicantAddr(esMess.getApplicantAddr());
             personDTO.setRightHolderAddr(esMess.getRightHolderAddr());
@@ -480,7 +479,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
                     for (String s : rightHolder) {
                         GetAllPersonDTO dto = new GetAllPersonDTO();
                         dto.setName(s);
-                        dto.setType(0);
+                        dto.setType(1);
                         if (StringUtils.isNotEmpty(rightHolderAddr.getCountry())) {
                             dto.setCountry(rightHolderAddr.getCountry());
                         }
@@ -494,7 +493,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
                     for (String s : rightHolder) {
                         GetAllPersonDTO dto = new GetAllPersonDTO();
                         dto.setName(s);
-                        dto.setType(0);
+                        dto.setType(1);
                         rightDTOS.add(dto);
                     }
                 }
@@ -504,13 +503,19 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         //申请人和权利人相同的去除
         if (!CollectionUtils.isEmpty(applicantDTOS) && !CollectionUtils.isEmpty(rightDTOS)) {
             for (GetAllPersonDTO applicantDTO : applicantDTOS) {
-                rightDTOS.removeIf(rightDTO -> applicantDTO.getName().equals(rightDTO.getName()));
+                rightDTOS.removeIf(rightDTO -> rightDTO.getName().equals(applicantDTO.getName()));
             }
         }
         //装载在同一个集合
         personDTOList.addAll(applicantDTOS);
         personDTOList.addAll(rightDTOS);
 
+        if (!CollectionUtils.isEmpty(personDTOList)) {
+            Set<GetAllPersonDTO> set = new TreeSet<>(Comparator.comparing(GetAllPersonDTO::getName));
+            set.addAll(personDTOList);
+            personDTOList = new ArrayList<>(set);
+        }
+
         //发明人
         List<GetAllPersonDTO> inventorDTOS = new ArrayList<>();
         if (!CollectionUtils.isEmpty(personDTOS)) {
@@ -529,6 +534,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
 //        IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
         LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
                 .eq(MergePerson::getProjectId, vo.getProjectId())
+                .eq(MergePerson::getType, type)
                 .eq(StringUtils.isNotEmpty(vo.getName()), MergePerson::getName, vo.getName())
                 .orderByDesc(MergePerson::getCreateTime);
 //        IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
@@ -550,6 +556,8 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
                 merge.setRemark(person.getRemark());
                 merge.setType(personType);
                 merge.setMergeId(person.getId());
+                merge.setAbbreviation(person.getAbbreviation());
+                merge.setProvince(person.getProvince());
                 mergeList.add(merge);
 
                 if (personType == 0) {
@@ -621,7 +629,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         String name = vo.getName();
         Integer projectId = vo.getProjectId();
         MergePerson mergePerson = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
-                .eq(MergePerson::getMergedName, name)
+                .eq(MergePerson::getName, name)
                 .eq(MergePerson::getProjectId, projectId));
         if (ObjectUtil.isNotEmpty(mergePerson)) {
             Integer personId = mergePerson.getId();
@@ -682,42 +690,46 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
     public Integer delMergePerson(MergePersonIdVO vo) throws IOException {
         Integer type = vo.getType();
         MergePerson mergePerson = mergePersonMapper.selectById(vo.getId());
-        String name = mergePerson.getName();
         if (ObjectUtil.isNotEmpty(mergePerson)) {
             LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
                     .eq(BaseEntity::getId, vo.getId());
             this.remove(wrapper);
 
-            SearchRequest.Builder builder = new SearchRequest.Builder();
-            //设置查询索引
-            builder.index("patent");
-            List<Query> queries = new ArrayList<>();
-            if (type == 0) {
-                Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
-                Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(q1));
-                Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
-                Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(q2));
-                queries.add(query1);
-                queries.add(query2);
-            } else {
-                Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
-                Query query3 = QueryBuilders.nested(i -> i.path("merge_inventor").query(q));
-                queries.add(query3);
-            }
-            Query query = QueryBuilders.bool(i -> i.must(queries));
-            builder.query(query);
-            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
-            List<Hit<Patent>> hits = response.hits().hits();
-            Map<String, Patent> map = new HashMap<>();
-            for (Hit<Patent> hit : hits) {
-                String id = hit.id();
-                map.put(id, hit.source());
-            }
+            String name = mergePerson.getName();
+            String mergedName = mergePerson.getMergedName();
+            List<String> list = JSONArray.parseArray(mergedName, String.class);
+            if (!CollectionUtils.isEmpty(list)) {
+                SearchRequest.Builder builder = new SearchRequest.Builder();
+                //设置查询索引
+                builder.index("patent");
+                List<Query> queries = new ArrayList<>();
+                if (type == 0) {
+                    Query q1 = QueryBuilders.term(i -> i.field("merge_applicant.name.raw").value(name));
+                    Query query1 = QueryBuilders.nested(i -> i.path("merge_applicant").query(q1));
+                    Query q2 = QueryBuilders.term(i -> i.field("merge_right_holder.name.raw").value(name));
+                    Query query2 = QueryBuilders.nested(i -> i.path("merge_right_holder").query(q2));
+                    queries.add(query1);
+                    queries.add(query2);
+                } else {
+                    Query q = QueryBuilders.term(i -> i.field("merge_inventor.name.raw").value(name));
+                    Query query3 = QueryBuilders.nested(i -> i.path("merge_inventor").query(q));
+                    queries.add(query3);
+                }
+                Query query = QueryBuilders.bool(i -> i.must(queries));
+                builder.query(query);
+                SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+                List<Hit<Patent>> hits = response.hits().hits();
+                Map<String, Patent> map = new HashMap<>();
+                for (Hit<Patent> hit : hits) {
+                    String id = hit.id();
+                    map.put(id, hit.source());
+                }
 
-            if (!CollectionUtils.isEmpty(map)) {
-                for (String id : map.keySet()) {
-                    Patent patent = map.get(id);
-                    esService.delMergePerson(patent, id, type, mergePerson.getName());
+                if (!CollectionUtils.isEmpty(map)) {
+                    for (String id : map.keySet()) {
+                        Patent patent = map.get(id);
+                        esService.delMergePerson(patent, id, type, mergePerson.getName());
+                    }
                 }
             }
         }
@@ -743,4 +755,24 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         }
         return list;
     }
+
+    /**
+     * 获取国内省份列表查询
+     * @return
+     */
+    public List<GetAllCountryDTO> getAllProvince() {
+        List<GetAllCountryDTO> list = new ArrayList<>();
+        List<SystemDict> countries = systemDictMapper.selectList(new LambdaQueryWrapper<SystemDict>()
+                .eq(SystemDict::getType, "PROVINCE"));
+        if (!CollectionUtils.isEmpty(countries)) {
+            countries.forEach(county -> {
+                GetAllCountryDTO dto = new GetAllCountryDTO();
+                dto.setLabel(county.getLabel());
+                dto.setValue(county.getValue());
+                dto.setType(county.getType());
+                list.add(dto);
+            });
+        }
+        return list;
+    }
 }

+ 43 - 5
src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java

@@ -1,13 +1,16 @@
 package cn.cslg.pas.service.business.es;
 
+import cn.cslg.pas.common.core.base.IfConstant;
 import cn.cslg.pas.common.dto.es.EsCustomFieldDTO;
 import cn.cslg.pas.common.dto.es.EsCustomFieldValueDTO;
 import cn.cslg.pas.common.dto.es.FieldHistoryDTO;
 import cn.cslg.pas.common.dto.es.QueryEsCustomFieldDTO;
+import cn.cslg.pas.common.model.request.OrderDTO;
 import cn.cslg.pas.common.utils.FormatUtil;
 import cn.cslg.pas.common.utils.parseQueryToTree.expressManager;
 import cn.cslg.pas.common.utils.parseQueryToTree.operateNode;
 import cn.cslg.pas.common.utils.parseQueryToTree.treeNode;
+import cn.cslg.pas.common.vo.EsConfigVO;
 import cn.cslg.pas.common.vo.PatentWithIdVO;
 import cn.cslg.pas.common.vo.es.EsCustomFieldBatchVO;
 import cn.cslg.pas.common.vo.es.FieldHistoryVO;
@@ -16,6 +19,7 @@ import cn.cslg.pas.domain.business.CustomField;
 import cn.cslg.pas.domain.business.TreeNode;
 import cn.cslg.pas.domain.es.*;
 import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.business.CommonService;
 import cn.cslg.pas.service.business.TreeNodeService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
@@ -30,6 +34,7 @@ import co.elastic.clients.elasticsearch.core.SearchRequest;
 import co.elastic.clients.elasticsearch.core.SearchResponse;
 import co.elastic.clients.elasticsearch.core.search.Hit;
 import co.elastic.clients.json.JsonData;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.Value;
@@ -314,8 +319,14 @@ public class EsCustomFieldService {
         Integer projectId = vo.getProjectId();
         Integer startNum = vo.getStartNumber();
         Integer endNum = vo.getEndNumber();
-        List<String> isAdd = vo.getIsAdd();
-        List<String> isDel = vo.getIsDelete();
+        List<String> isAdd = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(vo.getIsAdd())) {
+            isAdd = vo.getIsAdd();
+        }
+        List<String> isDel = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(vo.getIsDelete())) {
+            isDel = vo.getIsDelete();
+        }
         String searchCondition = "";
         if (StringUtils.isNotEmpty(vo.getSearchQuery())) {
             searchCondition = vo.getSearchQuery();
@@ -348,9 +359,36 @@ public class EsCustomFieldService {
         //3. 从es中检索数据
         Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
         builder.query(q);
-        if (startNum > 0 && endNum > 0) {
-            builder.from(startNum-1).size(endNum);
+
+        List<OrderDTO> dtoList = vo.getOrderDTOList();
+        if (!CollectionUtils.isEmpty(dtoList)) {
+            String json = CommonService.readJsonFile("patent.json");
+            List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
+            for (OrderDTO orderDTO : dtoList) {
+                EsConfigVO configVO = esConfigVOS.stream().filter(item -> item.getField().equals(orderDTO.getOrderBy())).findFirst().orElse(null);
+                if (configVO != null) {
+                    if (orderDTO.getOrderType().equals(IfConstant.NO)) {
+                        builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                                .field(fieldSortBuilder -> fieldSortBuilder
+                                        .field(configVO.getEsField()).order(SortOrder.Asc)));
+                    } else {
+                        builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                                .field(fieldSortBuilder -> fieldSortBuilder
+                                        .field(configVO.getEsField()).order(SortOrder.Desc)));
+                    }
+                }
+            }
+        } else {
+            builder.sort(sortOptionsBuilder -> sortOptionsBuilder
+                    .field(fieldSortBuilder -> fieldSortBuilder
+                            .field("patent_no.keyword").order(SortOrder.Desc)));
         }
+
+        int number = endNum - startNum;
+        if (startNum > 0 && endNum > startNum) {
+            builder.from(startNum-1).size(number);
+        }
+
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<Hit<Patent>> hits = response.hits().hits();
         List<String> patentNos = new ArrayList<>();
@@ -360,7 +398,7 @@ public class EsCustomFieldService {
         }
         patentNos.addAll(isAdd);
         patentNos.removeAll(isDel);
-        return patentNos.stream().distinct().collect(Collectors.toList());
+        return patentNos.stream().collect(Collectors.toList());
     }
 
 

+ 11 - 3
src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java

@@ -21,6 +21,7 @@ import cn.cslg.pas.common.vo.business.PatentKinVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.domain.es.*;
 import cn.cslg.pas.service.business.CommonService;
+import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.SortOrder;
@@ -34,6 +35,7 @@ import co.elastic.clients.elasticsearch.core.search.SourceConfigBuilders;
 import co.elastic.clients.elasticsearch.transform.Source;
 import com.alibaba.druid.sql.visitor.functions.If;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
@@ -56,6 +58,9 @@ public class EsPatentService {
     private final ElasticsearchClient client;
     private final FormatQueryService formatQueryService;
 
+    @Autowired
+    private FileManagerService fileManagerService;
+
     /**
      * 根据专利号查询专利详情
      *
@@ -176,10 +181,13 @@ public class EsPatentService {
      * @param appNo
      * @return
      */
-    public List<String> getFigure(String appNo) {
+    public List<String> getFigure(String appNo) throws IOException {
         List<String> list = new ArrayList<>();
-        String pictureFormat = FormatUtil.getPictureFormat(appNo);
-        list.add(pictureFormat);
+        String guids = fileManagerService.getPatentPictureGuids(appNo);
+        if (StringUtils.isNotEmpty(guids)) {
+            JSONObject jsonObject = JSONObject.parseObject(guids);
+            list = JSONArray.parseArray(jsonObject.get("data").toString(), String.class);
+        }
         return list;
     }
 

+ 27 - 10
src/main/java/cn/cslg/pas/service/common/FileManagerService.java

@@ -78,7 +78,7 @@ public class FileManagerService {
     }
 
     public List<String> uploadFileGetGuid(List<MultipartFile> multipartFiles) throws IOException {
-   String res= this.uploadFile(multipartFiles);
+        String res = this.uploadFile(multipartFiles);
         JSONObject jsonObject = JSONObject.parseObject(res);
         List<String> guids = JSONArray.parseArray(jsonObject.get("data").toString(), String.class);
         return guids;
@@ -145,15 +145,15 @@ public class FileManagerService {
         return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
     }
 
-    public String uploadFileWithGuid(File file ,String guid)  throws IOException {
+    public String uploadFileWithGuid(File file, String guid) throws IOException {
         MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder()
                 .setType(MultipartBody.FORM);
-            //根据文件名获取文件的MIME类型
-            String mimeType = getMimeType(file.getPath());
-            multipartBodyBuilder.addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse(mimeType), file));
+        //根据文件名获取文件的MIME类型
+        String mimeType = getMimeType(file.getPath());
+        multipartBodyBuilder.addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse(mimeType), file));
         RequestBody requestBody = multipartBodyBuilder
                 .addFormDataPart("sourceId", String.valueOf(FileSource))
-                .addFormDataPart("fileGuid",guid)
+                .addFormDataPart("fileGuid", guid)
                 .build();
         OkHttpClient okHttpClient = new OkHttpClient.Builder()
                 .connectTimeout(60, TimeUnit.SECONDS)
@@ -167,15 +167,13 @@ public class FileManagerService {
         Response response = null;
         response = okHttpClient.newCall(request).execute();
         // 最后记得删除临时文件
-            FileUtils.deleteQuietly(file);
+        FileUtils.deleteQuietly(file);
 
         return Objects.requireNonNull(response.body()).string();
     }
 
     /**
      * 调用文件系统上传文件接口
-     *
-
      */
     public String uploadFile2(List<File> files) throws IOException {
 
@@ -206,10 +204,29 @@ public class FileManagerService {
         }
         return Objects.requireNonNull(response.body()).string();
     }
+
     public List<String> uploadFileGetGuid2(List<File> files) throws IOException {
-        String res= this.uploadFile2(files);
+        String res = this.uploadFile2(files);
         JSONObject jsonObject = JSONObject.parseObject(res);
         List<String> guids = JSONArray.parseArray(jsonObject.get("data").toString(), String.class);
         return guids;
     }
+
+    /**
+     * 调用文件系统获得专利图片的guid
+     *
+     * @param appNo 申请号
+     */
+    public String getPatentPictureGuids(String appNo) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url(FMSUrl + "/fileManager/getPatentPictureGuids?appNo=" + appNo)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
 }

+ 58 - 9
src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java

@@ -15,10 +15,7 @@ import cn.cslg.pas.common.vo.StarPatentVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
 import cn.cslg.pas.domain.WebLoginConfig;
 import cn.cslg.pas.domain.business.RetrieveRecord;
-import cn.cslg.pas.domain.es.PatentClassify;
-import cn.cslg.pas.domain.es.PatentPerson;
-import cn.cslg.pas.domain.es.PersonAddress;
-import cn.cslg.pas.domain.es.Text;
+import cn.cslg.pas.domain.es.*;
 import cn.cslg.pas.service.WebLoginConfigService;
 
 import cn.cslg.pas.service.importPatent.ImportFromWebToEsService;
@@ -50,10 +47,13 @@ import java.io.File;
 import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * 调用外部接口的Service类 PCS:权限系统
@@ -871,13 +871,13 @@ public class PatentStarApiService {
             }
             patentColumnDTO.setIpc(classifies);
             //获取摘要附图
-            String pictureApi = this.getPictureApi(item.getRowApplicationNo());
-            patentColumnDTO.setPictureGuid(pictureApi);
+//            String pictureApi = this.getPictureApi(item.getRowApplicationNo());
+//            patentColumnDTO.setPictureGuid(pictureApi);
             //获取外部专利原始申请号
             patentColumnDTO.setRowApplicationNo(item.getRowApplicationNo());
             //获取法律状态
-            String cnLegalApi = this.getCnLegalApi(item.getRowApplicationNo());
-            patentColumnDTO.setLegalStatus(Arrays.asList(cnLegalApi));
+//            String cnLegalApi = this.getCnLegalApi(item.getRowApplicationNo());
+//            patentColumnDTO.setLegalStatus(Arrays.asList(cnLegalApi));
             //获取被引用次数
             //装载公开日
             if (item.getPublicDate() != null && !item.getPublicDate().trim().equals("")) {
@@ -985,9 +985,14 @@ public class PatentStarApiService {
     public Records queryExternalFamily(QueryExternalFamilyVO vo) throws IOException {
         Records records = new Records();
         String family = this.getFamilyByPubNoApi(vo.getPatentNo());
+
         QueryExternalFamilyDTO familyDTO = JSONObject.parseObject(family, QueryExternalFamilyDTO.class);
         String familyInfos = familyDTO.getFamilyinfo();
-        List<String> publicNos = Arrays.asList(familyInfos.split(";"));
+        List<String> publicNos = new ArrayList<>();
+        if (StringUtils.isNotEmpty(familyInfos) && familyInfos.equals("{}")) {
+            publicNos = Arrays.asList(familyInfos.split(";"));
+        }
+
         String pubNo = "";
         if (!CollectionUtils.isEmpty(publicNos)) {
             int count = publicNos.size() - 1;
@@ -1137,4 +1142,48 @@ public class PatentStarApiService {
         return list;
     }
 
+    /**
+     * 获取摘要附图
+     * @param appNo
+     * @return
+     */
+    public String getPictureGuid(String appNo) {
+        return this.getPictureApi(appNo);
+    }
+
+    /**
+     * @param appNo
+     * @return
+     */
+    public ExternalLegalInfoDTO getLegalStatus(String appNo) throws ParseException {
+        ExternalLegalInfoDTO infoDTO = new ExternalLegalInfoDTO();
+        List<String> list = new ArrayList<>();
+        List<LegalEvent> legalEvents = new ArrayList<>();
+        String cnLegalApi = this.getCnLegalApi(appNo);
+        if (StringUtils.isNotEmpty(cnLegalApi)) {
+            List<ExternalLegalStatusDTO> statusDTOS = JSONArray.parseArray(cnLegalApi, ExternalLegalStatusDTO.class);
+            if (!CollectionUtils.isEmpty(statusDTOS)) {
+                List<ExternalLegalStatusDTO> statusList = statusDTOS.stream().sorted(Comparator.comparing(ExternalLegalStatusDTO::getLegalDate).reversed()).collect(Collectors.toList());
+                if (!CollectionUtils.isEmpty(statusList)) {
+                    ExternalLegalStatusDTO statusDTO = statusList.get(0);
+                    list.add(statusDTO.getLegalStatus());
+                }
+                for (ExternalLegalStatusDTO dto : statusDTOS) {
+                    LegalEvent event = new LegalEvent();
+                    event.setCode(dto.getLegalCode());
+                    event.setName(dto.getLegalStatusInfo());
+                    event.setDescription(dto.getJUANQI());
+                    if (StringUtils.isNotEmpty(dto.getLegalDate())) {
+                        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
+                        Date date = format.parse(dto.getLegalDate());
+                        event.setEventDate(date);
+                    }
+                    legalEvents.add(event);
+                }
+            }
+        }
+        infoDTO.setLegalStatus(list);
+        infoDTO.setLegalEvents(legalEvents);
+        return infoDTO;
+    }
 }

+ 1 - 1
src/main/resources/jsons/patent.json

@@ -846,7 +846,7 @@
   },
   {
     "name": "法律状态",
-    "type": "String",
+    "type": "Array",
     "value": "legalStatus",
     "field": "LG",
     "esField": "legal_status.raw",

+ 25 - 5
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -33,6 +33,7 @@ import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -468,16 +469,35 @@ public class EventServiceTests {
 
     @Test
     public void test101() {
-
+        List<Integer> list = new ArrayList<>();
+        list.add(1);
+        list.add(2);
+        list.add(3);
+        list.add(4);
+        this.tran(list);
     }
 
-    @Transactional
-    public void tran() {
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public void tran(List<Integer> list) {
+        int i = 0;
+        for (Integer key : list) {
+            if (i == 3) {
+                this.tran1(i);
+            } else {
+                i += key;
+            }
+        }
+        System.out.println(i);
 
     }
 
-    @Transactional
-    public void tran1() {
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
+    public Integer tran1(int m) {
+        System.out.println(m);
+        m = m+1;
+        if (m > 0) {
 
+        }
+        return m;
     }
 }