Browse Source

Merge remote-tracking branch 'origin/dev2' into dev2

# Conflicts:
#	RMS/src/main/java/cn/cslg/report/controller/ReportController.java
#	RMS/src/main/java/cn/cslg/report/service/business/ReportService.java
xiexiang 2 years ago
parent
commit
20bf7c0fee
52 changed files with 1209 additions and 331 deletions
  1. 227 0
      RMS/RMS.iml
  2. 7 0
      RMS/src/main/java/cn/cslg/report/common/model/dto/invalidReReport/ArgumentsDTO.java
  3. 1 0
      RMS/src/main/java/cn/cslg/report/common/model/dto/invalidReReport/InvalidReasonDTO.java
  4. 0 1
      RMS/src/main/java/cn/cslg/report/common/model/dto/invalidReReport/ProofGroupDTO.java
  5. 101 0
      RMS/src/main/java/cn/cslg/report/common/model/vo/TaskFromPASVO.java
  6. 1 1
      RMS/src/main/java/cn/cslg/report/common/model/vo/invalidReReport/ArgumentsDetailsVO.java
  7. 1 0
      RMS/src/main/java/cn/cslg/report/common/model/vo/invalidReReport/QueryInvalidReasonVO.java
  8. 238 0
      RMS/src/main/java/cn/cslg/report/common/utils/WordUtil.java
  9. 2 2
      RMS/src/main/java/cn/cslg/report/controller/CompareController.java
  10. 15 1
      RMS/src/main/java/cn/cslg/report/controller/DownloadController.java
  11. 10 7
      RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/ArgumentsController.java
  12. 26 8
      RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/InvalidReasonController.java
  13. 0 1
      RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/InvalidReasonFieldValueController.java
  14. 2 9
      RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/ProofController.java
  15. 7 0
      RMS/src/main/java/cn/cslg/report/controller/InvalidRecordController.java
  16. 0 28
      RMS/src/main/java/cn/cslg/report/entity/invalidReReport/AssoScratchPatent.java
  17. 31 2
      RMS/src/main/java/cn/cslg/report/service/OutInterfaceService.java
  18. 47 33
      RMS/src/main/java/cn/cslg/report/service/business/CompareFilesService.java
  19. 231 40
      RMS/src/main/java/cn/cslg/report/service/business/ExportArgumentsScenariosService.java
  20. 66 53
      RMS/src/main/java/cn/cslg/report/service/business/FeatureService.java
  21. 134 119
      RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/ArgumentsService.java
  22. 2 2
      RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/InvalidReasonFieldValueService.java
  23. 39 10
      RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/InvalidReasonService.java
  24. 9 10
      RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/ProofGroupService.java
  25. 1 1
      RMS/src/main/resources/mapper/InvalidReasonFieldValueMapper.xml
  26. 1 2
      RMS/target/classes/application.yml
  27. BIN
      RMS/target/classes/cn/cslg/report/common/GlobalException.class
  28. BIN
      RMS/target/classes/cn/cslg/report/common/model/vo/SplitVO.class
  29. BIN
      RMS/target/classes/cn/cslg/report/common/model/vo/TaskVO$personPatents.class
  30. BIN
      RMS/target/classes/cn/cslg/report/common/model/vo/TaskVO.class
  31. BIN
      RMS/target/classes/cn/cslg/report/common/utils/Response.class
  32. BIN
      RMS/target/classes/cn/cslg/report/controller/CompareController.class
  33. BIN
      RMS/target/classes/cn/cslg/report/controller/CompareFilesController.class
  34. BIN
      RMS/target/classes/cn/cslg/report/controller/CompareScenariosController.class
  35. BIN
      RMS/target/classes/cn/cslg/report/controller/DownloadController.class
  36. BIN
      RMS/target/classes/cn/cslg/report/controller/FeatureController.class
  37. BIN
      RMS/target/classes/cn/cslg/report/controller/InvalidRecordController.class
  38. BIN
      RMS/target/classes/cn/cslg/report/controller/ReportController.class
  39. BIN
      RMS/target/classes/cn/cslg/report/controller/ReportFileController.class
  40. BIN
      RMS/target/classes/cn/cslg/report/entity/CompareFiles.class
  41. BIN
      RMS/target/classes/cn/cslg/report/entity/Features.class
  42. BIN
      RMS/target/classes/cn/cslg/report/entity/Report.class
  43. BIN
      RMS/target/classes/cn/cslg/report/mapper/FeatureMapper.class
  44. BIN
      RMS/target/classes/cn/cslg/report/service/BaseService.class
  45. BIN
      RMS/target/classes/cn/cslg/report/service/business/CompareFilesService.class
  46. BIN
      RMS/target/classes/cn/cslg/report/service/business/CompareMessageService.class
  47. BIN
      RMS/target/classes/cn/cslg/report/service/business/CompareScenariosService.class
  48. BIN
      RMS/target/classes/cn/cslg/report/service/business/FeatureService.class
  49. BIN
      RMS/target/classes/cn/cslg/report/service/business/ReportFileService.class
  50. BIN
      RMS/target/classes/cn/cslg/report/service/business/ReportService.class
  51. BIN
      RMS/target/classes/cn/cslg/report/service/business/TaskService.class
  52. 10 1
      RMS/target/classes/mapper/FeatureMapper.xml

+ 227 - 0
RMS/RMS.iml

@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-ui:1.6.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-webmvc-core:1.6.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springdoc:springdoc-openapi-common:1.6.6" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-core:2.1.12" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-annotations:2.1.12" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-models:2.1.12" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.webjars:swagger-ui:4.5.0" level="project" />
+    <orderEntry type="library" name="Maven: org.webjars:webjars-locator-core:0.46" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.8.138" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.10" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.10" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.33" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.28" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.7" level="project" />
+    <orderEntry type="library" name="Maven: com.deepoove:poi-tl:1.10.3" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.33" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:4.1.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:4.1.2" level="project" />
+    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.06" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi:4.1.2" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.4" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-math3:3.6.1" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:SparseBitSet:1.2" level="project" />
+    <orderEntry type="library" name="Maven: com.deepoove:poi-ooxml-schemas-extra:4.1.4" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-transcoder:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-anim:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-css:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-ext:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-parser:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-svg-dom:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-awt-util:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:xmlgraphics-commons:2.6" level="project" />
+    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.0.4" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-bridge:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-script:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-dom:1.14" level="project" />
+    <orderEntry type="library" name="Maven: xalan:xalan:2.7.2" level="project" />
+    <orderEntry type="library" name="Maven: xalan:serializer:2.7.2" level="project" />
+    <orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-gvt:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-shared-resources:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-svggen:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-util:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-constants:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-i18n:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-xml:1.14" level="project" />
+    <orderEntry type="library" name="Maven: xml-apis:xml-apis-ext:1.3.04" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-codec:1.14" level="project" />
+    <orderEntry type="library" name="Maven: cn.dev33:sa-token-spring-boot-starter:1.29.0" level="project" />
+    <orderEntry type="library" name="Maven: cn.dev33:sa-token-servlet:1.29.0" level="project" />
+    <orderEntry type="library" name="Maven: cn.dev33:sa-token-dao-redis-jackson:1.29.0" level="project" />
+    <orderEntry type="library" name="Maven: cn.dev33:sa-token-core:1.29.0" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.10" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:druid:1.1.10" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:fastjson:2.0.12" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.fastjson2:fastjson2-extension:2.0.12" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.fastjson2:fastjson2:2.0.12" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.21" level="project" />
+    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: com.ejlchina:okhttps:3.1.1" level="project" />
+    <orderEntry type="library" name="Maven: com.ejlchina:data-core:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okio:okio:1.17.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-thymeleaf:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf-spring5:3.0.14.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf:3.0.14.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.attoparser:attoparser:2.0.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.unbescape:unbescape:1.1.6.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.4.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.6.5" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.7" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.3.4" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.3.4" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.3.4" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.3.4" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.3.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.5.8" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.5.8" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.5.8" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:6.1.6.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.73.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.73.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.73.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.73.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.73.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-tcnative-classes:2.0.46.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.73.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.4.14" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.12.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.56" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.56" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.56" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-websocket:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-websocket:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.9.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.28" level="project" />
+    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
+    <orderEntry type="library" name="Maven: junit:junit:4.13.2" level="project" />
+    <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-mail:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.mail:jakarta.mail:1.6.7" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.5.9" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.5.9" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.5.9" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.4.7" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:2.4.7" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.ow2.asm:asm:9.1" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.19.0" level="project" />
+    <orderEntry type="library" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.7.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:3.9.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.10.22" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:3.9.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.15" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.3.15" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.8.4" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.9.1" level="project" />
+    <orderEntry type="library" name="Maven: io.github.draco1023:poi-tl-ext:0.4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:ooxml-schemas:1.4" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:3.0.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: net.sourceforge.cssparser:cssparser:0.9.29" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.w3c.css:sac:1.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.jsoup:jsoup:1.15.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: net.sf.saxon:Saxon-HE:11.4" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.xmlresolver:xmlresolver:4.4.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents.client5:httpclient5:5.0.4" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents.core5:httpcore5-h2:5.1.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents.core5:httpcore5:5.1.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.xmlresolver:xmlresolver:data:4.4.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: de.rototor.snuggletex:snuggletex-core:1.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.twelvemonkeys.imageio:imageio-batik:3.8.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.twelvemonkeys.imageio:imageio-core:3.8.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.twelvemonkeys.common:common-lang:3.8.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.twelvemonkeys.common:common-io:3.8.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.twelvemonkeys.common:common-image:3.8.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.xmlgraphics:batik-rasterizer-ext:1.15" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.xmlgraphics:batik-svgrasterizer:1.15" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.xmlgraphics:batik-extension:1.15" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-amqp:2.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.amqp:spring-rabbit:2.3.14" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.amqp:spring-amqp:2.3.14" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.3.1" level="project" />
+    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
+    <orderEntry type="library" name="Maven: com.rabbitmq:amqp-client:5.12.0" level="project" />
+    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.0" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.0" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.7" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
+    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-autoconfigure:1.4.0" level="project" />
+    <orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper:5.3.0" level="project" />
+    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.2" level="project" />
+  </component>
+</module>

+ 7 - 0
RMS/src/main/java/cn/cslg/report/common/model/dto/invalidReReport/ArgumentsDTO.java

@@ -34,6 +34,7 @@ public class ArgumentsDTO  {
      * 无效证据
      */
     private String proofStr;
+
     /**
      * 无效证据Id
      */
@@ -43,6 +44,10 @@ public class ArgumentsDTO  {
      * 陈述意见
      */
     private String argumentStr;
+    /**
+     * 陈述意见
+     */
+    private Integer argumentId;
 
     /**
      * 证据id
@@ -58,6 +63,8 @@ public class ArgumentsDTO  {
      */
     private String scratchType ;
 
+    private   Integer scratchId;
+
     /**
      * 划词颜色
      */

+ 1 - 0
RMS/src/main/java/cn/cslg/report/common/model/dto/invalidReReport/InvalidReasonDTO.java

@@ -71,6 +71,7 @@ public class InvalidReasonDTO {
          */
         private String argumentStr;
 
+        private Integer isCommon;
         private List<GroupDetail> groupDetails;
     }
 

+ 0 - 1
RMS/src/main/java/cn/cslg/report/common/model/dto/invalidReReport/ProofGroupDTO.java

@@ -26,7 +26,6 @@ public class ProofGroupDTO {
      * 陈述意见
      */
     private String argumentStr;
-
     private List<GroupDetail> groupDetails;
 
 

+ 101 - 0
RMS/src/main/java/cn/cslg/report/common/model/vo/TaskFromPASVO.java

@@ -0,0 +1,101 @@
+package cn.cslg.report.common.model.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 装载分析系统返回的任务对象
+ *
+ * @Author chenyu
+ * @Date 2023/7/31
+ */
+@Accessors(chain = true)
+@Data
+public class TaskFromPASVO implements Serializable {
+    /**
+     * 任务类型 1.Excel导入 2.导出 3.EPO欧专局导入 4.专利之星导入
+     */
+    private Integer type;
+    /**
+     * 创建人
+     */
+    private Integer createBy;
+    /**
+     * 开始时间
+     */
+    private Integer startTime;
+    /**
+     * 专题库id
+     */
+    private Integer projectId;
+    /**
+     * 报告id
+     */
+    private Integer reportId;
+    /**
+     * 导入导出字段数量
+     */
+    private Integer fieldNum;
+    /**
+     * 专利数量
+     */
+    private Integer total;
+    /**
+     * 完成时间
+     */
+    private Integer endTime;
+    /**
+     * 任务状态(0.队列中 1.进行中 2.已完成 4.已暂停 5.已取消)
+     */
+    private Integer status;
+    /**
+     * 文件名
+     */
+    private String fileName;
+    /**
+     * 文件大小
+     */
+    private Long fileSize;
+    /**
+     * 完成条数(非成功条数)
+     */
+    private Integer successNum;
+    /**
+     * 成功条数
+     */
+    private Integer trueSuccessNum;
+    /**
+     * 失败条数
+     */
+    private Integer defaultNum;
+    /**
+     * 自定义字段文件夹信息json格式
+     */
+    private String pramJson;
+    /**
+     * 导入详细excel连接
+     */
+    private String url;
+    private Integer productId;
+    /**
+     * Excel文件原名称
+     */
+    private String oldName;
+    /**
+     * 所属任务条件id
+     */
+    private Integer taskConditionId;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 任务类型1(0普通任务 1定时任务)
+     */
+    private Integer taskType;
+
+}

+ 1 - 1
RMS/src/main/java/cn/cslg/report/common/model/vo/invalidReReport/ArgumentsDetailsVO.java

@@ -49,7 +49,7 @@ public class ArgumentsDetailsVO {
     /**
      * 权要id
      */
-    private Integer rightId;
+    private Integer rightSort;
 
     /**
      * 特征id

+ 1 - 0
RMS/src/main/java/cn/cslg/report/common/model/vo/invalidReReport/QueryInvalidReasonVO.java

@@ -93,6 +93,7 @@ public class QueryInvalidReasonVO {
         private Integer fileType;
         private String patentNo;
         private Integer fileId;
+        private String fileName;
     }
 
     @Data

+ 238 - 0
RMS/src/main/java/cn/cslg/report/common/utils/WordUtil.java

@@ -0,0 +1,238 @@
+package cn.cslg.report.common.utils;
+
+import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
+import org.apache.poi.xwpf.usermodel.*;
+import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.List;
+
+/**
+ * @Classname WordUtil
+ * @Description 导出WORD工具类
+ * @Date 2020/11/24 10:40
+ * @Author author
+ */
+public class WordUtil {
+    /**
+     * 创建默认的页脚(该页脚主要只居中显示页码)
+     *
+     * @param docx XWPFDocument文档对象
+     * @return
+     * @throws IOException IO异常
+     */
+    public static void createDefaultFooter(XWPFDocument docx) throws IOException {
+        CTSectPr sectPr = docx.getDocument().getBody().addNewSectPr();
+        XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(docx, sectPr);
+        XWPFFooter footer = headerFooterPolicy.createFooter(STHdrFtr.DEFAULT);
+        XWPFParagraph paragraph = footer.getParagraphArray(0);
+        paragraph.setAlignment(ParagraphAlignment.CENTER);
+        paragraph.setVerticalAlignment(TextAlignment.CENTER);
+        CTTabStop tabStop = paragraph.getCTP().getPPr().addNewTabs().addNewTab();
+        tabStop.setVal(STTabJc.CENTER);
+        XWPFRun run = paragraph.createRun();
+        run.addTab();
+        run = paragraph.createRun();
+        run.setText("第");
+        run = paragraph.createRun();
+        CTFldChar fldChar = run.getCTR().addNewFldChar();
+        fldChar.setFldCharType(STFldCharType.Enum.forString("begin"));
+        run = paragraph.createRun();
+        CTText ctText = run.getCTR().addNewInstrText();
+        ctText.setStringValue("PAGE  \\* MERGEFORMAT");
+        ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve"));
+        fldChar = run.getCTR().addNewFldChar();
+        fldChar.setFldCharType(STFldCharType.Enum.forString("end"));
+        run = paragraph.createRun();
+        run.setText("页/共");
+        run = paragraph.createRun();
+        fldChar = run.getCTR().addNewFldChar();
+        fldChar.setFldCharType(STFldCharType.Enum.forString("begin"));
+        run = paragraph.createRun();
+        ctText = run.getCTR().addNewInstrText();
+        ctText.setStringValue("NUMPAGES  \\* MERGEFORMAT ");
+        ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve"));
+        fldChar = run.getCTR().addNewFldChar();
+        fldChar.setFldCharType(STFldCharType.Enum.forString("end"));
+        run = paragraph.createRun();
+        run.setText("页");
+    }
+
+
+    /**
+     * 设置表头内容
+     *
+     * @param cell
+     * @param text
+     * @param width
+     * @param fontFamily
+     * @param fontSize
+     * @param bold
+     */
+    public static void setCellText(XWPFTableCell cell, String text, int width, String fontFamily, int fontSize, boolean bold) {
+        XWPFParagraph paragraph = cell.getParagraphs().get(0);
+        XWPFRun run = paragraph.createRun();
+        run.setFontFamily(fontFamily);
+        run.setFontSize(fontSize);
+        run.setBold(bold);
+        run.setText(text);
+        CTTc cttc = cell.getCTTc();
+        CTTcPr cellPr = cttc.addNewTcPr();
+        cellPr.addNewTcW().setW(BigInteger.valueOf(width));
+        cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+        CTTcPr ctPr = cttc.addNewTcPr();
+        ctPr.addNewVAlign().setVal(STVerticalJc.CENTER);
+        cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER);
+    }
+
+    /**
+     * 设置页边距
+     *
+     * @param doc
+     * @param left
+     * @param right
+     * @param top
+     * @param bottom
+     */
+    public static void setMargin(XWPFDocument doc, int left, int right, int top, int bottom) {
+        CTSectPr sectPr = doc.getDocument().getBody().addNewSectPr();
+        CTPageMar pageMar = sectPr.addNewPgMar();
+        pageMar.setLeft(BigInteger.valueOf(left));
+        pageMar.setRight(BigInteger.valueOf(right));
+        pageMar.setTop(BigInteger.valueOf(top));
+        pageMar.setBottom(BigInteger.valueOf(bottom));
+    }
+
+    /**
+     * 设置段落文本
+     *
+     * @param doc
+     * @param text
+     * @param fontFamily
+     * @param fontSize
+     * @param textPosition
+     * @param bold
+     * @param paragraphAlignment
+     */
+    public static void setParagraph(XWPFDocument doc,
+                                    String text,
+                                    String fontFamily,
+                                    int fontSize,
+                                    int textPosition,
+                                    boolean bold,
+                                    ParagraphAlignment paragraphAlignment) {
+        XWPFParagraph xp = doc.createParagraph();
+        xp.setSpacingBefore(0);
+        XWPFRun r1 = xp.createRun();
+        r1.setText(text);
+        r1.setFontFamily(fontFamily);
+        r1.setFontSize(fontSize);
+        r1.setTextPosition(textPosition);
+        r1.setBold(bold);
+        xp.setAlignment(paragraphAlignment);
+    }
+
+    /**
+     * 设置表格样式
+     *
+     * @param cell
+     * @param paragraphAlignment
+     * @param fontFamily
+     * @param fontSize
+     * @param bold
+     * @return
+     */
+    public static XWPFRun setTableCellStyle(XWPFTableCell cell,String width, ParagraphAlignment paragraphAlignment, String fontFamily, int fontSize, boolean bold) {
+        XWPFParagraph paragraph = cell.getParagraphs().get(0);
+        paragraph.setAlignment(paragraphAlignment);
+        XWPFRun run = paragraph.createRun();
+        run.setFontFamily(fontFamily);
+        if(width!=null){
+        cell.setWidth(width);}
+        cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
+        run.setFontSize(fontSize);
+        run.setStyle("1");
+        run.setBold(bold);
+        return run;
+    }
+
+    /**
+     * 设置边框
+     *
+     * @param xTable
+     * @param bolderSize
+     */
+    public static void setTableBolder(XWPFTable xTable, int bolderSize, String color) {
+        CTTblBorders borders = xTable.getCTTbl().getTblPr().addNewTblBorders();
+        CTBorder hBorder = borders.addNewInsideH();
+        hBorder.setVal(STBorder.Enum.forString("single"));
+        hBorder.setSz(new BigInteger(String.valueOf(bolderSize)));
+        hBorder.setColor(color);
+
+        CTBorder vBorder = borders.addNewInsideV();
+        vBorder.setVal(STBorder.Enum.forString("single"));
+        vBorder.setSz(new BigInteger(String.valueOf(bolderSize)));
+        vBorder.setColor(color);
+
+        CTBorder lBorder = borders.addNewLeft();
+        lBorder.setVal(STBorder.Enum.forString("single"));
+        lBorder.setSz(new BigInteger(String.valueOf(bolderSize)));
+        lBorder.setColor(color);
+
+        CTBorder rBorder = borders.addNewRight();
+        rBorder.setVal(STBorder.Enum.forString("single"));
+        rBorder.setSz(new BigInteger(String.valueOf(bolderSize)));
+        rBorder.setColor(color);
+
+        CTBorder tBorder = borders.addNewTop();
+        tBorder.setVal(STBorder.Enum.forString("single"));
+        tBorder.setSz(new BigInteger(String.valueOf(bolderSize)));
+        tBorder.setColor(color);
+
+        CTBorder bBorder = borders.addNewBottom();
+        bBorder.setVal(STBorder.Enum.forString("single"));
+        bBorder.setSz(new BigInteger(String.valueOf(bolderSize)));
+        bBorder.setColor(color);
+    }
+    /**
+     * word单元格列合并
+     * @param table 表格
+     * @param row 合并列所在行
+     * @param startCell 开始列
+     * @param endCell 结束列
+     * @date 2020年4月8日 下午4:43:54
+     */
+    public static void mergeCellsHorizontal(XWPFTable table, int row, int startCell, int endCell) {
+        for (int i = startCell; i <= endCell; i++) {
+            XWPFTableCell cell = table.getRow(row).getCell(i);
+            if (i == startCell) {
+                // The first merged cell is set with RESTART merge value
+                cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+            } else {
+                // Cells which join (merge) the first one, are set with CONTINUE
+                cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+
+    /**
+     * word单元格行合并
+     * @param table 表格
+     * @param col 合并行所在列
+     * @date 2020年4月8日 下午4:46:18
+     */
+    public static void mergeCellsVertically(XWPFTable table, int col, int startRow, int endRow) {
+        for (int i = startRow; i <= endRow; i++) {
+            XWPFTableCell cell = table.getRow(i).getCell(col);
+            if (i == startRow) {
+                // The first merged cell is set with RESTART merge value
+                cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+            } else {
+                // Cells which join (merge) the first one, are set with CONTINUE
+                cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+            }
+        }
+    }
+}

+ 2 - 2
RMS/src/main/java/cn/cslg/report/controller/CompareController.java

@@ -44,8 +44,8 @@ public class CompareController {
 
     @RequestMapping(value = "/addSingle", method = RequestMethod.GET)
     @Operation(summary = "添加单个对比文件")
-    public Integer addSingle(Integer reportId, String patentNo,String name) throws IOException {
-        Integer res = compareFilesService.addSingle(reportId, patentNo,name);
+    public Integer addSingle(Integer reportId, String patentNo,String name,Integer asCompare) throws IOException {
+        Integer res = compareFilesService.addSingle(reportId, patentNo,name,asCompare);
         return res;
     }
 

+ 15 - 1
RMS/src/main/java/cn/cslg/report/controller/DownloadController.java

@@ -1,10 +1,16 @@
 package cn.cslg.report.controller;
 
 import cn.cslg.report.common.core.base.Constants;
+import cn.cslg.report.common.model.vo.TaskFromPASVO;
 import cn.cslg.report.common.utils.DateUtils;
 import cn.cslg.report.common.utils.FileUtils;
 
+import cn.cslg.report.entity.Task;
+import cn.cslg.report.service.OutInterfaceService;
 import cn.hutool.core.io.FileUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -18,6 +24,7 @@ import org.springframework.web.bind.annotation.*;
 import java.io.File;
 import java.io.IOException;
 import java.net.URLEncoder;
+import java.util.List;
 
 @Tag(name = "下载")
 @RestController
@@ -25,11 +32,18 @@ import java.net.URLEncoder;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class DownloadController {
     private final FileUtils fileUtils;
+    private final OutInterfaceService outInterfaceService;
 
     @GetMapping("downloadFile")
     @Operation(summary = "下载文件")
-    public ResponseEntity<FileSystemResource> downloadSystemFile2(String url) throws IOException {
+    public ResponseEntity<FileSystemResource> downloadSystemFile2(String url, Integer taskId) throws IOException {
         File file = new File(fileUtils.getSystemPath() + url);
+        if (!file.exists()) {
+            String json2 = outInterfaceService.getDownLoadFile(url);
+            JSONObject jsonObject2 = JSONObject.parseObject(json2);
+            String path = jsonObject2.get("data").toString();
+            file = new File(path);
+        }
         HttpHeaders headers = new HttpHeaders();
         String fileName = DateUtils.getNowTimeFormat(DateUtils.YYYYMMDDHHMMSS) + "." + FileUtil.extName(file.getName());
         headers.add("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

+ 10 - 7
RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/ArgumentsController.java

@@ -7,10 +7,13 @@ import cn.cslg.report.common.model.dto.invalidReReport.ArgumentsDetailsDTO;
 import cn.cslg.report.common.model.dto.invalidReReport.ArgumentsListDTO;
 import cn.cslg.report.common.utils.Response;
 import cn.cslg.report.entity.invalidReReport.AssoFeatureProof;
+import cn.cslg.report.entity.invalidReReport.ProofStr;
 import cn.cslg.report.service.business.AssoRecordsFeatureService;
 import cn.cslg.report.service.business.InvalidReReport.ArgumentsService;
 import cn.cslg.report.service.business.InvalidReReport.AssoFeatureProofService;
+import cn.cslg.report.service.business.InvalidReReport.ProofStrService;
 import cn.cslg.report.service.business.asso.AssoReportPersonService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
@@ -34,18 +37,18 @@ import java.util.List;
 public class ArgumentsController {
     private final AssoReportPersonService assoReportPersonService;
     private final ArgumentsService argumentsService;
-    private final AssoFeatureProofService assoFeatureProofService;
-
+    private final ProofStrService proofStrService;
     @Operation(summary = "添加陈述意见")
     @PostMapping("/addArguments")
     public String addArguments(@RequestBody ArgumentsDTO argumentsDTO) throws IOException {
         return argumentsService.addArguments(argumentsDTO);
     }
 
-    @Operation(summary = "删除陈述意见")
-    @PostMapping("/deleteArguments")
-    public String deleteArguments(@RequestBody List<Integer> argumentsIds) {
-        argumentsService.deleteArguments(argumentsIds);
+    @Operation(summary = "删除无效理由")
+    @PostMapping("/deleteProofStr")
+    public String deleteArguments(@RequestBody List<Integer> invalidStrIds ) {
+        //根据无效理由id查询
+        argumentsService.deleteProofStr(invalidStrIds);
         return Response.success("删除成功");
     }
 
@@ -76,7 +79,7 @@ public class ArgumentsController {
     @Operation(summary = "根据特征查询相关证据")
     @GetMapping("/queryProofStr")
     public String queryProofStr(Integer proofId, Integer featureId) throws IOException {
-        return Response.success(assoFeatureProofService.queryProofStr(proofId, featureId));
+        return Response.success(proofStrService.queryProofStr(proofId,featureId));
     }
 
 }

+ 26 - 8
RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/InvalidReasonController.java

@@ -3,10 +3,12 @@ package cn.cslg.report.controller.InvalidReReport;
 import cn.cslg.report.common.core.base.Constants;
 import cn.cslg.report.common.model.dto.invalidReReport.CheckReFeaturesDTO;
 import cn.cslg.report.common.model.dto.invalidReReport.InvalidReasonDTO;
-import cn.cslg.report.common.model.dto.invalidReReport.QueryInvalidReasonDTO;
+import cn.cslg.report.common.model.dto.invalidReReport.InvalidReasonFieldValueDTO;
+import cn.cslg.report.common.model.dto.invalidReReport.UpdateArgumentStrDTO;
 import cn.cslg.report.common.model.vo.invalidReReport.QueryInvalidReasonVO;
 import cn.cslg.report.common.utils.Response;
-import cn.cslg.report.entity.invalidReReport.InvalidReason;
+import cn.cslg.report.service.business.ExportArgumentsScenariosService;
+import cn.cslg.report.service.business.InvalidReReport.InvalidReasonFieldValueService;
 import cn.cslg.report.service.business.InvalidReReport.InvalidReasonService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -30,7 +32,8 @@ import java.util.List;
 @RequestMapping(Constants.REPORT_API + "/invalidReason")
 public class InvalidReasonController {
     private final InvalidReasonService invalidReasonService;
-
+    private final InvalidReasonFieldValueService invalidReasonFieldValueService;
+    private final ExportArgumentsScenariosService exportArgumentsScenariosService;
     @Operation(summary = "添加无效理由和证据")
     @PostMapping("/addInvalidReason")
     public String addInvalidReason(@RequestBody InvalidReasonDTO invalidReasonDTO) {
@@ -85,10 +88,25 @@ public class InvalidReasonController {
         return Response.success(isFlag);
     }
 
-    @Operation(summary = "测试检测插入特征是否重复")
-    @PostMapping("/testCheckReFeature")
-    public String addOrUpdateValue(@RequestBody CheckReFeaturesDTO checkReFeaturesDTO) throws IOException {
-        Boolean isFlag = invalidReasonService.checkReFeatures(checkReFeaturesDTO);
-        return Response.success(isFlag);
+    @Operation(summary = "添加或更新无效理由自定义字段值")
+    @PostMapping("/addOrUpdateValue")
+    public String addOrUpdateValue(@RequestBody List<InvalidReasonFieldValueDTO> invalidReasonFieldValueDTOS) throws IOException {
+        Boolean isFlag = invalidReasonFieldValueService.addOrUpdate(invalidReasonFieldValueDTOS);
+        if(!isFlag){
+            Response.error("添加失败");
+        }
+        return Response.success("添加成功");
+    }
+    @Operation(summary = "更新无效理由和证据")
+    @PostMapping("/updateArgumentStr")
+    public String updateArgumentStr(@RequestBody UpdateArgumentStrDTO updateArgumentStrDTO) throws IOException {
+        invalidReasonService.updateArgumentStr(updateArgumentStrDTO);
+        return Response.success();
+    }
+    @Operation(summary = "导出无效理由")
+    @GetMapping("/exportInvalid")
+    public String exportInvalid(Integer reportId) throws IOException {
+       String url =  exportArgumentsScenariosService.ExportToWord(reportId);
+        return url;
     }
 }

+ 0 - 1
RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/InvalidReasonFieldValueController.java

@@ -29,5 +29,4 @@ public class InvalidReasonFieldValueController {
     private final InvalidReasonFieldValueService invalidReasonFieldValueService;
 
 
-
 }

+ 2 - 9
RMS/src/main/java/cn/cslg/report/controller/InvalidReReport/ProofController.java

@@ -6,6 +6,7 @@ import cn.cslg.report.common.model.dto.ReportDTO;
 import cn.cslg.report.common.model.dto.ShareReportDTO;
 import cn.cslg.report.common.model.dto.invalidReReport.ProofQueryDTO;
 import cn.cslg.report.common.utils.Response;
+import cn.cslg.report.service.business.ExportArgumentsScenariosService;
 import cn.cslg.report.service.business.InvalidReReport.ProofService;
 import cn.cslg.report.service.business.asso.AssoReportPersonService;
 import com.alibaba.fastjson.JSONObject;
@@ -29,19 +30,11 @@ import java.util.List;
  * @Author lrj
  * @Data 2023/4/1
  */
-@Tag(name = "文献证据管理")
+@Tag(name = "exportArgumentsScenariosService")
 @Slf4j
 @RequiredArgsConstructor
 @RestController
 @RequestMapping(Constants.REPORT_API + "/proof")
 public class ProofController {
-    private final ProofService proofService;
-
-//    @Operation(summary = "上传专利文献证据(文件)")
-////    @PostMapping("/addPatentProofByFile")
-////    public String addPatentProofByFile(@RequestBody ShareReportDTO shareReportDTO) {
-////        proofService.addPatentProofByFile()
-////        return Response.success(flag);
-////    }
 
 }

+ 7 - 0
RMS/src/main/java/cn/cslg/report/controller/InvalidRecordController.java

@@ -55,5 +55,12 @@ public class InvalidRecordController {
         return invalidRecordService.queryInvalidRecord(invalidRecord);
     }
 
+    @GetMapping(value = "/exportInvalid")
+    @Operation(summary = "查询无效记录")
+    @Transactional(rollbackFor = Exception.class)
+    public String exportInvalid(@RequestBody InvalidRecord invalidRecord)throws IOException{
+        return invalidRecordService.queryInvalidRecord(invalidRecord);
+    }
+
 
 }

+ 0 - 28
RMS/src/main/java/cn/cslg/report/entity/invalidReReport/AssoScratchPatent.java

@@ -1,28 +0,0 @@
-package cn.cslg.report.entity.invalidReReport;
-
-import cn.cslg.report.common.model.BaseEntity;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * @Author xiexiang
- * @Date 2023/6/28
- */
-@Data
-@TableName(value = "ASSO_SCRATCH_PATENT")
-public class AssoScratchPatent extends BaseEntity<AssoScratchArguments> {
-    /**
-     * 划词id
-     */
-    @TableField("SCRATCH_ID")
-    private Integer scratchId;
-
-    /**
-     * 专利号
-     */
-    @TableField("PATENT_NO")
-    private String patentNo;
-}

+ 31 - 2
RMS/src/main/java/cn/cslg/report/service/OutInterfaceService.java

@@ -352,11 +352,9 @@ public class OutInterfaceService {
         LambdaQueryWrapper<ImportTask> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(ImportTask::getReportId, patentVO.getReportId());
         List<ImportTask> importTasks = importTaskService.list(queryWrapper);
-        List<Integer> taskIds = importTasks.stream().map(ImportTask::getId).collect(Collectors.toList());
         Report report = reportService.getById(patentVO.getReportId());
         if (type == 0) {
             patentVO.setProjectId(report.getProjectId());
-            patentVO.setImportTaskId(taskIds);
         }
         String param = new Gson().toJson(patentVO);
         RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
@@ -645,4 +643,35 @@ public class OutInterfaceService {
         return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
     }
 
+    /**
+     * 调用分析系统根据任务id查询任务接口
+     *
+     * @param taskId 任务id
+     * @return 返回任务
+     */
+    public String getTask(Integer taskId) throws IOException {
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PASUrl + "/api/v2/task/queryTaskById?taskId=" + taskId)
+                .get()
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
+    /**
+     * 调用分析系统下载接口
+     *
+     * @param url url相对路径
+     * @return 返回ResponseEntity
+     */
+    public String getDownLoadFile(String url) throws IOException {
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), url);
+        OkHttpClient okHttpClient = new OkHttpClient();
+        Request request = new Request.Builder()
+                .url(PASUrl + "/api/v2/common/downloadPartUrlFile")
+                .post(requestBody)
+                .build();
+        return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+    }
+
 }

+ 47 - 33
RMS/src/main/java/cn/cslg/report/service/business/CompareFilesService.java

@@ -635,32 +635,46 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
      * @throws IOException
      * @function 根据PatentVO里的条件(分页)模糊查询标的专利号和数量
      */
-    public Integer addSingle(Integer reportId, String patentNo,String name) throws IOException {
-        CompareFiles compareFiles = new CompareFiles();
-        try {
-            compareFiles.setPatentNo(patentNo);
-            List<CompareFiles> proofList = this.list(new LambdaQueryWrapper<CompareFiles>().eq(CompareFiles::getReportId, reportId).orderByDesc(CompareFiles::getSysOrder).last("limit 1"));
-            Integer biggestSort;
-            //若该报告目前没有证据,则最大排序序号设为0;若有则最大排序序号就是当前按序号倒序的第一个证据的排序序号
-            if (proofList == null || proofList.size() == 0) {
-                biggestSort = 0;
-            } else {
-                if (proofList.get(0).getSysOrder() == null) {
-                    biggestSort = 0;
-                } else {
-                    biggestSort = proofList.get(0).getSysOrder();
-                }
+    @Transactional(rollbackFor = Exception.class)
+    public Integer addSingle(Integer reportId, String patentNo, String name,Integer asCompare) throws IOException {
+        Integer flag =0;
+        //根据报告id查询报告类型
+        Report report =reportService.getById(reportId);
+        int reportType =report.getType();
+        if(reportType==7||(asCompare!=null&&asCompare==1)) {
+            //先查询,若没有才去入库
+            List<CompareFiles> compareFiless = this.list(new LambdaQueryWrapper<CompareFiles>().eq(CompareFiles::getReportId, reportId).eq(CompareFiles::getPatentNo, patentNo));
+            CompareFiles compareFiles = new CompareFiles();
+            if (compareFiless == null || compareFiless.size() == 0) {
+                try {
+                    compareFiles.setPatentNo(patentNo);
+                    List<CompareFiles> proofList = this.list(new LambdaQueryWrapper<CompareFiles>().eq(CompareFiles::getReportId, reportId).orderByDesc(CompareFiles::getSysOrder).last("limit 1"));
+                    Integer biggestSort;
+                    //若该报告目前没有证据,则最大排序序号设为0;若有则最大排序序号就是当前按序号倒序的第一个证据的排序序号
+                    if (proofList == null || proofList.size() == 0) {
+                        biggestSort = 0;
+                    } else {
+                        if (proofList.get(0).getSysOrder() == null) {
+                            biggestSort = 0;
+                        } else {
+                            biggestSort = proofList.get(0).getSysOrder();
+                        }
 
+                    }
+                    compareFiles.setSysOrder(++biggestSort);
+                    compareFiles.setFileType(1);
+                    compareFiles.setReportId(reportId);
+                    compareFiles.setFileName(patentNo + "(" + name + ")");
+                    compareFiles.insert();
+                } catch (Exception e) {
+                    return -1;
+                }
             }
-            compareFiles.setSysOrder(++biggestSort);
-            compareFiles.setFileType(1);
-            compareFiles.setReportId(reportId);
-            compareFiles.setFileName(patentNo+"("+name+")");
-            compareFiles.insert();
-        } catch (Exception e) {
-            return -1;
         }
-        return compareFiles.getId();
+        else {
+            return 1;
+        }
+        return flag;
     }
 
     /**
@@ -693,22 +707,22 @@ public class CompareFilesService extends ServiceImpl<CompareFilesMapper, Compare
     private List<ProofVO> loadProof(List<CompareFiles> proofs) {
         List<ProofVO> proofVOS = new ArrayList<>();
         //筛选出文件id
-       List<Integer> fileId = proofs.stream().filter(item->item.getFileType().equals(2)).map(CompareFiles::getFileId).collect(Collectors.toList());
-       //根据文件id获得所有的文件
-        List<ReportFiles> reportFiles =new ArrayList<>();
-        if(fileId.size()!=0){
-            LambdaQueryWrapper<ReportFiles> reportFilesLambdaQueryWrapper =new LambdaQueryWrapper<>();
-            reportFilesLambdaQueryWrapper.in(ReportFiles::getId,fileId);
-          reportFiles =  reportFileService.list(reportFilesLambdaQueryWrapper);
-        }
-        List<ReportFiles> reportFile =reportFiles;
+        List<Integer> fileId = proofs.stream().filter(item -> item.getFileType().equals(2)).map(CompareFiles::getFileId).collect(Collectors.toList());
+        //根据文件id获得所有的文件
+        List<ReportFiles> reportFiles = new ArrayList<>();
+        if (fileId.size() != 0) {
+            LambdaQueryWrapper<ReportFiles> reportFilesLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            reportFilesLambdaQueryWrapper.in(ReportFiles::getId, fileId);
+            reportFiles = reportFileService.list(reportFilesLambdaQueryWrapper);
+        }
+        List<ReportFiles> reportFile = reportFiles;
         proofs.forEach(item -> {
             ProofVO proofVO = new ProofVO();
             if (item.getFileType().equals(1)) {
                 proofVO.setProofType("专利文献");
                 proofVO.setProofConditions(item.getPatentNo());
             } else if (item.getFileType().equals(2)) {
-            ReportFiles reportFiles1 =    reportFile.stream().filter(tem->tem.getId().equals(item.getFileId())).findFirst().orElse(null);
+                ReportFiles reportFiles1 = reportFile.stream().filter(tem -> tem.getId().equals(item.getFileId())).findFirst().orElse(null);
                 proofVO.setProofConditions(reportFiles1.getUrl());
                 proofVO.setProofType("非专利文献");
             }

+ 231 - 40
RMS/src/main/java/cn/cslg/report/service/business/ExportArgumentsScenariosService.java

@@ -1,26 +1,42 @@
 package cn.cslg.report.service.business;
 
-import cn.cslg.report.common.model.dto.invalidReReport.InvalidReasonDTO;
-import cn.cslg.report.common.model.vo.invalidReReport.ExportInvalidReasonVO;
+import cn.cslg.report.common.model.dto.invalidReReport.InvalidReasonFieldValueDTO;
+import cn.cslg.report.common.model.vo.PersonnelVO;
+
+import cn.cslg.report.common.model.vo.invalidReReport.QueryInvalidReasonVO;
+import cn.cslg.report.common.utils.*;
+import cn.cslg.report.common.utils.SecurityUtils.LoginUtils;
+import cn.cslg.report.entity.Report;
+import cn.cslg.report.entity.ReportDocument;
+import cn.cslg.report.entity.invalidReReport.InvalidReasonField;
+import cn.cslg.report.service.business.InvalidReReport.InvalidReasonFieldService;
 import cn.cslg.report.service.business.InvalidReReport.InvalidReasonService;
-import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.*;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.poi.xwpf.usermodel.*;
+import org.ddr.poi.html.HtmlRenderPolicy;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.io.OutputStream;
+import java.math.BigInteger;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static cn.cslg.report.common.utils.StringUtils.join;
 
 /**
  * 导出无效理由实现类
+ *
  * @Author xiexiang
  * @Date 2023/7/24
  */
@@ -29,40 +45,215 @@ import java.util.List;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ExportArgumentsScenariosService {
     private final InvalidReasonService invalidReasonService;
+    private final InvalidReasonFieldService invalidReasonFieldService;
+    private final FileUtils fileUtils;
+    private final CacheUtils cacheUtils;
+    private final LoginUtils loginUtils;
+    private final ReportService reportService;
 
-    public void ExportToExcel(Integer reportId, String filePath) throws IOException {
-        List<ExportInvalidReasonVO> exportInvalidReasonVOS = invalidReasonService.exportInvalidReason(reportId);
-        try (FileOutputStream fileOut = new FileOutputStream(filePath)){
-            Workbook workbook = new XSSFWorkbook();
-            Sheet sheet = workbook.createSheet("无效理由");
-            //创建标题行
-            Row headerRow = sheet.createRow(0);
-            String[] headers = {"序号","无效理由","涉及内容","相关证据","陈述意见"};
-            for(int i = 0; i < headers.length; i++){
-                Cell cell = headerRow.createCell(i);
-                cell.setCellValue(headers[i]);
-            }
-            //字体
-            Font headerFont = workbook.createFont();
-            headerFont.setBold(true);
-            CellStyle headerCellStyle = workbook.createCellStyle();
-            headerCellStyle.setFont(headerFont);
-            int rowNum = 0;
-            //填充数据
-            for(ExportInvalidReasonVO exportInvalidReasonVO : exportInvalidReasonVOS){
-                Row row = sheet.createRow(rowNum++);
-                row.createCell(0).setCellValue(exportInvalidReasonVO.getInvalidName());
-                row.createCell(1).setCellValue(exportInvalidReasonVO.getContent());
-                row.createCell(2).setCellValue(exportInvalidReasonVO.getProofStr());
-                row.createCell(3).setCellValue(exportInvalidReasonVO.getArgumentStr());
+    public String ExportToWord(Integer reportId) throws IOException {
+        //根据报告id查询报告
+        Report report = reportService.getById(reportId);
+        String templeName = IdUtil.simpleUUID() + ".docx";
+        String directoryName = fileUtils.createDirectory();
+        //富文本栏位计数器
+        int nameCount = 0;
+        Map<String, Object> map1 = new HashMap<>();
+        XWPFDocument doc = new XWPFDocument();
+        doc.createStyles();
+        // 获取底层 XML 文档对象模型
+        CTDocument1 ctDocument = doc.getDocument();
+        // 设置页面布局为横向
+        CTBody body = ctDocument.getBody();
+        if (!body.isSetSectPr()) {
+            body.addNewSectPr();
+            CTPageSz pageSize = body.getSectPr().addNewPgSz();
+            pageSize.setOrient(STPageOrientation.LANDSCAPE); // 设置页面布局为横向
+            pageSize.setW(BigInteger.valueOf(16840));
+            pageSize.setH(BigInteger.valueOf(11907));
+        }
+        //根据报告id查询所有自定义字段
+        LambdaQueryWrapper<InvalidReasonField> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(InvalidReasonField::getReportId, reportId)
+                .orderByAsc(InvalidReasonField::getReportId);
+        List<InvalidReasonField> fields = invalidReasonFieldService.list(wrapper);
+        List<String> nameList = new ArrayList<>();
+        nameList.add("序号");
+        nameList.add("无效理由");
+        nameList.add("涉及内容");
+        nameList.add("相关证据");
+        nameList.add("陈述意见");
+        List<String> tem = fields.stream().map(InvalidReasonField::getFieldName).collect(Collectors.toList());
+        nameList.addAll(tem);
+        //根据报告id查询无效理由
+        List<QueryInvalidReasonVO> queryInvalidReasonVOS = invalidReasonService.queryInvalidReason(reportId);
+        //根据无效类型排序,方便合并单元格
+        queryInvalidReasonVOS.sort(Comparator.comparing(QueryInvalidReasonVO::getInvalidName).thenComparing(QueryInvalidReasonVO::getContent));
+        //设置标题
+        WordUtil.setParagraph(doc, report.getName() + "无效理由", "宋体", 16, 10, true, ParagraphAlignment.CENTER);
+        //设置副标题
+        WordUtil.setParagraph(doc, "生成时间:" + new Date().toString(), "宋体", 10, 10, true, ParagraphAlignment.RIGHT);
+        int colTotalCount = fields.size() + 5;
+        //总条数
+        int dataCount = queryInvalidReasonVOS.size();
+        //创建表格
+        XWPFTable xTable = doc.createTable(1, colTotalCount);
+        CTTblPr tblPr = xTable.getCTTbl().addNewTblPr();
+        tblPr.addNewJc().setVal(STJc.CENTER);
+        //设置边框
+        WordUtil.setTableBolder(xTable, 10, "000000");
+        // 创建表头数据
+        for (int j = 0; j < colTotalCount; j++) {
+            WordUtil.setCellText(xTable.getRow(0).getCell(j), nameList.get(j), 1200, "宋体", 10, true);
+        }
+        //记录对比文件文件内容map
+        Map<Integer, String> fileMap = new TreeMap<>();
+        //记录合并数据map
+        Map<Integer, Integer> map = new HashMap<>();
+        // 创建表格内容
+        for (int i2 = 0; i2 < dataCount; i2++) {
+            QueryInvalidReasonVO queryInvalidReasonVO = queryInvalidReasonVOS.get(i2);
+            int name = queryInvalidReasonVO.getInvalidName();
+            //记录合并数据
+            if (!map.containsKey(name)) {
+                map.put(name, 1);
+            } else {
+                map.put(name, map.get(name) + 1);
             }
-            //自动调整列宽
-            for(int i = 0; i < headers.length; i++){
-                sheet.autoSizeColumn(i);
+            List<InvalidReasonFieldValueDTO> fieldValueDTOS = queryInvalidReasonVO.getFields();
+            XWPFTableRow row = xTable.insertNewTableRow(i2 + 1);
+            for (int j = 0; j < colTotalCount; j++) {
+                XWPFTableCell cell = row.createCell();
+                XWPFRun run;
+                run = WordUtil.setTableCellStyle(cell, "1200", ParagraphAlignment.CENTER, "微软雅黑", 9, false);
+                if (j == 0) {
+                    run.setText(String.valueOf(i2 + 1));
+                } else if (j == 1) {
+                    if (name == 0) {
+                        run.setText("权利要求不清楚");
+                    } else if (name == 1) {
+                        run.setText("说明书公开不充分");
+                    } else if (name == 2) {
+                        run.setText("不具备创造性");
+                    } else if (name == 3) {
+                        run.setText("不具备新颖性");
+                    }
+                } else if (j == 2) {
+                    int content = queryInvalidReasonVO.getContent();
+                    if (content == -1) {
+                        run.setText("说明书");
+                    } else {
+                        run.setText("权要" + (content + 1));
+                    }
+                }
+                //
+                else if (j == 3) {
+                    if (name == 0 || name == 1) {
+                        run.setText(queryInvalidReasonVO.getProofStr());
+                    } else {
+                        StringBuilder stringBuilder = new StringBuilder();
+                        List<QueryInvalidReasonVO.proofGroupIn> proofGroupIns = queryInvalidReasonVO.getProofGroups();
+                        for (int t = 0; t < proofGroupIns.size(); t++) {
+                            List<QueryInvalidReasonVO.proofIn> proofIns = proofGroupIns.get(t).getProofs();
+                            for (int i = 0; i < proofIns.size(); i++) {
+                                QueryInvalidReasonVO.proofIn proofIn = proofIns.get(i);
+                                //生成对比文件组合名称
+                                if (t == 0 && i == 0) {
+                                    if (proofIn.getId() == 0) {
+                                        stringBuilder.append("公知常识");
+                                    } else {
+                                        stringBuilder.append("D" + proofIn.getSort());
+                                    }
+
+                                } else if (t != 0 && i == 0) {
+                                    if (proofIn.getId() == 0) {
+                                        stringBuilder.append(" 公知常识");
+                                    } else {
+                                        stringBuilder.append(" D" + proofIn.getSort());
+                                    }
+                                } else {
+                                    if (proofIn.getId() == 0) {
+                                        stringBuilder.append("+公知常识");
+                                    } else {
+                                        stringBuilder.append("+D" + proofIn.getSort());
+                                    }
+                                }
+                                //记录对比文件名称字典
+                                if (fileMap.get(proofIn.getSort()) == null&&proofIn.getId()!=0) {
+                                    fileMap.put(proofIn.getSort(), proofIn.getFileName());
+                                }
+                            }
+
+
+                        }
+                        run.setText(stringBuilder.toString());
+                    }
+                } else if (j == 4) {
+                    map1.put("argument" + nameCount, queryInvalidReasonVO.getArgumentStr());
+                    run.setText("{{argument" + nameCount + "}}");
+                    nameCount = nameCount + 1;
+                } else {
+                    InvalidReasonField field = fields.get(j - 5);
+                    InvalidReasonFieldValueDTO valueDTO = fieldValueDTOS.stream().filter(item -> item.getFieldId().equals(field.getId())).findFirst().orElse(new InvalidReasonFieldValueDTO());
+                    map1.put(valueDTO.getFieldKey() + nameCount, valueDTO.getFieldValue());
+                    run.setText("{{" + valueDTO.getFieldKey() + nameCount + "}}");
+                    nameCount = nameCount + 1;
+                }
             }
-            workbook.write(fileOut);
-        } catch (FileNotFoundException e) {
-            e.printStackTrace();
         }
+        //添加文件说明行
+        XWPFTableRow row = xTable.insertNewTableRow(dataCount + 1);
+        XWPFTableCell cell = row.createCell();
+        XWPFRun run;
+        run = WordUtil.setTableCellStyle(cell, "1200", ParagraphAlignment.CENTER, "微软雅黑", 9, false);
+        List<String> fileNames = new ArrayList<>();
+        for (Integer key : fileMap.keySet()) {
+            fileNames.add("D" + key + "是" + fileMap.get(key));
+        }
+        String fileText = StringUtils.join(fileNames, ",");
+        run.setText(fileText);
+        for (Integer p = 0; p < colTotalCount - 1; p++) {
+            XWPFTableCell cellTem = row.createCell();
+            XWPFRun runTem;
+            runTem = WordUtil.setTableCellStyle(cellTem, "1200", ParagraphAlignment.CENTER, "微软雅黑", 9, false);
+        }
+        WordUtil.mergeCellsHorizontal(xTable, dataCount + 1, 0, colTotalCount - 1);
+        //记录合并起始位置
+        Integer t = 1;
+        for (int i : map.keySet()) {
+            int end = t + map.get(i) - 1;
+            WordUtil.mergeCellsVertically(xTable, 1, t, end);
+            t = t + map.get(i);
+        }
+        String templePath = fileUtils.getSavePath(directoryName) + templeName;
+        FileOutputStream os = new FileOutputStream(templePath);
+        doc.write(os);
+        os.close();
+        doc.close();
+        HtmlRenderPolicy htmlRenderPolicy = new HtmlRenderPolicy();
+        // 将bz设置为行循环绑定的数据源的key,即key是bz的value会在模板中的{{bz}}处进行解析
+        ConfigureBuilder configureBuilder = Configure.builder();
+        for (String key : map1.keySet()) {
+            configureBuilder = configureBuilder.bind(key, htmlRenderPolicy);
+        }
+        Configure configure = configureBuilder.build();
+        XWPFTemplate template = XWPFTemplate.compile(templePath, configure).render(map1);
+        String fileName = IdUtil.simpleUUID() + ".docx";
+        String outPath = fileUtils.getSavePath(directoryName) + fileName;
+        template.writeToFile(outPath);
+        template.close();
+        String url = fileUtils.getDirectory2(directoryName) + fileName;
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        ReportDocument reportDocument = new ReportDocument();
+        reportDocument.setReportId(reportId);
+        reportDocument.setFileName(fileName);
+        reportDocument.setFilePath(url);
+        reportDocument.setPersonId(personnelVO.getId());
+        reportDocument.setPersonName(personnelVO.getName());
+        reportDocument.insert();
+        return Response.success(url);
     }
+
+
 }
+

+ 66 - 53
RMS/src/main/java/cn/cslg/report/service/business/FeatureService.java

@@ -62,6 +62,7 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
     private final ProofStrService assoFeatureProofService;
     private final ArgumentsService argumentsService;
     private final AssoPositionFeaturesService assoPositionFeaturesService;
+
     /**
      * @param patentRights(专利权利要求)
      * @return List<PatentRight>
@@ -69,17 +70,22 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
      */
 
     public List<PatentRight> FormatPatentRights(List<PatentRight> patentRights, String patentNo) {
-
-
         StringBuilder stringBuilder = new StringBuilder();
         patentRights.forEach(item -> {
             stringBuilder.append(item.getContent());
         });
+
+        StringBuilder stringBuilder2 = new StringBuilder();
+        patentRights.forEach(item -> {
+            stringBuilder2.append(item.getContentOut());
+        });
+
         PatentRightParams params = new PatentRightParams();
         params.setPatentNo(patentNo);
         params.setPatentId(-1);
         params.setContent(stringBuilder.toString());
-        patentRightUtils.formatPatentRight(params);
+        params.setContentOut(stringBuilder2.toString());
+        patentRights = patentRightUtils.formatPatentRight(params);
         return patentRights;
     }
 
@@ -168,14 +174,17 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
         List<PatentRight> patentRightsOrgin = JSON.parseArray(jsonObject.getString("data"), PatentRight.class);
         //给权要进行格式更改
         List<PatentRight> patentRights = FormatPatentRights(patentRightsOrgin, patentNo);
-        List<Integer> partRightIds = new ArrayList<>();
+        //List<Integer> partRightIds = new ArrayList<>();  //权要ids
+        List<Integer> partRightSorts = new ArrayList<>();  //权要sorts
         List<String> flags = new ArrayList<>();
         // 当splitType=0仅拆解主权要
         if (splitType.equals(0)) {
-            partRightIds = patentRights.stream().filter(item -> item.getType().equals(1)).map(PatentRight::getId).collect(Collectors.toList());
+            //partRightIds = patentRights.stream().filter(item -> item.getType().equals(1)).map(PatentRight::getId).collect(Collectors.toList());
+            partRightSorts = patentRights.stream().filter(item -> item.getType().equals(1)).map(PatentRight::getSort).collect(Collectors.toList());
         }// 当splitType=1拆解全部权要
         else if (splitType.equals(1)) {
-            partRightIds = patentRights.stream().map(PatentRight::getId).collect(Collectors.toList());
+            //partRightIds = patentRights.stream().map(PatentRight::getId).collect(Collectors.toList());
+            partRightSorts = patentRights.stream().map(PatentRight::getSort).collect(Collectors.toList());
         }
         //当splitBy=0时仅仅根据“,”拆解
         if (splitBy == 0) {
@@ -236,7 +245,7 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
                 List<String> contentOuts = Arrays.asList(patentRights.get(i).getContentOut());
                 List<String> contents = Arrays.asList(patentRights.get(i).getContent());
                 //如果是需要拆解的权要
-                if (partRightIds.contains(patentRights.get(i).getId())) {
+                if (partRightSorts.contains(patentRights.get(i).getSort())) {
                     //获得权要的译文并且拆解
                     contentOuts = this.splitStringByFlags(patentRights.get(i).getContentOut(), flags);
                     //获得权要的原文并且拆解
@@ -486,9 +495,11 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
             // 根据关联信息获得对比记录ID
             List<Integer> recordsId = assoRecordsFeatures.stream().map(AssoRecordsFeature::getRecordsId).collect(Collectors.toList());
             //根据对比记录ID获得对比记录信息
-            LambdaQueryWrapper<CompareRecords> queryWrapper2 = new LambdaQueryWrapper<>();
-            queryWrapper2.in(CompareRecords::getId, recordsId);
-            compareRecords = compareRecordsService.list(queryWrapper2);
+            if (recordsId != null && recordsId.size() > 0) {
+                LambdaQueryWrapper<CompareRecords> queryWrapper2 = new LambdaQueryWrapper<>();
+                queryWrapper2.in(CompareRecords::getId, recordsId);
+                compareRecords = compareRecordsService.list(queryWrapper2);
+            }
         }
         //装载信息
         List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
@@ -571,6 +582,7 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
 
     /**
      * 添加单个特征
+     *
      * @param featuresDTO
      * @return
      * @throws IOException
@@ -591,7 +603,7 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
         featuresIn.setFeatureStr(featuresDTO.getContent());
         featuresIn.setPosition(featuresDTO.getPosition());
         checkReFeaturesDTO.setFeatures(Arrays.asList(featuresIn));
-        if(checkReFeaturesDTO.getFeatures().get(0).getPosition()==null) {
+        if (checkReFeaturesDTO.getFeatures().get(0).getPosition() == null) {
             //检查权要是否有此特征
             checkReFeaturesDTO = this.getFeaturePosition(checkReFeaturesDTO, patentNo);
             if (checkReFeaturesDTO == null) {
@@ -612,7 +624,7 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
         if (featuresList == null || featuresList.size() == 0) {
             biggestSort = 1;
         } else {
-            biggestSort = featuresList.get(0).getFeaturesOrder()+1;
+            biggestSort = featuresList.get(0).getFeaturesOrder() + 1;
         }
         Features features = new Features();
         features.setContent(featuresDTO.getContent());
@@ -648,15 +660,15 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
         }
         //获得已经保存的特征
         List<QueryAllFeaturesVO> queryAllFeaturesVOS = featureMapper.queryAllFeatures(checkReFeaturesDTO.getReportId(), checkReFeaturesDTO.getRightSort());
-        if (indexs.size() == 0||(indexs.size()==1&&indexs.get(0).equals(-1))) {
+        if (indexs.size() == 0 || (indexs.size() == 1 && indexs.get(0).equals(-1))) {
             return null;
         }
         //遍历寻找未选择的特征
-        for (Integer item :indexs){
+        for (Integer item : indexs) {
             QueryAllFeaturesVO queryAllFeaturesVO = queryAllFeaturesVOS.stream().filter(tem -> tem.getFeatureStr().equals(featureStr) && tem.getPosition().equals(item)).findFirst().orElse(null);
-            if (queryAllFeaturesVO == null&&item!=-1) {
+            if (queryAllFeaturesVO == null && item != -1) {
                 checkReFeaturesDTO.getFeatures().get(0).setPosition(item);
-                break ;
+                break;
             }
         }
         return checkReFeaturesDTO;
@@ -676,63 +688,64 @@ public class FeatureService extends ServiceImpl<FeatureMapper, Features> {
 
     /**
      * 添加单个特征
+     *
      * @param featuresDTO
      * @return
      * @throws IOException
      */
     @Transactional(rollbackFor = Exception.class)
     public String deleteSingleFeature(Integer featureId) throws IOException {
-        if(featureId==null){
-return Response.error("请选择特征");
+        if (featureId == null) {
+            return Response.error("请选择特征");
         }
         //检查陈述意见是否有关联的特征
-        LambdaQueryWrapper<Arguments> argumentsWrapper=new LambdaQueryWrapper<>();
-        argumentsWrapper.eq(Arguments::getFeatureId,featureId);
-        List<Arguments> arguments =argumentsService.list(argumentsWrapper);
-        if(arguments.size()>0){
+        LambdaQueryWrapper<Arguments> argumentsWrapper = new LambdaQueryWrapper<>();
+        argumentsWrapper.eq(Arguments::getFeatureId, featureId);
+        List<Arguments> arguments = argumentsService.list(argumentsWrapper);
+        if (arguments.size() > 0) {
             return Response.error("此特征和陈述意见有关联");
         }
-        LambdaQueryWrapper<ProofStr> wrapper =new LambdaQueryWrapper<>();
-        wrapper.eq(ProofStr::getFeatureId,featureId);
+        LambdaQueryWrapper<ProofStr> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ProofStr::getFeatureId, featureId);
         assoFeatureProofService.remove(wrapper);
-        LambdaQueryWrapper<AssoPositionFeatures> wrapper1 =new LambdaQueryWrapper<>();
-        wrapper1.eq(AssoPositionFeatures::getFeaturesID,featureId);
+        LambdaQueryWrapper<AssoPositionFeatures> wrapper1 = new LambdaQueryWrapper<>();
+        wrapper1.eq(AssoPositionFeatures::getFeaturesID, featureId);
         assoPositionFeaturesService.remove(wrapper1);
         this.removeById(featureId);
         return Response.success();
     }
 
- //获得特征列表
-    public String getFeatureList(Integer reportId,Integer rightSort){
-        List<Map<String,Object>> mapList =new ArrayList<>();
-        if(reportId==null||rightSort==null){
+    //获得特征列表
+    public String getFeatureList(Integer reportId, Integer rightSort) {
+        List<Map<String, Object>> mapList = new ArrayList<>();
+        if (reportId == null || rightSort == null) {
             return Response.error("请输入报告id和权要序号");
         }
-        Report report =reportService.getById(reportId);
-        LambdaQueryWrapper<Features> queryWrapper =new LambdaQueryWrapper<>();
-        queryWrapper.eq(Features::getRightId,rightSort)
-                .eq(Features::getReportId,reportId)
-                .eq(Features::getSignPatentNo,report.getSignPatentNo())
+        Report report = reportService.getById(reportId);
+        LambdaQueryWrapper<Features> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Features::getRightId, rightSort)
+                .eq(Features::getReportId, reportId)
+                .eq(Features::getSignPatentNo, report.getSignPatentNo())
                 .orderByAsc(Features::getFeaturesOrder);
-        List<Features> features =this.list(queryWrapper);
+        List<Features> features = this.list(queryWrapper);
         //过滤获得特征id
-        List<Integer> ids =features.stream().map(Features::getId).collect(Collectors.toList());
-        List<AssoPositionFeatures> assoPositionFeatures =new ArrayList<>();
-        if(ids.size()>0){
-            LambdaQueryWrapper<AssoPositionFeatures> queryWrapper1 =new LambdaQueryWrapper<>();
-            queryWrapper1.in(AssoPositionFeatures::getFeaturesID,ids);
-            assoPositionFeatures=  assoPositionFeaturesService.list(queryWrapper1);
-
-        }
-            for(Features item:features) {
-            AssoPositionFeatures assoPositionFeature =    assoPositionFeatures.stream().filter(tem->tem.getFeaturesID().equals(item.getId())).findFirst().orElse(new AssoPositionFeatures());
-                Map<String, Object> map = new HashMap<>();
-                map.put("featureId", item.getId());
-                map.put("content", item.getContent());
-                map.put("featureName", "特征" + item.getFeaturesOrder());
-                map.put("position",assoPositionFeature.getPosition());
-                mapList.add(map);
-            }
+        List<Integer> ids = features.stream().map(Features::getId).collect(Collectors.toList());
+        List<AssoPositionFeatures> assoPositionFeatures = new ArrayList<>();
+        if (ids.size() > 0) {
+            LambdaQueryWrapper<AssoPositionFeatures> queryWrapper1 = new LambdaQueryWrapper<>();
+            queryWrapper1.in(AssoPositionFeatures::getFeaturesID, ids);
+            assoPositionFeatures = assoPositionFeaturesService.list(queryWrapper1);
+
+        }
+        for (Features item : features) {
+            AssoPositionFeatures assoPositionFeature = assoPositionFeatures.stream().filter(tem -> tem.getFeaturesID().equals(item.getId())).findFirst().orElse(new AssoPositionFeatures());
+            Map<String, Object> map = new HashMap<>();
+            map.put("featureId", item.getId());
+            map.put("content", item.getContent());
+            map.put("featureName", "特征" + item.getFeaturesOrder());
+            map.put("position", assoPositionFeature.getPosition());
+            mapList.add(map);
+        }
 
         return Response.success(mapList);
     }

+ 134 - 119
RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/ArgumentsService.java

@@ -40,25 +40,26 @@ import java.util.stream.Collectors;
 @Slf4j
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
-    private final ProofService proofService;
     private final LoginUtils loginUtils;
     private final ScratchService scratchService;
     private final AssoArgumentsService assoArgumentsService;
     private final FeatureService featureService;
-    private final AssoFeatureProofService assoFeatureProofService;
+    private final ProofStrService assoFeatureProofService;
     private final ArgumentsService argumentsService;
     private final ReportService reportService;
     private final CompareFilesService compareFilesService;
-
-
+    private final ProofStrService proofStrService;
+    private final AssoProofGroupStrService assoProofGroupStrService;
     /**
      * 添加陈述意见
      *
      * @param argumentsDTO
      */
     public String addArguments(ArgumentsDTO argumentsDTO) throws IOException {
+        Integer proofStrId = argumentsDTO.getProofStrId();
+        Integer argumentId =argumentsDTO.getArgumentId();
         // 检验参数
-        if (argumentsDTO == null || argumentsDTO.getReportId() == null || argumentsDTO.getRightId() == null || argumentsDTO.getProofId() == null) {
+        if (argumentsDTO == null || argumentsDTO.getReportId() == null || argumentsDTO.getRightId() == null || argumentsDTO.getProofId() == null || argumentsDTO.getProofStr() == null) {
             return Response.error("参数不正确");
         }
         if (argumentsDTO.getFeatureId() == null) {
@@ -74,43 +75,53 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
                 argumentsDTO.setFeatureId(Integer.parseInt(response.getData().toString()));
             }
         }
-        AssoFeatureProof assoFeatureProof = new AssoFeatureProof();
-        //根据特征id和文件id查询
-        LambdaQueryWrapper<AssoFeatureProof> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(AssoFeatureProof::getCompareFileId, argumentsDTO.getProofId())
-                .eq(AssoFeatureProof::getFeatureId, argumentsDTO.getFeatureId());
-        List<AssoFeatureProof> assoFeatureProofs = assoFeatureProofService.list(wrapper);
-        //添加相关证据文本
-        if (assoFeatureProofs.size() <= 0) {
-            assoFeatureProof.setFeatureId(argumentsDTO.getFeatureId());
-            assoFeatureProof.setCompareFileId(argumentsDTO.getProofId());
-            assoFeatureProof.setProofStr(argumentsDTO.getProofStr());
-            assoFeatureProof.insert();
-        } else if (assoFeatureProofs.size() > 0) {
-            assoFeatureProof = assoFeatureProofs.get(0);
-            assoFeatureProof.setProofStr(argumentsDTO.getProofStr());
-            assoFeatureProof.updateById();
+        //添加或更新无效证据
+        ProofStr proof = new ProofStr();
+        if (proofStrId == null) {
+            proof.setFeatureId(argumentsDTO.getFeatureId());
+            proof.setCompareFileId(argumentsDTO.getProofId());
+            proof.setProofStr(argumentsDTO.getProofStr());
+            proof.setReportId(argumentsDTO.getReportId());
+            proof.setRightSort(argumentsDTO.getRightId());
+            proof.insert();
+        } else {
+            proof = proofStrService.getById(proofStrId);
+            proof.setProofStr(argumentsDTO.getProofStr());
+            proof.updateById();
         }
-        Integer loginId = loginUtils.getId();
-        //装载陈述意见实体类
-        Arguments arguments = new Arguments();
-        BeanUtils.copyProperties(argumentsDTO, arguments);
-        arguments.setCreateId(loginId);
-        arguments.setRightSort(argumentsDTO.getRightId());
-        arguments.insert();
-        //若划词不为空
-        if (argumentsDTO.getContent() != null) {
-            Scratch scratch = new Scratch();
-            BeanUtils.copyProperties(argumentsDTO, scratch);
-            //根据证据类型获得证据的专利号
-            CompareFiles proof = compareFilesService.getById(arguments.getProofId());
-            String patenNo = proof.getPatentNo();
-            scratch.setPatentNo(patenNo);
-            scratch.setCreateId(loginId);
-            scratch.setArgumentId(arguments.getId());
-            scratch.setReportId(argumentsDTO.getReportId());
-            scratch.setScratchColor(argumentsDTO.getColor());
-            scratch.insert();
+        if (argumentsDTO.getArgumentStr() != null) {
+            Integer loginId = loginUtils.getId();
+            //装载陈述意见实体类
+            Arguments arguments = new Arguments();
+            if ( argumentId== null) {
+                BeanUtils.copyProperties(argumentsDTO, arguments);
+                arguments.setCreateId(loginId);
+                arguments.setProofStrId(proof.getId());
+                arguments.setRightSort(argumentsDTO.getRightId());
+                arguments.insert();
+            } else {
+                arguments = this.getById(argumentId);
+                BeanUtils.copyProperties(argumentsDTO,arguments);
+                arguments.setProofStrId(proof.getId());
+                arguments.setRightSort(argumentsDTO.getRightId());
+                arguments.updateById();
+            }
+
+            //若划词不为空
+            if (argumentsDTO.getContent() != null) {
+                Scratch scratch = new Scratch();
+                BeanUtils.copyProperties(argumentsDTO, scratch);
+                scratch.setId(argumentsDTO.getScratchId());
+                //根据证据类型获得证据的专利号
+                CompareFiles compareFiles = compareFilesService.getById(arguments.getProofId());
+                String patenNo = compareFiles.getPatentNo();
+                scratch.setPatentNo(patenNo);
+                scratch.setCreateId(loginId);
+                scratch.setArgumentId(arguments.getId());
+                scratch.setReportId(argumentsDTO.getReportId());
+                scratch.setScratchColor(argumentsDTO.getColor());
+                scratch.insertOrUpdate();
+            }
         }
         return Response.success("添加成功");
     }
@@ -174,10 +185,10 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
         List<Integer> featureIds = features.stream().map(Features::getId).collect(Collectors.toList());
 
         //根据特征和文件id获得证据
-        LambdaQueryWrapper<AssoFeatureProof> featureProofWrapper = new LambdaQueryWrapper<>();
-        featureProofWrapper.in(AssoFeatureProof::getFeatureId, featureIds)
-                .eq(AssoFeatureProof::getCompareFileId, fileId);
-        List<AssoFeatureProof> assoFeatureProofs = assoFeatureProofService.list(featureProofWrapper);
+        LambdaQueryWrapper<ProofStr> featureProofWrapper = new LambdaQueryWrapper<>();
+        featureProofWrapper.in(ProofStr::getFeatureId, featureIds)
+                .eq(ProofStr::getCompareFileId, fileId);
+        List<ProofStr> proofStrs = assoFeatureProofService.list(featureProofWrapper);
         //查询划词信息
         LambdaQueryWrapper<Scratch> scratchLambdaQueryWrapper = new LambdaQueryWrapper<>();
         scratchLambdaQueryWrapper.eq(Scratch::getPatentNo, patentNo);
@@ -198,10 +209,11 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
             Arguments argument = arguments.stream().filter(tem -> tem.getId().equals(item.getArgumentId())).findFirst().orElse(null);
             BeanUtils.copyProperties(argument, argumentsDetailsVO);
             BeanUtils.copyProperties(item, argumentsDetailsVO);
-            AssoFeatureProof assoFeatureProof = assoFeatureProofs.stream().filter(tem -> tem.getFeatureId().equals(argument.getFeatureId())).findFirst().orElse(null);
-            if (assoFeatureProof != null) {
-                argumentsDetailsVO.setProofStr(assoFeatureProof.getProofStr());
-                argumentsDetailsVO.setProofStrId(assoFeatureProof.getId());
+            argumentsDetailsVO.setRightSort(argument.getRightSort());
+            ProofStr proofStr = proofStrs.stream().filter(tem -> tem.getFeatureId().equals(argument.getFeatureId())).findFirst().orElse(null);
+            if (proofStr != null) {
+                argumentsDetailsVO.setProofStr(proofStr.getProofStr());
+                argumentsDetailsVO.setProofStrId(proofStr.getId());
             }
             argumentsDetailsVOS.add(argumentsDetailsVO);
         }
@@ -215,6 +227,7 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
      * @return
      */
     public String updateArgument(ArgumentsDetailsDTO argumentsDTO) {
+        Integer proofStrId = argumentsDTO.getProofStrId();
         // 检验参数
         if (argumentsDTO == null || argumentsDTO.getReportId() == null || argumentsDTO.getFeatureId() == null || argumentsDTO.getRightSort() == null || argumentsDTO.getProofId() == null) {
             return Response.error("参数不正确");
@@ -228,34 +241,20 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
         scratch.setScratchType(argumentsDTO.getScratchType());
         scratch.updateById();
         //根据陈述意见id更新陈述意见
-        Arguments arguments = this.getById(scratch.getArgumentId());
-        arguments.setArgumentStr(argumentsDTO.getArgumentStr());
-        arguments.setRightSort(argumentsDTO.getRightSort());
-        arguments.setFeatureId(argumentsDTO.getFeatureId());
-        arguments.updateById();
-        //装载并更新证据
-        //根据特征和文件id获得证据
-        LambdaQueryWrapper<AssoFeatureProof> featureProofWrapper = new LambdaQueryWrapper<>();
-        featureProofWrapper.in(AssoFeatureProof::getFeatureId, argumentsDTO.getFeatureId())
-                .eq(AssoFeatureProof::getCompareFileId, arguments.getProofId());
-        List<AssoFeatureProof> assoFeatureProofs = assoFeatureProofService.list(featureProofWrapper);
-        if (assoFeatureProofs.size() == 0) {
-            AssoFeatureProof assoFeatureProof = new AssoFeatureProof();
-            assoFeatureProof.setFeatureId(argumentsDTO.getFeatureId());
-            assoFeatureProof.setFeatureId(arguments.getProofId());
-            assoFeatureProof.setProofStr(argumentsDTO.getProofStr());
-            assoFeatureProof.insert();
-        } else {
-            AssoFeatureProof assoFeatureProof = assoFeatureProofs.get(0);
-            assoFeatureProof.setProofStr(argumentsDTO.getProofStr());
-            assoFeatureProof.updateById();
-
+        if (scratchId != null) {
+            Arguments arguments = this.getById(scratch.getArgumentId());
+            arguments.setArgumentStr(argumentsDTO.getArgumentStr());
+            arguments.setRightSort(argumentsDTO.getRightSort());
+            arguments.setFeatureId(argumentsDTO.getFeatureId());
+            arguments.updateById();
         }
 
+        ProofStr proofStr = proofStrService.getById(proofStrId);
+        proofStr.setProofStr(argumentsDTO.getProofStr());
+        proofStr.updateById();
         return Response.success("修改成功");
     }
 
-
     /**
      * 根据文件id和权要sort查询列表
      *
@@ -271,14 +270,13 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
         List<Features> features = featureService.list(wrapper);
         List<Integer> featureIds = features.stream().map(Features::getId).collect(Collectors.toList());
         //根据特征和文件id获得证据
-        LambdaQueryWrapper<AssoFeatureProof> featureProofWrapper = new LambdaQueryWrapper<>();
-        featureProofWrapper.in(AssoFeatureProof::getFeatureId, featureIds)
-                .eq(AssoFeatureProof::getCompareFileId, fileId);
-        List<AssoFeatureProof> assoFeatureProofs = assoFeatureProofService.list(featureProofWrapper);
+        LambdaQueryWrapper<ProofStr> featureProofWrapper = new LambdaQueryWrapper<>();
+        featureProofWrapper.in(ProofStr::getFeatureId, featureIds)
+                .eq(ProofStr::getCompareFileId, fileId);
+        List<ProofStr> proofStrs = assoFeatureProofService.list(featureProofWrapper);
         //遍历装载特征和相关证据到实体类
-        assoFeatureProofs.forEach(item -> {
+        proofStrs.forEach(item -> {
             Features features1 = features.stream().filter(tem -> tem.getId().equals(item.getFeatureId())).findFirst().orElse(null);
-
             ArgumentsListVO argumentsListVO = new ArgumentsListVO();
             //装载权要
             argumentsListVO.setRightSort(patentRight.getSort());
@@ -288,32 +286,35 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
             argumentsListVO.setFeatureId(features1.getId());
             argumentsListVO.setFeatureContent(features1.getContent());
             argumentsListVO.setFeatureName("特征" + features1.getFeaturesOrder());
-
             argumentsListVO.setProofStrId(item.getId());
             argumentsListVO.setProofStr(item.getProofStr());
             argumentsListVO.setProofId(fileId);
             argumentsListVOS.add(argumentsListVO);
         });
 
+        List<Integer> argumentsIds = proofStrs.stream().map(ProofStr::getId).collect(Collectors.toList());
+        List<Arguments> arguments = new ArrayList<>();
         //根据特征和证据id获得陈述意见
-        List<Arguments> arguments = this.baseMapper.getArguments(argumentsListVOS);
+        if (argumentsIds.size() > 0) {
+            LambdaQueryWrapper<Arguments> argumentsWrapper = new LambdaQueryWrapper<>();
+            argumentsWrapper.in(Arguments::getProofStrId, argumentsIds);
+            arguments = this.list(argumentsWrapper);
+        }
+//装载陈述意见
+        for (ArgumentsListVO item:argumentsListVOS){
+            item.setArguments(new ArrayList<>());
+            List<Arguments> temArguments = arguments.stream().filter(tem -> item.getProofStrId().equals(tem.getProofStrId())).collect(Collectors.toList());
+            temArguments.forEach(tem -> {
+                ArgumentsListVO.ArgumentIn argumentIn = new ArgumentsListVO.ArgumentIn();
+                argumentIn.setArgumentStr(tem.getArgumentStr());
+                argumentIn.setId(tem.getId());
+                item.getArguments().add(argumentIn);
+            });
+        }
 
-        //装载陈述意见
-        argumentsListVOS.forEach(
-                item -> {
-                    item.setArguments(new ArrayList<>());
-                    List<Arguments> temArguments = arguments.stream().filter(tem -> item.getFeatureId().equals(tem.getFeatureId())).collect(Collectors.toList());
-                    temArguments.forEach(tem -> {
-                        ArgumentsListVO.ArgumentIn argumentIn = new ArgumentsListVO.ArgumentIn();
-                        argumentIn.setArgumentStr(tem.getArgumentStr());
-                        argumentIn.setId(tem.getId());
-                        item.getArguments().add(argumentIn);
-                    });
 
-                }
-        );
-        return argumentsListVOS;
 
+        return argumentsListVOS;
     }
 
     /**
@@ -348,7 +349,7 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
         }
 //        Integer createId = loginUtils.getId();
         Integer createId = 1;
-        List<AssoFeatureProof> assoFeatureProofs = new ArrayList<>();
+        List<ProofStr> proofStrs = new ArrayList<>();
         List<Arguments> arguments = new ArrayList<>();
         List<Integer> featureIds = new ArrayList<>();
         Integer proofId = argumentsListDTOS.get(0).getProofId();
@@ -356,12 +357,12 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
             //获得特征ids
             featureIds.add(item.getFeatureId());
             //装载无效证据
-            AssoFeatureProof assoFeatureProof = new AssoFeatureProof();
-            assoFeatureProof.setCompareFileId(item.getProofId());
-            assoFeatureProof.setId(item.getProofStrId());
-            assoFeatureProof.setProofStr(item.getProofStr());
-            assoFeatureProof.setFeatureId(item.getFeatureId());
-            assoFeatureProofs.add(assoFeatureProof);
+            ProofStr proofStr = new ProofStr();
+            proofStr.setCompareFileId(item.getProofId());
+            proofStr.setId(item.getProofStrId());
+            proofStr.setProofStr(item.getProofStr());
+            proofStr.setFeatureId(item.getFeatureId());
+            proofStrs.add(proofStr);
             //装载陈述意见
             List<ArgumentsListDTO.ArgumentIn> argumentIns = item.getArguments();
             argumentIns.forEach(tem -> {
@@ -377,7 +378,7 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
             });
         });
         this.deleteOrUpdateArguments(arguments, featureIds, proofId);
-        if (!this.deleteOrUpdateProofStr(assoFeatureProofs, featureIds, proofId)) {
+        if (!this.deleteOrUpdateProofStr(proofStrs, featureIds, proofId)) {
             return Response.error("同一特征有多个证据");
         }
 
@@ -411,44 +412,58 @@ public class ArgumentsService extends ServiceImpl<ArgumentsMapper, Arguments> {
     /**
      * 批量删除或者更新证据详情
      *
-     * @param assoFeatureProofs
+     * @param proofStrs
      * @param featureIds
      * @param proofId
      * @return
      */
-    public boolean deleteOrUpdateProofStr(List<AssoFeatureProof> assoFeatureProofs, List<Integer> featureIds, Integer proofId) {
-        LambdaQueryWrapper<AssoFeatureProof> wrapper = new LambdaQueryWrapper<>();
-        wrapper.in(AssoFeatureProof::getFeatureId, featureIds)
-                .eq(AssoFeatureProof::getCompareFileId, proofId);
-        List<AssoFeatureProof> dbAssoFeatureProof = assoFeatureProofService.list(wrapper);
+    public boolean deleteOrUpdateProofStr(List<ProofStr> proofStrs, List<Integer> featureIds, Integer proofId) {
+        LambdaQueryWrapper<ProofStr> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(ProofStr::getFeatureId, featureIds)
+                .eq(ProofStr::getCompareFileId, proofId);
+        List<ProofStr> dbProofStr = assoFeatureProofService.list(wrapper);
         //作差获得要删除的相关证据
-        List<Integer> dbIds = dbAssoFeatureProof.stream().map(AssoFeatureProof::getId).collect(Collectors.toList());
-        List<Integer> ids = assoFeatureProofs.stream().map(AssoFeatureProof::getId).collect(Collectors.toList());
+        List<Integer> dbIds = dbProofStr.stream().map(ProofStr::getId).collect(Collectors.toList());
+        List<Integer> ids = proofStrs.stream().map(ProofStr::getId).collect(Collectors.toList());
         List<Integer> removeIds = dbIds;
         removeIds.removeAll(ids);
         //检查一个特征是否有多个陈述证据
-        for (AssoFeatureProof item : assoFeatureProofs) {
+        for (ProofStr item : proofStrs) {
             {
                 //查询是否存在多个相同
-                List<AssoFeatureProof> assoFeatureProofs1 = assoFeatureProofs.stream().filter(tem ->
+                List<ProofStr> proofs1Str = proofStrs.stream().filter(tem ->
                         item.getFeatureId().equals(tem.getFeatureId())
                                 && item.getCompareFileId().equals(tem.getCompareFileId())).collect(Collectors.toList());
-                if (assoFeatureProofs1.size() > 1) {
+                if (proofs1Str.size() > 1) {
                     return false;
                 }
             }
         }
         //删除陈述意见
         assoFeatureProofService.removeByIds(removeIds);
-        assoFeatureProofService.saveOrUpdateBatch(assoFeatureProofs);
+        assoFeatureProofService.saveOrUpdateBatch(proofStrs);
 
         return true;
     }
+    public boolean deleteProofStr(List<Integer> ids ) {
+        LambdaQueryWrapper<ProofStr> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(ProofStr::getId,ids);
+        List<ProofStr> proofStrs =proofStrService.list(wrapper);
+        //根据无效理由id查询陈述意见
+        LambdaQueryWrapper<Arguments> argumentsLambdaQueryWrapper =new LambdaQueryWrapper<>();
+        argumentsLambdaQueryWrapper.in(Arguments::getProofStrId,ids);
+        List<Arguments> arguments =this.list(argumentsLambdaQueryWrapper);
+        List<Integer> argumentIds =arguments.stream().map(Arguments::getId).collect(Collectors.toList());
+        if(argumentIds.size()!=0){
+            this.deleteArguments(argumentIds);
+        }
+        //删除
+        LambdaQueryWrapper<AssoProofGroupStr> wrapper1 =new LambdaQueryWrapper<>();
+        wrapper1.in(AssoProofGroupStr::getProofStrId,ids);
+        assoProofGroupStrService.remove(wrapper1);
+        proofStrService.removeByIds(ids);
+        return true;
+    }
 
 
-    public static void main(String[] args) {
-        String a = Response.error();
-        Response av = JSONObject.parseObject(a, Response.class);
-        System.out.println(av.getCode());
-    }
 }

+ 2 - 2
RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/InvalidReasonFieldValueService.java

@@ -36,10 +36,11 @@ for (InvalidReasonFieldValueDTO fieldDTO:invalidReasonFieldValueDTOs){
             .filter(item->item.getInvalidReasonId().equals(fieldDTO.getInvalidReasonId())&&item.getInvalidReasonFieldId().equals(fieldDTO.getFieldId()))
             .findFirst().orElse(new InvalidReasonFieldValue());
     if(invalidReasonFieldValue.getId()==null){
-        invalidReasonFieldValue.setFieldValue(fieldDTO.getFieldValue());
         invalidReasonFieldValue.setInvalidReasonId(fieldDTO.getInvalidReasonId());
         invalidReasonFieldValue.setInvalidReasonFieldId(fieldDTO.getFieldId());
     }
+    invalidReasonFieldValue.setFieldValue(fieldDTO.getFieldValue());
+
     addValues.add(invalidReasonFieldValue);
 }
 this.saveOrUpdateBatch(addValues);
@@ -52,7 +53,6 @@ this.saveOrUpdateBatch(addValues);
         //根据无效理由id和栏位id查询
         if(invalidReasonFieldValueDTOs==null||invalidReasonFieldValueDTOs.size()==0){
             return false;
-
         }
         List<InvalidReasonFieldValue> invalidReasonFieldValues =this.baseMapper.getValues(invalidReasonFieldValueDTOs);
         List<InvalidReasonFieldValue> addValues =new ArrayList<>();

+ 39 - 10
RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/InvalidReasonService.java

@@ -49,7 +49,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
     private final LoginUtils loginUtils;
     private final CompareFilesService compareFilesService;
     private final InvalidReasonFieldValueService invalidReasonFieldValueService;
-
+    private final AssoProofGroupStrService assoProofGroupStrService;
     /**
      * 判断特征是否有重复的方法
      *
@@ -270,6 +270,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
         if (invalidName.equals(1)) {//若类型为1,则为说明书公开不充分,涉及内容为说明书,手动输入无效证据
             BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
             //说明书公开不充分入表
+            invalidReason.setContent(-1);
             invalidReason.updateById();
         } else if (invalidName.equals(0)) {//若类型为0,则为“权利要求不清楚”,需要选择涉及内容(content)并输入相关证据(proofStr)
             if (invalidReasonDTO.getProofStr() != null && invalidReasonDTO.getProofStr() != "") {
@@ -342,18 +343,36 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
                 //复制DTO类字段到InvalidReason实体类并保存入库
                 BeanUtils.copyProperties(invalidReasonDTO, invalidReason);
                 invalidReason.updateById();
-                //删除无效理由的证据组合
-                proofGroupService.deleteProofGroupByInvalid(invalidReason.getId());
                 //根据proofGroups保存proofGroup
                 List<ProofGroupDTO> proofGroupDTOS = new ArrayList<>();
+                List<Integer> noDeleteIds = new ArrayList<>();
                 for (InvalidReasonDTO.ProofGroupIn proofGroupIn : invalidReasonDTO.getProofGroups()) {
-                    ProofGroupDTO proofGroupDTO = new ProofGroupDTO();
-                    proofGroupDTO.setInvalidReasonId(invalidReason.getId());//无效理由id
-                    proofGroupDTO.setDescription(proofGroupIn.getDescription());//描述
-                    proofGroupDTO.setArgumentStr(proofGroupIn.getArgumentStr());//陈述意见
-                    proofGroupDTO.setGroupDetails(proofGroupIn.getGroupDetails());//证据ids
-                    proofGroupDTOS.add(proofGroupDTO);
+                    if (proofGroupIn.getId() != null) {
+                        noDeleteIds.add(proofGroupIn.getId());
+                    } else {
+                        ProofGroupDTO proofGroupDTO = new ProofGroupDTO();
+                        proofGroupDTO.setInvalidReasonId(invalidReason.getId());//无效理由id
+                        proofGroupDTO.setDescription(proofGroupIn.getDescription());//描述
+                        proofGroupDTO.setArgumentStr(proofGroupIn.getArgumentStr());//陈述意见
+                        proofGroupDTO.setGroupDetails(proofGroupIn.getGroupDetails());//证据ids
+                        proofGroupDTOS.add(proofGroupDTO);
+                    }
                 }
+                //删除无效理由的证据组合
+                    LambdaQueryWrapper<ProofGroup> lambdaQueryWrapper =new LambdaQueryWrapper<>();
+                    lambdaQueryWrapper.eq(ProofGroup::getInvalidReasonId,invalidReason.getId());
+                if(noDeleteIds.size()!=0) {
+                    lambdaQueryWrapper.notIn(ProofGroup::getId,noDeleteIds);
+                }
+                    List<ProofGroup> proofGroups =proofGroupService.list(lambdaQueryWrapper);
+                    List<Integer> deleteIds =proofGroups.stream().map(ProofGroup::getId).collect(Collectors.toList());
+                    if(deleteIds.size()!=0) {
+                        LambdaQueryWrapper<AssoProofGroupStr> queryWrapper = new LambdaQueryWrapper<>();
+                        queryWrapper.in(AssoProofGroupStr::getProofGroupId, deleteIds);
+                        assoProofGroupStrService.remove(queryWrapper);
+                        proofGroupService.removeByIds(deleteIds);
+                    }
+
                 proofGroupService.addProofGroup(proofGroupDTOS);
             } else {
                 return Response.error("证据组合不能为空");
@@ -420,7 +439,6 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
         //由于查出来的proofGroups中没有proofIds这个字段,于是采用下面的方法装载成proofGroupVOS
         List<QueryInvalidReasonVO.proofGroupIn> proofGroupIns = this.loadProofGroupVO(proofGroups);
         //根据无效理由id查询自定义字段
-
         //根据无效理由id查询自定义字段值
         LambdaQueryWrapper<InvalidReasonFieldValue> wrapper = new LambdaQueryWrapper<>();
         wrapper.in(InvalidReasonFieldValue::getInvalidReasonId, invalidReasonsIds);
@@ -462,6 +480,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
         for (ProofGroup proofGroup : proofGroups) {
             QueryInvalidReasonVO.proofGroupIn proofGroupIn = new QueryInvalidReasonVO.proofGroupIn();
             //基本信息装载
+            proofGroupIn.setId(proofGroup.getId());
             proofGroupIn.setInvalidReasonId(proofGroup.getInvalidReasonId());
             proofGroupIn.setDescription(proofGroup.getDescription());
             proofGroupIn.setArgument_str(proofGroup.getArgumentStr());
@@ -481,8 +500,17 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
                 proof.setPatentNo(item.getPatentNo());
                 proof.setFileId(item.getFileId());
                 proof.setFileType(item.getFileType());
+                proof.setFileName(item.getFileName());
                 proofIns.add(proof);
             });
+            //公知常识添加·
+            if(proofIds.contains(0)){
+                QueryInvalidReasonVO.proofIn proof = new QueryInvalidReasonVO.proofIn();
+                proof.setId(0);
+                proof.setSort(proofIds.size()+1);
+                proof.setFileName("公知常识");
+                proofIns.add(proof);
+            }
             proofGroupIn.setProofIds(proofIds);
             proofIns.sort(Comparator.comparing(QueryInvalidReasonVO.proofIn::getSort));
             proofGroupIn.setProofs(proofIns);
@@ -638,6 +666,7 @@ public class InvalidReasonService extends ServiceImpl<InvalidReasonMapper, Inval
         invalidReason.updateById();
         return Response.success("修改成功");
     }
+
     /**
      * 导出无效理由所需的查询
      *

+ 9 - 10
RMS/src/main/java/cn/cslg/report/service/business/InvalidReReport/ProofGroupService.java

@@ -72,13 +72,15 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
                     assoProofGroup.setCreateId(personnelVO.getId());
                     assoProofGroups.add(assoProofGroup);
                     List<Integer> proofStrIds = proofGroupDTO.getGroupDetails().get(i).getProofStrIds();
-                    proofStrIds.forEach(item -> {
-                        AssoProofGroupStr assoProofGroupStr = new AssoProofGroupStr();
-                        assoProofGroupStr.setProofGroupId(proofGroup.getId());
-                        assoProofGroupStr.setProofStrId(item);
-                        assoProofGroupStr.setCompareFileId(compareFileId);
-                        assoProofGroupStrs.add(assoProofGroupStr);
-                    });
+                    if(proofStrIds!=null) {
+                        proofStrIds.forEach(item -> {
+                            AssoProofGroupStr assoProofGroupStr = new AssoProofGroupStr();
+                            assoProofGroupStr.setProofGroupId(proofGroup.getId());
+                            assoProofGroupStr.setProofStrId(item);
+                            assoProofGroupStr.setCompareFileId(compareFileId);
+                            assoProofGroupStrs.add(assoProofGroupStr);
+                        });
+                    }
                 }
                 assoProofGroupService.saveBatch(assoProofGroups);
                 assoProofGroupStrService.saveBatch(assoProofGroupStrs);
@@ -88,7 +90,6 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
         }
     }
 
-
     /**
      * 批量删除证据组合
      *
@@ -126,8 +127,6 @@ public class ProofGroupService extends ServiceImpl<ProofGroupMapper, ProofGroup>
             LambdaQueryWrapper<AssoProofGroup> queryWrapper = new LambdaQueryWrapper<>();
             queryWrapper.in(AssoProofGroup::getGroupId, ids);
             assoProofGroupService.remove(queryWrapper);
-            //根据ids批量删除证据组合
-            this.removeByIds(ids);
             //根据证据组合id批量删除证据组合-无效证据关联
             LambdaQueryWrapper<AssoProofGroupStr> strWrapper = new LambdaQueryWrapper<>();
             strWrapper.in(AssoProofGroupStr::getProofGroupId, ids);

+ 1 - 1
RMS/src/main/resources/mapper/InvalidReasonFieldValueMapper.xml

@@ -15,7 +15,7 @@
             resultType="cn.cslg.report.common.model.dto.invalidReReport.InvalidReasonFieldValueDTO"
             parameterType="java.lang.Integer">
         select a.INVALID_REASON_ID as invalidReasonId ,a.INVALID_REASON_FIELD_ID as fieldId ,a.FIELD_VALUE as
-        fieldValue,b.FIELD_KEY as fieldKey  from RMS_TEST.INVALID_REASON_FIELD_VALUE a left join RMS_TEST.INVALID_REASON_FIELD b on
+        fieldValue,b.FIELD_KEY as fieldKey  from INVALID_REASON_FIELD_VALUE a left join INVALID_REASON_FIELD b on
         a.INVALID_REASON_FIELD_ID=b.ID
         <where>
             a.INVALID_REASON_ID in

+ 1 - 2
RMS/target/classes/application.yml

@@ -13,7 +13,6 @@ spring:
   thymeleaf:
     cache: false
     mode: HTML5
-
   mvc:
     pathmatch:
       matching-strategy: ant_path_matcher
@@ -27,7 +26,7 @@ spring:
       max-file-size: 1000MB
       max-request-size: 1000MB
   profiles:
-    active: dev
+    active: prodNetIn
   jackson:
     default-property-inclusion: non_null
     serialization:

BIN
RMS/target/classes/cn/cslg/report/common/GlobalException.class


BIN
RMS/target/classes/cn/cslg/report/common/model/vo/SplitVO.class


BIN
RMS/target/classes/cn/cslg/report/common/model/vo/TaskVO$personPatents.class


BIN
RMS/target/classes/cn/cslg/report/common/model/vo/TaskVO.class


BIN
RMS/target/classes/cn/cslg/report/common/utils/Response.class


BIN
RMS/target/classes/cn/cslg/report/controller/CompareController.class


BIN
RMS/target/classes/cn/cslg/report/controller/CompareFilesController.class


BIN
RMS/target/classes/cn/cslg/report/controller/CompareScenariosController.class


BIN
RMS/target/classes/cn/cslg/report/controller/DownloadController.class


BIN
RMS/target/classes/cn/cslg/report/controller/FeatureController.class


BIN
RMS/target/classes/cn/cslg/report/controller/InvalidRecordController.class


BIN
RMS/target/classes/cn/cslg/report/controller/ReportController.class


BIN
RMS/target/classes/cn/cslg/report/controller/ReportFileController.class


BIN
RMS/target/classes/cn/cslg/report/entity/CompareFiles.class


BIN
RMS/target/classes/cn/cslg/report/entity/Features.class


BIN
RMS/target/classes/cn/cslg/report/entity/Report.class


BIN
RMS/target/classes/cn/cslg/report/mapper/FeatureMapper.class


BIN
RMS/target/classes/cn/cslg/report/service/BaseService.class


BIN
RMS/target/classes/cn/cslg/report/service/business/CompareFilesService.class


BIN
RMS/target/classes/cn/cslg/report/service/business/CompareMessageService.class


BIN
RMS/target/classes/cn/cslg/report/service/business/CompareScenariosService.class


BIN
RMS/target/classes/cn/cslg/report/service/business/FeatureService.class


BIN
RMS/target/classes/cn/cslg/report/service/business/ReportFileService.class


BIN
RMS/target/classes/cn/cslg/report/service/business/ReportService.class


BIN
RMS/target/classes/cn/cslg/report/service/business/TaskService.class


+ 10 - 1
RMS/target/classes/mapper/FeatureMapper.xml

@@ -14,6 +14,15 @@
         </where>
     </select>
     <select id="find" resultType="cn.cslg.report.entity.Features">
-        select * from FEATURES where ID=#{id}
+        select * from FEATURES where ID = #{id}
+    </select>
+
+    <resultMap id="queryAllFeaturesResultMap" type="cn.cslg.report.common.model.vo.invalidReReport.QueryAllFeaturesVO">
+        <result column="POSITION" property="position"/>
+        <result column="CONTENT" property="featureStr"/>
+    </resultMap>
+
+    <select id="queryAllFeatures" resultMap="queryAllFeaturesResultMap">
+        SELECT a.CONTENT, b.POSITION FROM FEATURES a LEFT JOIN ASSO_POSITION_FEATURES b ON a.ID = b.FEATURES_ID WHERE REPORT_ID = #{reportId} AND RIGHT_ID = #{rightSort}
     </select>
 </mapper>