Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java
liuyc 2 năm trước cách đây
mục cha
commit
670b5c3814
42 tập tin đã thay đổi với 2249 bổ sung227 xóa
  1. 318 0
      blade-auth/blade-auth.iml
  2. 2 0
      blade-common/src/main/java/org/springblade/common/constant/BusinessConstant.java
  3. 22 0
      blade-common/src/main/java/org/springblade/common/utils/INodeEx.java
  4. 7 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ArchiveFileClient.java
  5. 1 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/utils/MileageUtill.java
  6. 2 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTree.java
  7. 27 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTreeContract.java
  8. 11 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeContractVO2.java
  9. 4 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeVO2.java
  10. 2 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeVO2.java
  11. 227 0
      blade-service-api/blade-user-api/blade-user-api.iml
  12. 65 5
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileAutoController.java
  13. 32 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileController.java
  14. 232 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/utils/FileUtils.java
  15. 51 133
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  16. 11 0
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java
  17. 4 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.java
  18. 26 4
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml
  19. 12 7
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  20. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/IArchiveFileService.java
  21. 7 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/IInformationQueryService.java
  22. 12 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ArchiveFileServiceImpl.java
  23. 25 3
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  24. 0 8
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialDetectionDataServiceImpl.java
  25. 325 0
      blade-service/blade-desk/blade-desk.iml
  26. 22 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java
  27. 23 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeController.java
  28. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java
  29. 8 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  30. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  31. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java
  32. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeService.java
  33. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java
  34. 160 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  35. 36 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java
  36. 58 44
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java
  37. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  38. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  39. 15 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  40. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/utils/FileUtils.java
  41. 157 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/utils/ForestNodeMergerEx.java
  42. 324 0
      blade-service/blade-system/blade-system.iml

+ 318 - 0
blade-auth/blade-auth.iml

@@ -0,0 +1,318 @@
+<?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="Spring" name="Spring">
+      <configuration />
+    </facet>
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+      </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="module" module-name="blade-common" />
+    <orderEntry type="module" module-name="blade-manager-api" />
+    <orderEntry type="module" module-name="blade-business-api" />
+    <orderEntry type="module" module-name="blade-system-api" />
+    <orderEntry type="module" module-name="blade-dict-api" />
+    <orderEntry type="module" module-name="blade-common" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-launch:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-undertow:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-core:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.2.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.xnio:xnio-api:3.8.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.wildfly.common:wildfly-common:1.5.2.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.wildfly.client:wildfly-client-config:1.0.1.Final" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.xnio:xnio-nio:3.8.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.threads:jboss-threads:3.1.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-servlet:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec:2.0.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-websockets-jsr:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:2.0.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.servlet:jakarta.servlet-api:4.0.4" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-ribbon:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-ribbon:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.ribbon:ribbon-transport:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-contexts:0.4.9" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-servo:0.4.9" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: javax.inject:javax.inject:1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty:0.4.9" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-core:2.3.0" level="project" />
+    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-httpclient:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-client:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-core:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: javax.ws.rs:jsr311-api:1.1.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey.contribs:jersey-apache-client4:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.servo:servo-core:0.12.21" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-commons-util:0.3.0" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-loadbalancer:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-statistics:0.1.1" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex:rxjava:1.3.8" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.80" level="project" />
+    <orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.7.22" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.14.0" level="project" />
+    <orderEntry type="library" name="Maven: org.jdom:jdom2:2.0.6" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.2" level="project" />
+    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.5.30" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.7" level="project" />
+    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.7" level="project" />
+    <orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-util:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-db:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-tool:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:30.1.1-jre" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-core:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-api:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-runtime:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-collectionschema:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.8" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.22" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.14.0" level="project" />
+    <orderEntry type="library" name="Maven: com.oracle:ojdbc7:12.2.0.1" level="project" />
+    <orderEntry type="library" name="Maven: org.postgresql:postgresql:42.2.22" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.5.0" level="project" />
+    <orderEntry type="library" name="Maven: com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre8" level="project" />
+    <orderEntry type="library" name="Maven: com.dameng:DmJdbcDriver18:8.1.2.79" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-cloud:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-context:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-auth:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-okhttp:10.12" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-core:10.12" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.3" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.8.0" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.3.72" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.3" level="project" />
+    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:10.12" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-hystrix:10.12" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.archaius:archaius-core:0.7.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-hystrix:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-hystrix:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-ribbon:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-archaius:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-archaius:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: commons-configuration:commons-configuration:1.8" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-core:1.5.18" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-serialization:1.5.18" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.fasterxml.jackson.module:jackson-module-afterburner:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-metrics-event-stream:1.5.18" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-javanica:1.5.18" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex:rxjava-reactive-streams:1.2.1" 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-actuator:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator-autoconfigure:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: de.codecentric:spring-boot-admin-starter-client:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: de.codecentric:spring-boot-admin-client:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-alibaba-commons:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.spring:spring-context-support:1.0.10" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-client:2.0.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpasyncclient:4.1.4" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore-nio:4.4.14" level="project" />
+    <orderEntry type="library" name="Maven: org.reflections:reflections:0.9.11" level="project" />
+    <orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
+    <orderEntry type="library" name="Maven: io.prometheus:simpleclient:0.5.0" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-sentinel:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-transport-simple-http:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-transport-common:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-datasource-extension:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-annotation-aspectj:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjrt:1.9.6" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-circuitbreaker-sentinel:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-reactor-adapter:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-spring-webflux-adapter:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-spring-webmvc-adapter:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-parameter-flow-control:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-cluster-server-default:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-cluster-common-default:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-cluster-client-default:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-alibaba-sentinel-datasource:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-metrics:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.micrometer:micrometer-core:1.6.3" level="project" />
+    <orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.12" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.latencyutils:LatencyUtils:2.0.3" level="project" />
+    <orderEntry type="library" name="Maven: io.micrometer:micrometer-registry-prometheus:1.6.3" level="project" />
+    <orderEntry type="library" name="Maven: io.prometheus:simpleclient_common:0.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-core:1.8.3" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.8" level="project" />
+    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-redis:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-jwt:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-impl:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-api:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-jackson:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: org.redisson:redisson:3.11.6" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: javax.cache:cache-api:1.1.1" level="project" />
+    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.17.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex.rxjava2:rxjava:2.2.21" level="project" />
+    <orderEntry type="library" name="Maven: de.ruedigermoeller:fst:2.57" level="project" />
+    <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.6" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
+    <orderEntry type="library" name="Maven: org.jodd:jodd-bean:5.0.13" level="project" />
+    <orderEntry type="library" name="Maven: org.jodd:jodd-core:5.0.13" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-swagger:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-micro-spring-boot-starter:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-autoconfigure:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-annotations:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-core:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-social:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: me.zhyd.oauth:JustAuth:1.16.5" level="project" />
+    <orderEntry type="library" name="Maven: com.xkcoding.http:simple-http:1.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.14" level="project" />
+    <orderEntry type="module" module-name="blade-user-api" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-cache:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.3.12.RELEASE" level="project" />
+    <orderEntry type="module" module-name="blade-manager-api" />
+    <orderEntry type="module" module-name="blade-business-api" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-mybatis:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-typehandlers-jsr310:1.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-tenant:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:3.3.6" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.1.7" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:2.0.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.3.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.6.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" />
+    <orderEntry type="module" module-name="blade-system-api" />
+    <orderEntry type="module" module-name="blade-dict-api" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-security:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-security:2.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
+    <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.4" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.4" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.12" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security.oauth:spring-security-oauth2:2.3.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:5.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:5.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:5.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-mapper-asl:1.9.13" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.jackson:jackson-core-asl:1.9.13" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.2.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.11" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-jwt:1.0.10.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.59" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.59" level="project" />
+    <orderEntry type="library" name="Maven: com.github.whvcse:easy-captcha:1.6.2" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
+  </component>
+</module>

+ 2 - 0
blade-common/src/main/java/org/springblade/common/constant/BusinessConstant.java

@@ -4,4 +4,6 @@ public interface BusinessConstant {
 
     String APPLICATION_WEATHER_NAME = "blade-business";
 
+    //redis树
+    String CONTRACT_CACHE_WBSTREE = "contract:wbstree:";
 }

+ 22 - 0
blade-common/src/main/java/org/springblade/common/utils/INodeEx.java

@@ -12,6 +12,28 @@ public interface INodeEx<T> extends Serializable {
 
     List<T> getChildren();
 
+    Long getFromId();
+
+    String getAncestors();
+
+    Integer getSort();
+
+    String getTreeSort();
+
+    Long getValue();
+
+    void setId(Long id);
+
+    void setParentId(Long parentId);
+
+    void setFromId(Long fromId);
+
+    void setAncestors(String ancestors);
+
+    void setSort(Integer sort);
+
+    void setTreeSort(String sortTree);
+
     default Boolean getHasChildren() {
         return false;
     }

+ 7 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ArchiveFileClient.java

@@ -54,5 +54,11 @@ public interface ArchiveFileClient {
     List<ArchiveFile> listWrappers(@RequestBody LambdaQueryWrapper<ArchiveFile> in);
 
     @PostMapping(API_PREFIX + "/updateWrappers")
-    boolean updateWrappers(LambdaUpdateWrapper<ArchiveFile> eq);
+    boolean updateWrappers(@RequestBody LambdaUpdateWrapper<ArchiveFile> eq);
+
+    @PostMapping(API_PREFIX + "/removeFile")
+    boolean removeFile(@RequestBody List<Long> toLongList);
+
+    @PostMapping(API_PREFIX + "/getArchiveFileByArchivesId")
+    List<ArchiveFile> getArchiveFileByArchivesId(@RequestParam String archivesIds,@RequestParam String fileIds);
 }

+ 1 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/utils/MileageUtill.java

@@ -1179,7 +1179,7 @@ public class MileageUtill {
         return res;
     }
 
-    public static void main(String[] srt){
+    public static void main1(String[] srt){
         Mileage mm=new Mileage();
         mm.setAngle(30.331496472222224);
         mm.setX(2864425.47798996);

+ 2 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTree.java

@@ -181,8 +181,9 @@ public class ArchiveTree extends BaseEntity {
         try {
             BeanUtils.copyProperties(archiveTree,this);
             this.nodeName = archiveTree.getTitle();
+            this.fullName = archiveTree.getTitle();
             this.isUploadFileDisplayConfigurationTree = archiveTree.getIsDisplayTree();
-            this.fromId = archiveTree.getId();
+
         } catch (BeansException e) {
             e.printStackTrace();
         }

+ 27 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTreeContract.java

@@ -20,9 +20,11 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 
 import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang.StringUtils;
 import org.springblade.core.mp.base.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.manager.vo.ArchiveTreeContractVO2;
 import org.springblade.manager.vo.ArchiveTreeVO;
 import org.springblade.manager.vo.ArchiveTreeVO2;
 import org.springframework.beans.BeanUtils;
@@ -207,9 +209,34 @@ public class ArchiveTreeContract extends BaseEntity {
 			BeanUtils.copyProperties(archiveTree,this);
 			this.fromId = archiveTree.getId();
 			this.nodeName = archiveTree.getTitle();
+			this.fullName = archiveTree.getTitle();
 			this.isUploadFileDisplayConfigurationTree = archiveTree.getIsDisplayTree();
 		} catch (BeansException e) {
 			e.printStackTrace();
 		}
 	}
+
+	public ArchiveTreeContract(ArchiveTreeContractVO2 archiveTree) {
+		if (archiveTree == null) {
+			return;
+		}
+
+		try {
+			BeanUtils.copyProperties(archiveTree,this);
+
+			this.nodeName = archiveTree.getTitle();
+			this.fullName = archiveTree.getTitle();
+			this.isUploadFileDisplayConfigurationTree = archiveTree.getIsDisplayTree();
+		} catch (BeansException e) {
+			e.printStackTrace();
+		}
+	}
+
+	public boolean isContractRoot(){
+		if (this.getExtType() != null && this.getExtType() == 2
+				&& StringUtils.isNotEmpty(this.getTreeCode())){
+			return true;
+		}
+		return false;
+	}
 }

+ 11 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeContractVO2.java

@@ -22,6 +22,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.INodeEx;
 import org.springblade.core.tool.node.INode;
 import org.springblade.manager.entity.ArchiveTreeContract;
@@ -187,6 +188,9 @@ public class ArchiveTreeContractVO2 implements INodeEx<ArchiveTreeContractVO2> {
 
 	//树形排序
 	private String treeSort;
+	private String treeCode;
+
+	private Long fromId;
 
 	public String toString() {
 		return "TreeNode(parentId=" + this.getParentId()
@@ -226,6 +230,12 @@ public class ArchiveTreeContractVO2 implements INodeEx<ArchiveTreeContractVO2> {
 		return 100;
 	}
 
-
+	public boolean isContractRoot(){
+		if (this.getExtType() != null && this.getExtType() == 2
+				&& StringUtils.isNotEmpty(this.getTreeCode())){
+			return true;
+		}
+		return false;
+	}
 
 }

+ 4 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeVO2.java

@@ -181,6 +181,10 @@ public class ArchiveTreeVO2 implements INodeEx<ArchiveTreeVO2> {
      */
     private Long fromId;
 
+    private String treeSort;
+
+    private String ancestors;
+
     private boolean iswbsNode;  //是否为关联的wbs节点
 
 }

+ 2 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeVO2.java

@@ -47,6 +47,8 @@ public class WbsTreeVO2 implements INode<WbsTreeVO2> {
 
     private String ancestors;
 
+    private Long  primaryKeyId;
+
 
     @JsonInclude(JsonInclude.Include.NON_EMPTY)
     private Boolean hasChildren;

+ 227 - 0
blade-service-api/blade-user-api/blade-user-api.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="Spring" name="Spring">
+      <configuration />
+    </facet>
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+      </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" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="blade-manager-api" />
+    <orderEntry type="module" module-name="blade-business-api" />
+    <orderEntry type="module" module-name="blade-common" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-cache:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-tool:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-launch:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-undertow:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-core:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.xnio:xnio-api:3.8.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.wildfly.common:wildfly-common:1.5.2.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.wildfly.client:wildfly-client-config:1.0.1.Final" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.xnio:xnio-nio:3.8.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.threads:jboss-threads:3.1.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-servlet:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec:2.0.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-websockets-jsr:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:2.0.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.servlet:jakarta.servlet-api:4.0.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:30.1.1-jre" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-core:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-api:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-runtime:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-collectionschema:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.4" 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" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.2.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-auth:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-jwt:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.17.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-impl:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-api:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-jackson:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.11" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" 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.26" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.15.RELEASE" level="project" />
+    <orderEntry type="module" module-name="blade-manager-api" />
+    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.80" level="project" />
+    <orderEntry type="module" module-name="blade-business-api" />
+    <orderEntry type="module" module-name="blade-common" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-ribbon:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-ribbon:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-archaius:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.ribbon:ribbon-transport:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-contexts:0.4.9" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-servo:0.4.9" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: javax.inject:javax.inject:1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty:0.4.9" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-core:2.3.0" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-httpclient:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-client:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-core:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: javax.ws.rs:jsr311-api:1.1.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey.contribs:jersey-apache-client4:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.servo:servo-core:0.12.21" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-commons-util:0.3.0" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-loadbalancer:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-statistics:0.1.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-alibaba-commons:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.spring:spring-context-support:1.0.10" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-client:2.0.4" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpasyncclient:4.1.4" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore-nio:4.4.14" level="project" />
+    <orderEntry type="library" name="Maven: org.reflections:reflections:0.9.11" level="project" />
+    <orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
+    <orderEntry type="library" name="Maven: io.prometheus:simpleclient:0.5.0" level="project" />
+    <orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.7.22" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.14.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.14" level="project" />
+    <orderEntry type="library" name="Maven: org.jdom:jdom2:2.0.6" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.2" level="project" />
+    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.5.30" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.7" level="project" />
+    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
+    <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.4" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.4" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.12" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.7" level="project" />
+    <orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-util:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-mybatis:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-typehandlers-jsr310:1.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.8" level="project" />
+    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-tenant:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:3.3.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.59" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.59" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-ribbon:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-archaius:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.3" level="project" />
+    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-core:10.12" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:10.12" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-hystrix:10.12" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.archaius:archaius-core:0.7.7" level="project" />
+    <orderEntry type="library" name="Maven: commons-configuration:commons-configuration:1.8" level="project" />
+    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-core:1.5.18" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex:rxjava:1.3.8" level="project" />
+    <orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.9" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.1.7" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:2.0.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.3.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.6.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.springblade:blade-core-auto:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
+  </component>
+</module>

+ 65 - 5
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileAutoController.java

@@ -11,6 +11,7 @@ import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
 import org.apache.commons.lang.StringUtils;
 import org.springblade.archive.service.IArchivesAutoService;
+import org.springblade.archive.utils.FileUtils;
 import org.springblade.archive.vo.ArchivesAutoVO;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.feign.ArchiveFileClient;
@@ -20,6 +21,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.evisa.feign.EVisaClient;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.feign.ArchiveTreeContractClient;
@@ -28,10 +30,8 @@ import org.springblade.system.user.entity.UserOauth;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -134,9 +134,69 @@ public class ArchiveFileAutoController extends BladeController {
      * 迁移文件
      */
     @PostMapping("/migrateFile")
-    @ApiOperationSupport(order = 9)
+    @ApiOperationSupport(order = 4)
     @ApiOperation(value = "迁移文件", notes = "传入ids")
     public R migrateFile(@RequestParam String ids,@RequestParam String nodeId,@RequestParam String nodeSort) {
         return R.status(archivesAutoService.updateArchivesAutoFileByNodeId(ids,nodeId,nodeSort));
     }
+    /**
+     * 删除
+     */
+    @PostMapping("/remove")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+        List<ArchiveFile> list = this.archiveFileClient.getArchiveFileByArchivesId(ids,"");
+        StringBuffer fileIds = new StringBuffer();
+        if(list != null && list.size()>0){
+            for(ArchiveFile archiveFile : list){
+                fileIds.append(archiveFile.getId());
+                fileIds.append(",");
+            }
+        }
+        /**先删除对应工程文件在删除案卷**/
+        boolean b = this.archiveFileClient.removeFile(Func.toLongList(fileIds.toString()));
+        if(b){
+            return R.status(archivesAutoService.deleteLogic(Func.toLongList(ids)));
+        }
+        return R.status(false);
+    }
+    /**
+     * 批量下载
+     */
+    @PostMapping("/batchDownloadFileToZip")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "批量下载")
+    public void batchDownloadFileToZip(String ids, HttpServletResponse response){
+
+        if(StringUtils.isNotEmpty(ids)){
+            //获取文件
+            List<ArchiveFile> result = this.archiveFileClient.getArchiveFileByArchivesId(ids,"");
+            if(result != null && result.size() > 0){
+                List<String> urls = new ArrayList<>();
+                result.forEach(archiveFile -> urls.add(archiveFile.getFileUrl() + "@@@" + archiveFile.getFileName()));
+
+                //打包下载
+                FileUtils.batchDownloadFileToZip(urls, response);
+            }
+        }
+
+    }
+
+    /**
+     * 预览
+     */
+    @PostMapping("/mergePdf")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "预览")
+    public R<Object> mergePdf(@RequestParam String ids){
+        List<ArchiveFile> result = this.archiveFileClient.getArchiveFileByArchivesId(ids,"");
+        List<String> pdfUrls = result.stream().map(archiveFile ->StringUtils.isNotEmpty(archiveFile.getPdfFileUrl())?archiveFile.getPdfFileUrl():archiveFile.getFileUrl()).distinct().collect(Collectors.toList());
+
+//        FileUtils.mergePdfPublicMethods(pdfUrls,"");
+        /**
+         * 案卷的只有一个文件,不合并先,需要的时候在把合并方法放出来
+         * **/
+        return R.data(pdfUrls);
+    }
 }

+ 32 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileController.java

@@ -11,6 +11,7 @@ import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
 import org.apache.commons.lang.StringUtils;
+import org.springblade.archive.utils.FileUtils;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.feign.ArchiveFileClient;
 import org.springblade.business.vo.ArchiveFileVO;
@@ -27,6 +28,7 @@ import org.springblade.resource.feign.IOSSClient;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -227,4 +229,34 @@ public class ArchiveFileController extends BladeController {
         }
         return list.size() == 0 ? R.data(true) : R.data(300, false, "没有找到证书文件或PDF文件");
     }
+    /**
+     * 删除
+     */
+    @PostMapping("/remove")
+    @ApiOperationSupport(order = 10)
+    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    public R<Boolean> remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+        return R.status( this.archiveFileClient.removeFile(Func.toLongList(ids)));
+    }
+    /**
+     * 批量下载
+     */
+    @PostMapping("/batchDownloadFileToZip")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "批量下载")
+    public void batchDownloadFileToZip(String ids, HttpServletResponse response){
+
+        if(StringUtils.isNotEmpty(ids)){
+            //获取文件
+            List<ArchiveFile> result = this.archiveFileClient.getArchiveFileByArchivesId("",ids);
+            if(result != null && result.size() > 0){
+                List<String> urls = new ArrayList<>();
+                result.forEach(archiveFile -> urls.add(archiveFile.getFileUrl() + "@@@" + archiveFile.getFileName()));
+
+                //打包下载
+                FileUtils.batchDownloadFileToZip(urls, response);
+            }
+        }
+
+    }
 }

+ 232 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/utils/FileUtils.java

@@ -0,0 +1,232 @@
+package org.springblade.archive.utils;
+
+import com.itextpdf.text.Document;
+import com.itextpdf.text.pdf.PdfCopy;
+import com.itextpdf.text.pdf.PdfReader;
+import org.apache.commons.lang.StringUtils;
+import org.apache.poi.ss.usermodel.ClientAnchor;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.util.Units;
+import org.springblade.common.utils.CommonUtil;
+import org.springblade.common.vo.DataVO;
+import org.springblade.core.tool.utils.IoUtil;
+
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletResponse;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.URLEncoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+public class FileUtils {
+
+    public static void batchDownloadFileToZip(List<String> urls, HttpServletResponse response){
+        // 设置压缩流:直接写入response,实现边压缩边下载
+        ZipOutputStream zipos = null;
+        // 循环将文件写入压缩流
+        DataOutputStream os = null;
+        try{
+
+            // 响应头的设置
+            response.reset();
+            response.setCharacterEncoding("utf-8");
+            response.setContentType("multipart/form-data");
+            // 设置压缩包的名字
+            // 解决不同浏览器压缩包名字含有中文时乱码的问题
+            String downloadName = "附件-" + System.currentTimeMillis() + ".zip";
+            response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(downloadName, "UTF-8"));
+
+
+            try {
+                zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
+                // 设置压缩方法
+                zipos.setMethod(ZipOutputStream.DEFLATED);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+            if(zipos == null){
+                return;
+            }
+
+            InputStream inputStream = null;
+
+            for(String url : urls){
+                if(StringUtils.isNotEmpty(url)){
+                    try{
+                        String fileName = null, symbol = "";
+                        if(url.contains("@@@")){
+                            String[] array = url.split("@@@");
+                            url = array[0];
+                            fileName = array[1];
+                            symbol = url.substring(url.lastIndexOf("."));
+                        }
+
+                        //获取文件流
+                        inputStream = CommonUtil.getOSSInputStream(url);
+                        //转换
+                        byte[] bytes = CommonUtil.InputStreamToBytes(inputStream);
+
+                        if(StringUtils.isEmpty(fileName)){
+                            fileName = url.substring(url.lastIndexOf("/") + 1);
+                            symbol = "";
+                        }
+                        zipos.putNextEntry(new ZipEntry(fileName + symbol));
+
+                        os = new DataOutputStream(zipos);
+                        os.write(bytes);
+                        zipos.closeEntry();
+
+                    }catch (Exception e){
+                        e.printStackTrace();
+                    } finally {
+                        IoUtil.closeQuietly(inputStream);
+                    }
+                }
+            }
+
+        }catch (Exception e){
+            e.printStackTrace();
+        } finally {
+            IoUtil.closeQuietly(os);
+            IoUtil.closeQuietly(zipos);
+        }
+    }
+
+    /**
+     * 压缩图片
+     */
+    public static byte[] resizeImage(byte[] srcImgData, float reduceMultiple) throws IOException {
+        BufferedImage bi = ImageIO.read(new ByteArrayInputStream(srcImgData));
+        /*int width = (int) (bi.getWidth() * reduceMultiple);
+        int height = (int) (bi.getHeight() * reduceMultiple);*/
+        int width = 600;
+        int height = 800;
+        Image image = bi.getScaledInstance(width, height, Image.SCALE_SMOOTH);
+        BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        Graphics g = tag.getGraphics();
+        g.setColor(Color.RED);
+        g.drawImage(image, 0, 0, null);
+        g.dispose();
+        ByteArrayOutputStream bOut = new ByteArrayOutputStream();
+        ImageIO.write(tag, "JPEG", bOut);
+        return bOut.toByteArray();
+    }
+
+    /**
+     * 压缩图片2
+     */
+    public static byte[] resizeImage2(byte[] srcImgData, float reduceMultiple) throws IOException {
+        BufferedImage bi = ImageIO.read(new ByteArrayInputStream(srcImgData));
+        int width = (int) (bi.getWidth() * reduceMultiple);
+        int height = (int) (bi.getHeight() * reduceMultiple);
+        Image image = bi.getScaledInstance(width, height, Image.SCALE_SMOOTH);
+        BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        Graphics g = tag.getGraphics();
+        g.setColor(Color.RED);
+        g.drawImage(image, 0, 0, null);
+        g.dispose();
+        ByteArrayOutputStream bOut = new ByteArrayOutputStream();
+        ImageIO.write(tag, "JPEG", bOut);
+        return bOut.toByteArray();
+    }
+
+    /**
+     * 图片定位
+     */
+    public static void imageOrientation(Sheet sheet, ClientAnchor anchor, DataVO dataVO) {
+        anchor.setDx1(Units.pixelToEMU(5));
+        anchor.setDy1(Units.pixelToEMU(5));
+        anchor.setCol2(anchor.getCol1());
+        anchor.setRow2(anchor.getRow1());
+        int k = getMergedRegionIndex(sheet, CommonUtil.join(dataVO.getX(), dataVO.getY(), dataVO.getX(), dataVO.getY(),","));
+        if(k>-1){
+            /*如果是合并单元格,则锚点第二坐标设置为合并区右下角单元格坐标*/
+            CellRangeAddress ca = sheet.getMergedRegion(k);
+            anchor.setCol1(ca.getFirstColumn());
+            anchor.setRow1(ca.getFirstRow());
+            anchor.setCol2(ca.getLastColumn());
+            anchor.setRow2(ca.getLastRow());
+        }
+        int dx=(int)(sheet.getColumnWidthInPixels(anchor.getCol2())+3);
+        int dy=Units.pointsToPixel(sheet.getRow(anchor.getRow2()).getHeightInPoints())-5;
+        anchor.setDx2(Units.pixelToEMU(dx));
+        anchor.setDy2(Units.pixelToEMU(dy));
+    }
+
+    public static int getMergedRegionIndex(Sheet sheet, String coords) {
+        for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
+            CellRangeAddress ca = sheet.getMergedRegion(i);
+            int firstColumn = ca.getFirstColumn();
+            int lastColumn = ca.getLastColumn();
+            int firstRow = ca.getFirstRow();
+            int lastRow = ca.getLastRow();
+            Matcher mu = CommonUtil.matcher("(\\d{1,3}),(\\d{1,3}),(\\d{1,3}),(\\d{1,3})",coords);
+            /*合并单元格四个角坐标,只要任意一个在落在将要合并的区域里面意味着两者重合,就必须拆分前者*/
+            List<Integer[]> corners = Arrays.asList(new Integer[]{firstColumn,firstRow},new Integer[]{lastColumn,firstRow},new Integer[]{firstColumn,lastRow},new Integer[]{lastColumn,lastRow});
+            if(mu.find()){
+                int firstColumn2 = mu.group(1) == null ? 0 : Integer.parseInt(mu.group(1));
+                int lastColumn2 = mu.group(3) == null ? 0 : Integer.parseInt(mu.group(3));
+                int firstRow2 = mu.group(2) == null ? 0 : Integer.parseInt(mu.group(2));
+                int lastRow2 = mu.group(4) == null ? 0 : Integer.parseInt(mu.group(4));
+                for(Integer[] corner:corners){
+                    if(firstColumn2<=corner[0]&&corner[0]<=lastColumn2&&firstRow2<=corner[1]&&corner[1]<=lastRow2){
+                        return i;
+                    }
+                }
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * 合并方法
+     */
+    public static void mergePdfPublicMethods(List<String> urlList, String localImgUrl){
+        PdfReader reader = null;
+
+        Document doc = new Document();
+        PdfCopy pdfCopy = null;
+        try{
+            pdfCopy = new PdfCopy(doc, new FileOutputStream(localImgUrl));
+            int pageCount;
+            doc.open();
+
+            for(String urlStr : urlList){
+                try{
+                    //获取OSS文件输入流
+                    reader = new PdfReader(CommonUtil.getOSSInputStream(urlStr));
+
+                    pageCount = reader.getNumberOfPages();
+
+                    for(int i = 0; i < pageCount; ++i){
+                        int is = i + 1;
+                        pdfCopy.addPage(pdfCopy.getImportedPage(reader,is));
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                } finally {
+                    if(reader != null){
+                        reader.close();
+                    }
+                }
+            }
+
+        }catch (Exception e){
+            e.printStackTrace();
+        } finally {
+            if(pdfCopy != null){
+                pdfCopy.flush();
+                pdfCopy.close();
+            }
+            doc.close();
+        }
+    }
+
+}

+ 51 - 133
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1,5 +1,6 @@
 package org.springblade.business.controller;
 
+import com.alibaba.excel.util.DateUtils;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -26,6 +27,7 @@ import org.springblade.business.service.*;
 import org.springblade.business.socket.WebSocket;
 import org.springblade.business.utils.FileUtils;
 import org.springblade.business.vo.*;
+import org.springblade.common.constant.BusinessConstant;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.common.constant.LauncherConstant;
 import org.springblade.common.utils.CommonUtil;
@@ -52,11 +54,13 @@ import org.springblade.system.cache.ParamCache;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.feign.IDictBizClient;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.CachePut;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Caching;
 import org.springframework.data.redis.core.RedisConnectionUtils;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Async;
@@ -120,7 +124,8 @@ public class InformationWriteQueryController extends BladeController {
 
     private final ITreeContractFirstService treeContractFirstService;
 
-    private static final String CONTRACT_CACHE_WBSTREE = "contract:wbstree:";
+    @Autowired
+    StringRedisTemplate RedisTemplate;
 
     /**
      * 获取文件题名
@@ -1271,7 +1276,13 @@ public class InformationWriteQueryController extends BladeController {
     @ApiOperation(value = "自定义排序")
     public R<Boolean> diySort(@RequestBody DiySortVO vo) {
         List<String> sortLists = vo.getSortList();
-        return R.status(wbsTreeContractClient.diySort(sortLists));
+        boolean b = wbsTreeContractClient.diySort(sortLists);
+        if(sortLists!=null){
+            WbsTreeContract needCopyNode = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(sortLists.get(0));
+            //获取父节点信息
+            informationQueryService.AsyncWbsTree(needCopyNode.getParentId()+ "",needCopyNode.getParentId()+ "",needCopyNode.getContractId(),"","1");
+        }
+        return R.status(b);
     }
 
     /**
@@ -1372,12 +1383,16 @@ public class InformationWriteQueryController extends BladeController {
          R<Boolean> booleanR = this.saveOrCopyNodeTree(saveList, saveLedger, 32, needCopyNode);
 
         //复制数据逻辑
-         jdbcTemplate.execute(copeSql.toString());
+        if(nodeTabColsMap!=null &&copeSql.length()>=10){
+            jdbcTemplate.execute(copeSql.toString());
+        }
+
+        //获取父节点信息
+        informationQueryService.AsyncWbsTree(needCopyNode.getParentId()+ "",needCopyNode.getParentId()+ "",needCopyNode.getContractId(),"","1");
         return booleanR;
     }
 
 
-
     /**
      * 复制节点
      */
@@ -1722,15 +1737,14 @@ public class InformationWriteQueryController extends BladeController {
             @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
     })
     public R<List<WbsTreeContractTreeVOS>> queryMappingStructureTree(@RequestParam String parentId, @RequestParam String contractId, @RequestParam String contractIdRelation) {
-        List<WbsTreeContractTreeVOS> result = this.queryContractTree(parentId, contractId, contractIdRelation, null);
+        List<WbsTreeContractTreeVOS> result = this.informationQueryService.queryContractTree(parentId, contractId, contractIdRelation, null);
         if (result.size() == 1) {
             //只有一个子节点,继续向下
             int size;
             WbsTreeContractTreeVOS vos = result.get(0);
             do {
                 try {
-                    List<WbsTreeContractTreeVOS> childResult = this.queryContractTree(vos.getId().toString(), contractId, vos.getContractIdRelation(), null);
-
+                    List<WbsTreeContractTreeVOS> childResult = this.informationQueryService.queryContractTree(vos.getId().toString(), contractId, vos.getContractIdRelation(), null);
                     vos.setChildren(childResult);
                     size = childResult.size();
                     if (size != 1) {
@@ -1797,8 +1811,11 @@ public class InformationWriteQueryController extends BladeController {
         } catch (Exception e) {
             e.printStackTrace();
         }
+        Boolean aBoolean = this.wbsTreeContractClient.updateContractNodeParameter(node);
 
-        return R.data(this.wbsTreeContractClient.updateContractNodeParameter(node));
+        //获取父节点信息
+        informationQueryService.AsyncWbsTree(queries.getParentId()+ "",queries.getParentId()+ "",queries.getContractId(),"","1");
+        return R.data(aBoolean);
     }
 
     /**
@@ -1896,8 +1913,10 @@ public class InformationWriteQueryController extends BladeController {
 
         //保存进回收站
         this.recycleBinClient.saveDelBusinessData(idArray, StringUtils.isNotEmpty(removeNode.getFullName()) ? removeNode.getFullName() : removeNode.getNodeName(), 2, parentNodeName.toString(), removeNode.getProjectId(), removeNode.getContractId());
-
-        return R.data(this.wbsTreeContractClient.removeContractTreeNode(idArray));
+        Boolean aBoolean = this.wbsTreeContractClient.removeContractTreeNode(idArray);
+        // 更新redis
+        this.informationQueryService.AsyncWbsTree(removeNode.getParentId()+ "",removeNode.getParentId()+ "",removeNode.getContractId(),"","1");
+        return R.data(aBoolean);
     }
 
     /**
@@ -2081,7 +2100,13 @@ public class InformationWriteQueryController extends BladeController {
             });
         }
 
-        return this.saveOrCopyNodeTree(saveList, saveLedger, 2, treeContract);
+        R<Boolean> booleanR = this.saveOrCopyNodeTree(saveList, saveLedger, 2, treeContract);
+
+        //更新redis
+        List<WbsTreeContractTreeVOS> wbsTreeContractTreeVOS = this.informationQueryService.queryContractTree(treeContract.getId()+ "", treeContract.getContractId(), "", "1");
+
+        informationQueryService.AsyncWbsTree(treeContract.getId()+ "",treeContract.getId()+ "",treeContract.getContractId(),"","1");
+        return booleanR;
     }
 
     private List<WbsTreePrivate> unifiedCode(List<AddContractTreeNodeVO.Node> allSelectedNodeList, WbsTreeContract treeContract) {
@@ -2374,7 +2399,7 @@ public class InformationWriteQueryController extends BladeController {
         if (StringUtils.isNotEmpty(primaryKeyId)) {
             parentId = primaryKeyId;
         }
-        List<WbsTreeContractTreeVOS> rootTreeNode = this.queryContractTree(parentId, contractId, contractIdRelation, null);
+        List<WbsTreeContractTreeVOS> rootTreeNode = this.informationQueryService.queryContractTree(parentId, contractId, contractIdRelation, null);
         rootTreeNode.removeIf(vos -> (vos.getNodeType() != null && vos.getNodeType() == 111));
 
         return R.data(rootTreeNode);
@@ -2397,30 +2422,28 @@ public class InformationWriteQueryController extends BladeController {
                                                                                    @RequestParam String parentId,
                                                                                    @RequestParam String contractId,
                                                                                    @RequestParam String contractIdRelation,
-                                                                                   String classifyType) {
+                                                                                   @RequestParam String classifyType){
         if (StringUtils.isNotEmpty(primaryKeyId)) {
             parentId = primaryKeyId;
         }
+
         String dataInfoId = contractId+"_"+parentId+"_"+classifyType;
-        queryContractWbsTreeByContractIdAndType2(primaryKeyId,parentId,contractId,contractIdRelation,classifyType);
-        List<WbsTreeContractTreeVOS> wbsTreeContractTreeVOS = CacheUtil.get(LauncherConstant.APPLICATION_MANAGER_NAME, CONTRACT_CACHE_WBSTREE, dataInfoId, List.class);
+        Object data = RedisTemplate.opsForValue().get("blade-manager::contract:wbstree:"+dataInfoId);
+        List<WbsTreeContractTreeVOS> wbsTreeContractTreeVOS = null;
+        if(data!=null){
+            wbsTreeContractTreeVOS = JSON.parseArray(data.toString(), WbsTreeContractTreeVOS.class);
+        }
+
         if (wbsTreeContractTreeVOS == null) {
-            wbsTreeContractTreeVOS = this.queryContractTree(parentId, contractId, contractIdRelation, classifyType);
-            CacheUtil.put(LauncherConstant.APPLICATION_MANAGER_NAME, CONTRACT_CACHE_WBSTREE, dataInfoId, wbsTreeContractTreeVOS);
+            wbsTreeContractTreeVOS = this.informationQueryService.queryContractTree(parentId, contractId, contractIdRelation, classifyType);
+            JSONArray array= JSONArray.parseArray(JSON.toJSONString(wbsTreeContractTreeVOS));
+            RedisTemplate.opsForValue().set("blade-manager::contract:wbstree:"+dataInfoId,JSON.toJSON(array).toString());
         }
         return R.data(wbsTreeContractTreeVOS);
     }
 
-    @Async
-    public void queryContractWbsTreeByContractIdAndType2(String primaryKeyId,
-                                                                                   String parentId,
-                                                                                   String contractId,
-                                                                                   String contractIdRelation,
-                                                                                   String classifyType) {
-        String dataInfoId = contractId+"_"+parentId+"_"+classifyType;
-        List<WbsTreeContractTreeVOS> wbsTreeContractTreeVOS = this.queryContractTree(parentId, contractId, contractIdRelation, classifyType);
-            CacheUtil.put(LauncherConstant.APPLICATION_MANAGER_NAME, CONTRACT_CACHE_WBSTREE, dataInfoId, wbsTreeContractTreeVOS);
-    }
+
+    // set的处理
 
     /**
      * 修改
@@ -2464,115 +2487,10 @@ public class InformationWriteQueryController extends BladeController {
             @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
     })
     public R<List<WbsTreeContractTreeVOS>> queryContractWbsTreeByFirstInfo(@RequestParam String parentId, @RequestParam String contractId, @RequestParam String contractIdRelation) {
-        List<WbsTreeContractTreeVOS> rootTreeNode = this.queryContractTree(parentId, contractId, contractIdRelation, null);
+        List<WbsTreeContractTreeVOS> rootTreeNode = informationQueryService.queryContractTree(parentId, contractId, contractIdRelation, null);
         //查询被标记为首件的数据
         rootTreeNode = rootTreeNode.stream().filter(WbsTreeContractTreeVOS::getIsFirst).collect(Collectors.toList());
-
         return R.data(rootTreeNode);
     }
 
-
-    /**
-     * 查询合同段划分树公共代码
-     */
-    private List<WbsTreeContractTreeVOS> queryContractTree(String parentId, String contractId, String contractIdRelation, String classifyType) {
-        List<WbsTreeContractTreeVOS> rootTreeNode;
-
-        //获取合同段,检查是否是监理合同段
-        ContractInfo contractInfo = this.contractClient.getContractById(Long.parseLong(contractId));
-
-        if (new Integer("2").equals(contractInfo.getContractType()) || new Integer("3").equals(contractInfo.getContractType())) {
-            //监理/业主合同段,需要获取关联的施工方合同段根节点数据
-            List<String> contractIds = new ArrayList<>();
-            if (StringUtils.isEmpty(parentId)) {
-                // 获取 有几个合同段主键Id
-                contractIds = this.contractClient.getProcessContractByJLContractId(contractId);
-            } else {
-                contractIds.add(contractIdRelation);
-            }
-            if (contractIds.size() > 0) {
-                //监理复制加载树问题
-                if (StringUtils.isEmpty(classifyType)) {
-                    classifyType = "2";
-                }
-                if (StringUtils.isNotEmpty(parentId)) {
-                    //子节点
-                    rootTreeNode = this.informationQueryService.queryContractTreeSupervision(contractIds, parentId, Integer.parseInt(classifyType));
-                } else {
-                    //根节点
-                    rootTreeNode = this.informationQueryService.queryContractTreeSupervision(contractIds, "0", Integer.parseInt(classifyType));
-                    //设置根节点数量统计
-                    for (WbsTreeContractTreeVOS root : rootTreeNode) {
-                        List<WbsTreeContractTreeVOS> rootZi = this.informationQueryService.queryContractTreeSupervision(Func.toStrList(root.getContractIdRelation()), root.getId().toString(), Integer.parseInt(classifyType));
-                        List<Long> collect = rootZi.stream().map(WbsTreeContractTreeVOS::getSubmitCounts).collect(Collectors.toList());
-                        Long reduce = collect.stream().reduce(0L, Long::sum);
-                        root.setSubmitCounts(reduce);
-                    }
-                }
-            } else {
-                rootTreeNode = new ArrayList<>();
-            }
-        } else {
-            //施工合同段
-            rootTreeNode = this.informationQueryService.queryContractTree(contractId, StringUtils.isNotEmpty(parentId) ? parentId : "0", 1);
-        }
-        return rootTreeNode;
-    }
- /*
-    *//**
-     * 查询合同段划分树公共代码
-     *//*
-    private List<WbsTreeContractTreeVOS> queryContractTree(String parentId, String contractId, String contractIdRelation, String classifyType) {
-        List<WbsTreeContractTreeVOS> rootTreeNode;
-
-        //获取合同段,检查是否是监理合同段
-        ContractInfo contractInfo = this.contractClient.getContractById(Long.parseLong(contractId));
-
-        if (new Integer("2").equals(contractInfo.getContractType()) || new Integer("3").equals(contractInfo.getContractType())) {
-            //监理/业主合同段,需要获取关联的施工方合同段根节点数据
-            List<String> contractIds = new ArrayList<>();
-            if (StringUtils.isEmpty(parentId)) {
-                // 获取 有几个合同段主键Id
-                contractIds = this.contractClient.getProcessContractByJLContractId(contractId);
-            } else {
-                contractIds.add(contractIdRelation);
-            }
-            if (contractIds.size() > 0) {
-
-                //监理复制加载树问题
-                if (StringUtils.isEmpty(classifyType)) {
-                    classifyType = "2";
-                }
-                if (StringUtils.isNotEmpty(parentId)) {
-                    //子节点
-                    rootTreeNode = this.informationQueryService.queryContractTreeSupervision(contractIds, parentId, Integer.parseInt(classifyType));
-                } else {
-                    //根节点
-                    rootTreeNode = this.informationQueryService.queryContractTreeSupervision(contractIds, "0", Integer.parseInt(classifyType));
-
-                    //设置根节点数量统计
-                    for (WbsTreeContractTreeVOS root : rootTreeNode) {
-                        List<WbsTreeContractTreeVOS> rootZi = this.informationQueryService.queryContractTreeSupervision(Func.toStrList(root.getContractIdRelation()), root.getId().toString(), Integer.parseInt(classifyType));
-                        List<Long> collect = rootZi.stream().map(WbsTreeContractTreeVOS::getSubmitCounts).collect(Collectors.toList());
-                        Long reduce = collect.stream().reduce(0L, Long::sum);
-                        root.setSubmitCounts(reduce);
-                    }
-                }
-            } else {
-                rootTreeNode = new ArrayList<>();
-            }
-
-        } else {
-            //施工合同段
-            rootTreeNode = this.informationQueryService.queryContractTree(contractId, StringUtils.isNotEmpty(parentId) ? parentId : "0", 1);
-            *//*rootTreeNode.stream().forEach(rtn->{
-                if (rtn.getSubmitCounts() > 0L && rtn.getColorStatus() <= 1 && rtn.getNotExsitChild() == false){
-                    rtn.setColorStatus(2);
-                }
-            });*//*
-        }
-
-        return rootTreeNode;
-    }
-*/
 }

+ 11 - 0
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java

@@ -74,4 +74,15 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
     public boolean updateWrappers(LambdaUpdateWrapper<ArchiveFile> eq) {
         return this.iArchiveFileService.update(eq);
     }
+
+    @Override
+    public boolean removeFile(List<Long> toLongList) {
+        return this.iArchiveFileService.deleteLogic(toLongList);
+    }
+
+    @Override
+    public List<ArchiveFile> getArchiveFileByArchivesId(String archivesIds,String fileIds) {
+
+        return this.iArchiveFileService.getArchiveFileByArchivesId(archivesIds,fileIds);
+    }
 }

+ 4 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.java

@@ -62,4 +62,8 @@ public interface ArchiveFileMapper extends BaseMapper<ArchiveFile> {
 	List<Object> selectBoxNameAndBoxNumber(String nodeId);
 
 	Integer updateArchiveFileByNodeId(List<Long> ids, String nodeId);
+
+	List<ArchiveFile> getArchiveFileByArchivesId(@Param("ids") List<Long> ids);
+
+	List<ArchiveFile> getArchiveFileByFileIds(@Param("ids") List<Long> ids);
 }

+ 26 - 4
blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml

@@ -60,7 +60,7 @@
     </update>
 
     <select id="selectArchiveFileCount" resultType="java.lang.Integer">
-        select count(id) from u_archive_file where is_deleted = 0  and is_auto_file != 1
+        select count(id) from u_archive_file where is_deleted = 0  and (is_auto_file is null or is_auto_file != 1)
         <if test="vo.isApprovalValue != null and vo.isApprovalValue != ''">
             and status = #{vo.isApprovalValue}
         </if>
@@ -93,7 +93,7 @@
     </select>
 
     <select id="selectArchiveFilePage" resultMap="archiveFileResultMap">
-        select * from u_archive_file where is_deleted = 0 and is_auto_file != 1
+        select * from u_archive_file where is_deleted = 0 and (is_auto_file is null or is_auto_file != 1)
         <if test="vo.isApprovalValue != null and vo.isApprovalValue != ''">
             and status = #{vo.isApprovalValue}
         </if>
@@ -126,7 +126,7 @@
     </select>
 
     <select id="selectArchiveFilePageByBoxNameCount" resultType="java.lang.Integer">
-        select count(id) from u_archive_file where is_deleted = 0 and is_auto_file != 1
+        select count(id) from u_archive_file where is_deleted = 0 and (is_auto_file is null or is_auto_file != 1)
         <if test="vo.isApprovalValue != null and vo.isApprovalValue != ''">
             and status = #{vo.isApprovalValue}
         </if>
@@ -168,7 +168,7 @@
         order by box_number,sort,create_time DESC
     </select>
     <select id="selectArchiveFilePageByBoxName" resultMap="archiveFileResultMap">
-        select * from u_archive_file where is_deleted = 0 and is_auto_file != 1
+        select * from u_archive_file where is_deleted = 0 and (is_auto_file is null or is_auto_file != 1)
         <if test="vo.isApprovalValue != null and vo.isApprovalValue != ''">
             and status = #{vo.isApprovalValue}
         </if>
@@ -245,4 +245,26 @@
             #{id}
         </foreach>
     </update>
+
+
+    <select id="getArchiveFileByArchivesId" resultMap="archiveFileResultMap">
+        select * from u_archive_file where is_deleted = 0
+        <if test="ids != null and ids != ''">
+            and archive_id in
+            <foreach collection="ids" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        order by sort,create_time DESC
+    </select>
+    <select id="getArchiveFileByFileIds" resultMap="archiveFileResultMap">
+        select * from u_archive_file where is_deleted = 0
+        <if test="ids != null and ids != ''">
+            and id in
+            <foreach collection="ids" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
+        order by sort,create_time DESC
+    </select>
 </mapper>

+ 12 - 7
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml

@@ -134,13 +134,16 @@
         ) c
     </select>
 
-
+-->
     <select id="queryContractTree" resultMap="queryContractTreeMap">
         SELECT c.*,
                CASE
-                   WHEN c.allCount = c.savaCont THEN 2
-                   WHEN c.allCount = c.submitCount THEN 3
-                   WHEN c.allCount = c.appCount THEN 4
+                   WHEN c.allCount = c.savaCont and notExsitChild='false'  THEN 2
+                   WHEN (c.allCount+1) = c.savaCont and notExsitChild='true'  THEN 2
+                   WHEN c.allCount = c.submitCount and notExsitChild='false' THEN 3
+                   WHEN (c.allCount+1) = c.submitCount and notExsitChild='true' THEN 3
+                   WHEN c.allCount = c.appCount and notExsitChild='false' THEN 4
+                   WHEN (c.allCount+1) = c.appCount and notExsitChild='true' THEN 4
                    WHEN c.savaCont>=1 or c.submitCount>=1 or c.appCount>=1 THEN 2
                    ELSE 1 END AS colorStatus
         from (
@@ -162,8 +165,8 @@
         ctd.file_url AS fileUrl,
         ctd.id AS drawingsId,
         CASE (select count(tcf.id) from u_tree_contract_first AS tcf where tcf.is_deleted = 0 and tcf.wbs_node_id = wtc.p_key_id) WHEN 0 THEN 'false' ELSE 'true' END AS isFirst,
-			 (SELECT count(1) from m_wbs_tree_contract where id in(SELECT parent_id from m_wbs_tree_contract a where a.is_deleted=0 and a.type=2 and table_owner in(1,2,3)
-				) and contract_id=wtc.contract_id and type =1 and is_deleted=0 and FIND_IN_SET(wtc.id,ancestors)) as allCount,
+			 ( SELECT count(1) from m_wbs_tree_contract where id in(SELECT parent_id from m_wbs_tree_contract a where a.is_deleted=0 and a.type=2 and table_owner in(1,2,3)) and contract_id=wtc.contract_id and type =1 and is_deleted=0 and (FIND_IN_SET(wtc.id,ancestors) or wtc.p_key_id=p_key_id)
+				) as allCount,
 			 (SELECT count(1) from m_wbs_tree_contract a ,u_information_query b where a.p_key_id=b.wbs_id and FIND_IN_SET(wtc.id,a.ancestors)  and a.contract_id=wtc.contract_id and b.is_deleted=0 and a.is_deleted=0 and a.`status`=0 and b.classify=1) as savaCont,
 			 (SELECT count(1) from m_wbs_tree_contract a ,u_information_query b where a.p_key_id=b.wbs_id and FIND_IN_SET(wtc.id,a.ancestors)  and a.contract_id=wtc.contract_id and b.is_deleted=0 and a.is_deleted=0 and a.`status`=1 and b.classify=1) as submitCount,
 			 (SELECT count(1) from m_wbs_tree_contract a ,u_information_query b where a.p_key_id=b.wbs_id and FIND_IN_SET(wtc.id,a.ancestors)  and a.contract_id=wtc.contract_id and b.is_deleted=0 and a.is_deleted=0 and a.`status`=2 and b.classify=1) as appCount
@@ -177,7 +180,7 @@
         AND wtc.contract_id = #{contractId}
         ORDER BY wtc.sort,wtc.create_time
 		) c
-    </select>-->
+    </select>
 
 
     <select id="queryContractTreeSupervision" resultMap="queryContractTreeMap">
@@ -269,6 +272,7 @@
         and wtc.is_deleted= '0'
         ORDER BY wtc.sort,wtc.create_time
     </select>
+<!--
 
  <select id="queryContractTree" resultMap="queryContractTreeMap">
         SELECT
@@ -355,6 +359,7 @@
         AND wtc.contract_id = #{contractId}
         ORDER BY wtc.sort,wtc.create_time
     </select>
+-->
 
     <select id="queryProcessDataByPrimaryKeyIdAndClassify" resultMap="queryProcessDataMap">
         SELECT

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/IArchiveFileService.java

@@ -65,4 +65,6 @@ public interface IArchiveFileService extends BaseService<ArchiveFile> {
 	List<Object> selectBoxNameAndBoxNumber(String nodeId);
 
 	boolean updateArchiveFileByNodeId(String ids, String nodeId);
+
+	List<ArchiveFile> getArchiveFileByArchivesId(String archivesIds,String fileIds);
 }

+ 7 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/IInformationQueryService.java

@@ -25,6 +25,7 @@ import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.vo.WbsTreeContractTreeVOS;
+import org.springframework.scheduling.annotation.Async;
 
 import java.util.List;
 import java.util.Map;
@@ -124,4 +125,10 @@ public interface IInformationQueryService extends BaseService<InformationQuery>
 
     // 获取当前节点所有的表的字段信息
     List<QueryProcessDataVO> getNodeChildTabColsAllByNodeId(String nodeId, String contractId);
+
+    // 测试节点信息
+    List<WbsTreeContractTreeVOS> queryContractTree(String parentId, String contractId, String contractIdRelation, String classifyType);
+
+    //
+    void  AsyncWbsTree(String primaryKeyId,String parentId,String contractId,String contractIdRelation,String classifyType);
 }

+ 12 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ArchiveFileServiceImpl.java

@@ -17,6 +17,7 @@ import org.springblade.system.feign.IDictBizClient;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -144,6 +145,17 @@ public class ArchiveFileServiceImpl extends BaseServiceImpl<ArchiveFileMapper, A
 		return true;
 	}
 
+	@Override
+	public List<ArchiveFile> getArchiveFileByArchivesId(String archivesIds,String fileIds) {
+		if(!archivesIds.isEmpty() && archivesIds != ""){
+			return baseMapper.getArchiveFileByArchivesId(Func.toLongList(archivesIds));
+		}else if(!fileIds.isEmpty() && fileIds != ""){
+			return baseMapper.getArchiveFileByFileIds(Func.toLongList(fileIds));
+		}else{
+			return new ArrayList<>();
+		}
+	}
+
 	@Override
 	public IPage<ArchiveFileVO> selectArchiveFilePageByBoxName(ArchiveFileVO vo) {
 		Query query = new Query();

+ 25 - 3
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.business.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -14,8 +15,11 @@ import org.springblade.business.vo.FileUserVO;
 import org.springblade.business.vo.InformationQueryVO;
 import org.springblade.business.mapper.InformationQueryMapper;
 import org.springblade.business.vo.QueryProcessDataVO;
+import org.springblade.common.constant.BusinessConstant;
 import org.springblade.common.constant.CommonConstant;
+import org.springblade.common.constant.LauncherConstant;
 import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.secure.BladeUser;
@@ -31,8 +35,11 @@ import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.cache.ParamCache;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
@@ -69,6 +76,9 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
 
     private final JdbcTemplate jdbcTemplate;
 
+    @Autowired
+    StringRedisTemplate RedisTemplate;
+
     @Override
     public List<String> queryBusinessTableData(String formDataId, Long trialSelfInspectionRecordId) {
         //获取具体业务数据
@@ -603,7 +613,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
     /**
      * 查询合同段划分树公共代码
      */
-    private List<WbsTreeContractTreeVOS> queryContractTree(String parentId, String contractId, String contractIdRelation, String classifyType) {
+    public List<WbsTreeContractTreeVOS> queryContractTree(String parentId, String contractId, String contractIdRelation, String classifyType) {
         List<WbsTreeContractTreeVOS> rootTreeNode;
 
         //获取合同段,检查是否是监理合同段
@@ -632,7 +642,6 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
                         root.setSubmitCounts(reduce);
                     }
                 }
-
             } else {
                 rootTreeNode = new ArrayList<>();
             }
@@ -640,8 +649,12 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
         } else {
             //施工合同段
             rootTreeNode = this.queryContractTree(contractId, StringUtils.isNotEmpty(parentId) ? parentId : "0", 1);
+            /*rootTreeNode.stream().forEach(rtn->{
+                if (rtn.getSubmitCounts() > 0L && rtn.getColorStatus() <= 1 && rtn.getNotExsitChild() == false){
+                    rtn.setColorStatus(2);
+                }
+            });*/
         }
-
         return rootTreeNode;
     }
 
@@ -654,4 +667,13 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
     public List<QueryProcessDataVO> getNodeChildTabColsAllByNodeId(String nodeId, String contractId) {
         return baseMapper.getNodeChildTabColsAllByNodeId(nodeId, contractId);
     }
+
+
+    @Override
+    public void AsyncWbsTree(String primaryKeyId,String parentId,String contractId,String contractIdRelation,String classifyType){
+        String dataInfoId = contractId+"_"+parentId+"_"+classifyType;
+        List<WbsTreeContractTreeVOS> wbsTreeContractTreeVOS = this.queryContractTree(parentId, contractId, contractIdRelation, classifyType);
+        JSONArray array= JSONArray.parseArray(JSON.toJSONString(wbsTreeContractTreeVOS));
+        RedisTemplate.opsForValue().set("blade-manager::contract:wbstree:"+dataInfoId,JSON.toJSON(array).toString());
+    }
 }

+ 0 - 8
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialDetectionDataServiceImpl.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
@@ -16,34 +15,27 @@ import org.springblade.business.dto.TrialDetectionDataDTO;
 import org.springblade.business.dto.TrialDetectionDataPageDTO;
 import org.springblade.business.entity.TrialDetectionData;
 import org.springblade.business.entity.TrialSampleInfo;
-import org.springblade.business.entity.TrialSelfInspectionRecord;
 import org.springblade.business.mapper.TrialDetectionDataMapper;
 import org.springblade.business.mapper.TrialSelfInspectionRecordMapper;
 import org.springblade.business.service.ITrialDetectionDataService;
 import org.springblade.business.vo.TrialDetectionDataVO;
-import org.springblade.business.vo.TrialSelfSample;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.utils.PageUtil;
 import org.springblade.core.tool.utils.*;
-import org.springblade.manager.entity.TextdictInfo;
-import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTreePrivate;
-import org.springblade.manager.feign.WbsTreeContractClient;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @Service

+ 325 - 0
blade-service/blade-desk/blade-desk.iml

@@ -0,0 +1,325 @@
+<?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="Spring" name="Spring">
+      <configuration />
+    </facet>
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+      </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="module" module-name="blade-desk-api" />
+    <orderEntry type="module" module-name="blade-manager-api" />
+    <orderEntry type="module" module-name="blade-business-api" />
+    <orderEntry type="module" module-name="blade-flow-api" />
+    <orderEntry type="module" module-name="blade-common" />
+    <orderEntry type="module" module-name="blade-dict-api" />
+    <orderEntry type="module" module-name="blade-scope-api" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-boot:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-context:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-db:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.8" level="project" />
+    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.22" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.14.0" level="project" />
+    <orderEntry type="library" name="Maven: com.oracle:ojdbc7:12.2.0.1" level="project" />
+    <orderEntry type="library" name="Maven: org.postgresql:postgresql:42.2.22" level="project" />
+    <orderEntry type="library" name="Maven: com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre8" level="project" />
+    <orderEntry type="library" name="Maven: com.dameng:DmJdbcDriver18:8.1.2.79" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-secure:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-cloud:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-okhttp:10.12" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-hystrix:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-hystrix:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-ribbon:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-archaius:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-archaius:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: commons-configuration:commons-configuration:1.8" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-core:1.5.18" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-serialization:1.5.18" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.fasterxml.jackson.module:jackson-module-afterburner:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-metrics-event-stream:1.5.18" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-javanica:1.5.18" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex:rxjava-reactive-streams:1.2.1" 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-actuator:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator-autoconfigure:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: de.codecentric:spring-boot-admin-starter-client:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: de.codecentric:spring-boot-admin-client:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-alibaba-commons:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.spring:spring-context-support:1.0.10" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-client:2.0.4" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpasyncclient:4.1.4" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore-nio:4.4.14" level="project" />
+    <orderEntry type="library" name="Maven: org.reflections:reflections:0.9.11" level="project" />
+    <orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
+    <orderEntry type="library" name="Maven: io.prometheus:simpleclient:0.5.0" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-sentinel:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-transport-simple-http:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-transport-common:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-datasource-extension:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-annotation-aspectj:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjrt:1.9.6" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-circuitbreaker-sentinel:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-reactor-adapter:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-spring-webflux-adapter:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-spring-webmvc-adapter:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-parameter-flow-control:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-cluster-server-default:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-cluster-common-default:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-cluster-client-default:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-alibaba-sentinel-datasource:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-cache:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-redis:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-jwt:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-impl:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-api:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-jackson:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.redisson:redisson:3.11.6" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: javax.cache:cache-api:1.1.1" level="project" />
+    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.17.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex.rxjava2:rxjava:2.2.21" level="project" />
+    <orderEntry type="library" name="Maven: de.ruedigermoeller:fst:2.57" level="project" />
+    <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.6" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
+    <orderEntry type="library" name="Maven: org.jodd:jodd-bean:5.0.13" level="project" />
+    <orderEntry type="library" name="Maven: org.jodd:jodd-core:5.0.13" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-log:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
+    <orderEntry type="library" name="Maven: net.logstash.logback:logstash-logback-encoder:6.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.janino:janino:3.0.15" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.janino:commons-compiler:3.1.4" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.2.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-mybatis:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-typehandlers-jsr310:1.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.11" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-swagger:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-tool:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-core:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-api:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-runtime:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-collectionschema:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.4" 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" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-auth:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-micro-spring-boot-starter:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-autoconfigure:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-annotations:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-core:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:2.10.5" level="project" />
+    <orderEntry type="module" module-name="blade-desk-api" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.59" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.3" level="project" />
+    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-core:10.12" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:10.12" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-hystrix:10.12" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.archaius:archaius-core:0.7.7" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.1.7" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:2.0.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.3.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.6.2" level="project" />
+    <orderEntry type="module" module-name="blade-user-api" />
+    <orderEntry type="module" module-name="blade-manager-api" />
+    <orderEntry type="module" module-name="blade-business-api" />
+    <orderEntry type="module" module-name="blade-flow-api" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-oss:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.huaweicloud:esdk-obs-java:3.21.12" level="project" />
+    <orderEntry type="library" name="Maven: com.jamesmurty.utils:java-xmlbuilder:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-core:2.17.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
+    <orderEntry type="library" name="Maven: io.minio:minio:8.3.7" level="project" />
+    <orderEntry type="library" name="Maven: com.carrotsearch.thirdparty:simple-xml-safe:2.7.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:30.1.1-jre" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.3" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.3.72" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.69" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-compress:1.21" level="project" />
+    <orderEntry type="library" name="Maven: org.xerial.snappy:snappy-java:1.1.8.4" level="project" />
+    <orderEntry type="library" name="Maven: com.qiniu:qiniu-java-sdk:7.9.4" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.7" level="project" />
+    <orderEntry type="module" module-name="blade-common" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-launch:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-undertow:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-core:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.xnio:xnio-api:3.8.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.wildfly.common:wildfly-common:1.5.2.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.wildfly.client:wildfly-client-config:1.0.1.Final" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.xnio:xnio-nio:3.8.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.threads:jboss-threads:3.1.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-servlet:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec:2.0.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-websockets-jsr:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:2.0.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.servlet:jakarta.servlet-api:4.0.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-ribbon:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-ribbon:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.ribbon:ribbon-transport:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-contexts:0.4.9" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-servo:0.4.9" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: javax.inject:javax.inject:1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty:0.4.9" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-core:2.3.0" level="project" />
+    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-httpclient:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-client:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-core:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: javax.ws.rs:jsr311-api:1.1.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey.contribs:jersey-apache-client4:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.servo:servo-core:0.12.21" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-commons-util:0.3.0" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-loadbalancer:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-statistics:0.1.1" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex:rxjava:1.3.8" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.80" level="project" />
+    <orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.7.22" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.14.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.14" level="project" />
+    <orderEntry type="library" name="Maven: org.jdom:jdom2:2.0.6" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.2" level="project" />
+    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.5.30" level="project" />
+    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
+    <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.4" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.4" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.12" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.7" level="project" />
+    <orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-util:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-metrics:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.micrometer:micrometer-core:1.6.3" level="project" />
+    <orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.12" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.latencyutils:LatencyUtils:2.0.3" level="project" />
+    <orderEntry type="library" name="Maven: io.micrometer:micrometer-registry-prometheus:1.6.3" level="project" />
+    <orderEntry type="library" name="Maven: io.prometheus:simpleclient_common:0.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-core:1.8.3" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.8" level="project" />
+    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-tenant:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:3.3.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-api-crypto:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.3.9.RELEASE" level="project" />
+    <orderEntry type="module" module-name="blade-dict-api" />
+    <orderEntry type="module" module-name="blade-scope-api" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-datascope:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
+  </component>
+</module>

+ 22 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java

@@ -290,4 +290,26 @@ public class ArchiveTreeContractController extends BladeController {
 		return R.status(archiveTreeContractService.submitArchiveTreeSort(listSort));
 	}
 
+	/**
+	 * 初始化归档树根节点
+	 */
+	@PostMapping("/syncProjectTree")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "初始化项目级归档树根节点", notes = "传入token")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "Id", value = "节点id")
+	})
+	public R<ArchiveTree> syncProjectTree(Long id) {
+
+		ArchiveTreeContract archiveTree = archiveTreeContractService.getById(id);
+		if (archiveTree == null ) {
+			return R.fail(200, "节点错误");
+		}
+		boolean b = archiveTreeContractService.syncProjectTree(archiveTree);
+		if (b) {
+			return R.success("同步成功");
+		}
+		return R.fail(200, "同步失败");
+	}
+
 }

+ 23 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeController.java

@@ -241,4 +241,27 @@ public class ArchiveTreeController extends BladeController {
         return R.data(ruleMap);
     }
 
+
+    /**
+     * 初始化归档树根节点
+     */
+    @PostMapping("/syncProjectTree")
+    @ApiOperationSupport(order = 12)
+    @ApiOperation(value = "初始化项目级归档树根节点", notes = "传入token")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "Id", value = "节点id")
+    })
+    public R<ArchiveTree> syncProjectTree(Long id) {
+
+        ArchiveTree archiveTree = archiveTreeService.getById(id);
+        if (archiveTree == null ) {
+            return R.fail(200, "节点错误");
+        }
+        boolean b = archiveTreeService.syncProjectTree(archiveTree);
+        if (b) {
+            return R.success("同步成功");
+        }
+        return R.fail(200, "同步失败");
+    }
+
 }

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -299,9 +299,10 @@ public class FormulaController {
                     }
                 }
                 if(data.size()>dw.length){
-                  //  String moreData = data.stream().skip(dw.length).map(StringUtils::handleNull).collect(Collectors.joining(StringPool.SEMICOLON));
+                   // String moreData = data.stream().skip(dw.length).map(StringUtils::handleNull).collect(Collectors.joining(StringPool.SEMICOLON));
+                    List<Object> moreData = data.stream().skip(dw.length).map(StringUtils::handleNull).collect(Collectors.toList());
                     // 频率添加表单
-                    this.wbsTreeContractService.addTabInfoByRan(info,data,dw.length);
+                    this.wbsTreeContractService.addTabInfoByRan(info,moreData,dw);
                 }
             }
             /*保存实测值参数*/

+ 8 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -41,6 +41,7 @@
         <result column="archive_auto_node_id" property="archiveAutoNodeId"/>
         <result column="archive_auto_group_select" property="archiveAutoGroupSelect"/>
         <result column="archive_auto_group_id" property="archiveAutoGroupId"/>
+        <result column="tree_code" property="treeCode"/>
     </resultMap>
 
 
@@ -97,6 +98,8 @@
         <result column="archive_auto_node_id" property="archiveAutoNodeId"/>
         <result column="archive_auto_group_select" property="archiveAutoGroupSelect"/>
         <result column="archive_auto_group_id" property="archiveAutoGroupId"/>
+        <result column="tree_sort" property="treeSort"/>
+        <result column="tree_code" property="treeCode"/>
     </resultMap>
 
 
@@ -186,6 +189,7 @@
         d.archive_auto_node_id,
         d.archive_auto_group_select,
         d.archive_auto_group_id,
+        tree_sort,
         (SELECT CASE WHEN count(1) > 0 THEN 1 ELSE 0 END FROM m_archive_tree_contract WHERE parent_id = d.id and is_deleted = 0 and project_id = #{projectId})
         AS "has_children"
         FROM
@@ -224,7 +228,10 @@
         archive_auto_type,
         archive_auto_node_id,
         archive_auto_group_select,
-        archive_auto_group_id
+        archive_auto_group_id,
+        from_id,
+        tree_sort,
+        tree_code
         FROM m_archive_tree_contract
         WHERE is_deleted = 0 and project_id = #{projectId}
         <if test=" tenantId!=null and tenantId!='' ">

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -48,6 +48,7 @@
 
     <resultMap id="WbsTreeResultMap2" type="org.springblade.manager.vo.WbsTreeVO2">
         <id column="id" property="id"/>
+        <result column="primaryKeyId" property="primaryKeyId"/>
         <result column="parent_id" property="parentId"/>
         <result column="title" property="title"/>
         <result column="value" property="value"/>
@@ -401,7 +402,7 @@
     </select>
 
     <select id="tree2" resultMap="WbsTreeResultMap2">
-        select
+        select p_key_id as "primaryKeyId",
         id, parent_id , node_name as title,type as "type", id as "value", id as "key" ,
         node_type AS "nodeType", is_exist_form AS "isExistForm",major_data_type,
         wbs_type as "wbsType"

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java

@@ -79,5 +79,7 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
 
 	boolean submitDisplayConfigTree(String ids);
 
+	public boolean syncProjectTree(ArchiveTreeContract dstNode);
+
 
 }

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeService.java

@@ -18,6 +18,8 @@ public interface IArchiveTreeService extends BaseService<ArchiveTree> {
 
 	boolean submit(ArchiveTreeDTO archiveTreeDTO);
 
+	public boolean syncProjectTree(ArchiveTree archiveTree);
+
 //	List<ArchiveTreeVO> lazyTree(String tenantId, Long parentId);
 //	List<ArchiveTreeVO> tree(String tenantI, Integer disPlayTree, Integer nodeType);
 

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java

@@ -55,5 +55,5 @@ public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
     List<WbsContractNodeVo> appSearchConcealedNodes(long primaryKeyId, Long contractId);
 
     // 频率设计值  添加表单
-    boolean addTabInfoByRan(RangeInfo info,List<Object> moreData,Integer excLenght) throws FileNotFoundException;
+    boolean addTabInfoByRan(RangeInfo info,List<Object> moreData,String[] excLenght) throws FileNotFoundException;
 }

+ 160 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

@@ -17,7 +17,7 @@
 package org.springblade.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.mixsmart.utils.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import lombok.AllArgsConstructor;
@@ -74,6 +74,8 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 
 	private final IProjectInfoService projectInfoService;
 
+	private final ArchiveTreeContractSyncImpl archiveTreeContractSync;
+
 
 	@Override
 	public IPage<ArchiveTreeContractVO> selectArchiveTreeContractPage(IPage<ArchiveTreeContractVO> page, ArchiveTreeContractVO archiveTreeContract) {
@@ -326,4 +328,161 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		return code;
 	}
 
+	/**
+	 *  同步项目级
+	 * @param dstNode
+	 * @return
+	 */
+	public boolean syncProjectTree(ArchiveTreeContract dstNode) {
+		if ( dstNode.getProjectId() == 0) {
+			return false;
+		}
+
+		ArchiveTree srcNode = null;
+		if (dstNode.isContractRoot() && dstNode.getFromId() == null ) {
+			ArchiveTreeContract parentNode = this.getById(dstNode.getParentId());
+			if (parentNode!= null) {
+				srcNode = archiveTreeService.getById(parentNode.getFromId());
+			}
+		}else {
+			srcNode = archiveTreeService.getById(dstNode.getFromId());
+		}
+
+		if (srcNode == null ) {
+			return false;
+		}
+
+		// 0,业主树同步, 1,根节点同步,  2. 建设单位或者施工单位同步添加合同段 3.  合同段内部同步
+
+
+		List<ArchiveTreeVO2> srcTrees = archiveTreeService.tree2(AuthUtil.getTenantId(), dstNode.getProjectId(),
+				null, null,null,false);
+		List<ArchiveTreeContractVO2> dstTrees = this.tree2(AuthUtil.getTenantId(),null,null,dstNode.getProjectId(),null);
+		List<ArchiveTreeContract> saveList = new ArrayList<>();
+		ArchiveTreeContractVO2 dstTree = dstTrees.get(0);
+		if (dstTree == null ) {
+			return false;
+		}
+
+		List<ContractInfo> contractInfos = contractInfoService.selectContractInfoPageByPid(dstNode.getProjectId().toString());
+		Map<Long,ContractInfo> contractMap = new LinkedHashMap<>();
+
+		boolean bHasContract = true;
+		if (contractInfos == null || contractInfos.size() == 0) {
+			bHasContract = false;
+		}
+
+		//预处理
+		if (bHasContract) {
+
+			for (ContractInfo contractInfo: contractInfos) {
+				contractInfo.setStatus(0);
+				contractMap.put(contractInfo.getId(),contractInfo);
+			}
+
+			for (ArchiveTreeContractVO2 ar: dstTree.getChildren()) {
+				//施工和监理
+
+				ar.setValue(1L);
+				if (ar.getTreeCode()!= null && (
+						ar.getTreeCode().equals("C") || ar.getTreeCode().equals("S"))) {
+
+					if (ar.getChildren() == null ) {
+						continue;
+					}
+
+					//处理合同节点
+					int contractNum = 0;
+					for (ArchiveTreeContractVO2 contractNode : ar.getChildren()) {
+						if (contractNode.isContractRoot()){
+							//需要删除
+							contractNum++;
+
+							contractNode.setValue(1L);
+
+							//设置哪个合同已经设置了。
+							ContractInfo c = contractMap.get(Long.parseLong(contractNode.getTreeCode()));
+							if (c!= null) {
+								c.setStatus(1);
+							}
+						}
+					}
+
+					if (contractNum == 0) {
+						//删除树的子节点
+						deleteTreeChildren(ar);
+					}
+
+
+					for(Map.Entry<Long,ContractInfo> entry : contractMap.entrySet()){
+						ContractInfo contractInfo = entry.getValue();
+
+						if (contractInfo.getStatus() == 0) {
+							if (ar.getTreeCode().equals("C") && contractInfo.getContractType() == 1) {
+								//复制施工
+							}
+							if (ar.getTreeCode().equals("S") && contractInfo.getContractType() == 2) {
+								//复制监理
+							}
+						}
+					}
+
+				}
+			}
+		}
+
+
+		if (!bHasContract) {
+			saveList = archiveTreeContractSync.getNormalSaveList(srcNode.getId(),
+					srcTrees.get(0),dstNode.getId(),dstTrees.get(0));
+		}else {
+
+			ArchiveTreeContractVO2 dstScopeTree = ForestNodeMergerEx.getSubTreeByValue(dstTree,dstNode.getId(),1L);
+			for (ArchiveTreeContractVO2 ar: dstTree.getChildren()) {
+				if (StringUtils.isEmpty(ar.getTreeCode())) {
+					//同步
+					if (dstNode.getParentId() == 0 || dstScopeTree.getId() == ar.getId()) {
+						//同步
+						List<ArchiveTreeContract> tmpSaveList = archiveTreeContractSync.getNormalSaveList(srcNode.getId(),
+								srcTrees.get(0),dstNode.getId(),ar);
+						saveList.addAll(tmpSaveList);
+					}
+
+
+				}else {
+
+					for (ArchiveTreeContractVO2 contractNode : ar.getChildren()){
+						if (dstNode.getParentId() == 0 || dstScopeTree.getId() == contractNode.getId()) {
+
+							List<ArchiveTreeContract> tmpSaveList = archiveTreeContractSync.getNormalSaveList(srcNode.getId(),
+									srcTrees.get(0),dstNode.getId(),contractNode);
+							saveList.addAll(tmpSaveList);
+						}
+					}
+
+				}
+			}
+		}
+
+		this.saveBatch(saveList);
+		return true;
+	}
+
+	/**
+	 * 删除树的所有子节点
+	 * @param tree
+	 * @return
+	 */
+	public  boolean deleteTreeChildren(ArchiveTreeContractVO2 tree) {
+		List<Long> ids = new ArrayList<>();
+
+		ForestNodeMergerEx.getChildrenIds(tree,ids);
+
+		return this.deleteLogic(ids);
+	}
+
+
+
+
+
 }

+ 36 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java

@@ -0,0 +1,36 @@
+package org.springblade.manager.service.impl;
+
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.manager.entity.ArchiveTree;
+import org.springblade.manager.entity.ArchiveTreeContract;
+import org.springblade.manager.utils.ForestNodeMergerEx;
+import org.springblade.manager.vo.ArchiveTreeContractVO2;
+import org.springblade.manager.vo.ArchiveTreeVO2;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+public class ArchiveTreeContractSyncImpl {
+
+    public List<ArchiveTreeContract> getNormalSaveList(Long srcNodeId,ArchiveTreeVO2 srcTrees,Long dstNodeId,ArchiveTreeContractVO2 dstTrees){
+        List<ArchiveTreeContract> saveList = new ArrayList<>();
+        ArchiveTreeVO2 srcTree = ForestNodeMergerEx.getSubTree(srcTrees,srcNodeId);
+        ArchiveTreeContractVO2 dstTree = ForestNodeMergerEx.getSubTree(dstTrees,dstNodeId);
+        List<ArchiveTreeContractVO2> addDst = new ArrayList<>();
+
+        ForestNodeMergerEx.syncTreeList(srcTree ,dstTree,addDst);
+
+
+        for (ArchiveTreeContractVO2 addD : addDst) {
+            ArchiveTreeContract archiveTreeContract = new ArchiveTreeContract(addD);
+            archiveTreeContract.setCreateUser(AuthUtil.getUserId());
+            saveList.add(archiveTreeContract);
+        }
+
+        return saveList;
+    }
+}

+ 58 - 44
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java

@@ -142,49 +142,6 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         return true;
     }
 
-    public boolean initArchiveProjectTree1(Long projectId) {
-        QueryWrapper<ArchiveTree> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("parent_id", 0);
-        queryWrapper.eq("project_id", 0);
-        queryWrapper.eq("status", 1);
-        queryWrapper.eq("is_deleted", 0);
-        ArchiveTree archiveTree1 = archiveTreeMapper.selectOne(queryWrapper);
-        if (archiveTree1 != null) {
-            throw new ServiceException("根节点已存在,请先删除后再进行初始化");
-        }
-
-        List<ArchiveTreeVO2> sysTrees = this.tree2(AuthUtil.getTenantId(), projectId,null, null,null,false);
-        if (sysTrees == null || sysTrees.size() == 0) {
-            return false;
-        }
-
-        List<ArchiveTreeVO2> trees = new ArrayList<>();
-        ForestNodeMergerEx.getTreeList(sysTrees.get(0),trees);
-
-        List<ArchiveTree> archiveTrees = new ArrayList<>();
-        Map<Long,Long> oldNewMap = new LinkedHashMap<>();
-
-        Map<Long,ArchiveTreeVO2> archiveMap = new LinkedHashMap<>();
-
-        for (ArchiveTreeVO2 archiveTreeVO :trees) {
-            oldNewMap.put(archiveTreeVO.getId(), SnowFlakeUtil.getId());
-            archiveMap.put(archiveTreeVO.getId(), archiveTreeVO);
-        }
-        oldNewMap.put(0L,0L);
-
-        for (ArchiveTreeVO2 archiveTreeVO :trees) {
-
-            ArchiveTree archiveTree = new ArchiveTree(archiveTreeVO);
-            archiveTree.setId(oldNewMap.get(archiveTreeVO.getId()));
-            archiveTree.setParentId(oldNewMap.get(archiveTreeVO.getParentId()));
-            archiveTree.setCreateUser(AuthUtil.getUserId());
-            archiveTree.setProjectId(projectId);
-            archiveTrees.add(archiveTree);
-        }
-
-
-        return true;
-    }
 
 
 //    @Override
@@ -401,6 +358,13 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         List<WbsTreeVO2> wbsTreeVO2List = new ArrayList<>();
         ForestNodeMerger.getTreeList(wbsTreeVO2s.get(0),wbsTreeVO2List);
 
+        Map<Long,Long> idPkidMap = new LinkedHashMap<>();
+        if (projectId != 0) {
+            for (WbsTreeVO2 wbsTreeVO2:wbsTreeVO2List) {
+                idPkidMap.put(wbsTreeVO2.getId(),wbsTreeVO2.getPrimaryKeyId());
+            }
+        }
+
         //遍历构建
         for (WbsTreeVO2 wbsTreeVO2:wbsTreeVO2List) {
             //只展示指定层级之上的
@@ -413,11 +377,23 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
                 continue;
             }
             ArchiveTreeVO2 archiveTree = new ArchiveTreeVO2();
+            archiveTree.setTitle(wbsTreeVO2.getTitle());
+
             archiveTree.setIswbsNode(true);
             archiveTree.setId(wbsTreeVO2.getId());
             archiveTree.setParentId(wbsTreeVO2.getParentId());
-            archiveTree.setTitle(wbsTreeVO2.getTitle());
             archiveTree.setExtId(wbsTreeVO2.getId());
+            if (projectId != 0) {
+                archiveTree.setId(idPkidMap.get(wbsTreeVO2.getId()));
+                int i = 0;
+                Long pid = idPkidMap.get(wbsTreeVO2.getParentId());
+                if (pid == null) {
+                    pid = 0L;
+                }
+                archiveTree.setParentId(pid);
+                archiveTree.setExtId(idPkidMap.get(wbsTreeVO2.getId()));
+            }
+
             archiveTree.setDisplayHierarchy(level.toString());
             archiveTreeList.add(archiveTree);
         }
@@ -791,4 +767,42 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         }
         return map;
     }
+
+
+    public boolean syncProjectTree(ArchiveTree dstNode) {
+        if (dstNode.getFromId() == null || dstNode.getProjectId() == 0) {
+            return false;
+        }
+
+        ArchiveTree srcNode = this.getById(dstNode.getFromId());
+        if (srcNode == null || srcNode.getProjectId() != 0) {
+            return false;
+        }
+
+        List<ArchiveTreeVO2> srcTrees = this.tree2(AuthUtil.getTenantId(), 0L,null, null,null,false);
+        List<ArchiveTreeVO2> dstTrees = this.tree2(AuthUtil.getTenantId(), dstNode.getProjectId(),null, null,null,false);
+
+        ArchiveTreeVO2 srcTree = ForestNodeMergerEx.getSubTree(srcTrees.get(0),srcNode.getId());
+        ArchiveTreeVO2 dstTree = ForestNodeMergerEx.getSubTree(dstTrees.get(0),dstNode.getId());
+        List<ArchiveTreeVO2> addDst = new ArrayList<>();
+
+        ForestNodeMergerEx.syncTreeList(srcTree ,dstTree,addDst);
+
+        List<ArchiveTree> saveList = new ArrayList<>();
+        for (ArchiveTreeVO2 addD : addDst) {
+            ArchiveTree archiveTree = new ArchiveTree(addD);
+            archiveTree.setCreateUser(AuthUtil.getUserId());
+            archiveTree.setProjectId(dstNode.getProjectId());
+
+            saveList.add(archiveTree);
+        }
+
+        //刷新treeCode
+
+        //相同的属性刷新?
+
+        this.saveBatch(saveList);
+
+        return true;
+    }
 }

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -137,7 +137,7 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         List<WbsTreeContractTreeAllVO> wbsTreeContractVOS = baseMapper.tree5(Long.parseLong(contractId));
 //        if (ObjectUtils.isNotEmpty(type) && type == 1) {
         //获取所有已填报信息
-        Map<String, Long> allTable = informationQueryClient.getTreeAllTable(contractId);
+  /*      Map<String, Long> allTable = informationQueryClient.getTreeAllTable(contractId);
         Set<String> keySet = allTable.keySet();
         for (String key : keySet) {
             for (WbsTreeContractTreeAllVO vo : wbsTreeContractVOS) {
@@ -151,7 +151,7 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
             if (wtc.getSubmitCounts() == null) {
                 wtc.setSubmitCounts(0L);
             }
-        });
+        });*/
 //        }
         return buildWbsTreeByStreamByTreeAll(wbsTreeContractVOS);
     }

+ 4 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -1076,8 +1076,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
     @Override
     public R getBussPdfInfo(Long pkeyId) throws Exception {
-        //String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-        String file_path = "/Users/hongchuangyanfa/Desktop/";
+        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        //String file_path = "/Users/hongchuangyanfa/Desktop/";
         WbsTreeContract wbsTreeContract = wbsTreeContractService.getBaseMapper().selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, pkeyId));
 
@@ -1381,8 +1381,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
     @Override
     public void getBussPdfs(String nodeId, String classify, String contractId, String projectId) throws Exception {
-        //String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
-        String file_path = "/Users/hongchuangyanfa/Desktop/";
+        String file_path = ParamCache.getValue(CommonConstant.SYS_LOCAL_URL);
+        //String file_path = "/Users/hongchuangyanfa/Desktop/";
         // 获取有权限的节点信息
         List<AppWbsTreeContractVO> wbsTreeContractList = wbsTreeContractService.searchNodeAllTable(nodeId, classify, contractId, projectId);
         List<String> data = new ArrayList<>();

+ 15 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -358,7 +358,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
     // 频率添加表单
     @Override
-    public boolean addTabInfoByRan(RangeInfo info,List<Object> moreData,Integer excLenght) throws FileNotFoundException {
+    public boolean addTabInfoByRan(RangeInfo info,List<Object> moreData,String[] excLenght) throws FileNotFoundException {
         WbsTreeContract wbsInfo = this.baseMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
                 .eq(WbsTreeContract::getPKeyId, info.getPkId()));
 
@@ -367,14 +367,15 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                 .eq(WbsTreeContract::getId, wbsInfo.getId())
                 .eq(WbsTreeContract::getContractId, wbsInfo.getContractId())
                 .eq(WbsTreeContract::getParentId, wbsInfo.getParentId()));
-        List<WbsTreeContract> wbsTreeContractList2 = wbsTreeContractList.stream().filter(wbsTreeContract -> wbsTreeContract.getIsCopeTab() ==null || wbsTreeContract.getIsCopeTab()!=2).sorted(Comparator.comparing(WbsTreeContract::getCreateTime).reversed()).collect(Collectors.toList());
+        List<WbsTreeContract> wbsTreeContractList2 = wbsTreeContractList.stream().filter(wbsTreeContract -> wbsTreeContract.getIsCopeTab() ==null || wbsTreeContract.getIsCopeTab()==3).sorted(Comparator.comparing(WbsTreeContract::getCreateTime).reversed()).collect(Collectors.toList());
         // 判读需要添加几张表
         long tabGroupId = SnowFlakeUtil.getId();
-
         List<WbsTreeContract> addList = new ArrayList<>();
 
-        double tabCount = moreData.size() / excLenght - wbsTreeContractList2.size()+1;
-        double tabsCount  = Math.ceil(tabCount);
+        //计算张数
+        double tabCount = moreData.size() / Double.parseDouble(excLenght.length+"") ;
+        double tabsCount  = Math.ceil(tabCount)- wbsTreeContractList2.size()+1;
+        int maxIndex=0;
         if(tabsCount>=1){
             for(int i =0 ;i<tabsCount;i++){
                 long newPkId = SnowFlakeUtil.getId();
@@ -387,16 +388,23 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
                 if (nodeName.indexOf("_PL_") >= 0) {
                     String[] oldName = nodeName.split("_PL_");
-                    nodeName = oldName[0] + "_PL_" + (Integer.parseInt(oldName[1]) + 1);
+                    if(i==0){
+                        maxIndex = Integer.parseInt(oldName[1]);
+                    }
+                    maxIndex =maxIndex+1 ;
+                    nodeName = oldName[0] + "_PL_" + maxIndex;
                 } else {
-                    nodeName = nodeName + "_PL_" + 1;
+                    maxIndex =maxIndex+1 ;
+                    nodeName = nodeName + "_PL_" + maxIndex;
                 }
+
                 wbsTreeContract.setNodeName(nodeName);
                 wbsTreeContract.setIsCopeTab(1);
                 wbsTreeContract.setIsTabPdf(1); // pdf 不能预览
                 wbsTreeContract.setIsBussShow(1); // 是否隐藏表
                 wbsTreeContract.setTabFileType(1);//没有上传附件
                 wbsTreeContract.setPdfUrl("");
+                wbsTreeContract.setIsCopeTab(3); // 代表频率
                 addList.add(wbsTreeContract);
             }
             // 插入数据

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/FileUtils.java

@@ -409,6 +409,9 @@ public class FileUtils {
 
 
     public static void main11(String[] args) throws FileNotFoundException {
+       /* double a= 2;
+        double maxData = Math.ceil(a/7);
+        System.out.println(maxData);*/
 
         /*File file1 = ResourceUtil.getFile("/Users/hongchuangyanfa/fsdownload/1633774811681390592.html");
         FileInputStream fileInputStream = new FileInputStream(file1);

+ 157 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/ForestNodeMergerEx.java

@@ -1,9 +1,16 @@
 package org.springblade.manager.utils;
 
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.tool.node.INode;
 import org.springblade.common.utils.INodeEx;
+import org.springblade.manager.vo.ArchiveTreeContractVO2;
+import org.springframework.beans.BeanUtils;
 
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 public class ForestNodeMergerEx {
     public static <T extends INodeEx<T>> List<T> merge(List<T> items) {
@@ -37,5 +44,155 @@ public class ForestNodeMergerEx {
         }
     }
 
+    public static <T extends INodeEx<T>> void getChildrenIds(T tree, List<Long> ids){
+        if (tree == null) {
+            return;
+        }
+
+        List<T> nodes = new ArrayList<>();
+        getTreeList(tree,nodes);
+
+        ids = nodes.stream().map(o->o.getId()).collect(Collectors.toList());
+        if (ids.size() > 0) {
+            ids.remove(0);
+        }
+    }
+
+
+    public static <T extends INodeEx<T>> T getSubTree(T tree,Long nodeId) {
+        List<T> srcList = new ArrayList<>();
+
+        getTreeList(tree,srcList);
+
+        for (T src : srcList) {
+            if (src.getId().equals(nodeId)) {
+                return  src;
+            }
+        }
+        return null;
+    }
+
+    public static <T extends INodeEx<T>> T getSubTreeByValue(T tree,Long srcNodeId,Long value) {
+        List<T> srcList = new ArrayList<>();
+
+        getTreeList(tree,srcList);
+
+        Map<Long,T> map = new LinkedHashMap<>();
+        for (T src : srcList) {
+            map.put(src.getId(),src);
+        }
+
+        T srcNode = map.get(srcNodeId);
+        while (true ) {
+            if (srcNode == null || srcNode.getValue() == value) {
+                break;
+            }
+            srcNode = map.get(srcNode.getParentId());
+        }
+        return srcNode;
+    }
+
+
+
+    public static <T extends INodeEx<T>,E extends INodeEx<E>> void syncTreeList(T srcTree, E dstTree, List<E> outList){
+        List<T> srcList = new ArrayList<>();
+        List<T> srcAddList = new ArrayList<>();
+        List<E> dstList = new ArrayList<>();
+        Map<Long,Long> srcDstMap = new LinkedHashMap<>();
+        Map<Long,E> srcTMap = new LinkedHashMap<>();
+
+
+        getTreeList(srcTree,srcList);
+        getTreeList(dstTree,dstList);
+
+        boolean bRootMatch = true;
+        if (dstTree.getFromId() != srcTree.getFromId())  {
+            bRootMatch = false;
+        }
+
+        //将dst fromID全部入MAP,看看哪个没有
+        for (E dst :dstList) {
+            if (dst.getFromId() != null ) {
+                srcDstMap.put(dst.getFromId(),dst.getId());
+                srcTMap.put(dst.getFromId(),dst);
+            }
+        }
+
+
+
+        for (T src :srcList) {
+            if (srcDstMap.get(src.getId())!= null) {
+                continue;
+            }
+            if (src.getId() == srcTree.getId() && bRootMatch == false) {
+                continue;
+            }
+
+            srcAddList.add(src);
+        }
+
+        for (T src :srcAddList) {
+            srcDstMap.put(src.getId(), SnowFlakeUtil.getId());
+        }
+
+
+        for (T srcAdd :srcAddList) {
+
+            try {
+                E e = (E) create(dstTree.getClass());
+
+                BeanUtils.copyProperties(srcAdd,e);
+                e.setId(srcDstMap.get(srcAdd.getId()) );
+
+                Long pid = srcDstMap.get(srcAdd.getParentId());
+                if (pid == null ) {
+                    pid = dstTree.getId();
+                }
+                e.setParentId(pid);
+                e.setFromId(srcAdd.getId());
+                outList.add(e);
+
+            } catch (Exception exception) {
+                exception.printStackTrace();
+                continue;
+            }
+        }
+    }
+
+    static <T> T create(Class<T> clazz) throws Exception {
+        T a = clazz.newInstance();
+        return a;
+    }
+
+    public  <T extends INodeEx<T>> void InitAncestors(T tree, String ancestors) {
+        String localAncestors = ancestors + "," + tree.getId();
+        tree.setAncestors(ancestors);
+
+        List<T> childrens = tree.getChildren();
+        if (childrens!= null) {
+            for (T child :childrens) {
+                InitAncestors(child,localAncestors);
+            }
+        }
+    }
+
+    public <T extends INodeEx<T>> void InitTreeSort(T tree, String treeSort) {
+
+        Integer localSort = 100;
+        if (tree.getSort() != null ) {
+            localSort =  tree.getSort() + 100;
+        }
+
+        String localTreeSort = treeSort + localSort ;
+        tree.setTreeSort(localTreeSort);
+
+        List<T> childrens = tree.getChildren();
+        if (childrens!= null) {
+            for (T child :childrens) {
+                InitTreeSort(child,localTreeSort);
+            }
+        }
+    }
+
 
 }

+ 324 - 0
blade-service/blade-system/blade-system.iml

@@ -0,0 +1,324 @@
+<?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="Spring" name="Spring">
+      <configuration />
+    </facet>
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+      </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="module" module-name="blade-system-api" />
+    <orderEntry type="module" module-name="blade-manager-api" />
+    <orderEntry type="module" module-name="blade-business-api" />
+    <orderEntry type="module" module-name="blade-common" />
+    <orderEntry type="module" module-name="blade-dict-api" />
+    <orderEntry type="module" module-name="blade-scope-api" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-boot:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-context:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-db:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.8" level="project" />
+    <orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.22" level="project" />
+    <orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.14.0" level="project" />
+    <orderEntry type="library" name="Maven: com.oracle:ojdbc7:12.2.0.1" level="project" />
+    <orderEntry type="library" name="Maven: org.postgresql:postgresql:42.2.22" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.5.0" level="project" />
+    <orderEntry type="library" name="Maven: com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre8" level="project" />
+    <orderEntry type="library" name="Maven: com.dameng:DmJdbcDriver18:8.1.2.79" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-secure:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-cloud:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-okhttp:10.12" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:4.9.3" level="project" />
+    <orderEntry type="library" name="Maven: com.squareup.okio:okio:2.8.0" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains.kotlin:kotlin-stdlib:1.3.72" level="project" />
+    <orderEntry type="library" name="Maven: org.jetbrains:annotations:13.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-hystrix:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-hystrix:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-ribbon:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-archaius:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-archaius:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: commons-configuration:commons-configuration:1.8" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-core:1.5.18" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-serialization:1.5.18" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.fasterxml.jackson.module:jackson-module-afterburner:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-metrics-event-stream:1.5.18" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-javanica:1.5.18" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.commons:commons-lang3:3.10" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex:rxjava-reactive-streams:1.2.1" 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-actuator:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator-autoconfigure:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-actuator:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: de.codecentric:spring-boot-admin-starter-client:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: de.codecentric:spring-boot-admin-client:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-alibaba-commons:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.spring:spring-context-support:1.0.10" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-client:2.0.4" level="project" />
+    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpasyncclient:4.1.4" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore-nio:4.4.14" level="project" />
+    <orderEntry type="library" name="Maven: org.reflections:reflections:0.9.11" level="project" />
+    <orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
+    <orderEntry type="library" name="Maven: io.prometheus:simpleclient:0.5.0" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-sentinel:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-transport-simple-http:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-transport-common:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-datasource-extension:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-annotation-aspectj:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjrt:1.9.6" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-circuitbreaker-sentinel:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-reactor-adapter:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-spring-webflux-adapter:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-spring-webmvc-adapter:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-parameter-flow-control:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.4.2" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-cluster-server-default:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-cluster-common-default:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-cluster-client-default:1.8.1" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-alibaba-sentinel-datasource:2.2.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-cache:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-redis:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-jwt:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-impl:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-api:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt-jackson:0.11.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.3.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.3.7.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.redisson:redisson:3.11.6" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-common:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.65.Final" level="project" />
+    <orderEntry type="library" name="Maven: javax.cache:cache-api:1.1.1" level="project" />
+    <orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.17.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex.rxjava2:rxjava:2.2.21" level="project" />
+    <orderEntry type="library" name="Maven: de.ruedigermoeller:fst:2.57" level="project" />
+    <orderEntry type="library" name="Maven: org.objenesis:objenesis:2.6" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
+    <orderEntry type="library" name="Maven: org.jodd:jodd-bean:5.0.13" level="project" />
+    <orderEntry type="library" name="Maven: org.jodd:jodd-core:5.0.13" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-log:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.3" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.9" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
+    <orderEntry type="library" name="Maven: net.logstash.logback:logstash-logback-encoder:6.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.janino:janino:3.0.15" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.janino:commons-compiler:3.1.4" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.2.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-mybatis:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.mybatis:mybatis-typehandlers-jsr310:1.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.11" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.11" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.2.5.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-excel:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-launch:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-undertow:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-core:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.xnio:xnio-api:3.8.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.wildfly.common:wildfly-common:1.5.2.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.wildfly.client:wildfly-client-config:1.0.1.Final" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.xnio:xnio-nio:3.8.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.threads:jboss-threads:3.1.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-servlet:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.spec.javax.annotation:jboss-annotations-api_1.3_spec:2.0.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.undertow:undertow-websockets-jsr:2.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:2.0.0.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.servlet:jakarta.servlet-api:4.0.4" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.2.11" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" />
+    <orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
+    <orderEntry type="library" name="Maven: cglib:cglib:3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.ow2.asm:asm:4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
+    <orderEntry type="library" name="Maven: org.ehcache:ehcache:3.8.1" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.4" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.4" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.12" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-swagger:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-core-tool:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:guava:30.1.1-jre" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
+    <orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.5.1" level="project" />
+    <orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-core:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-api:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-runtime:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: io.protostuff:protostuff-collectionschema:1.6.0" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.11.4" 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" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.3.12.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-auth:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-micro-spring-boot-starter:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-boot-autoconfigure:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-annotations:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-core:2.0.9" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-webmvc:2.10.5" level="project" />
+    <orderEntry type="module" module-name="blade-system-api" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.59" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.8.0" level="project" />
+    <orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.3" level="project" />
+    <orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-core:10.12" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:10.12" level="project" />
+    <orderEntry type="library" name="Maven: io.github.openfeign:feign-hystrix:10.12" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.archaius:archaius-core:0.7.7" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-core:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.github.classgraph:classgraph:4.1.7" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.15.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:2.0.0.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.3.1.Final" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.6.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" />
+    <orderEntry type="module" module-name="blade-user-api" />
+    <orderEntry type="module" module-name="blade-manager-api" />
+    <orderEntry type="module" module-name="blade-business-api" />
+    <orderEntry type="module" module-name="blade-common" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-ribbon:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-ribbon:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.ribbon:ribbon-transport:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-contexts:0.4.9" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-servo:0.4.9" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: javax.inject:javax.inject:1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty:0.4.9" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-core:2.3.0" level="project" />
+    <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-httpclient:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-client:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-core:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: javax.ws.rs:jsr311-api:1.1.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey.contribs:jersey-apache-client4:1.19.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.servo:servo-core:0.12.21" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-commons-util:0.3.0" level="project" />
+    <orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-loadbalancer:2.3.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-statistics:0.1.1" level="project" />
+    <orderEntry type="library" name="Maven: io.reactivex:rxjava:1.3.8" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.80" level="project" />
+    <orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.7.22" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.14.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.14" level="project" />
+    <orderEntry type="library" name="Maven: org.jdom:jdom2:2.0.6" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.2" level="project" />
+    <orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.5.30" level="project" />
+    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.7" level="project" />
+    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
+    <orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
+    <orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
+    <orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.68" level="project" />
+    <orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.7" level="project" />
+    <orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-util:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0" level="project" />
+    <orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-metrics:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: io.micrometer:micrometer-core:1.6.3" level="project" />
+    <orderEntry type="library" name="Maven: org.hdrhistogram:HdrHistogram:2.1.12" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.latencyutils:LatencyUtils:2.0.3" level="project" />
+    <orderEntry type="library" name="Maven: io.micrometer:micrometer-registry-prometheus:1.6.3" level="project" />
+    <orderEntry type="library" name="Maven: io.prometheus:simpleclient_common:0.9.0" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba.csp:sentinel-core:1.8.3" level="project" />
+    <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.8" level="project" />
+    <orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-tenant:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.baomidou:dynamic-datasource-spring-boot-starter:3.3.6" level="project" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-api-crypto:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:2.2.9.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.3.9.RELEASE" level="project" />
+    <orderEntry type="module" module-name="blade-dict-api" />
+    <orderEntry type="module" module-name="blade-scope-api" />
+    <orderEntry type="library" name="Maven: org.springblade:blade-starter-datascope:2.9.1.RELEASE" level="project" />
+    <orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
+  </component>
+</module>