Explorar el Código

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/main/java/cn/cslg/pas/service/business/PDFExportFirstPageService.java
xiexiang hace 1 año
padre
commit
b137c24397
Se han modificado 71 ficheros con 1772 adiciones y 224 borrados
  1. 13 0
      .idea/libraries/Maven__co_elastic_clients_elasticsearch_java_8_7_1.xml
  2. 13 0
      .idea/libraries/Maven__com_baomidou_mybatis_plus_3_5_3_1.xml
  3. 13 0
      .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_15_2.xml
  4. 13 0
      .idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_15_2.xml
  5. 13 0
      .idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_15_2.xml
  6. 13 0
      .idea/libraries/Maven__com_google_code_gson_gson_2_10_1.xml
  7. 13 0
      .idea/libraries/Maven__com_rabbitmq_amqp_client_5_17_1.xml
  8. 13 0
      .idea/libraries/Maven__de_rototor_snuggletex_snuggletex_core_1_3_0.xml
  9. 13 0
      .idea/libraries/Maven__io_github_draco1023_poi_tl_ext_0_4_2.xml
  10. 13 0
      .idea/libraries/Maven__io_lettuce_lettuce_core_6_2_6_RELEASE.xml
  11. 13 0
      .idea/libraries/Maven__io_micrometer_micrometer_commons_1_11_3.xml
  12. 13 0
      .idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_97_Final.xml
  13. 13 0
      .idea/libraries/Maven__io_projectreactor_reactor_core_3_5_9.xml
  14. 13 0
      .idea/libraries/Maven__jakarta_json_jakarta_json_api_2_1_2.xml
  15. 13 0
      .idea/libraries/Maven__jakarta_validation_jakarta_validation_api_3_0_2.xml
  16. 13 0
      .idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_4_0_0.xml
  17. 13 0
      .idea/libraries/Maven__org_apache_httpcomponents_client5_httpclient5_5_2_1.xml
  18. 13 0
      .idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_13.xml
  19. 13 0
      .idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_20_0.xml
  20. 13 0
      .idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml
  21. 13 0
      .idea/libraries/Maven__org_attoparser_attoparser_2_0_7_RELEASE.xml
  22. 13 0
      .idea/libraries/Maven__org_eclipse_parsson_parsson_1_0_0.xml
  23. 13 0
      .idea/libraries/Maven__org_jsoup_jsoup_1_15_3.xml
  24. 13 0
      .idea/libraries/Maven__org_mockito_mockito_junit_jupiter_5_3_1.xml
  25. 13 0
      .idea/libraries/Maven__org_objenesis_objenesis_3_3.xml
  26. 13 0
      .idea/libraries/Maven__org_slf4j_slf4j_api_2_0_7.xml
  27. 13 0
      .idea/libraries/Maven__org_springframework_amqp_spring_rabbit_3_0_8.xml
  28. 13 0
      .idea/libraries/Maven__org_springframework_boot_spring_boot_3_1_3.xml
  29. 13 0
      .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_3_1_3.xml
  30. 13 0
      .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_3_1_3.xml
  31. 13 0
      .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_3_1_3.xml
  32. 13 0
      .idea/libraries/Maven__org_webjars_webjars_locator_core_0_52.xml
  33. 13 0
      .idea/libraries/Maven__org_yaml_snakeyaml_1_33.xml
  34. 4 4
      src/main/java/cn/cslg/pas/common/config/WebSocketConfig.java
  35. 13 0
      src/main/java/cn/cslg/pas/common/dto/GetAllCountryDTO.java
  36. 3 0
      src/main/java/cn/cslg/pas/common/dto/GetAllPersonDTO.java
  37. 10 0
      src/main/java/cn/cslg/pas/common/dto/InnerPatentPdfDTO.java
  38. 10 0
      src/main/java/cn/cslg/pas/common/dto/QuerySearchRecordDTO.java
  39. 37 0
      src/main/java/cn/cslg/pas/common/dto/business/AddSearchRecordDTO.java
  40. 3 1
      src/main/java/cn/cslg/pas/common/dto/business/UpdateReportProjectDTO.java
  41. 33 0
      src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateFeatureDTO.java
  42. 3 2
      src/main/java/cn/cslg/pas/common/dto/patentCount/GetEsAllPersonDTO.java
  43. 0 1
      src/main/java/cn/cslg/pas/common/vo/QueryExternalFamilyVO.java
  44. 45 0
      src/main/java/cn/cslg/pas/common/vo/SearchRecordVO.java
  45. 3 3
      src/main/java/cn/cslg/pas/common/vo/business/GetAllPersonVO.java
  46. 29 0
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonAgainVO.java
  47. 1 1
      src/main/java/cn/cslg/pas/common/vo/business/MergePersonIdVO.java
  48. 0 1
      src/main/java/cn/cslg/pas/common/vo/business/MergedNameVO.java
  49. 9 8
      src/main/java/cn/cslg/pas/common/vo/business/ReportProjectVO.java
  50. 18 0
      src/main/java/cn/cslg/pas/controller/FeatureController.java
  51. 31 3
      src/main/java/cn/cslg/pas/controller/PatentController.java
  52. 74 0
      src/main/java/cn/cslg/pas/controller/SearchRecordController.java
  53. 17 0
      src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java
  54. 7 1
      src/main/java/cn/cslg/pas/domain/business/ReportProject.java
  55. 52 0
      src/main/java/cn/cslg/pas/domain/business/SearchRecord.java
  56. 14 0
      src/main/java/cn/cslg/pas/mapper/SearchRecordMapper.java
  57. 148 0
      src/main/java/cn/cslg/pas/service/SearchRecordService.java
  58. 2 1
      src/main/java/cn/cslg/pas/service/business/CompareLiteratureService.java
  59. 88 2
      src/main/java/cn/cslg/pas/service/business/FeatureService.java
  60. 337 106
      src/main/java/cn/cslg/pas/service/business/MergePersonService.java
  61. 3 2
      src/main/java/cn/cslg/pas/service/business/ProofGroupService.java
  62. 64 14
      src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java
  63. 34 26
      src/main/java/cn/cslg/pas/service/business/invalidReport/AssoGroupFeatureService.java
  64. 35 24
      src/main/java/cn/cslg/pas/service/business/invalidReport/EvidenceReasonService.java
  65. 10 6
      src/main/java/cn/cslg/pas/service/business/invalidReport/PatentClaimHistoryService.java
  66. 100 4
      src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java
  67. 7 2
      src/main/java/cn/cslg/pas/service/importPatent/GetCataloguingFromWebThread.java
  68. 25 6
      src/main/java/cn/cslg/pas/service/importPatent/ImportSinglePatentService.java
  69. 1 1
      src/main/resources/mapper/AssoGroupFeatureMapper.xml
  70. 1 1
      src/main/resources/mapper/ReportProjectMapper.xml
  71. 72 4
      src/test/java/cn/cslg/pas/service/EventServiceTests.java

+ 13 - 0
.idea/libraries/Maven__co_elastic_clients_elasticsearch_java_8_7_1.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: co.elastic.clients:elasticsearch-java:8.7.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/co/elastic/clients/elasticsearch-java/8.7.1/elasticsearch-java-8.7.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/co/elastic/clients/elasticsearch-java/8.7.1/elasticsearch-java-8.7.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/co/elastic/clients/elasticsearch-java/8.7.1/elasticsearch-java-8.7.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__com_baomidou_mybatis_plus_3_5_3_1.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.baomidou:mybatis-plus:3.5.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus/3.5.3.1/mybatis-plus-3.5.3.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus/3.5.3.1/mybatis-plus-3.5.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/baomidou/mybatis-plus/3.5.3.1/mybatis-plus-3.5.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_15_2.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.15.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.15.2/jackson-databind-2.15.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.15.2/jackson-databind-2.15.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.15.2/jackson-databind-2.15.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_15_2.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.15.2/jackson-dataformat-yaml-2.15.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.15.2/jackson-dataformat-yaml-2.15.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.15.2/jackson-dataformat-yaml-2.15.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_15_2.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.15.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.15.2/jackson-datatype-jdk8-2.15.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.15.2/jackson-datatype-jdk8-2.15.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.15.2/jackson-datatype-jdk8-2.15.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__com_google_code_gson_gson_2_10_1.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.google.code.gson:gson:2.10.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.10.1/gson-2.10.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.10.1/gson-2.10.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__com_rabbitmq_amqp_client_5_17_1.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.rabbitmq:amqp-client:5.17.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/rabbitmq/amqp-client/5.17.1/amqp-client-5.17.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/com/rabbitmq/amqp-client/5.17.1/amqp-client-5.17.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/rabbitmq/amqp-client/5.17.1/amqp-client-5.17.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__de_rototor_snuggletex_snuggletex_core_1_3_0.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: de.rototor.snuggletex:snuggletex-core:1.3.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/de/rototor/snuggletex/snuggletex-core/1.3.0/snuggletex-core-1.3.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/de/rototor/snuggletex/snuggletex-core/1.3.0/snuggletex-core-1.3.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/de/rototor/snuggletex/snuggletex-core/1.3.0/snuggletex-core-1.3.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__io_github_draco1023_poi_tl_ext_0_4_2.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.github.draco1023:poi-tl-ext:0.4.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/github/draco1023/poi-tl-ext/0.4.2/poi-tl-ext-0.4.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/io/github/draco1023/poi-tl-ext/0.4.2/poi-tl-ext-0.4.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/github/draco1023/poi-tl-ext/0.4.2/poi-tl-ext-0.4.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__io_lettuce_lettuce_core_6_2_6_RELEASE.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.lettuce:lettuce-core:6.2.6.RELEASE">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/lettuce/lettuce-core/6.2.6.RELEASE/lettuce-core-6.2.6.RELEASE.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/io/lettuce/lettuce-core/6.2.6.RELEASE/lettuce-core-6.2.6.RELEASE-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/lettuce/lettuce-core/6.2.6.RELEASE/lettuce-core-6.2.6.RELEASE-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__io_micrometer_micrometer_commons_1_11_3.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.micrometer:micrometer-commons:1.11.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/micrometer/micrometer-commons/1.11.3/micrometer-commons-1.11.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/io/micrometer/micrometer-commons/1.11.3/micrometer-commons-1.11.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/micrometer/micrometer-commons/1.11.3/micrometer-commons-1.11.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_97_Final.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.netty:netty-transport-native-unix-common:4.1.97.Final">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-transport-native-unix-common/4.1.97.Final/netty-transport-native-unix-common-4.1.97.Final.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-transport-native-unix-common/4.1.97.Final/netty-transport-native-unix-common-4.1.97.Final-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/netty/netty-transport-native-unix-common/4.1.97.Final/netty-transport-native-unix-common-4.1.97.Final-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__io_projectreactor_reactor_core_3_5_9.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.projectreactor:reactor-core:3.5.9">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/projectreactor/reactor-core/3.5.9/reactor-core-3.5.9.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/io/projectreactor/reactor-core/3.5.9/reactor-core-3.5.9-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/projectreactor/reactor-core/3.5.9/reactor-core-3.5.9-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__jakarta_json_jakarta_json_api_2_1_2.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jakarta.json:jakarta.json-api:2.1.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/json/jakarta.json-api/2.1.2/jakarta.json-api-2.1.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/json/jakarta.json-api/2.1.2/jakarta.json-api-2.1.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/json/jakarta.json-api/2.1.2/jakarta.json-api-2.1.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_3_0_2.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jakarta.validation:jakarta.validation-api:3.0.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_4_0_0.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:4.0.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/4.0.0/jakarta.xml.bind-api-4.0.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/4.0.0/jakarta.xml.bind-api-4.0.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/4.0.0/jakarta.xml.bind-api-4.0.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_apache_httpcomponents_client5_httpclient5_5_2_1.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.apache.httpcomponents.client5:httpclient5:5.2.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/client5/httpclient5/5.2.1/httpclient5-5.2.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/client5/httpclient5/5.2.1/httpclient5-5.2.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/client5/httpclient5/5.2.1/httpclient5-5.2.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_13.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.apache.httpcomponents:httpclient:4.5.13">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_20_0.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.20.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.20.0/log4j-to-slf4j-2.20.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.20.0/log4j-to-slf4j-2.20.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-to-slf4j/2.20.0/log4j-to-slf4j-2.20.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.apiguardian:apiguardian-api:1.1.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_attoparser_attoparser_2_0_7_RELEASE.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.attoparser:attoparser:2.0.7.RELEASE">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/attoparser/attoparser/2.0.7.RELEASE/attoparser-2.0.7.RELEASE.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/attoparser/attoparser/2.0.7.RELEASE/attoparser-2.0.7.RELEASE-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/attoparser/attoparser/2.0.7.RELEASE/attoparser-2.0.7.RELEASE-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_eclipse_parsson_parsson_1_0_0.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.eclipse.parsson:parsson:1.0.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/parsson/parsson/1.0.0/parsson-1.0.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/parsson/parsson/1.0.0/parsson-1.0.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/parsson/parsson/1.0.0/parsson-1.0.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_jsoup_jsoup_1_15_3.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.jsoup:jsoup:1.15.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jsoup/jsoup/1.15.3/jsoup-1.15.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jsoup/jsoup/1.15.3/jsoup-1.15.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jsoup/jsoup/1.15.3/jsoup-1.15.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_5_3_1.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.mockito:mockito-junit-jupiter:5.3.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-junit-jupiter/5.3.1/mockito-junit-jupiter-5.3.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-junit-jupiter/5.3.1/mockito-junit-jupiter-5.3.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/mockito/mockito-junit-jupiter/5.3.1/mockito-junit-jupiter-5.3.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_objenesis_objenesis_3_3.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.objenesis:objenesis:3.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/3.3/objenesis-3.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/3.3/objenesis-3.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/objenesis/objenesis/3.3/objenesis-3.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_slf4j_slf4j_api_2_0_7.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.slf4j:slf4j-api:2.0.7">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/2.0.7/slf4j-api-2.0.7.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/2.0.7/slf4j-api-2.0.7-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/2.0.7/slf4j-api-2.0.7-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_springframework_amqp_spring_rabbit_3_0_8.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.springframework.amqp:spring-rabbit:3.0.8">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/amqp/spring-rabbit/3.0.8/spring-rabbit-3.0.8.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/amqp/spring-rabbit/3.0.8/spring-rabbit-3.0.8-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/amqp/spring-rabbit/3.0.8/spring-rabbit-3.0.8-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_springframework_boot_spring_boot_3_1_3.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.springframework.boot:spring-boot:3.1.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/3.1.3/spring-boot-3.1.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/3.1.3/spring-boot-3.1.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot/3.1.3/spring-boot-3.1.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_3_1_3.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.springframework.boot:spring-boot-starter:3.1.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/3.1.3/spring-boot-starter-3.1.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/3.1.3/spring-boot-starter-3.1.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter/3.1.3/spring-boot-starter-3.1.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_3_1_3.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.springframework.boot:spring-boot-starter-logging:3.1.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/3.1.3/spring-boot-starter-logging-3.1.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/3.1.3/spring-boot-starter-logging-3.1.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-logging/3.1.3/spring-boot-starter-logging-3.1.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_3_1_3.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.springframework.boot:spring-boot-starter-tomcat:3.1.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/3.1.3/spring-boot-starter-tomcat-3.1.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/3.1.3/spring-boot-starter-tomcat-3.1.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/springframework/boot/spring-boot-starter-tomcat/3.1.3/spring-boot-starter-tomcat-3.1.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_webjars_webjars_locator_core_0_52.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.webjars:webjars-locator-core:0.52">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/webjars/webjars-locator-core/0.52/webjars-locator-core-0.52.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/webjars/webjars-locator-core/0.52/webjars-locator-core-0.52-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/webjars/webjars-locator-core/0.52/webjars-locator-core-0.52-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

+ 13 - 0
.idea/libraries/Maven__org_yaml_snakeyaml_1_33.xml

@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.yaml:snakeyaml:1.33">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.33/snakeyaml-1.33-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.33/snakeyaml-1.33-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>

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

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

+ 13 - 0
src/main/java/cn/cslg/pas/common/dto/GetAllCountryDTO.java

@@ -0,0 +1,13 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+
+@Data
+public class GetAllCountryDTO {
+
+    private String label;
+
+    private String value;
+
+    private String type;
+}

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

@@ -18,4 +18,7 @@ public class GetAllPersonDTO {
     //类型  0 申请人  1 权利人  2 发明人
     private Integer type;
 
+    //合并标识
+    private Integer mergeId;
+
 }

+ 10 - 0
src/main/java/cn/cslg/pas/common/dto/InnerPatentPdfDTO.java

@@ -0,0 +1,10 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+
+@Data
+public class InnerPatentPdfDTO {
+
+    private String pdfGuid;
+    private Integer type;
+}

+ 10 - 0
src/main/java/cn/cslg/pas/common/dto/QuerySearchRecordDTO.java

@@ -0,0 +1,10 @@
+package cn.cslg.pas.common.dto;
+
+import lombok.Data;
+
+@Data
+public class QuerySearchRecordDTO {
+    private Integer projectId;
+    private Long size;
+    private Long current;
+}

+ 37 - 0
src/main/java/cn/cslg/pas/common/dto/business/AddSearchRecordDTO.java

@@ -0,0 +1,37 @@
+package cn.cslg.pas.common.dto.business;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+public class AddSearchRecordDTO {
+    private Integer id;
+    /**
+     * 检索历史
+     */
+    private String searchCondition;
+    /**
+     * 检索数据库
+     */
+    private String searchBase;
+
+    /**
+     * 检索数量
+     */
+    private Integer allNum;
+    /**
+     * 检索人
+     */
+    private String searchPerson;
+    /**
+     * 检索时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date searchTime;
+    private Integer projectId;
+}

+ 3 - 1
src/main/java/cn/cslg/pas/common/dto/business/UpdateReportProjectDTO.java

@@ -68,5 +68,7 @@ public class UpdateReportProjectDTO {
     @Schema(description = "产品或技术")
     private String productOrTech;
     @Schema(description = "关联报告")
-    private Integer AssoReportId;
+    private Integer assoReportId;
+    @Schema(description = "梳理意见")
+    private String cardingOpinion;
 }

+ 33 - 0
src/main/java/cn/cslg/pas/common/dto/invalidDTO/UpdateFeatureDTO.java

@@ -0,0 +1,33 @@
+package cn.cslg.pas.common.dto.invalidDTO;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UpdateFeatureDTO {
+    private Integer projectId;
+    private List<ChangedFeatures> featuresList;
+
+    @Data
+    public static class ChangedFeatures {
+        private Integer id;
+        private Boolean ifChange;
+        private Integer rightSort;
+
+        private String content;
+
+        private String explainText;
+
+        /**
+         * 权要类型(1主权要 0附属权要)
+         */
+        private Integer rightType;
+
+        private Integer sysOrder;
+
+
+    }
+
+}

+ 3 - 2
src/main/java/cn/cslg/pas/common/dto/patentCount/GetEsAllPersonDTO.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.common.dto.patentCount;
 
+import cn.cslg.pas.domain.es.PersonAddress;
 import lombok.Data;
 
 import java.util.List;
@@ -13,7 +14,7 @@ public class GetEsAllPersonDTO {
 
     private List<String> inventor;
 
-    private String address;
+    private PersonAddress applicantAddr;
 
-    private String country;
+    private PersonAddress rightHolderAddr;
 }

+ 0 - 1
src/main/java/cn/cslg/pas/common/vo/QueryExternalFamilyVO.java

@@ -6,7 +6,6 @@ import lombok.Data;
 public class QueryExternalFamilyVO {
 
     private String patentNo;
-
     private Integer pageNum;
 
     private Integer pageSize;

+ 45 - 0
src/main/java/cn/cslg/pas/common/vo/SearchRecordVO.java

@@ -0,0 +1,45 @@
+package cn.cslg.pas.common.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SearchRecordVO {
+    private Integer id;
+
+    /**
+     * 检索历史
+     */
+
+    private String searchCondition;
+    /**
+     * 检索数据库
+     */
+    private String searchBase;
+
+    /**
+     * 检索数量
+     */
+
+    private Integer allNum;
+    /**
+     * 检索人
+     */
+
+    private String searchPerson;
+    /**
+     * 检索时间
+     */
+
+    private Date searchTime;
+
+
+    private String createId;
+
+    private String createName;
+    private Date createTime;
+
+    private Integer projectId;
+}

+ 3 - 3
src/main/java/cn/cslg/pas/common/vo/business/GetAllPersonVO.java

@@ -9,13 +9,13 @@ public class GetAllPersonVO {
 
     private Integer taskId;
 
-    private String field;
+    private String searchQuery;
 
     private String name;
 
-    private Integer pageNum;
+    private Long pageNum;
 
-    private Integer pageSize;
+    private Long pageSize;
 
     //类型  0 申请人  1 权利人  2 发明人
     private Integer type;

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

@@ -0,0 +1,29 @@
+package cn.cslg.pas.common.vo.business;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MergePersonAgainVO {
+
+    private List<String> needMergedName;
+
+    private List<String> mergeName;
+
+    private Integer projectId;
+
+    private Integer type;
+
+    private String name;
+
+    private String abbreviation;
+
+    private String country;
+
+    private String province;
+
+    private String address;
+
+    private String remark;
+}

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

@@ -3,7 +3,7 @@ package cn.cslg.pas.common.vo.business;
 import lombok.Data;
 
 @Data
-public class   MergePersonIdVO {
+public class MergePersonIdVO {
 
     private Integer id;
 

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

@@ -6,7 +6,6 @@ import java.util.List;
 
 @Data
 public class MergedNameVO {
-
     private String name;
 
     private Integer projectId;

+ 9 - 8
src/main/java/cn/cslg/pas/common/vo/business/ReportProjectVO.java

@@ -109,13 +109,13 @@ public class ReportProjectVO {
 
 
     /**
-     *标的专利号
+     * 标的专利号
      */
-    @Schema(description= "标的专利号")
+    @Schema(description = "标的专利号")
     private String signPatentNo;
 
     /**
-     *标的产品号
+     * 标的产品号
      */
     @Schema(description = "标的产品号")
     private Integer signProjectId;
@@ -124,7 +124,7 @@ public class ReportProjectVO {
      * 状态
      */
     @Schema(description = "状态")
-    private  Integer status;
+    private Integer status;
 
     @Schema(description = "报告类型")
     private String statusName;
@@ -166,7 +166,6 @@ public class ReportProjectVO {
     private String invalidApplication;
 
 
-
     /**
      * 结论论述
      */
@@ -174,7 +173,6 @@ public class ReportProjectVO {
     private String cronDescription;
 
 
-
     /**
      * 创建人
      */
@@ -187,7 +185,7 @@ public class ReportProjectVO {
     @Schema(description = "创建人")
     private String createName;
 
-    @Schema(description= "创建时间")
+    @Schema(description = "创建时间")
     private Date createTime;
 
     @Schema(description = "事件id")
@@ -223,5 +221,8 @@ public class ReportProjectVO {
     @Schema(description = "主被动类型")
     private Integer actType;
     @Schema(description = "专利类型")
-   private Integer patentType;
+    private Integer patentType;
+    @Schema(description = "梳理意见")
+    private String cardingOpinion;
+
 }

+ 18 - 0
src/main/java/cn/cslg/pas/controller/FeatureController.java

@@ -3,6 +3,7 @@ package cn.cslg.pas.controller;
 import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.dto.QuerySplitDTO;
 import cn.cslg.pas.common.dto.invalidDTO.QueryClaimSplitHistoryDTO;
+import cn.cslg.pas.common.dto.invalidDTO.UpdateFeatureDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.vo.business.SplitVO;
@@ -17,6 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 
 /**
  * 特征Controller层
@@ -122,4 +125,19 @@ public class FeatureController {
         }
 
     }
+
+
+    @Operation(summary = "批量添加特征")
+    @PostMapping("/saveBatchFeature")
+    public Response saveBatchFeature(@RequestBody UpdateFeatureDTO updateFeatureDTO) throws Exception {
+        try {
+            Records records = new Records();
+            List<Integer> ids = featureService.saveBatchFeature(updateFeatureDTO);
+            records.setData(ids);
+            return Response.success(records);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+
+    }
 }

+ 31 - 3
src/main/java/cn/cslg/pas/controller/PatentController.java

@@ -1,11 +1,9 @@
 package cn.cslg.pas.controller;
 
 import cn.cslg.pas.common.core.base.Constants;
-import cn.cslg.pas.common.dto.MergePersonQueryDTO;
-import cn.cslg.pas.common.dto.PatentColumnDTO;
+import cn.cslg.pas.common.dto.*;
 import cn.cslg.pas.common.dto.PatentExport.PatentExportParams;
 import cn.cslg.pas.common.dto.PatentExport.TaskParams;
-import cn.cslg.pas.common.dto.PatentKinDTO;
 import cn.cslg.pas.common.dto.business.EsCountDTO;
 import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
@@ -88,6 +86,20 @@ public class PatentController {
         return Response.success(dto);
     }
 
+    @GetMapping("/getTextPdf")
+    @Operation(summary = "获得中国专利pdf全文")
+    public Response getTextPdf(String appNo) throws IOException {
+        List<InnerPatentPdfDTO> pdfDTOS = patentService.getTextPdf(appNo);
+        return Response.success(pdfDTOS);
+    }
+
+    @GetMapping("/getFigure")
+    @Operation(summary = "内部获取附图")
+    public Response getFigure(String appNo) throws IOException {
+        List<String> figures = patentService.getFigure(appNo);
+        return Response.success(figures);
+    }
+
     @Operation(summary = "根据专利号查询同族")
     @PostMapping("/selectKinByPatentNo")
     public Response selectKinByPatentNo(@RequestBody PatentKinVO vo) throws Exception {
@@ -146,6 +158,13 @@ public class PatentController {
         return Response.success(personId);
     }
 
+    @Operation(summary = "专利列表上再次新增发明人/权利人/申请人合并")
+    @PostMapping("/mergePersonAgain")
+    public Response mergePersonAgain(@RequestBody MergePersonAgainVO againVO) throws Exception {
+        Integer personId = mergePersonService.mergePersonAgain(againVO);
+        return Response.success(personId);
+    }
+
     @Operation(summary = "专利列表上编辑发明人/权利人/申请人合并")
     @PostMapping("/updateMergePerson")
     public Response updateMergePerson(@RequestBody MergePersonVO personVO) throws Exception{
@@ -188,6 +207,15 @@ public class PatentController {
         return Response.success(id);
     }
 
+    //-------------------------------获取所有国家-----------------
+    @Operation(summary = "获取所有国家列表查询")
+    @GetMapping("/getAllCountry")
+    public Response getAllCountry() {
+        List<GetAllCountryDTO> allCountry = mergePersonService.getAllCountry();
+        return Response.success(allCountry);
+    }
+
+    //--------------------导出-----------------------
     @PostMapping("/exportPDFFirstPage")
     @Operation(summary = "导出专利PDF")
     public ResponseEntity<InputStreamResource> exportPDFFirstPage(@RequestBody EsCustomFieldBatchVO EsVO) throws IOException {

+ 74 - 0
src/main/java/cn/cslg/pas/controller/SearchRecordController.java

@@ -0,0 +1,74 @@
+package cn.cslg.pas.controller;
+
+
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.dto.QuerySearchRecordDTO;
+import cn.cslg.pas.common.dto.business.AddSearchRecordDTO;
+import cn.cslg.pas.common.dto.invalidDTO.AddEvidenceReasonDTO;
+import cn.cslg.pas.common.dto.invalidDTO.QueryEvidenceReasonDTO;
+import cn.cslg.pas.common.dto.invalidDTO.QueryInvalidHistoryDTO;
+import cn.cslg.pas.common.dto.invalidDTO.UpdateMessageDTO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.vo.invalidVO.QueryEvidenceReasonVO;
+import cn.cslg.pas.service.SearchRecordService;
+import cn.cslg.pas.service.business.invalidReport.EvidenceReasonService;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@Slf4j
+@RequestMapping(Constants.API_XiaoSHI + "/searchRecord")
+@RestController
+public class SearchRecordController {
+    @Autowired
+    private SearchRecordService searchRecordService;
+
+    @Operation(summary = "添加或更新检索记录")
+    @PostMapping("/addSearchRecord")
+    public Response addSearchRecord(@RequestBody AddSearchRecordDTO addSearchRecordDTO) {
+        Records records = new Records();
+        try {
+            Integer id = searchRecordService.addSearchRecord(addSearchRecordDTO);
+            records.setData(id);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+
+        return Response.success(records);
+    }
+
+    @Operation(summary = "删除检索记录")
+    @PostMapping("/removeSearchRecords")
+    public Response removeSearchRecords(@RequestBody List<Integer> ids) {
+        Records records = new Records();
+        try {
+            List<Integer> idList = searchRecordService.removeSearchRecords(ids);
+            records.setData(idList);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+
+        return Response.success(records);
+    }
+
+    @Operation(summary = "查询检索记录")
+    @PostMapping("/querySearchRecords")
+    public Response querySearchRecords(@RequestBody QuerySearchRecordDTO querySearchRecordDTO) {
+        Records records = new Records();
+        try {
+            records = searchRecordService.querySearchRecord(querySearchRecordDTO);
+        } catch (Exception e) {
+            return Response.error(e.getMessage());
+        }
+
+        return Response.success(records);
+    }
+
+}

+ 17 - 0
src/main/java/cn/cslg/pas/controller/outApi/PatentStarController.java

@@ -1,6 +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.business.SelectClaimDTO;
@@ -8,6 +9,8 @@ import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.vo.QueryExternalFamilyVO;
 import cn.cslg.pas.common.vo.business.PatentNoVO;
+
+
 import cn.cslg.pas.domain.es.Text;
 import cn.cslg.pas.service.common.PatentStarApiService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -124,4 +127,18 @@ public class PatentStarController {
         List<Text> fullText = patentStarApiService.getCnFullText(appNo);
         return Response.success(fullText);
     }
+
+    @GetMapping("/getExternalTextPdf")
+    @Operation(summary = "获得中国专利pdf全文")
+    public Response getExternalTextPdf(String appNo,String rowApplicationNo) throws IOException {
+        List<InnerPatentPdfDTO> pdfDTOS = patentStarApiService.getExternalTextPdf(appNo,rowApplicationNo);
+        return Response.success(pdfDTOS);
+    }
+
+    @GetMapping("/getExternalFigure")
+    @Operation(summary = "外部获得附图")
+    public Response getExternalFigure(String appNo) throws IOException {
+        List<String> figures = patentStarApiService.getExternalFigure(appNo);
+        return Response.success(figures);
+    }
 }

+ 7 - 1
src/main/java/cn/cslg/pas/domain/business/ReportProject.java

@@ -110,8 +110,14 @@ public class ReportProject extends BaseEntity<ReportProject> {
     private Integer actType;
 
     /**
-     * 主被动类型
+     * 专利类型
      */
     @TableField(value = "patent_type")
     private Integer patentType;
+    /**
+     * 梳理意见
+     */
+    @TableField(value = "carding_opinion")
+    private String cardingOpinion;
+
 }

+ 52 - 0
src/main/java/cn/cslg/pas/domain/business/SearchRecord.java

@@ -0,0 +1,52 @@
+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;
+
+/**
+ * 检索记录表
+ * 2024/1/10
+ * lrj
+ */
+@Data
+@TableName("search_record")
+public class SearchRecord extends BaseEntity<SearchRecord>  {
+    /**
+     * 检索历史
+     */
+    @TableField(value = "search_condition")
+    private String searchCondition;
+    /**
+     * 检索数据库
+     */
+    @TableField(value = "search_base")
+    private String searchBase;
+
+    /**
+     * 检索数量
+     */
+    @TableField(value = "all_num")
+    private Integer allNum;
+    /**
+     * 检索人
+     */
+    @TableField(value = "search_person")
+    private String searchPerson;
+    /**
+     * 检索时间
+     */
+    @TableField(value = "search_time")
+    private Date searchTime;
+
+    @TableField(value = "create_id")
+    private String createId;
+    @TableField(value = "create_time")
+    private Date createTime;
+    @TableField(value = "project_id")
+    private Integer projectId;
+
+}

+ 14 - 0
src/main/java/cn/cslg/pas/mapper/SearchRecordMapper.java

@@ -0,0 +1,14 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.business.AdminProceed;
+import cn.cslg.pas.domain.business.SearchRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author lrj
+ * @Date 2024/01/10
+ */
+@Repository
+public interface SearchRecordMapper extends BaseMapper<SearchRecord> {
+}

+ 148 - 0
src/main/java/cn/cslg/pas/service/SearchRecordService.java

@@ -0,0 +1,148 @@
+package cn.cslg.pas.service;
+
+
+import cn.cslg.pas.common.dto.QuerySearchRecordDTO;
+import cn.cslg.pas.common.dto.business.AddSearchRecordDTO;
+import cn.cslg.pas.common.model.cronModel.Personnel;
+import cn.cslg.pas.common.model.cronModel.PersonnelVO;
+import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.common.vo.SearchRecordVO;
+import cn.cslg.pas.domain.business.AssoEventFile;
+import cn.cslg.pas.domain.business.SearchRecord;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.AssoEventFileMapper;
+import cn.cslg.pas.mapper.SearchRecordMapper;
+import cn.cslg.pas.service.permissions.PermissionService;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 检索记录
+ * lrj
+ */
+@Service
+public class SearchRecordService extends ServiceImpl<SearchRecordMapper, SearchRecord> {
+    @Autowired
+    private CacheUtils cacheUtils;
+    @Autowired
+    private LoginUtils loginUtils;
+
+    @Autowired
+    private PermissionService permissionService;
+
+    /**
+     * 添加检索记录
+     *
+     * @param addSearchRecordDTO
+     * @return
+     */
+    public Integer addSearchRecord(AddSearchRecordDTO addSearchRecordDTO) {
+        if (addSearchRecordDTO == null) {
+            throw new XiaoShiException("请传入数据");
+        }
+        Integer id = addSearchRecordDTO.getId();
+        SearchRecord searchRecord = new SearchRecord();
+        BeanUtils.copyProperties(addSearchRecordDTO, searchRecord);
+        if (id != null) {
+            SearchRecord searchRecord1 = this.getById(id);
+            if (searchRecord1 == null) {
+                throw new XiaoShiException("记录不存在");
+            }
+            searchRecord.setCreateId(searchRecord1.getCreateId());
+            searchRecord.setCreateTime(searchRecord1.getCreateTime());
+            searchRecord.updateById();
+        } else {
+            PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+            searchRecord.setCreateId(personnelVO.getId());
+            searchRecord.insert();
+            id = searchRecord.getId();
+        }
+        return id;
+    }
+
+    /**
+     * 删除检索记录
+     *
+     * @param ids 检索记录id
+     * @return
+     */
+    public List<Integer> removeSearchRecords(List<Integer> ids) {
+        if (ids == null) {
+            throw new XiaoShiException("请传入数据");
+        }
+        this.removeBatchByIds(ids);
+        return ids;
+    }
+
+
+    /**
+     * 删除检索记录
+     *
+     * @param querySearchRecordDTO 查询检索记录dto
+     *                             lrj
+     * @return
+     */
+    public Records querySearchRecord(QuerySearchRecordDTO querySearchRecordDTO) {
+        Integer projectId = querySearchRecordDTO.getProjectId();
+        Long size = querySearchRecordDTO.getSize();
+        Long current = querySearchRecordDTO.getCurrent();
+
+        if (projectId == null) {
+            throw new XiaoShiException("请传入报告id");
+        }
+
+        LambdaQueryWrapper<SearchRecord> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SearchRecord::getProjectId, projectId);
+        Page<SearchRecord> searchRecordPage = this.page(new Page<>(current, size), queryWrapper);
+        Long total = searchRecordPage.getTotal();
+        List<SearchRecord> searchRecords = searchRecordPage.getRecords();
+        List<SearchRecordVO> vos = this.loadRecord(searchRecords);
+        Records records = new Records();
+        records.setCurrent(current);
+        records.setSize(size);
+        records.setTotal(total);
+        records.setData(vos);
+        return records;
+    }
+
+
+    private List<SearchRecordVO> loadRecord(List<SearchRecord> searchRecords) {
+        List<SearchRecordVO> searchRecordVOS = new ArrayList<>();
+        if (searchRecords.size() == 0) {
+            return searchRecordVOS;
+        }
+        List<String> createIds = searchRecords.stream().map(SearchRecord::getCreateId).collect(Collectors.toList());
+        //查询创建人名称
+        List<Personnel> personnels = new ArrayList<>();
+        if (createIds.size() != 0) {
+            try {
+                String res = permissionService.getPersonnelByIdsFromPCS(createIds);
+                JSONObject jsonObject = JSONObject.parseObject(res);
+                personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
+            } catch (Exception e) {
+
+            }
+        }
+        for (SearchRecord searchRecord : searchRecords) {
+            SearchRecordVO searchRecordVO = new SearchRecordVO();
+            BeanUtils.copyProperties(searchRecord, searchRecordVO);
+            Personnel personnel = personnels.stream().filter(i -> i.getId().equals(searchRecordVO.getCreateId())).findFirst().orElse(null);
+            if (personnel != null) {
+                searchRecordVO.setCreateName(personnel.getPersonnelName());
+            }
+            searchRecordVOS.add(searchRecordVO);
+        }
+        return searchRecordVOS;
+    }
+}

+ 2 - 1
src/main/java/cn/cslg/pas/service/business/CompareLiteratureService.java

@@ -465,7 +465,7 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
         String name = literatureNo;
         if (patent != null) {
             if (patent.getTitle() != null && patent.getTitle().size() != 0) {
-                name += "(" + patent.getTitle().get(0).getTextContent();
+                name += "(" + patent.getTitle().get(0).getTextContent()+")";
             }
             compareLiterature.setAppDate(patent.getAppDate());
             compareLiterature.setPublicDate(patent.getPublicDate());
@@ -478,6 +478,7 @@ public class CompareLiteratureService extends ServiceImpl<CompareLiteratureMappe
         if (patent != null && patent.getRightHolder() != null && patent.getRightHolder().size() > 0) {
             authorName = patent.getRightHolder().get(0).getName();
         }
+
         compareLiterature.setAuthorName(authorName);
         //类型
         compareLiterature.setType(0);

+ 88 - 2
src/main/java/cn/cslg/pas/service/business/FeatureService.java

@@ -4,6 +4,7 @@ import cn.cslg.pas.common.TreeBuild;
 import cn.cslg.pas.common.dto.QuerySplitDTO;
 import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.dto.invalidDTO.QueryClaimSplitHistoryDTO;
+import cn.cslg.pas.common.dto.invalidDTO.UpdateFeatureDTO;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.utils.CacheUtils;
@@ -56,7 +57,7 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
     private AssoGroupFeatureService assoGroupFeatureService;
 
     @Transactional(rollbackFor = Exception.class)
-    public List<PatentRightVo>  splitPatentFeature(SplitVO splitVO) throws IOException {
+    public List<PatentRightVo> splitPatentFeature(SplitVO splitVO) throws IOException {
         String patentNo = splitVO.getPatentNo();
         Integer projectId = splitVO.getProjectId();
         Integer splitType = splitVO.getSplitType();
@@ -457,10 +458,95 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Feature> {
         return allFeatures;
     }
 
-    public void saveBatchFeature(){
+    /**
+     * 保存特征
+     * @param updateFeatureDTO
+     * @return
+     */
+    public List<Integer> saveBatchFeature(UpdateFeatureDTO updateFeatureDTO) {
+        List<UpdateFeatureDTO.ChangedFeatures> features = updateFeatureDTO.getFeaturesList();
+        Integer projectId = updateFeatureDTO.getProjectId();
+        if (features == null) {
+            features = new ArrayList<>();
+        }
+        if (projectId == null) {
+            throw new XiaoShiException("未选择报告");
+        }
+        LambdaQueryWrapper<ReportProject> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ReportProject::getProjectId, projectId);
+        ReportProject reportProject = reportProjectService.getOne(queryWrapper, false);
+        if (reportProject == null) {
+            throw new XiaoShiException("报告不存在");
+        }
+        String signPatentNo = reportProject.getSignPatentNo();
+
+        //根据标的专利号和报告id查询拆分信息
+        LambdaQueryWrapper<PatentSplitMessage> queryWrapper1 = new LambdaQueryWrapper<>();
+        queryWrapper1.eq(PatentSplitMessage::getPatentNo, signPatentNo)
+                .eq(PatentSplitMessage::getProjectId, projectId);
+        PatentSplitMessage patentSplitMessage = patentSplitMessageService.getOne(queryWrapper1, false);
+        if (patentSplitMessage == null) {
+            throw new XiaoShiException("未进行拆分过");
+        }
+        List<Integer> ids =   this.saveFeatures(features, patentSplitMessage.getId(), projectId);
+        return ids;
+    }
+
+
+    /**
+     * 批量添加特征
+     * @param features
+     * @param splitMessageId
+     * @param projectId
+     * @return
+     */
+    public List<Integer> saveFeatures(List<UpdateFeatureDTO.ChangedFeatures> features, Integer splitMessageId, Integer projectId) {
+        List<Integer> addIds = new ArrayList<>();
+        LambdaQueryWrapper<Feature> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select(Feature::getId);
+        queryWrapper.eq(Feature::getSplitMessageId, splitMessageId);
+        List<Feature> featureList = this.list(queryWrapper);
+        List<Integer> ids = featureList.stream().map(Feature::getId).collect(Collectors.toList());
 
+        PersonnelVO personnelVO = new PersonnelVO();
+        personnelVO.setId("1");
+        personnelVO.setTenantId(1);
 
+        List<Feature> addFeatures = new ArrayList<>();
+        features.forEach(item -> {
+            Integer id = item.getId();
+            if (id == null) {
+                Feature feature = new Feature();
+                feature.setCreateId(personnelVO.getId());
+                feature.setSplitMessageId(splitMessageId);
+                feature.setContent(item.getContent());
+                feature.setExplainText(item.getExplainText());
+                feature.setRightSort(item.getRightSort());
+                feature.setProjectId(projectId);
+                feature.setSysOrder(item.getSysOrder());
+                feature.setTenantId(personnelVO.getTenantId());
+                addFeatures.add(feature);
+            } else {
+                ids.remove(id);
+                if (item.getIfChange() != null && item.getIfChange().equals(true)) {
+                    Feature feature = this.getById(id);
+                    feature.setSysOrder(item.getSysOrder());
+                    feature.setContent(item.getContent());
+                    feature.setExplainText(item.getExplainText());
+                    feature.updateById();
+                }
+            }
 
+        });
 
+        //添加特征
+        if (addFeatures.size() != 0) {
+            this.saveBatch(addFeatures);
+            addIds = addFeatures.stream().map(Feature::getId).collect(Collectors.toList());
+        }
+        if (ids.size() != 0) {
+            this.removeBatchByIds(ids);
+        }
+        return addIds;
     }
 }

+ 337 - 106
src/main/java/cn/cslg/pas/service/business/MergePersonService.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.service.business;
 
+import cn.cslg.pas.common.dto.GetAllCountryDTO;
 import cn.cslg.pas.common.dto.GetAllPersonDTO;
 import cn.cslg.pas.common.dto.MergePersonQueryDTO;
 import cn.cslg.pas.common.dto.PatentColumnDTO;
@@ -15,11 +16,14 @@ import cn.cslg.pas.common.vo.business.*;
 import cn.cslg.pas.domain.BaseEntity;
 import cn.cslg.pas.domain.business.FollowUp;
 import cn.cslg.pas.domain.business.MergePerson;
+import cn.cslg.pas.domain.business.SystemDict;
 import cn.cslg.pas.domain.es.Patent;
 import cn.cslg.pas.domain.es.PatentMergePerson;
+import cn.cslg.pas.domain.es.PatentPerson;
 import cn.cslg.pas.domain.es.PersonAddress;
 import cn.cslg.pas.exception.UnLoginException;
 import cn.cslg.pas.mapper.MergePersonMapper;
+import cn.cslg.pas.mapper.SystemDictMapper;
 import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.business.es.EsService;
 import cn.cslg.pas.service.query.FormatQueryService;
@@ -76,6 +80,8 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
     private EsPatentService esPatentService;
     @Autowired
     private EsService esService;
+    @Autowired
+    private SystemDictMapper systemDictMapper;
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
     public Integer mergePerson(MergePersonVO vo) throws Exception {
@@ -146,10 +152,29 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
 
             for (String id : map.keySet()) {
                 Patent patent = map.get(id);
-                List<PatentMergePerson> mergeApplicants = patent.getMergeApplicant();
-                mergePersonList.addAll(mergeApplicants);
-                patent.setMergeApplicant(mergePersonList);
-                patent.setMergeRightHolder(mergePersonList);
+                if (type == 0) {
+                    //申请人
+                    List<PatentMergePerson> mergeApplicants = new ArrayList<>();
+                    if (!CollectionUtils.isEmpty(patent.getMergeApplicant())) {
+                        mergeApplicants = patent.getMergeApplicant();
+                    }
+                    mergeApplicants.addAll(mergePersonList);
+                    //权利人
+                    List<PatentMergePerson> mergeRightHolder = new ArrayList<>();
+                    if (!CollectionUtils.isEmpty(patent.getMergeRightHolder())) {
+                        mergeRightHolder = patent.getMergeRightHolder();
+                    }
+                    mergeRightHolder.addAll(mergePersonList);
+                    patent.setMergeApplicant(mergeApplicants);
+                    patent.setMergeRightHolder(mergeRightHolder);
+                } else if (type == 2) {
+                    List<PatentMergePerson> mergeInventor = new ArrayList<>();
+                    if (!CollectionUtils.isEmpty(patent.getMergeInventor())) {
+                        mergeInventor = patent.getMergeInventor();
+                    }
+                    mergeInventor.addAll(mergePersonList);
+                    patent.setMergeInventor(mergeInventor);
+                }
                 esService.updateMergePerson(patent, id);
             }
         }
@@ -157,6 +182,44 @@ 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> nameList = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(mergedNames)) {
+            for (String mergedName : mergedNames) {
+                MergePerson person = mergePersonMapper.selectOne(new LambdaQueryWrapper<MergePerson>()
+                        .eq(MergePerson::getProjectId, vo.getProjectId())
+                        .eq(MergePerson::getName, mergedName));
+                String name = person.getMergedName();
+                List<String> getNames = JSONArray.parseArray(name, String.class);
+                nameList.addAll(getNames);
+
+                MergePersonIdVO personIdVO = new MergePersonIdVO();
+                personIdVO.setId(person.getId());
+                personIdVO.setType(person.getType());
+                this.delMergePerson(personIdVO);
+            }
+        }
+
+        if (!CollectionUtils.isEmpty(mergeName)) {
+            nameList.addAll(mergeName);
+        }
+
+        MergePersonVO personVO = new MergePersonVO();
+        personVO.setProjectId(vo.getProjectId());
+        personVO.setType(vo.getType());
+        personVO.setName(vo.getName());
+        personVO.setAbbreviation(vo.getAbbreviation());
+        personVO.setCountry(vo.getCountry());
+        personVO.setProvince(vo.getProvince());
+        personVO.setAddress(vo.getAddress());
+        personVO.setRemark(vo.getRemark());
+        personVO.setMergedName(nameList);
+        return this.mergePerson(personVO);
+    }
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
     public Integer updateMergePerson(MergePersonVO vo) throws Exception {
         //获取登陆人信息 用于设置创建人
         PersonnelVO personnelVO = new PersonnelVO();
@@ -181,57 +244,92 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
 
         if (ObjectUtil.isNotEmpty(person)) {
             BeanUtils.copyProperties(vo, person);
-            person.setMergedName(JSONArray.toJSONString(vo.getMergedName()));
+//            person.setMergedName(JSONArray.toJSONString(vo.getMergedName()));
             person.setCreateId(personnelVO.getId());
             person.setCreateTime(new Date());
             person.updateById();
 
-            List<String> mergedNames = JSONArray.parseArray(mergedName, String.class);
-            SearchRequest.Builder builder = new SearchRequest.Builder();
-            //设置查询索引
-            builder.index("patent");
+            if (!name.equals(vo.getName())) {
+                List<String> mergedNames = JSONArray.parseArray(mergedName, String.class);
+                SearchRequest.Builder builder = new SearchRequest.Builder();
+                //设置查询索引
+                builder.index("patent");
 
-            List<Query> queries = new ArrayList<>();
-            if (type == 0) {
-                for (String merged : mergedNames) {
-                    Query q1 = QueryBuilders.term(i -> i.field("applicant.name.key").value(merged));
-                    Query query1 = QueryBuilders.nested(i -> i.path("applicant").query(q1));
-                    Query q2 = QueryBuilders.term(i -> i.field("right_holder.name.key").value(merged));
-                    Query query2 = QueryBuilders.nested(i -> i.path("right_holder").query(q2));
-                    queries.add(query1);
-                    queries.add(query2);
+                List<Query> queries = new ArrayList<>();
+                if (type == 0) {
+                    for (String merged : mergedNames) {
+                        Query q1 = QueryBuilders.term(i -> i.field("applicant.name.key").value(merged));
+                        Query query1 = QueryBuilders.nested(i -> i.path("applicant").query(q1));
+                        Query q2 = QueryBuilders.term(i -> i.field("right_holder.name.key").value(merged));
+                        Query query2 = QueryBuilders.nested(i -> i.path("right_holder").query(q2));
+                        queries.add(query1);
+                        queries.add(query2);
+                    }
+                } else {
+                    for (String merged : mergedNames) {
+                        Query q = QueryBuilders.term(i -> i.field("inventor.name.key").value(merged));
+                        Query query = QueryBuilders.nested(i -> i.path("inventor").query(q));
+                        queries.add(query);
+                    }
                 }
-            } else {
-                for (String merged : mergedNames) {
-                    Query q = QueryBuilders.term(i -> i.field("inventor.name.key").value(merged));
-                    Query query = QueryBuilders.nested(i -> i.path("inventor").query(q));
-                    queries.add(query);
+                Query query = QueryBuilders.bool(i -> i.should(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());
                 }
-            }
-            Query query = QueryBuilders.bool(i -> i.should(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);
-                    List<PatentMergePerson> mergeApplicants = patent.getMergeApplicant();
-                    if (!name.equals(vo.getName())) {
-                        for (PatentMergePerson mergeApplicant : mergeApplicants) {
-                            if (mergeApplicant.getName().equals(name)) {
-                                mergeApplicant.setName(vo.getName());
+                if (!CollectionUtils.isEmpty(map)) {
+                    for (String id : map.keySet()) {
+                        Patent patent = map.get(id);
+                        if (type == 0) {
+                            //申请人
+                            List<PatentMergePerson> mergeApplicants = new ArrayList<>();
+                            if (!CollectionUtils.isEmpty(patent.getMergeApplicant())) {
+                                mergeApplicants = patent.getMergeApplicant();
+
+                                for (PatentMergePerson mergeApplicant : mergeApplicants) {
+                                    if (mergeApplicant.getName().equals(name)) {
+                                        mergeApplicant.setName(vo.getName());
+                                    }
+                                }
+
+                                patent.setMergeApplicant(mergeApplicants);
+                            }
+
+                            //权利人
+                            List<PatentMergePerson> mergeRightHolders = new ArrayList<>();
+                            if (!CollectionUtils.isEmpty(patent.getMergeRightHolder())) {
+                                mergeRightHolders = patent.getMergeRightHolder();
+                                for (PatentMergePerson mergeRightHolder : mergeRightHolders) {
+                                    if (mergeRightHolder.getName().equals(name)) {
+                                        mergeRightHolder.setName(vo.getName());
+                                    }
+                                }
+
+                                patent.setMergeRightHolder(mergeRightHolders);
+                            }
+
+                        } else if (type == 2) {
+                            List<PatentMergePerson> mergeInventors = new ArrayList<>();
+                            if (!CollectionUtils.isEmpty(patent.getMergeInventor())) {
+                                mergeInventors = patent.getMergeInventor();
+
+                                for (PatentMergePerson mergeInventor : mergeInventors) {
+                                    if (mergeInventor.getName().equals(name)) {
+                                        mergeInventor.setName(vo.getName());
+                                    }
+                                }
+
+                                patent.setMergeInventor(mergeInventors);
                             }
                         }
+
+                        esService.updateMergePerson(patent, id);
                     }
-                    patent.setMergeApplicant(mergeApplicants);
-                    patent.setMergeRightHolder(mergeApplicants);
-                    esService.updateMergePerson(patent, id);
                 }
             }
         } else {
@@ -287,12 +385,12 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
     public Records getMergePerson(GetAllPersonVO vo) throws Exception {
         Integer projectId = vo.getProjectId();
         Integer taskId = vo.getTaskId();
-        Integer pageNum = vo.getPageNum();
-        Integer pageSize = vo.getPageSize();
+        Long pageNum = vo.getPageNum();
+        Long pageSize = vo.getPageSize();
         Integer type = vo.getType();
         String searchCondition = "";
         if (type == 0 && StringUtils.isNotEmpty(vo.getName())) {
-            searchCondition = searchCondition + "PA = " + vo.getName();
+            searchCondition = searchCondition + "PA = " + vo.getName() + " " + "OR" + " " + "PE =" + vo.getName();
         } else if (type == 2 && StringUtils.isNotEmpty(vo.getName())) {
             searchCondition = searchCondition + "IN = " + vo.getName();
         }
@@ -321,90 +419,202 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
         builder.query(q);
         //分页
-        if (pageNum > 0 && pageSize > 0) {
-            builder.from((pageNum - 1) * pageSize).size(pageSize);
-        }
+//        if (pageNum > 0 && pageSize > 0) {
+//            builder.from((pageNum - 1) * pageSize).size(pageSize);
+//        }
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<Hit<Patent>> hits = response.hits().hits();
-        long total = response.hits().total().value();
         List<GetEsAllPersonDTO> personDTOS = new ArrayList<>();
         for (Hit<Patent> hit : hits) {
             Patent esMess = hit.source();
             PersonAddress applicantAddr = null;
             GetEsAllPersonDTO personDTO = new GetEsAllPersonDTO();
-            if (ObjectUtil.isNotEmpty(esMess.getApplicantAddr())) {
-                applicantAddr = esMess.getApplicantAddr();
-                personDTO.setAddress(applicantAddr.getAddress());
-                personDTO.setCountry(applicantAddr.getCountry());
-            }
+            personDTO.setApplicantAddr(esMess.getApplicantAddr());
+            personDTO.setRightHolderAddr(esMess.getRightHolderAddr());
             personDTO.setApplicant(esPatentService.loadName(esMess.getApplicant()));
             personDTO.setRightHolder(esPatentService.loadName(esMess.getRightHolder()));
             personDTO.setInventor(esPatentService.loadName(esMess.getInventor()));
             personDTOS.add(personDTO);
         }
-        List<String> applicants = new ArrayList<>();
-        List<String> inventors = new ArrayList<>();
-        for (GetEsAllPersonDTO personDTO : personDTOS) {
-            applicants.addAll(personDTO.getApplicant());
-            inventors.addAll(personDTO.getInventor());
+
+        //es申请人/权利人
+        List<GetAllPersonDTO> personDTOList = new ArrayList<>();
+        //申请人
+        List<GetAllPersonDTO> applicantDTOS = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(personDTOS)) {
+            for (GetEsAllPersonDTO personDTO : personDTOS) {
+                PersonAddress applicantAddr = personDTO.getApplicantAddr();
+                if (ObjectUtil.isNotEmpty(applicantAddr)) {
+                    List<String> applicant = personDTO.getApplicant();
+                    for (String s : applicant) {
+                        GetAllPersonDTO dto = new GetAllPersonDTO();
+                        dto.setName(s);
+                        dto.setType(0);
+                        if (StringUtils.isNotEmpty(applicantAddr.getCountry())) {
+                            dto.setCountry(applicantAddr.getCountry());
+                        }
+                        if (StringUtils.isNotEmpty(applicantAddr.getAddress())) {
+                            dto.setAddress(applicantAddr.getAddress());
+                        }
+                        applicantDTOS.add(dto);
+                    }
+                } else {
+                    List<String> applicant = personDTO.getApplicant();
+                    for (String s : applicant) {
+                        GetAllPersonDTO dto = new GetAllPersonDTO();
+                        dto.setName(s);
+                        dto.setType(0);
+                        applicantDTOS.add(dto);
+                    }
+                }
+            }
+        }
+
+        //权利人
+        List<GetAllPersonDTO> rightDTOS = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(personDTOS)) {
+            for (GetEsAllPersonDTO personDTO : personDTOS) {
+                PersonAddress rightHolderAddr = personDTO.getRightHolderAddr();
+                if (ObjectUtil.isNotEmpty(rightHolderAddr)) {
+                    List<String> rightHolder = personDTO.getRightHolder();
+                    for (String s : rightHolder) {
+                        GetAllPersonDTO dto = new GetAllPersonDTO();
+                        dto.setName(s);
+                        dto.setType(0);
+                        if (StringUtils.isNotEmpty(rightHolderAddr.getCountry())) {
+                            dto.setCountry(rightHolderAddr.getCountry());
+                        }
+                        if (StringUtils.isNotEmpty(rightHolderAddr.getAddress())) {
+                            dto.setAddress(rightHolderAddr.getAddress());
+                        }
+                        rightDTOS.add(dto);
+                    }
+                } else {
+                    List<String> rightHolder = personDTO.getRightHolder();
+                    for (String s : rightHolder) {
+                        GetAllPersonDTO dto = new GetAllPersonDTO();
+                        dto.setName(s);
+                        dto.setType(0);
+                        rightDTOS.add(dto);
+                    }
+                }
+            }
         }
-        List<String> applicantList = applicants.stream().distinct().collect(Collectors.toList());
-        List<String> inventorList = inventors.stream().distinct().collect(Collectors.toList());
 
-        IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
-        LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
-                .eq(StringUtils.isNotEmpty(vo.getProjectId().toString()), MergePerson::getProjectId, vo.getProjectId());
-        IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
-        List<String> applicantMergeList = new ArrayList<>();
-        List<String> inventorMergeList = new ArrayList<>();
-        for (MergePerson person : record.getRecords()) {
-            if (person.getType() == 0) {
-                applicantMergeList = JSONArray.parseArray(person.getMergedName(), String.class);
-            } else if (person.getType() == 2) {
-                inventorMergeList = JSONArray.parseArray(person.getMergedName(), String.class);
+        //申请人和权利人相同的去除
+        if (!CollectionUtils.isEmpty(applicantDTOS) && !CollectionUtils.isEmpty(rightDTOS)) {
+            for (GetAllPersonDTO applicantDTO : applicantDTOS) {
+                rightDTOS.removeIf(rightDTO -> applicantDTO.getName().equals(rightDTO.getName()));
             }
         }
-        applicantList.removeAll(applicantMergeList);
-        inventorList.removeAll(inventorMergeList);
-        List<GetAllPersonDTO> applicantDTOS = new ArrayList<>();
+        //装载在同一个集合
+        personDTOList.addAll(applicantDTOS);
+        personDTOList.addAll(rightDTOS);
+
+        //发明人
         List<GetAllPersonDTO> inventorDTOS = new ArrayList<>();
-        for (String applicant : applicantList) {
-            GetAllPersonDTO dto = new GetAllPersonDTO();
-            dto.setName(applicant);
-            dto.setType(0);
-            applicantDTOS.add(dto);
-        }
-        for (String inventor : inventorList) {
-            GetAllPersonDTO dto = new GetAllPersonDTO();
-            dto.setName(inventor);
-            dto.setType(2);
-            inventorDTOS.add(dto);
+        if (!CollectionUtils.isEmpty(personDTOS)) {
+            for (GetEsAllPersonDTO personDTO : personDTOS) {
+                List<String> inventor = personDTO.getInventor();
+                for (String s : inventor) {
+                    GetAllPersonDTO dto = new GetAllPersonDTO();
+                    dto.setName(s);
+                    dto.setType(2);
+                    inventorDTOS.add(dto);
+                }
+            }
         }
 
-        Records records = new Records();
-        records.setCurrent(vo.getPageNum().longValue());
-        records.setSize(vo.getPageSize().longValue());
-        if (vo.getType() == 0) {
-            int size = applicantDTOS.size();
-            records.setData(applicantDTOS.stream().limit(vo.getPageSize()).collect(Collectors.toList()));
-            if (total >= size) {
-                records.setTotal((long) size);
-            } else {
-                records.setTotal(total);
+        //查询合并信息表中数据
+//        IPage<MergePerson> page = new Page<>(vo.getPageNum(), vo.getPageSize());
+        LambdaQueryWrapper<MergePerson> wrapper = new LambdaQueryWrapper<MergePerson>()
+                .eq(MergePerson::getProjectId, vo.getProjectId())
+                .eq(StringUtils.isNotEmpty(vo.getName()), MergePerson::getName, vo.getName())
+                .orderByDesc(MergePerson::getCreateTime);
+//        IPage<MergePerson> record = mergePersonMapper.selectPage(page, wrapper);
+        List<MergePerson> mergePersonList = mergePersonMapper.selectList(wrapper);
+        //合并
+        List<GetAllPersonDTO> mergeList = new ArrayList<>();
+        //申请人/权利人
+        List<GetAllPersonDTO> applicantMergeList = new ArrayList<>();
+        //发明人
+        List<GetAllPersonDTO> inventorMergeList = new ArrayList<>();
+//        List<MergePerson> mergePersonList = record.getRecords();
+        if (!CollectionUtils.isEmpty(mergePersonList)) {
+            for (MergePerson person : mergePersonList) {
+                Integer personType = person.getType();
+                GetAllPersonDTO merge = new GetAllPersonDTO();
+                merge.setName(person.getName());
+                merge.setCountry(person.getCountry());
+                merge.setAddress(person.getAddress());
+                merge.setRemark(person.getRemark());
+                merge.setType(personType);
+                merge.setMergeId(person.getId());
+                mergeList.add(merge);
+
+                if (personType == 0) {
+                    List<String> applicantMerges = JSONArray.parseArray(person.getMergedName(), String.class);
+                    if (!CollectionUtils.isEmpty(applicantMerges)) {
+                        for (String applicantMerge : applicantMerges) {
+                            GetAllPersonDTO applicant = new GetAllPersonDTO();
+                            applicant.setName(applicantMerge);
+                            applicant.setCountry(person.getCountry());
+                            applicant.setAddress(person.getAddress());
+                            applicant.setRemark(person.getRemark());
+                            applicant.setType(personType);
+                            applicantMergeList.add(applicant);
+                        }
+                    }
+                } else if (person.getType() == 2) {
+                    List<String> inventorMerges = JSONArray.parseArray(person.getMergedName(), String.class);
+                    if (!CollectionUtils.isEmpty(inventorMerges)) {
+                        for (String inventorMerge : inventorMerges) {
+                            GetAllPersonDTO inventor = new GetAllPersonDTO();
+                            inventor.setName(inventorMerge);
+                            inventor.setCountry(person.getCountry());
+                            inventor.setAddress(person.getAddress());
+                            inventor.setRemark(person.getRemark());
+                            inventor.setType(personType);
+                            inventorMergeList.add(inventor);
+                        }
+                    }
+                }
             }
-        } else if (vo.getType() == 2) {
-            int size = inventorDTOS.size();
-            records.setData(inventorDTOS.stream().limit(vo.getPageSize()).collect(Collectors.toList()));
-            if (total >= size) {
-                records.setTotal((long) size);
-            } else {
-                records.setTotal(total);
+        }
+        //申请人/权利人
+        if (!CollectionUtils.isEmpty(personDTOList) && !CollectionUtils.isEmpty(applicantMergeList)) {
+            for (GetAllPersonDTO applicantMerge : applicantMergeList) {
+                personDTOList.removeIf(personDTO -> personDTO.getName().equals(applicantMerge.getName()));
+            }
+        }
+        //发明人
+        if (!CollectionUtils.isEmpty(inventorDTOS) && !CollectionUtils.isEmpty(inventorMergeList)) {
+            for (GetAllPersonDTO inventorMerge : inventorMergeList) {
+                inventorDTOS.removeIf(inventor -> inventor.getName().equals(inventorMerge.getName()));
             }
         }
+
+        //申请人/权利人、发明人返回数据
+        List<GetAllPersonDTO> list = new ArrayList<>();
+        if (type == 0) {
+            list.addAll(mergeList);
+            list.addAll(personDTOList);
+        } else {
+            list.addAll(mergeList);
+            list.addAll(inventorDTOS);
+        }
+
+        List<GetAllPersonDTO> collect = list.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
+
+        Records records = new Records();
+        records.setCurrent(pageNum);
+        records.setSize(pageSize);
+        records.setData(collect);
+        records.setTotal((long) list.size());
         return records;
     }
 
-
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
     public Integer delMergedName(MergedNameVO vo) throws IOException {
         Integer type = vo.getType();
         String delName = vo.getDelName();
@@ -468,6 +678,7 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         return mergePerson.getId();
     }
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
     public Integer delMergePerson(MergePersonIdVO vo) throws IOException {
         Integer type = vo.getType();
         MergePerson mergePerson = mergePersonMapper.selectById(vo.getId());
@@ -512,4 +723,24 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         }
         return vo.getId();
     }
+
+    /**
+     * 获取所有国家列表查询
+     * @return
+     */
+    public List<GetAllCountryDTO> getAllCountry() {
+        List<GetAllCountryDTO> list = new ArrayList<>();
+        List<SystemDict> countries = systemDictMapper.selectList(new LambdaQueryWrapper<SystemDict>()
+                .eq(SystemDict::getType, "COUNTRIES"));
+        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;
+    }
 }

+ 3 - 2
src/main/java/cn/cslg/pas/service/business/ProofGroupService.java

@@ -80,7 +80,6 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
                 throw new XiaoShiException("查询无效法条错误");
             }
             Integer invalidStatutesId = invalidStatutes.getId();
-            List<ProofGroup> proofGroups = new ArrayList<>();
             if (id != null) {
                 //单个更新
                 ProofGroup proofGroup = this.getById(id);
@@ -96,6 +95,7 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
                 //批量新增
 
                 //如果证据组合说明不为空
+                List<ProofGroup> proofGroups = new ArrayList<>();
                 if (!descriptions.isEmpty()) {
                     descriptions.forEach(item -> {
                         ProofGroup proofGroup = new ProofGroup();
@@ -109,8 +109,9 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
                     proofGroups.add(proofGroup);
                 }
                 this.saveBatch(proofGroups);
+                proofGroupIds = proofGroups.stream().map(ProofGroup::getId).collect(Collectors.toList());
             }
-            proofGroupIds = proofGroups.stream().map(ProofGroup::getId).collect(Collectors.toList());
+
         } else {
             throw new XiaoShiException("参数不能为空");
         }

+ 64 - 14
src/main/java/cn/cslg/pas/service/business/es/EsPatentService.java

@@ -1,10 +1,7 @@
 package cn.cslg.pas.service.business.es;
 
 import cn.cslg.pas.common.core.base.IfConstant;
-import cn.cslg.pas.common.dto.PatentColumnDTO;
-import cn.cslg.pas.common.dto.PatentDTO;
-import cn.cslg.pas.common.dto.PatentDetailDTO;
-import cn.cslg.pas.common.dto.PatentKinDTO;
+import cn.cslg.pas.common.dto.*;
 import cn.cslg.pas.common.dto.business.ContentDetailDTO;
 import cn.cslg.pas.common.model.cronModel.Records;
 import cn.cslg.pas.common.model.request.MapRequest;
@@ -35,6 +32,7 @@ import co.elastic.clients.elasticsearch.core.search.Hit;
 import co.elastic.clients.elasticsearch.core.search.SourceConfig;
 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.fastjson2.JSONObject;
 import lombok.RequiredArgsConstructor;
@@ -101,16 +99,28 @@ public class EsPatentService {
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("legal_event");
-        Query q1 = QueryBuilders.term(i -> i.field("app_no").value(appNo));
-        Query q2 = QueryBuilders.term(i -> i.field("public_no").value(publicNo));
-//        Query q3 = QueryBuilders.term(i -> i.field("grant_no").value(grantNo));
-        Query query = QueryBuilders.bool(i -> i.must(q1, q2));
-        builder.query(query);
-        SearchResponse<LegalEvent> response = client.search(builder.build(), LegalEvent.class);
-        List<Hit<LegalEvent>> hits = response.hits().hits();
-        for (Hit<LegalEvent> hit : hits) {
-            LegalEvent event = hit.source();
-            events.add(event);
+        List<Query> queries = new ArrayList<>();
+        if (StringUtils.isNotEmpty(appNo)) {
+            Query q1 = QueryBuilders.term(i -> i.field("app_no").value(appNo));
+            queries.add(q1);
+        }
+        if (StringUtils.isNotEmpty(publicNo)) {
+            Query q2 = QueryBuilders.term(i -> i.field("public_no").value(publicNo));
+            queries.add(q2);
+        }
+        if (StringUtils.isNotEmpty(grantNo)) {
+            Query q3 = QueryBuilders.term(i -> i.field("grant_no").value(grantNo));
+            queries.add(q3);
+        }
+        if (!CollectionUtils.isEmpty(queries)) {
+            Query query = QueryBuilders.bool(i -> i.must(queries));
+            builder.query(query);
+            SearchResponse<LegalEvent> response = client.search(builder.build(), LegalEvent.class);
+            List<Hit<LegalEvent>> hits = response.hits().hits();
+            for (Hit<LegalEvent> hit : hits) {
+                LegalEvent event = hit.source();
+                events.add(event);
+            }
         }
         return events;
     }
@@ -134,6 +144,46 @@ public class EsPatentService {
     }
 
     /**
+     * 获得中国专利pdf全文
+     *
+     * @param appNo
+     * @return
+     * @throws IOException
+     */
+    public List<InnerPatentPdfDTO> getTextPdf(String appNo) throws IOException {
+        List<InnerPatentPdfDTO> list = new ArrayList<>();
+        //公开说明书pdf
+        String pdfFormat = FormatUtil.getPDFFormat(appNo, 0);
+        if (StringUtils.isNotEmpty(pdfFormat)) {
+            InnerPatentPdfDTO dto = new InnerPatentPdfDTO();
+            dto.setPdfGuid(pdfFormat);
+            dto.setType(0);
+            list.add(dto);
+        }
+        //授权说明书pdf
+        String pdfFormat1 = FormatUtil.getPDFFormat(appNo, 1);
+        if (StringUtils.isNotEmpty(pdfFormat1)) {
+            InnerPatentPdfDTO dto1 = new InnerPatentPdfDTO();
+            dto1.setPdfGuid(pdfFormat1);
+            dto1.setType(1);
+            list.add(dto1);
+        }
+        return list;
+    }
+
+    /**
+     * 获取附图
+     * @param appNo
+     * @return
+     */
+    public List<String> getFigure(String appNo) {
+        List<String> list = new ArrayList<>();
+        String pictureFormat = FormatUtil.getPictureFormat(appNo);
+        list.add(pictureFormat);
+        return list;
+    }
+
+    /**
      * 根据专利号查询出同族专利列表
      *
      * @param vo

+ 34 - 26
src/main/java/cn/cslg/pas/service/business/invalidReport/AssoGroupFeatureService.java

@@ -5,7 +5,9 @@ import cn.cslg.pas.common.dto.QueryFeatureHistoryDTO;
 import cn.cslg.pas.common.dto.invalidDTO.*;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.Records;
+import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.GenerateObjectUtil;
+import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.utils.Response;
 import cn.cslg.pas.common.vo.PatentRightVo;
 import cn.cslg.pas.common.vo.business.SplitVO;
@@ -46,6 +48,10 @@ public class AssoGroupFeatureService extends ServiceImpl<AssoGroupFeatureMapper,
     private InvalidStatutesService invalidStatutesService;
     @Autowired
     private ProofGroupService proofGroupService;
+    @Autowired
+    private CacheUtils cacheUtils;
+    @Autowired
+    private LoginUtils loginUtils;
 
     //根据证据组合id查询特征id
     public List<Integer> getFeatureIdsByGroupId(Integer groupId) {
@@ -147,9 +153,9 @@ public class AssoGroupFeatureService extends ServiceImpl<AssoGroupFeatureMapper,
         Integer featureId = removeGroupFeatureDTO.getFeatureId();
 
         //根据特征id 查询世代及排序
-        LambdaQueryWrapper<AssoGroupFeature> queryWrapper =new LambdaQueryWrapper<>();
-        queryWrapper.eq(AssoGroupFeature::getFeatureId,featureId);
-        AssoGroupFeature assoGroupFeature =this.getOne(queryWrapper,false);
+        LambdaQueryWrapper<AssoGroupFeature> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoGroupFeature::getFeatureId, featureId);
+        AssoGroupFeature assoGroupFeature = this.getOne(queryWrapper, false);
         Integer featureOrder = assoGroupFeature.getFeatureOrder();
 
         Boolean ifFirstEdit = removeGroupFeatureDTO.getIfFirstEdit();
@@ -160,26 +166,27 @@ public class AssoGroupFeatureService extends ServiceImpl<AssoGroupFeatureMapper,
 
 
         //根据特征id查询证据组合和特征关联
-                Integer genFeatureId = removeGroupFeatureDTO.getFeatureId();
-                Integer genGroupId = assoGroupFeature.getGroupId();
-                AssoGroupFeature assoGroupFeature1 = this.getGenGroupFeature(genGroupId, genFeatureId, featureGen);
-                if (assoGroupFeature1 == null) {
-                    assoGroupFeature1 = new AssoGroupFeature();
-                    assoGroupFeature1.setGroupId(genGroupId);
-                    assoGroupFeature1.setFeatureGen(featureGen);
-                    assoGroupFeature1.setOperateMode(1);
-                    assoGroupFeature1.setFeaturePreId(genFeatureId);
-                    assoGroupFeature1.setFeatureOrder(featureOrder);
-                    assoGroupFeature1.insert();
-                } else {
-                    assoGroupFeature1.setGroupId(genGroupId);
-                    assoGroupFeature1.setFeatureGen(featureGen);
-                    assoGroupFeature1.setOperateMode(1);
-                    assoGroupFeature1.setFeaturePreId(genFeatureId);
-                    featureOrder=assoGroupFeature1.getFeatureOrder();
-                    assoGroupFeature1.updateById();
-                }
-                this.updateGroupFeatureOrder(genGroupId, featureOrder, featureGen);
+        Integer genFeatureId = removeGroupFeatureDTO.getFeatureId();
+        Integer genGroupId = assoGroupFeature.getGroupId();
+        AssoGroupFeature assoGroupFeature1 = this.getGenGroupFeature(genGroupId, genFeatureId, featureGen);
+        if (assoGroupFeature1 == null) {
+            assoGroupFeature1 = new AssoGroupFeature();
+            assoGroupFeature1.setGroupId(genGroupId);
+            assoGroupFeature1.setFeatureGen(featureGen);
+            assoGroupFeature1.setOperateMode(1);
+            assoGroupFeature1.setFeaturePreId(genFeatureId);
+            assoGroupFeature1.setFeatureOrder(featureOrder);
+            assoGroupFeature1.setFeatureId(featureId);
+            assoGroupFeature1.insert();
+        } else {
+            assoGroupFeature1.setGroupId(genGroupId);
+            assoGroupFeature1.setFeatureGen(featureGen);
+            assoGroupFeature1.setOperateMode(1);
+            assoGroupFeature1.setFeaturePreId(genFeatureId);
+            featureOrder = assoGroupFeature1.getFeatureOrder();
+            assoGroupFeature1.updateById();
+        }
+        this.updateGroupFeatureOrder(genGroupId, featureOrder, featureGen);
 
         return true;
     }
@@ -406,8 +413,7 @@ public class AssoGroupFeatureService extends ServiceImpl<AssoGroupFeatureMapper,
     @Transactional(rollbackFor = Exception.class)
     public Boolean addFeatureGroupBatch(AddFeatureGroupBatchDTO addFeatureGroupBatchDTO) {
 
-        PersonnelVO personnelVO = new PersonnelVO();
-        personnelVO.setId("1");
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
 
         Integer claimId = addFeatureGroupBatchDTO.getClaimId();
         Integer gen = addFeatureGroupBatchDTO.getGen();
@@ -421,7 +427,8 @@ public class AssoGroupFeatureService extends ServiceImpl<AssoGroupFeatureMapper,
         Integer featureId = feature.getId();
         //根据权要id 查询 无效法条
         LambdaQueryWrapper<InvalidStatutes> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(InvalidStatutes::getClaimId, claimId);
+        queryWrapper.eq(InvalidStatutes::getClaimId, claimId)
+                .and(wrapper->wrapper.eq(InvalidStatutes::getStatutesId, 2).or().eq(InvalidStatutes::getStatutesId,3));
         List<InvalidStatutes> invalidStatutes = invalidStatutesService.list(queryWrapper);
         if (invalidStatutes != null && invalidStatutes.size() != 0) {
             List<Integer> statutesIds = invalidStatutes.stream().map(InvalidStatutes::getId).collect(Collectors.toList());
@@ -447,6 +454,7 @@ public class AssoGroupFeatureService extends ServiceImpl<AssoGroupFeatureMapper,
                         assoGroupFeature.setFeatureGen(gen);
                         assoGroupFeature.setFeatureOrder(order);
                         assoGroupFeature.setCommon(common);
+                        assoGroupFeature.setOperateMode(2);
                         assoGroupFeature.insert();
                     }
                 }

+ 35 - 24
src/main/java/cn/cslg/pas/service/business/invalidReport/EvidenceReasonService.java

@@ -63,7 +63,6 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
 
         List<AddEvidenceReasonsDTO> addEvidenceReasonsDTOList = new ArrayList<>();
 
-        if (gen.equals(0)) {
             // 遍历装载不同的特征
             addEvidenceReasonsDTOs.forEach(item -> {
                 AddEvidenceReasonsDTO tem = addEvidenceReasonsDTOList.stream().filter(i -> i.getFeatureOrder().equals(item.getFeatureOrder())).findFirst().orElse(null);
@@ -72,7 +71,6 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
                 }
 
             });
-
             //遍历插入无id特征
             addEvidenceReasonsDTOList.forEach(item -> {
                 if (item.getFeatureId() == null) {
@@ -83,16 +81,14 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
                 }
             });
 
-        }
-
         List<Integer> assoIds = new ArrayList<>();
-        if (gen.equals(0)) {
+
             LambdaQueryWrapper<AssoGroupFeature> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.eq(AssoGroupFeature::getGroupId, groupId)
-                    .eq(AssoGroupFeature::getGroupId, gen);
+                    .eq(AssoGroupFeature::getFeatureGen,0);
             List<AssoGroupFeature> assoGroupFeatures = assoGroupFeatureService.list(queryWrapper);
             assoIds = assoGroupFeatures.stream().map(AssoGroupFeature::getId).collect(Collectors.toList());
-        }
+
 
 
         for (AddEvidenceReasonsDTO addEvidenceReasonsDTO : addEvidenceReasonsDTOs) {
@@ -100,11 +96,11 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
             Integer featureId = addEvidenceReasonsDTO.getFeatureId();
             Integer featureOrder = addEvidenceReasonsDTO.getFeatureOrder();
             Integer featureGroupId = addEvidenceReasonsDTO.getFeatureGroupId();
-            if (gen.equals(0)) {
+
                 //判断
                 AddEvidenceReasonsDTO tem = addEvidenceReasonsDTOList.stream()
                         .filter(item -> addEvidenceReasonsDTO.getFeatureOrder().equals(item.getFeatureOrder())).findFirst().orElse(null);
-                if (tem == null) {
+                if (tem != null) {
                     featureId = tem.getFeatureId();
                 }
 
@@ -117,22 +113,25 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
                     assoGroupFeature.setFeatureGen(0);
                     assoGroupFeature.insert();
                     featureGroupId = assoGroupFeature.getId();
-                } else {
-                    assoIds.remove(featureGroupId);
                 }
-                if (assoIds.size() != 0) {
-                    //删除关联以及历史
-                    assoGroupFeatureService.removeAssoWithHistory(assoIds);
+                else {
+                    AssoGroupFeature assoGroupFeature = assoGroupFeatureService.getById(featureGroupId);
+                    if(assoGroupFeature.getOperateMode()==null||(assoGroupFeature.getOperateMode()!=null&&!assoGroupFeature.getOperateMode().equals(1))){
+                    assoGroupFeature.setFeatureId(featureId);
+                    assoGroupFeature.setFeatureOrder(featureOrder);
+                    assoGroupFeature.updateById();
+                    assoIds.remove(featureGroupId);
+                    }
                 }
-            }
+
 
             //添加无效理由
             Integer reasonId = this.addEvidenceReason(addEvidenceReasonsDTO, personnelVO.getId());
             //根据特征证据组合关联id 删除和无效理由关联
-            LambdaQueryWrapper<AssoFeatureReason> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(AssoFeatureReason::getGFeatureId, featureGroupId)
+            LambdaQueryWrapper<AssoFeatureReason> queryWrapper12 = new LambdaQueryWrapper<>();
+            queryWrapper12.eq(AssoFeatureReason::getGFeatureId, featureGroupId)
                     .eq(AssoFeatureReason::getGen, gen);
-            assoFeatureReasonService.remove(queryWrapper);
+            assoFeatureReasonService.remove(queryWrapper12);
             //添加特征和证据组合关联
             AssoFeatureReason assoFeatureReason = new AssoFeatureReason();
             assoFeatureReason.setReasonId(reasonId);
@@ -140,6 +139,11 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
             assoFeatureReason.setGen(gen);
             assoFeatureReason.insert();
         }
+
+        if (assoIds.size() != 0) {
+            //删除关联以及历史
+            assoGroupFeatureService.removeAssoWithHistory(assoIds);
+        }
         return true;
 
     }
@@ -159,6 +163,7 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
             EvidenceReason evidenceReason = this.getById(id);
             evidenceReason.setEvidenceText(addEvidenceReasonsDTO.getEvidenceText());
             evidenceReason.setDescription(addEvidenceReasonsDTO.getEvidenceDescription());
+            evidenceReason.updateById();
         }
         //添加无效理由和证据关联
 
@@ -168,12 +173,12 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
 
     private void addAssoReasonLiterature(List<Integer> literatureIds, Integer reasonId) {
         List<AssoReasonLiterature> assoReasonLiteratures = new ArrayList<>();
-        if (literatureIds == null || literatureIds.size() == 0) {
-            return;
-        }
         LambdaQueryWrapper<AssoReasonLiterature> queryWrapper1 = new LambdaQueryWrapper<>();
         queryWrapper1.eq(AssoReasonLiterature::getReasonId, reasonId);
         assoReasonLiteratureService.remove(queryWrapper1);
+        if (literatureIds == null || literatureIds.size() == 0) {
+            return;
+        }
 
         literatureIds.forEach(item -> {
             AssoReasonLiterature assoReasonLiterature = new AssoReasonLiterature();
@@ -192,8 +197,9 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
         Integer gen = queryEvidenceReasonDTO.getGen();
         //根据证据组合id 查询特征
         LambdaQueryWrapper<AssoGroupFeature> assFWrapper = new LambdaQueryWrapper<>();
-        assFWrapper.eq(AssoGroupFeature::getGroupId, groupId);
-        assFWrapper.eq(AssoGroupFeature::getFeatureGen, 0);
+        assFWrapper.eq(AssoGroupFeature::getGroupId, groupId)
+                .and(wrapper -> wrapper.eq(AssoGroupFeature::getFeatureGen, 0).or().eq(AssoGroupFeature::getOperateMode, 2));
+
         List<AssoGroupFeature> assoGroupFeatures = assoGroupFeatureService.list(assFWrapper);
         List<QueryEvidenceReasonVO> queryEvidenceReasonVOS = new ArrayList<>();
         if (assoGroupFeatures != null && assoGroupFeatures.size() != 0) {
@@ -218,7 +224,12 @@ public class EvidenceReasonService extends ServiceImpl<EvidenceReasonMapper, Evi
                 queryWrapper1.eq(AssoFeatureReason::getGFeatureId, newFeatureGroupId);
                 queryWrapper1.eq(AssoFeatureReason::getGen, gen);
                 List<AssoFeatureReason> assoFeatureReasons = assoFeatureReasonService.list(queryWrapper1);
-
+                if (assoFeatureReasons.size() == 0) {
+                    AssoFeatureReason assoFeatureReason = new AssoFeatureReason();
+                    assoFeatureReason.setReasonId(-1);
+                    assoFeatureReason.setGFeatureId(newFeatureGroupId);
+                    assoFeatureReasons.add(assoFeatureReason);
+                }
                 if (assoFeatureReasons.size() != 0) {
                     for (AssoFeatureReason assoFeatureReason : assoFeatureReasons) {
                         //装载特征信息

+ 10 - 6
src/main/java/cn/cslg/pas/service/business/invalidReport/PatentClaimHistoryService.java

@@ -20,6 +20,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.*;
@@ -44,6 +45,7 @@ public class PatentClaimHistoryService extends ServiceImpl<PatentClaimHistoryMap
      *
      * @param alterPatentClaimDTO
      */
+    @Transactional(rollbackFor = Exception.class)
     public Integer alterPatentClaim(AlterPatentClaimDTO alterPatentClaimDTO) {
         if (alterPatentClaimDTO == null) {
             throw new XiaoShiException("入参为空");
@@ -67,12 +69,14 @@ public class PatentClaimHistoryService extends ServiceImpl<PatentClaimHistoryMap
             patentClaimHistory.setContent(alterPatentClaimDTO.getContent());
             patentClaimHistory.setDescription(alterPatentClaimDTO.getDescription());
             patentClaimHistory.updateById();
-        } else {
-            PatentClaimHistory patentClaimHistory1 = new PatentClaimHistory();
-            BeanUtils.copyProperties(alterPatentClaimDTO, patentClaimHistory1);
-            patentClaimHistory1.setOperateType(0);
-            patentClaimHistory1.setCreateId(personnelVO.getId());
-            patentClaimHistory1.insert();
+        }
+        else {
+
+             patentClaimHistory= new PatentClaimHistory();
+            BeanUtils.copyProperties(alterPatentClaimDTO, patentClaimHistory);
+            patentClaimHistory.setOperateType(0);
+            patentClaimHistory.setCreateId(personnelVO.getId());
+            patentClaimHistory.insert();
         }
 
         return patentClaimHistory.getId();

+ 100 - 4
src/main/java/cn/cslg/pas/service/common/PatentStarApiService.java

@@ -3,10 +3,7 @@ package cn.cslg.pas.service.common;
 import cn.cslg.pas.common.config.XDns;
 
 import cn.cslg.pas.common.core.IgnoreDTDEntityResolver;
-import cn.cslg.pas.common.dto.PatentColumnDTO;
-import cn.cslg.pas.common.dto.PatentStarDTO;
-import cn.cslg.pas.common.dto.PatentStarListDTO;
-import cn.cslg.pas.common.dto.QueryExternalFamilyDTO;
+import cn.cslg.pas.common.dto.*;
 import cn.cslg.pas.common.dto.business.SelectClaimDTO;
 import cn.cslg.pas.common.model.cronModel.PersonnelVO;
 import cn.cslg.pas.common.model.cronModel.Records;
@@ -49,6 +46,7 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
@@ -1041,4 +1039,102 @@ public class PatentStarApiService {
         }
         return pubTextList;
     }
+
+    /**
+     * 获得中国专利pdf全文
+     *
+     * @param appNo
+     * @return
+     * @throws IOException
+     */
+    public List<InnerPatentPdfDTO> getExternalTextPdf(String appNo, String rowApplicationNo) throws IOException {
+        List<InnerPatentPdfDTO> list = new ArrayList<>();
+        String pdfUrl = "", pdfUrl1 = "", pdfUrl2 = "";
+        if (StringUtils.isNotEmpty(appNo) && appNo.contains("CN")) {
+            String pdfUrlStr = this.getCnPdfApi(rowApplicationNo);
+            //若没有取到说明书pdf,则将当前申请号和备注信息存入问题记录表,并返回空对象
+            if (StringUtils.isNotEmpty(pdfUrlStr)) {
+                if (pdfUrlStr.contains("|http")) {  //若包含公开和授权两个pdf
+                    String[] pdfUrlArr = pdfUrlStr.split("\\|http");
+                    pdfUrl1 = pdfUrlArr[0].substring(pdfUrlArr[0].indexOf("http"), pdfUrlArr[0].indexOf("|"));
+                    pdfUrlArr[1] = "http" + pdfUrlArr[1];
+                    pdfUrl2 = pdfUrlArr[1].substring(pdfUrlArr[1].indexOf("http"), pdfUrlArr[1].indexOf("|"));
+
+                    if (pdfUrl1.contains("0A_CN_0.pdf")) {
+                        String guid1 = FormatUtil.getPDFFormat(appNo, 0);
+                        if (StringUtils.isNotEmpty(guid1)) {
+                            InnerPatentPdfDTO dto = new InnerPatentPdfDTO();
+                            dto.setPdfGuid(guid1);
+                            dto.setType(0);
+                            list.add(dto);
+                        }
+                        //授权说明书pdf
+                        String guid2 = FormatUtil.getPDFFormat(appNo, 1);
+                        if (StringUtils.isNotEmpty(guid2)) {
+                            InnerPatentPdfDTO dto1 = new InnerPatentPdfDTO();
+                            dto1.setPdfGuid(guid2);
+                            dto1.setType(1);
+                            list.add(dto1);
+                        }
+                    } else {
+                        String guid1 = FormatUtil.getPDFFormat(appNo, 1);
+                        if (StringUtils.isNotEmpty(guid1)) {
+                            InnerPatentPdfDTO dto1 = new InnerPatentPdfDTO();
+                            dto1.setPdfGuid(guid1);
+                            dto1.setType(1);
+                            list.add(dto1);
+                        }
+                        String guid2 = FormatUtil.getPDFFormat(appNo, 0);
+                        if (StringUtils.isNotEmpty(guid2)) {
+                            InnerPatentPdfDTO dto = new InnerPatentPdfDTO();
+                            dto.setPdfGuid(guid2);
+                            dto.setType(0);
+                            list.add(dto);
+                        }
+                    }
+                } else {  //若只有一个
+                    pdfUrl1 = pdfUrlStr.substring(pdfUrlStr.indexOf("http"));
+//                    pdfUrl1 = pdfUrlStr.substring(pdfUrlStr.indexOf("http"), pdfUrlStr.indexOf("?"));
+                    if (pdfUrl1.contains("0A_CN_0.pdf")) {
+                        String guid1 = FormatUtil.getPDFFormat(appNo, 0);
+                        if (StringUtils.isNotEmpty(guid1)) {
+                            InnerPatentPdfDTO dto = new InnerPatentPdfDTO();
+                            dto.setPdfGuid(guid1);
+                            dto.setType(0);
+                            list.add(dto);
+                        }
+                    } else {
+                        String guid1 = FormatUtil.getPDFFormat(appNo, 1);
+                        if (StringUtils.isNotEmpty(guid1)) {
+                            InnerPatentPdfDTO dto = new InnerPatentPdfDTO();
+                            dto.setPdfGuid(guid1);
+                            dto.setType(1);
+                            list.add(dto);
+                        }
+                    }
+                }
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 获取附图
+     * @param appNo
+     * @return
+     */
+    public List<String> getExternalFigure(String appNo) throws IOException {
+        List<String> list = new ArrayList<>();
+        String wgPictureApi = this.getWGPictureApi(appNo);
+        if (StringUtils.isNotEmpty(wgPictureApi)) {
+            if (wgPictureApi.contains("|http")) {
+                String[] urlArr = wgPictureApi.split("\\|");
+                list.addAll(Arrays.asList(urlArr));
+            } else {
+                list.add(wgPictureApi);
+            }
+        }
+        return list;
+    }
+
 }

+ 7 - 2
src/main/java/cn/cslg/pas/service/importPatent/GetCataloguingFromWebThread.java

@@ -68,7 +68,7 @@ public class GetCataloguingFromWebThread extends Thread {
                 if (starPatentVO.getApplicationNo().startsWith("CN")) {
                     patentZhuLuStr = patentStarApiService.getCnBibApi(uploadPatentWebDTO.getStarPatentVO().getRowApplicationNo());
                 } else {
-                    patentZhuLuStr = patentStarApiService.getENBibApi(uploadPatentWebDTO.getStarPatentVO().getRowApplicationNo());
+                    patentZhuLuStr = patentStarApiService.getENBibApi(uploadPatentWebDTO.getStarPatentVO().getPublicNo());
                 }
                 if (patentZhuLuStr != null && !patentZhuLuStr.trim().equals("") && !patentZhuLuStr.equals("{}") && !patentZhuLuStr.contains("请求不合法")) {
                     this.loadPatent(uploadPatentWebDTO);
@@ -301,6 +301,9 @@ public class GetCataloguingFromWebThread extends Thread {
             }
             patent.setRightHolder(patentPeople);
         }
+        else if(patent.getApplicant()!=null){
+            patent.setRightHolder(patent.getApplicant());
+        }
 
         //装载法律状态(os_patent表status字段值)
         Integer status = starPatentVO.getLG();
@@ -454,7 +457,9 @@ public class GetCataloguingFromWebThread extends Thread {
                 patentPeople.add(patentPerson);
             }
             patent.setApplicant(patentPeople);
-
+            if(patent.getRightHolder()==null||patent.getRightHolder().size()==0){
+                patent.setRightHolder(patent.getApplicant());
+            }
         }
 
 

+ 25 - 6
src/main/java/cn/cslg/pas/service/importPatent/ImportSinglePatentService.java

@@ -69,6 +69,7 @@ public class ImportSinglePatentService {
             return null;
         }
         Patent patent = this.getPatentCataloguingFromWeb(starPatentVO);
+
         PatentJoin patentJoin = new PatentJoin();
         patentJoin.setName("patent");
         patent.setPatentJoin(patentJoin);
@@ -89,16 +90,15 @@ public class ImportSinglePatentService {
         if (starPatentVO.getApplicationNo().startsWith("CN")) {
             patentZhuLuStr = patentStarApiService.getCnBibApi(starPatentVO.getRowApplicationNo());
         } else {
-            patentZhuLuStr = patentStarApiService.getENBibApi(starPatentVO.getRowApplicationNo());
+            patentZhuLuStr = patentStarApiService.getENBibApi(starPatentVO.getPublicNo());
         }
         UploadPatentWebDTO uploadPatentWebDTO = new UploadPatentWebDTO();
         uploadPatentWebDTO.setPatent(new Patent());
         uploadPatentWebDTO.setStarPatentVO(starPatentVO);
+        this.loadPatent(uploadPatentWebDTO);
         if (patentZhuLuStr != null && !patentZhuLuStr.trim().equals("") && !patentZhuLuStr.equals("{}") && !patentZhuLuStr.contains("请求不合法")) {
-            this.loadPatent(uploadPatentWebDTO);
             if (starPatentVO.getApplicationNo().startsWith("CN")) {
                 this.loadCNPatent(patentZhuLuStr, uploadPatentWebDTO.getPatent(), starPatentVO);
-
                 //装载专利号
                 if (uploadPatentWebDTO.getPatent().getAppNo() != null) {
                     uploadPatentWebDTO.getPatent().setPatentNo(uploadPatentWebDTO.getPatent().getAppNo());
@@ -108,7 +108,7 @@ public class ImportSinglePatentService {
                     uploadPatentWebDTO.getPatent().setPatentNo(uploadPatentWebDTO.getPatent().getPublicNo());
                 }
             } else {
-//                this.loadWorldPatent(patentZhuLuStr, uploadPatentWebDTO.getPatent());
+                this.loadWorldPatent(patentZhuLuStr, uploadPatentWebDTO.getPatent());
                 //装载专利号
                 if (uploadPatentWebDTO.getPatent().getGrantNo() != null) {
                     uploadPatentWebDTO.getPatent().setPatentNo(uploadPatentWebDTO.getPatent().getGrantNo());
@@ -124,9 +124,11 @@ public class ImportSinglePatentService {
 
     //装载专利信息
     private void loadPatent(UploadPatentWebDTO uploadPatentWebDTO) {
+
         String country = "";
         Patent patent = uploadPatentWebDTO.getPatent();
         StarPatentVO starPatentVO = uploadPatentWebDTO.getStarPatentVO();
+
         //装载专利类型
         Integer patentType = starPatentVO.getPatentType();
         if (patentType != null) {
@@ -181,6 +183,7 @@ public class ImportSinglePatentService {
         if (starPatentVO.getApplicationDate() != null && !starPatentVO.getApplicationDate().equals("")) {
             Date date = DateUtils.strToDate(starPatentVO.getApplicationDate());
             patent.setAppDate(date);
+
         }
 
         //装载发明人
@@ -201,7 +204,6 @@ public class ImportSinglePatentService {
         if (starPatentVO.getApplicationNo() != null && !starPatentVO.getApplicationNo().equals("")) {
             patent.setAppNo(starPatentVO.getApplicationNo());
             country = starPatentVO.getApplicationNo().substring(0, 2);
-
         }
 
         //装载公开号
@@ -213,6 +215,18 @@ public class ImportSinglePatentService {
             patent.setGrantNo(starPatentVO.getPublicAccreditNo());
         }
 
+        if(patent.getAppNo().startsWith("CN")){
+            patent.setPatentNo(patent.getAppNo());
+        }
+        else {
+            if(patent.getPublicNo()!=null){
+                patent.setPatentNo(patent.getPublicNo());
+            }
+            else if(patent.getGrantNo()!=null)
+            {
+                patent.setPatentNo(patent.getGrantNo());
+            }
+        }
         //装载申请人
         if (starPatentVO.getApplicantStr() != null && !starPatentVO.getApplicantStr().equals("")) {
             List<String> names = Arrays.asList(starPatentVO.getApplicantStr().split(";"));
@@ -267,6 +281,9 @@ public class ImportSinglePatentService {
             }
             patent.setRightHolder(patentPeople);
         }
+        else if(patent.getApplicant()!=null){
+            patent.setRightHolder(patent.getApplicant());
+        }
 
         //装载法律状态(os_patent表status字段值)
         Integer status = starPatentVO.getLG();
@@ -421,7 +438,9 @@ public class ImportSinglePatentService {
                 patentPeople.add(patentPerson);
             }
             patent.setApplicant(patentPeople);
-
+if(patent.getRightHolder()==null||patent.getRightHolder().size()==0){
+    patent.setRightHolder(patent.getApplicant());
+}
         }
 
 

+ 1 - 1
src/main/resources/mapper/AssoGroupFeatureMapper.xml

@@ -29,6 +29,6 @@
             and feature_gen &lt;= #{gen}
         </where>
         order by feature_gen desc limit 9999) a
-        group by a.group_id, a.feature_order order by a.feature_order desc
+        group by a.group_id, a.feature_order order by a.feature_order desc limit 1;
     </select>
 </mapper>

+ 1 - 1
src/main/resources/mapper/ReportProjectMapper.xml

@@ -13,7 +13,7 @@
         patentType,rp.case_number as
         caseNumber ,rp.issue_number as issueNumber ,rp.invalid_application as invalidApplication ,rp.cron_description as
         cronDescription,rp.act_type as actType ,rp.patent_type as patentType ,rp.current_application as
-        currentApplication, rp.invention_name as inventionName,p.contract_no as contractNo from report as rp left join project as p
+        currentApplication, rp.invention_name as inventionName,p.contract_no as contractNo,rp.carding_opinion from report as rp left join project as p
         on rp.project_id =p.id left join asso_report_cron arc on p.id =arc.project_id
         left join asso_project_event as aspe on p.id =aspe.project_id
         <if test="sql1!=''">

+ 72 - 4
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -1,9 +1,6 @@
 package cn.cslg.pas.service;
 
-import cn.cslg.pas.common.dto.PatentColumnDTO;
-import cn.cslg.pas.common.dto.PatentDTO;
-import cn.cslg.pas.common.dto.PatentDetailDTO;
-import cn.cslg.pas.common.dto.PatentKinDTO;
+import cn.cslg.pas.common.dto.*;
 import cn.cslg.pas.common.dto.business.EsCountDTO;
 import cn.cslg.pas.common.dto.business.EsPatentFamilyDTO;
 import cn.cslg.pas.common.dto.business.ReportTempleDTO;
@@ -36,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.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
@@ -412,4 +410,74 @@ public class EventServiceTests {
         Integer type = 0;
         esService.delMergePerson(patent, id, type, name);
     }
+
+    @Test
+    public void test100() {
+        List<GetAllPersonDTO> DTOS = new ArrayList<>();
+        List<GetAllPersonDTO> applicantDTOS = new ArrayList<>();
+        GetAllPersonDTO dto = new GetAllPersonDTO();
+        dto.setName("A");
+        dto.setType(0);
+        dto.setCountry("CN");
+        dto.setAddress("efe");
+        applicantDTOS.add(dto);
+        GetAllPersonDTO dto1 = new GetAllPersonDTO();
+        dto1.setName("B");
+        dto1.setType(0);
+        dto1.setCountry("CN");
+        dto1.setAddress("weew");
+        applicantDTOS.add(dto1);
+        GetAllPersonDTO dto2 = new GetAllPersonDTO();
+        dto2.setName("C");
+        dto2.setType(0);
+        dto2.setCountry("CN");
+        dto2.setAddress("fdsyt");
+        applicantDTOS.add(dto2);
+        List<GetAllPersonDTO> rightDTOS = new ArrayList<>();
+        GetAllPersonDTO dto4 = new GetAllPersonDTO();
+        dto4.setName("A");
+        dto4.setType(0);
+        dto4.setCountry("CN");
+        dto4.setAddress("efed");
+        rightDTOS.add(dto4);
+        GetAllPersonDTO dto5 = new GetAllPersonDTO();
+        dto5.setName("D");
+        dto5.setType(0);
+        dto5.setCountry("CN");
+        dto5.setAddress("ete");
+        rightDTOS.add(dto5);
+        GetAllPersonDTO dto6 = new GetAllPersonDTO();
+        dto6.setName("E");
+        dto6.setType(0);
+        rightDTOS.add(dto6);
+
+        applicantDTOS.removeAll(rightDTOS);
+        System.out.println(applicantDTOS + "-----------------");
+
+        for (GetAllPersonDTO applicantDTO : applicantDTOS) {
+            rightDTOS.removeIf(rightDTO -> applicantDTO.getName().equals(rightDTO.getName()));
+        }
+
+        System.out.println(applicantDTOS);
+        System.out.println(rightDTOS);
+
+        DTOS.addAll(applicantDTOS);
+        DTOS.addAll(rightDTOS);
+        System.out.println("DTOS:" + DTOS);
+    }
+
+    @Test
+    public void test101() {
+
+    }
+
+    @Transactional
+    public void tran() {
+
+    }
+
+    @Transactional
+    public void tran1() {
+
+    }
 }