Pārlūkot izejas kodu

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex

huangtf 2 gadi atpakaļ
vecāks
revīzija
c001099fdd
14 mainītis faili ar 523 papildinājumiem un 175 dzēšanām
  1. 1 1
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliOssBuilder.java
  2. 291 0
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliossTemplateRe.java
  3. 0 7
      blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java
  4. 2 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchivesAutoVO.java
  5. 2 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileController.java
  6. 2 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveOfflineVersionInfoController.java
  7. 147 141
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveOfflineVersionInfoServiceImpl.java
  8. 1 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  9. 37 16
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ImageClassificationFileServiceImpl.java
  10. 12 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java
  11. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java
  12. 17 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  13. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java
  14. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

+ 1 - 1
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliOssBuilder.java

@@ -57,7 +57,7 @@ public class AliOssBuilder {
 		ossProperties.setBucketName(oss.getBucketName());
 		CredentialsProvider credentialsProvider = new DefaultCredentialProvider(ossProperties.getAccessKey(), ossProperties.getSecretKey());
 		OSSClient ossClient = new OSSClient(ossProperties.getEndpoint(), credentialsProvider, conf);
-		return new AliossTemplate(ossClient, ossProperties, ossRule);
+		return new AliossTemplateRe(ossClient, ossProperties, ossRule);
 	}
 
 }

+ 291 - 0
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliossTemplateRe.java

@@ -0,0 +1,291 @@
+package org.springblade.resource.builder.oss;
+
+import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.common.utils.BinaryUtil;
+import com.aliyun.oss.model.MatchMode;
+import com.aliyun.oss.model.ObjectMetadata;
+import com.aliyun.oss.model.PolicyConditions;
+import com.aliyun.oss.model.PutObjectResult;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import lombok.SneakyThrows;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.oss.model.OssFile;
+import org.springblade.core.oss.props.OssProperties;
+import org.springblade.core.oss.rule.OssRule;
+import org.springblade.core.tool.jackson.JsonUtil;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+public class AliossTemplateRe implements OssTemplate {
+    private final OSSClient ossClient;
+    private final OssProperties ossProperties;
+    private final OssRule ossRule;
+
+    public void makeBucket(String bucketName) {
+        try {
+            if (!this.bucketExists(bucketName)) {
+                this.ossClient.createBucket(this.getBucketName(bucketName));
+            }
+
+        } catch (Throwable var3) {
+            throw var3;
+        }
+    }
+
+    public void removeBucket(String bucketName) {
+        try {
+            this.ossClient.deleteBucket(this.getBucketName(bucketName));
+        } catch (Throwable var3) {
+            throw var3;
+        }
+    }
+
+    public boolean bucketExists(String bucketName) {
+        try {
+            return this.ossClient.doesBucketExist(this.getBucketName(bucketName));
+        } catch (Throwable var3) {
+            throw var3;
+        }
+    }
+
+    public void copyFile(String bucketName, String fileName, String destBucketName) {
+        try {
+            this.ossClient.copyObject(this.getBucketName(bucketName), fileName, this.getBucketName(destBucketName), fileName);
+        } catch (Throwable var5) {
+            throw var5;
+        }
+    }
+
+    public void copyFile(String bucketName, String fileName, String destBucketName, String destFileName) {
+        try {
+            this.ossClient.copyObject(this.getBucketName(bucketName), fileName, this.getBucketName(destBucketName), destFileName);
+        } catch (Throwable var6) {
+            throw var6;
+        }
+    }
+
+    public OssFile statFile(String fileName) {
+        try {
+            return this.statFile(this.ossProperties.getBucketName(), fileName);
+        } catch (Throwable var3) {
+            throw var3;
+        }
+    }
+
+    public OssFile statFile(String bucketName, String fileName) {
+        try {
+            ObjectMetadata stat = this.ossClient.getObjectMetadata(this.getBucketName(bucketName), fileName);
+            OssFile ossFile = new OssFile();
+            ossFile.setName(fileName);
+            ossFile.setLink(this.fileLink(ossFile.getName()));
+            ossFile.setHash(stat.getContentMD5());
+            ossFile.setLength(stat.getContentLength());
+            ossFile.setPutTime(stat.getLastModified());
+            ossFile.setContentType(stat.getContentType());
+            return ossFile;
+        } catch (Throwable var5) {
+            throw var5;
+        }
+    }
+
+    public String filePath(String fileName) {
+        try {
+            return this.getOssHost().concat("/").concat(fileName);
+        } catch (Throwable var3) {
+            throw var3;
+        }
+    }
+
+    public String filePath(String bucketName, String fileName) {
+        try {
+            return this.getOssHost(bucketName).concat("/").concat(fileName);
+        } catch (Throwable var4) {
+            throw var4;
+        }
+    }
+
+    public String fileLink(String fileName) {
+        try {
+            return this.getOssHost().concat("/").concat(fileName);
+        } catch (Throwable var3) {
+            throw var3;
+        }
+    }
+
+    public String fileLink(String bucketName, String fileName) {
+        try {
+            return this.getOssHost(bucketName).concat("/").concat(fileName);
+        } catch (Throwable var4) {
+            throw var4;
+        }
+    }
+
+    public BladeFile putFile(MultipartFile file) {
+        try {
+            return this.putFile(this.ossProperties.getBucketName(), file.getOriginalFilename(), file);
+        } catch (Throwable var3) {
+            throw var3;
+        }
+    }
+
+    public BladeFile putFile(String fileName, MultipartFile file) {
+        try {
+            return this.putFile(this.ossProperties.getBucketName(), fileName, file);
+        } catch (Throwable var4) {
+            throw var4;
+        }
+    }
+
+    @SneakyThrows
+    public BladeFile putFile(String bucketName, String fileName, MultipartFile file) {
+        try {
+            return this.putFile(bucketName, fileName, file.getInputStream());
+        } catch (Throwable var5) {
+            throw var5;
+        }
+    }
+
+    public BladeFile putFile(String fileName, InputStream stream) {
+        try {
+            return this.putFile(this.ossProperties.getBucketName(), fileName, stream);
+        } catch (Throwable var4) {
+            throw var4;
+        }
+    }
+
+    public BladeFile putFile(String bucketName, String fileName, InputStream stream) {
+        try {
+            return this.put(bucketName, stream, fileName, false);
+        } catch (Throwable var5) {
+            throw var5;
+        }
+    }
+
+    public BladeFile put(String bucketName, InputStream stream, String key, boolean cover) {
+        try {
+            this.makeBucket(bucketName);
+            String originalName = key;
+            key = this.getFileName(key);
+            if (cover) {
+                this.ossClient.putObject(this.getBucketName(bucketName), key, stream);
+            } else {
+                PutObjectResult response = this.ossClient.putObject(this.getBucketName(bucketName), key, stream);
+                int retry = 0;
+
+                for(byte retryCount = 5; StringUtils.isEmpty(response.getETag()) && retry < retryCount; ++retry) {
+                    response = this.ossClient.putObject(this.getBucketName(bucketName), key, stream);
+                }
+            }
+
+            BladeFile file = new BladeFile();
+            file.setOriginalName(originalName);
+            file.setName(key);
+            file.setDomain(this.getOssHost(bucketName));
+            file.setLink(this.fileLink(bucketName, key));
+            return file;
+        } catch (Throwable var9) {
+            throw var9;
+        }
+    }
+
+    public void removeFile(String fileName) {
+        try {
+            this.ossClient.deleteObject(this.getBucketName(), fileName);
+        } catch (Throwable var3) {
+            throw var3;
+        }
+    }
+
+    public void removeFile(String bucketName, String fileName) {
+        try {
+            this.ossClient.deleteObject(this.getBucketName(bucketName), fileName);
+        } catch (Throwable var4) {
+            throw var4;
+        }
+    }
+
+    public void removeFiles(List<String> fileNames) {
+        try {
+            fileNames.forEach(this::removeFile);
+        } catch (Throwable var3) {
+            throw var3;
+        }
+    }
+
+    public void removeFiles(String bucketName, List<String> fileNames) {
+        try {
+            fileNames.forEach((fileName) -> {
+                this.removeFile(this.getBucketName(bucketName), fileName);
+            });
+        } catch (Throwable var4) {
+            throw var4;
+        }
+    }
+
+    private String getBucketName() {
+        return this.getBucketName(this.ossProperties.getBucketName());
+    }
+
+    private String getBucketName(String bucketName) {
+        return this.ossRule.bucketName(bucketName);
+    }
+
+    private String getFileName(String originalFilename) {
+        return this.ossRule.fileName(originalFilename);
+    }
+
+    public String getUploadToken() {
+        return this.getUploadToken(this.ossProperties.getBucketName());
+    }
+
+    public String getUploadToken(String bucketName) {
+        return this.getUploadToken(bucketName, (Long)this.ossProperties.getArgs().get("expireTime", 3600L));
+    }
+
+    public String getUploadToken(String bucketName, long expireTime) {
+        String baseDir = "upload";
+        long expireEndTime = System.currentTimeMillis() + expireTime * 1000L;
+        Date expiration = new Date(expireEndTime);
+        PolicyConditions policyConds = new PolicyConditions();
+        policyConds.addConditionItem("content-length-range", 0L, (long)(Integer)this.ossProperties.getArgs().get("contentLengthRange", 10485760));
+        policyConds.addConditionItem(MatchMode.StartWith, "key", baseDir);
+        String postPolicy = this.ossClient.generatePostPolicy(expiration, policyConds);
+        byte[] binaryData = postPolicy.getBytes(StandardCharsets.UTF_8);
+        String encodedPolicy = BinaryUtil.toBase64String(binaryData);
+        String postSignature = this.ossClient.calculatePostSignature(postPolicy);
+        Map<String, String> respMap = new LinkedHashMap(16);
+        respMap.put("accessid", this.ossProperties.getAccessKey());
+        respMap.put("policy", encodedPolicy);
+        respMap.put("signature", postSignature);
+        respMap.put("dir", baseDir);
+        respMap.put("host", this.getOssHost(bucketName));
+        respMap.put("expire", String.valueOf(expireEndTime / 1000L));
+        return JsonUtil.toJson(respMap);
+    }
+
+    public String getOssHost(String bucketName) {
+        String prefix = this.ossProperties.getEndpoint().contains("https://") ? "https://" : "http://";
+        if(this.ossProperties.getEndpoint().indexOf("-internal")>=0){
+            return prefix + this.getBucketName(bucketName) + "." + this.ossProperties.getEndpoint().replaceAll("-internal","").replaceFirst(prefix, "");
+        }else{
+            return prefix + this.getBucketName(bucketName) + "." + this.ossProperties.getEndpoint().replaceFirst(prefix, "");
+        }
+    }
+
+    public String getOssHost() {
+        return this.getOssHost(this.ossProperties.getBucketName());
+    }
+
+    public AliossTemplateRe(final OSSClient ossClient, final OssProperties ossProperties, final OssRule ossRule) {
+        this.ossClient = ossClient;
+        this.ossProperties = ossProperties;
+        this.ossRule = ossRule;
+    }
+}

+ 0 - 7
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/OssBuilder.java

@@ -94,11 +94,6 @@ public class OssBuilder {
                     OssRule ossRule;
                     // 若采用默认设置则开启多租户模式, 若是用户自定义oss则不开启
                     if (oss.getEndpoint().equals(ossProperties.getEndpoint()) && oss.getAccessKey().equals(ossProperties.getAccessKey()) && ossProperties.getTenantMode()) {
-                        /**
-                         * @author liuYc
-                         * @create 2023-03-31
-                         * @deprecated 重写BladeOssRule-》BladeOssRuleRe 修改文件名UUID -》原始名
-                         */
                         ossRule = new BladeOssRule(Boolean.TRUE);
                     } else {
                         ossRule = new BladeOssRule(Boolean.FALSE);
@@ -128,8 +123,6 @@ public class OssBuilder {
      */
     public Oss getOss(String tenantId, String code) {
         String key = StringUtils.isNotEmpty(tenantId) ? tenantId : OSS_TENANT_ID;
-        System.out.println("oss----"+tenantId);
-        System.out.println("oss_code=====--"+code);
         LambdaQueryWrapper<Oss> lqw = Wrappers.<Oss>query().lambda().eq(Oss::getTenantId, key);
         // 获取传参的资源编号并查询,若有则返回,若没有则调启用的配置
         String ossCode = StringUtil.isBlank(code) ? WebUtil.getParameter(OSS_PARAM_KEY) : code;

+ 2 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchivesAutoVO.java

@@ -178,5 +178,7 @@ public class ArchivesAutoVO extends ArchivesAuto {
 		private String dutyUser;
 
 		private  String archiveId;
+
+		private Long id;
 	}
 }

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

@@ -289,8 +289,8 @@ public class ArchiveFileController extends BladeController {
         //统计案卷文件大小
         Long fileSize = archiveFileClient.getAllArchiveFileSize(projectId);
         //统计表单数据大小
-        Long tableSize = wbsTreeContractClient.getAllTableFileSize(projectId);
-        String size = org.springblade.common.utils.FileUtils.formatSize(fileSize + tableSize);
+//        Long tableSize = wbsTreeContractClient.getAllTableFileSize(projectId);
+        String size = org.springblade.common.utils.FileUtils.formatSize(fileSize );
         return R.data(size);
     }
 }

+ 2 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveOfflineVersionInfoController.java

@@ -38,7 +38,7 @@ public class ArchiveOfflineVersionInfoController {
     @GetMapping("/packData")
     public R<String> packData(Long projectId) throws Exception {
         //异步调用自动打包上传,完成后修改数据库信息
-        offlineVersionInfoService.packData(1578599210897772545L);
+        offlineVersionInfoService.packData(projectId);
         return R.data("最新数据后台自动打包中,打包完成后会更新打包日期");
     }
     /**
@@ -47,7 +47,7 @@ public class ArchiveOfflineVersionInfoController {
     @ApiOperation(value = "脱机载体工具")
     @GetMapping("/getVersionInfo")
     public R<ArchiveOfflineVersionInfo> getVersionInfo(Long projectId){
-        ArchiveOfflineVersionInfo versionInfo = mapper.selectVersionInfo(1578599210897772545L);
+        ArchiveOfflineVersionInfo versionInfo = mapper.selectVersionInfo(projectId);
         String size = this.formatSize(Long.parseLong(versionInfo.getFileSize()));
         versionInfo.setFileSize(size);
         return R.data(versionInfo);

+ 147 - 141
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveOfflineVersionInfoServiceImpl.java

@@ -81,168 +81,174 @@ public class ArchiveOfflineVersionInfoServiceImpl extends BaseServiceImpl<Archiv
     }
     public void fileToSqlite(Long projectId) throws Exception {
         List<ArchiveFile> list = fileClient.getListByProjectId(projectId);
-        String localUrl = "/www/wwwroot/localClient/local_archives/alilib/";
-        for (ArchiveFile file : list) {
-            if (StringUtil.isNotBlank(file.getFileUrl())) {
-                String fileUrl = file.getFileUrl();
-                String fileName = fileUrl.substring(fileUrl.lastIndexOf('/') + 1);
-                InputStream file_out = CommonUtil.getOSSInputStream(fileUrl);
-                CommonUtil.inputStreamToFile(file_out,new File(localUrl+fileName));
-                file.setFileUrl(fileName);
-            }
-            if (StringUtil.isNotBlank(file.getPdfFileUrl())){
-                String pdfFileUrl = file.getPdfFileUrl();
-                String fileName = pdfFileUrl.substring(pdfFileUrl.lastIndexOf('/') + 1);
-                InputStream file_out = CommonUtil.getOSSInputStream(pdfFileUrl);
-                CommonUtil.inputStreamToFile(file_out,new File(localUrl+fileName));
-                file.setPdfFileUrl(fileName);
-            }
-        }
-        try  {
-            Connection conn = data.dataSource().getConnection();
-            //清空原有数据
-            Statement statement = conn.createStatement();
-            statement.execute("DELETE FROM u_archive_file");
-            statement.close();
-            //导入最新数据
-            String sql = "INSERT INTO u_archive_file (id, project_id, node_id, file_number, file_name, file_time, file_url, pdf_file_url, status, is_deleted, archive_id,create_time)" +
-                    " VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
-            PreparedStatement pstm = conn.prepareStatement(sql);
-            //pstm 绑定数据
-            int i=0;
+        if (list != null && list.size() > 0) {
+            String localUrl = "/www/wwwroot/localClient/local_archives/alilib/";
             for (ArchiveFile file : list) {
-                i++;
-                pstm.setLong(1,file.getId());
-                pstm.setLong(2, Long.parseLong(file.getProjectId()));
-                pstm.setString(3,file.getNodeId()==null?"":file.getNodeId());
-                pstm.setString(4,file.getFileNumber()==null?"":file.getFileNumber());
-                pstm.setString(5,file.getFileName());
-                pstm.setString(6,file.getFileTime());
-                pstm.setString(7,file.getFileUrl()==null?"":file.getFileUrl());
-                pstm.setString(8,file.getPdfFileUrl()==null?"":file.getPdfFileUrl());
-                pstm.setInt(9,file.getStatus());
-                pstm.setInt(10,file.getIsDeleted());
-                pstm.setLong(11,file.getArchiveId()==null?-1:file.getArchiveId());
-                pstm.setString(12,new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.getCreateTime()));
-                //添加批处理
-                pstm.addBatch();
-                if (i % 1000 == 0) {
-                    pstm.executeBatch();
-                    pstm.clearBatch();
+                if (StringUtil.isNotBlank(file.getFileUrl())) {
+                    String fileUrl = file.getFileUrl();
+                    String fileName = fileUrl.substring(fileUrl.lastIndexOf('/') + 1);
+                    InputStream file_out = CommonUtil.getOSSInputStream(fileUrl);
+                    CommonUtil.inputStreamToFile(file_out, new File(localUrl + fileName));
+                    file.setFileUrl(fileName);
+                }
+                if (StringUtil.isNotBlank(file.getPdfFileUrl())) {
+                    String pdfFileUrl = file.getPdfFileUrl();
+                    String fileName = pdfFileUrl.substring(pdfFileUrl.lastIndexOf('/') + 1);
+                    InputStream file_out = CommonUtil.getOSSInputStream(pdfFileUrl);
+                    CommonUtil.inputStreamToFile(file_out, new File(localUrl + fileName));
+                    file.setPdfFileUrl(fileName);
+                }
+            }
+            try {
+                Connection conn = data.dataSource().getConnection();
+                //清空原有数据
+                Statement statement = conn.createStatement();
+                statement.execute("DELETE FROM u_archive_file");
+                statement.close();
+                //导入最新数据
+                String sql = "INSERT INTO u_archive_file (id, project_id, node_id, file_number, file_name, file_time, file_url, pdf_file_url, status, is_deleted, archive_id,create_time)" +
+                        " VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
+                PreparedStatement pstm = conn.prepareStatement(sql);
+                //pstm 绑定数据
+                int i = 0;
+                for (ArchiveFile file : list) {
+                    i++;
+                    pstm.setLong(1, file.getId());
+                    pstm.setLong(2, Long.parseLong(file.getProjectId()));
+                    pstm.setString(3, file.getNodeId() == null ? "" : file.getNodeId());
+                    pstm.setString(4, file.getFileNumber() == null ? "" : file.getFileNumber());
+                    pstm.setString(5, file.getFileName());
+                    pstm.setString(6, file.getFileTime());
+                    pstm.setString(7, file.getFileUrl() == null ? "" : file.getFileUrl());
+                    pstm.setString(8, file.getPdfFileUrl() == null ? "" : file.getPdfFileUrl());
+                    pstm.setInt(9, file.getStatus());
+                    pstm.setInt(10, file.getIsDeleted());
+                    pstm.setLong(11, file.getArchiveId() == null ? -1 : file.getArchiveId());
+                    pstm.setString(12, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.getCreateTime()));
+                    //添加批处理
+                    pstm.addBatch();
+                    if (i % 1000 == 0) {
+                        pstm.executeBatch();
+                        pstm.clearBatch();
+                    }
                 }
+                //将批处理余下的语句执行完毕
+                pstm.executeBatch();
+                //释放资源
+                pstm.close();
+                conn.close();
+            } catch (Exception e) {
+                e.printStackTrace();
             }
-            //将批处理余下的语句执行完毕
-            pstm.executeBatch();
-            //释放资源
-            pstm.close();
-            conn.close();
-        }catch (Exception e){
-            e.printStackTrace();
         }
     }
 
     public void contractToSqlite(Long projectId){
         List<ArchiveTreeContract> list = contractClient.getListByProjectId(projectId);
-        try  {
-            Connection conn = data.dataSource().getConnection();
-            Statement statement = conn.createStatement();
-            statement.execute("DELETE FROM m_archive_tree_contract");
-            statement.close();
-            //获取执行对象
-            String sql = "INSERT INTO m_archive_tree_contract(id, project_id, parent_id, ancestors, node_name,status,is_deleted,create_time)" +
-                    "VALUES(?, ?, ?, ?, ?,?,?,?)";
-            PreparedStatement pstm = conn.prepareStatement(sql);
-            //pstm 绑定数据
-            int i=0;
-            for (ArchiveTreeContract contract : list) {
-                i++;
-                pstm.setLong(1,contract.getId());
-                pstm.setLong(2,contract.getProjectId());
-                pstm.setLong(3,contract.getParentId());
-                pstm.setString(4,contract.getAncestors());
-                pstm.setString(5,contract.getNodeName());
-                pstm.setInt(6,contract.getStatus());
-                pstm.setInt(7,contract.getIsDeleted());
-                pstm.setString(8,  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(contract.getCreateTime()));
-                //添加批处理
-                pstm.addBatch();
-                if (i % 1000 == 0) {
-                    pstm.executeBatch();
-                    pstm.clearBatch();
+        if (list != null && list.size() > 0) {
+            try {
+                Connection conn = data.dataSource().getConnection();
+                Statement statement = conn.createStatement();
+                statement.execute("DELETE FROM m_archive_tree_contract");
+                statement.close();
+                //获取执行对象
+                String sql = "INSERT INTO m_archive_tree_contract(id, project_id, parent_id, ancestors, node_name,status,is_deleted,create_time)" +
+                        "VALUES(?, ?, ?, ?, ?,?,?,?)";
+                PreparedStatement pstm = conn.prepareStatement(sql);
+                //pstm 绑定数据
+                int i = 0;
+                for (ArchiveTreeContract contract : list) {
+                    i++;
+                    pstm.setLong(1, contract.getId());
+                    pstm.setLong(2, contract.getProjectId());
+                    pstm.setLong(3, contract.getParentId());
+                    pstm.setString(4, contract.getAncestors());
+                    pstm.setString(5, contract.getNodeName());
+                    pstm.setInt(6, contract.getStatus());
+                    pstm.setInt(7, contract.getIsDeleted());
+                    pstm.setString(8, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(contract.getCreateTime()));
+                    //添加批处理
+                    pstm.addBatch();
+                    if (i % 1000 == 0) {
+                        pstm.executeBatch();
+                        pstm.clearBatch();
+                    }
                 }
+                //将批处理余下的语句执行完毕
+                pstm.executeBatch();
+                //释放资源
+                pstm.close();
+                conn.close();
+            } catch (Exception e) {
+                e.printStackTrace();
             }
-            //将批处理余下的语句执行完毕
-            pstm.executeBatch();
-            //释放资源
-            pstm.close();
-            conn.close();
-        }catch (Exception e){
-            e.printStackTrace();
         }
     }
 
     public void autoToSqlite(Long projectId){
         List<ArchivesAutoDTO> list = autoMapper.getListByProjectId(projectId);
-        String localUrl = "/www/wwwroot/localClient/local_archives/alilib/";
-        //拼接档案里文件的pdf设置allPdf
-        for (ArchivesAutoDTO dto : list) {
-            List<ArchiveFile> files = fileClient.getArchiveFileByArchivesId(dto.getId()+"","");
-            if (files != null && files.size() >0){
-                List<String> urlList = new ArrayList<>();
-                for (ArchiveFile file : files) {
-                    if (StringUtil.isNotBlank(file.getPdfFileUrl())){
-                        urlList.add(file.getPdfFileUrl());
+        if (list != null && list.size() > 0) {
+            String localUrl = "/www/wwwroot/localClient/local_archives/alilib/";
+            //拼接档案里文件的pdf设置allPdf
+            for (ArchivesAutoDTO dto : list) {
+                List<ArchiveFile> files = fileClient.getArchiveFileByArchivesId(dto.getId() + "", "");
+                if (files != null && files.size() > 0) {
+                    List<String> urlList = new ArrayList<>();
+                    for (ArchiveFile file : files) {
+                        if (StringUtil.isNotBlank(file.getPdfFileUrl())) {
+                            urlList.add(file.getPdfFileUrl());
+                        }
+                    }
+                    if (urlList.size() > 0) {
+                        Long id = SnowFlakeUtil.getId();
+                        FileUtils.mergePdfPublicMethods(urlList, localUrl + id + ".pdf");
+                        dto.setAllFilePdf(id + ".pdf");
                     }
                 }
-                if (urlList.size() > 0){
-                    Long id = SnowFlakeUtil.getId();
-                    FileUtils.mergePdfPublicMethods(urlList,localUrl+id+".pdf");
-                    dto.setAllFilePdf(id+".pdf");
-                }
-            }
 
-        }
-        try  {
-            Connection conn = data.dataSource().getConnection();
-            //清空数据
-            Statement statement = conn.createStatement();
-            statement.execute("DELETE FROM u_archives_auto");
-            statement.close();
-            //导入数据
-            String sql = "INSERT INTO u_archives_auto (id, project_id, name, file_number, unit,storage_time, is_archive,node_id, status, is_deleted,create_time,all_file_pdf)" +
-                    "VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
-            PreparedStatement pstm = conn.prepareStatement(sql);
-            //pstm 绑定数据
-            int i=0;
-            for (ArchivesAutoDTO auto : list) {
-                i++;
-                pstm.setLong(1,auto.getId());
-                pstm.setLong(2,auto.getProjectId());
-                pstm.setString(3,auto.getName());
-                pstm.setString(4,auto.getFileNumber());
-                pstm.setString(5,auto.getUnit());
-                pstm.setString(6,auto.getStorageTime());
-                pstm.setInt(7,auto.getIsArchive()==null?0:1);
-                pstm.setLong(8,auto.getNodeId());
-                pstm.setInt(9,auto.getStatus());
-                pstm.setInt(10,auto.getIsDeleted());
-                pstm.setString(11,  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(auto.getCreateTime()));
-                pstm.setString(12,auto.getAllFilePdf()==null?"":auto.getAllFilePdf());
+            }
+            try {
+                Connection conn = data.dataSource().getConnection();
+                //清空数据
+                Statement statement = conn.createStatement();
+                statement.execute("DELETE FROM u_archives_auto");
+                statement.close();
+                //导入数据
+                String sql = "INSERT INTO u_archives_auto (id, project_id, name, file_number, unit,storage_time, is_archive,node_id, status, is_deleted,create_time,all_file_pdf)" +
+                        "VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
+                PreparedStatement pstm = conn.prepareStatement(sql);
+                //pstm 绑定数据
+                int i = 0;
+                for (ArchivesAutoDTO auto : list) {
+                    i++;
+                    pstm.setLong(1, auto.getId());
+                    pstm.setLong(2, auto.getProjectId());
+                    pstm.setString(3, auto.getName());
+                    pstm.setString(4, auto.getFileNumber());
+                    pstm.setString(5, auto.getUnit());
+                    pstm.setString(6, auto.getStorageTime());
+                    pstm.setInt(7, auto.getIsArchive() == null ? 0 : 1);
+                    pstm.setLong(8, auto.getNodeId());
+                    pstm.setInt(9, auto.getStatus());
+                    pstm.setInt(10, auto.getIsDeleted());
+                    pstm.setString(11, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(auto.getCreateTime()));
+                    pstm.setString(12, auto.getAllFilePdf() == null ? "" : auto.getAllFilePdf());
 
-                //添加批处理
-                pstm.addBatch();
-                if (i % 1000 == 0) {
-                    pstm.executeBatch();
-                    pstm.clearBatch();
+                    //添加批处理
+                    pstm.addBatch();
+                    if (i % 1000 == 0) {
+                        pstm.executeBatch();
+                        pstm.clearBatch();
+                    }
                 }
+                //将批处理余下的语句执行完毕
+                pstm.executeBatch();
+                //释放资源
+                pstm.close();
+                conn.close();
+            } catch (Exception e) {
+                e.printStackTrace();
             }
-            //将批处理余下的语句执行完毕
-            pstm.executeBatch();
-            //释放资源
-            pstm.close();
-            conn.close();
-        }catch (Exception e){
-            e.printStackTrace();
         }
     }
 

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -80,7 +80,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 	@Override
 	public IPage<ArchivesAutoVO> pageByArchivesAuto(ArchivesAutoVO vo) {
-		IPage<ArchivesAutoVO> page = new Page<>();
+		IPage<ArchivesAutoVO> page = new Page<>(vo.getCurrent(),vo.getSize());
 		if (StringUtils.isNotBlank(vo.getStorageTime())) {
 			vo.setStorageTimes(Arrays.asList(vo.getStorageTime().split(",")));
 		}

+ 37 - 16
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ImageClassificationFileServiceImpl.java

@@ -30,6 +30,7 @@ import org.springblade.business.service.IImageClassificationFileService;
 import org.springblade.business.vo.TreeVo;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.entity.WbsParam;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreeContract;
@@ -145,12 +146,25 @@ public class ImageClassificationFileServiceImpl extends BaseServiceImpl<ImageCla
 
     @Override
     public String getFileTitleName(String pKeyId) {
-        WbsTreeContract wbsTreeContract = jdbcTemplate.query("select id,ancestors,contract_id,project_id,wbs_id from m_wbs_tree_contract where is_deleted = 0 and status = 1 and p_key_id = " + pKeyId, new BeanPropertyRowMapper<>(WbsTreeContract.class)).stream().findAny().orElse(null);
+        WbsTreeContract wbsTreeContract = jdbcTemplate.query("select * from m_wbs_tree_contract where is_deleted = 0 and status = 1 and p_key_id = " + pKeyId, new BeanPropertyRowMapper<>(WbsTreeContract.class)).stream().findAny().orElse(null);
         if (wbsTreeContract != null) {
+            //获取当前节点所有父级节点
+            List<WbsTreeContract> result = new ArrayList<>();
+            this.recursiveGetParentNodes(result, wbsTreeContract);
+            result.add(wbsTreeContract);
+            result.sort(Comparator.comparing(WbsTreeContract::getNodeType).thenComparing(WbsTreeContract::getParentId));
+            List<String> allNodeIds = result.stream().map(WbsTreeContract::getId).map(String::valueOf).collect(Collectors.toList());
+
             WbsParam wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + wbsTreeContract.getId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
-            if (wbsParam != null) {
-                String[] titles = wbsParam.getV().split("-");
+
+            if (ObjectUtil.isNotEmpty(wbsTreeContract.getOldId())) {
+                //表示复制、新增节点
+                wbsParam = jdbcTemplate.query("select v from m_wbs_param where is_deleted = 0 and status = 1 and v is not null and k = 'FILE_TITLE' and name = '文件题名' and node_id = " + wbsTreeContract.getOldId(), new BeanPropertyRowMapper<>(WbsParam.class)).stream().findAny().orElse(null);
+            }
+
+            if (wbsParam != null && allNodeIds.size() > 0) {
                 List<String> nodeNumber = new ArrayList<>();
+                String[] titles = wbsParam.getV().split("-");
                 for (String title : titles) {
                     if (title.contains("c") || title.contains("C")) {
                         String lastStr = title.substring(title.length() - 1);
@@ -158,31 +172,29 @@ public class ImageClassificationFileServiceImpl extends BaseServiceImpl<ImageCla
                     }
                 }
 
-                List<String> ancestors = Arrays.asList(wbsTreeContract.getAncestors().split(","));
-
                 List<String> ids = new ArrayList<>();
                 for (String index : nodeNumber) {
-                    if ("0".equals(index)) {
-                        index = "1";
-                    }
-                    if (Integer.parseInt(index) <= ancestors.size()) {
-                        String id = ancestors.get(Integer.parseInt(index));
+                    if (Integer.parseInt(index) <= result.size()) {
+                        String id = allNodeIds.get(Integer.parseInt(index));
                         if (StringUtils.isNotEmpty(id)) {
                             ids.add(id);
                         }
                     }
                 }
 
-                List<WbsTreeContract> wbsTreeContractList = jdbcTemplate.query("select node_name from m_wbs_tree_contract where is_deleted = 0 and status = 1 and project_id = " + wbsTreeContract.getProjectId() + " and contract_id = " + wbsTreeContract.getContractId() + " and wbs_id = " + wbsTreeContract.getWbsId() + " and id in(" + StringUtils.join(ids, ",") + ")", new BeanPropertyRowMapper<>(WbsTreeContract.class));
-                if (wbsTreeContractList.size() > 0) {
-                    List<String> nameList = wbsTreeContractList.stream().map(WbsTreeContract::getNodeName).collect(Collectors.toList());
+                List<WbsTreeContract> filteredList = result.stream()
+                        .filter(e -> ids.stream().anyMatch(id -> id.equals(String.valueOf(e.getId()))))
+                        .collect(Collectors.toList());
+
+                if (filteredList.size() > 0) {
+                    List<String> nameList = filteredList.stream().map(WbsTreeContract::getFullName).collect(Collectors.toList());
                     if (nameList.size() > 0) {
                         return StringUtils.join(nameList, "");
                     }
                 } else {
-                    //如果私有是空的,就去公有WBS找
-                    List<WbsTree> wbsTreeList = jdbcTemplate.query("select node_name from m_wbs_tree where is_deleted = 0 and status = 1 and id in(" + StringUtils.join(ids, ",") + ")", new BeanPropertyRowMapper<>(WbsTree.class));
-                    List<String> nameList = wbsTreeList.stream().map(WbsTree::getNodeName).collect(Collectors.toList());
+                    //如果私有WBS为空,到公有WBS获取
+                    List<WbsTree> wbsTreeList = jdbcTemplate.query("select full_name from m_wbs_tree where is_deleted = 0 and status = 1 and id in(" + StringUtils.join(ids, ",") + ")", new BeanPropertyRowMapper<>(WbsTree.class));
+                    List<String> nameList = wbsTreeList.stream().map(WbsTree::getFullName).collect(Collectors.toList());
                     if (nameList.size() > 0) {
                         return StringUtils.join(nameList, "");
                     }
@@ -192,4 +204,13 @@ public class ImageClassificationFileServiceImpl extends BaseServiceImpl<ImageCla
         return null;
     }
 
+    //反向递归获取父级
+    private void recursiveGetParentNodes(List<WbsTreeContract> result, WbsTreeContract wbsTreeContract) {
+        WbsTreeContract parentNode = jdbcTemplate.query("select * from m_wbs_tree_contract where is_deleted = 0 and status = 1 and type = 1 and parent_id != 0 and id = " + wbsTreeContract.getParentId() + " and contract_id = " + wbsTreeContract.getContractId(), new BeanPropertyRowMapper<>(WbsTreeContract.class)).stream().findAny().orElse(null);
+        if (parentNode != null) {
+            result.add(parentNode);
+            this.recursiveGetParentNodes(result, parentNode);
+        }
+    }
+
 }

+ 12 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java

@@ -64,7 +64,7 @@ import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
 @RestController
 @AllArgsConstructor
 @RequestMapping("/archiveTreeContract")
-@Api(value = "", tags = "接口")
+@Api(value = "档案归档树", tags = "档案归档树接口")
 public class ArchiveTreeContractController extends BladeController {
 
 	private final IArchiveTreeContractService archiveTreeContractService;
@@ -295,6 +295,17 @@ public class ArchiveTreeContractController extends BladeController {
 		return R.data(archiveTreeContractService.getSameGradeNode(id));
 	}
 
+	/**
+	 * 档案统计-归档树及其档案总数
+	 */
+	@GetMapping("/getArchiveTreeAndArchiveCount")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "获取归档树及其档案总数", notes = "传入节点id")
+	public R getArchiveTreeAndArchiveCount(Long projectId,Long nodeId) {
+		List<Map<String,Object>> list = archiveTreeContractService.getArchiveTreeAndArchiveCount(projectId,nodeId);
+		return R.data(list);
+	}
+
 	/**
 	 * 提交归档树手动排序
 	 */

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java

@@ -17,6 +17,7 @@
 package org.springblade.manager.mapper;
 
 
+import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.vo.ArchiveTreeContractVO;
@@ -26,6 +27,7 @@ import org.springblade.manager.vo.ArchiveTreeContractVO2;
 import org.springblade.manager.vo.ArchiveTreeVO;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  *  Mapper 接口
@@ -72,4 +74,7 @@ public interface ArchiveTreeContractMapper extends BaseMapper<ArchiveTreeContrac
 	List<ArchiveTreeContract> getListByProjectId(@Param("projectId")Long projectId);
 
 	List<ArchiveTreeContract> getSelectNodeByGroupId(@Param("projectId") Long projectId,@Param("archiveAutoGroupId") Long archiveAutoGroupId);
+
+	@MapKey("id")
+	List<Map<String, Object>> getArchiveTreeAndArchiveCount(@Param("projectId") Long projectId,@Param("nodeId") Long nodeId);
 }

+ 17 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -351,5 +351,22 @@
           AND archive_auto_group_id =#{archiveAutoGroupId}
         order by tree_sort asc
     </select>
+    <select id="getArchiveTreeAndArchiveCount" resultType="java.util.Map">
+        SELECT
+            matc1.id as id,
+            matc1.node_name as name,
+            (SELECT COUNT(*)
+             FROM u_archives_auto uaa1
+             WHERE  uaa1.is_deleted =0 and (uaa1.node_id in
+                 (select id from m_archive_tree_contract matc2 WHERE matc2.project_id = #{projectId} and matc2.ancestors like CONCAT('%',matc1.id,'%')) or uaa1.node_id = matc1.id)
+            ) as 'auto',
+            (SELECT COUNT(*)
+             FROM u_archives_auto uaa1
+             WHERE  uaa1.is_deleted =1 and (uaa1.node_id in
+                (select id from m_archive_tree_contract matc2 WHERE matc2.project_id = #{projectId} and matc2.ancestors like CONCAT('%',matc1.id,'%')) or uaa1.node_id = matc1.id)
+            ) as 'deleted',
+            if((SELECT COUNT(*) from m_archive_tree_contract matc WHERE parent_id = matc1.id)=0,false,true) as hasChildren
+        FROM m_archive_tree_contract matc1 WHERE matc1.project_id =#{projectId} and matc1.parent_id = #{nodeId}
+    </select>
 
 </mapper>

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

@@ -92,4 +92,6 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
 
 	void  fillDefaultArchiveAutoInfo(List<ArchiveTreeContract> archiveTreeContracts);
 
+	List<Map<String,Object>> getArchiveTreeAndArchiveCount(Long projectId,Long nodeId);
+
 }

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

@@ -849,10 +849,10 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		}
 	}
 
-
-
-
-
+	@Override
+	public List<Map<String, Object>> getArchiveTreeAndArchiveCount(Long projectId,Long nodeId) {
+		return baseMapper.getArchiveTreeAndArchiveCount(projectId,nodeId);
+	}
 
 
 }