Просмотр исходного кода

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

yangyj 2 лет назад
Родитель
Сommit
8673c3285a
20 измененных файлов с 348 добавлено и 35 удалено
  1. 8 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ArchiveFileClient.java
  2. 4 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProjectInfo.java
  3. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ProjectClient.java
  4. 11 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveExaminingReportController.java
  5. 60 3
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java
  6. 3 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  7. 11 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  8. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchiveAutoPdfService.java
  9. 12 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java
  10. 111 6
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExaminingReportImpl.java
  11. 66 4
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  12. 7 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/utils/ArchiveTreeUtil.java
  13. 5 0
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java
  14. 3 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.java
  15. 4 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml
  16. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ProjectClientImpl.java
  17. 3 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java
  18. 19 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  19. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java
  20. 5 6
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java

+ 8 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ArchiveFileClient.java

@@ -88,4 +88,12 @@ public interface ArchiveFileClient {
      */
     @PostMapping(API_PREFIX + "/getListByNodeID")
     List<ArchiveFile> getListByNodeID(@RequestParam String nodeId);
+
+    /**
+     * 项目下所有工序资料PDF
+     * @param projectId
+     * @return
+     */
+    @PostMapping(API_PREFIX + "/getAllPdfFileUrlByProjectIdAndFileType")
+    List<ArchiveFile> getAllPdfFileUrlByProjectIdAndFileType(@RequestParam Long projectId);
 }

+ 4 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProjectInfo.java

@@ -150,5 +150,8 @@ public class ProjectInfo extends BaseEntity {
     @ApiModelProperty(value = "电签类型 '1'安签 '2'东方中讯")
     private Integer remarkType;
 
-
+    /**
+     * 是否正在自动组卷中  0否  1是
+     */
+    private Integer isArchivesAuto;
 }

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ProjectClient.java

@@ -30,4 +30,10 @@ public interface ProjectClient {
     @GetMapping(API_PREFIX + "/getById")
     ProjectInfo getById(@RequestParam String key);
 
+    /**
+     * 根据项目ID更新自动归档状态
+     */
+    @GetMapping(API_PREFIX + "/updateIsArchivesAutoById")
+    void updateIsArchivesAutoById(@RequestParam Long id,@RequestParam Integer isArchivesAuto);
+
 }

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

@@ -14,6 +14,8 @@ import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.evisa.feign.EVisaClient;
+import org.springblade.evisa.vo.CertBeanVO;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -38,10 +40,17 @@ public class ArchiveExaminingReportController {
     private final IArchiveExaminingReportService archiveExaminingReportService;
 
     private final NewIOSSClient iossClient;
+    private final EVisaClient eVisaClient;
     @GetMapping("test")
     public String test() throws DocumentException, IOException {
-        BladeFile bladeFile = iossClient.uploadFile("124456sdf", "D:\\develop\\test\\test1.pdf");
-        return bladeFile.getLink();
+//        BladeFile bladeFile = iossClient.uploadFile("124456sdf", "D:\\develop\\test\\test1.pdf");
+        String pdfUrl =  "https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230414/f95850012b2a780deefe86bff71a36fa.pdf";
+        CertBeanVO vo = eVisaClient.onlineCheckSeal(pdfUrl);
+        if (vo == null){
+            return "签名无效";
+        }else {
+            return vo.getCertBeanVOList().get(0).getDn();
+        }
     }
 
     @GetMapping("/getList")

+ 60 - 3
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -32,7 +32,9 @@ import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.entity.ArchiveTreeContract;
+import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.feign.ArchiveTreeContractClient;
+import org.springblade.manager.feign.ProjectClient;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -63,7 +65,7 @@ public class ArchivesAutoController extends BladeController {
 
 	private final IArchiveAutoPdfService archiveAutoPdfService;
 	private final ArchiveTreeContractClient archiveTreeContractClient;
-
+	private ProjectClient projectClient;
 	/**
 	 * 详情
 	 */
@@ -275,7 +277,10 @@ public class ArchivesAutoController extends BladeController {
 	@ApiOperation(value = "获取归档树同级节点", notes = "传入节点id")
 	public R test1() {
 
-		archiveAutoPdfService.test1();
+		//archiveAutoPdfService.test1();
+		Long projectId = 1645263362890129410L;
+		List<ArchiveTreeContract> list = archiveTreeContractClient.getListByProjectId(projectId);
+		archivesAutoService.refreshFileNumberNoSlipt(list);
 		return R.data("");
 	}
 
@@ -317,9 +322,25 @@ public class ArchivesAutoController extends BladeController {
 	 */
 	@PostMapping("/archiveAutoMethod")
 	public R archiveAutoMethod(Long projectId) {
+		//先验证当前项目是否在自动组卷中,组卷中直接返回
+		ProjectInfo projectInfo = projectClient.getById(String.valueOf(projectId));
+		Integer isArchivesAuto = projectInfo.getIsArchivesAuto();
+		if(isArchivesAuto!=null && isArchivesAuto==1){
+			return R.fail("当前项目已经在自动组卷中");
+		}
+		//设置自动组卷中
+		projectClient.updateIsArchivesAutoById(projectId,1);
+
+		//将项目未锁定案卷拆卷
 		archivesAutoService.splitArchvies(projectId);
+		//项目自动组卷入口
 		archivesAutoService.archiveAutoMethod(projectId);
-		return R.data("");
+		//刷新项目档号
+		archivesAutoService.refreshFileNumberNoSlipt(projectId);
+
+		//设置自动组卷结束
+		projectClient.updateIsArchivesAutoById(projectId,0);
+		return R.data("自动组卷结束");
 	}
 
 	/**
@@ -334,6 +355,42 @@ public class ArchivesAutoController extends BladeController {
 		return R.data(url);
 	}
 
+	/**
+	 * 拆卷
+	 */
+	@PostMapping("/split")
+	@ApiOperationSupport(order = 15)
+	@ApiOperation(value = "拆卷", notes = "传入ids")
+	public R split(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(archivesAutoService.slipt(ids));
+	}
+
+	/**
+	 * 案卷迁移
+	 */
+	@PostMapping("/move")
+	@ApiOperationSupport(order = 15)
+	@ApiOperation(value = "案卷迁移", notes = "传入ids,nodeId")
+	public R move(@ApiParam(value = "主键集合", required = true) @RequestParam String ids, @RequestParam Long nodeId) {
+
+		List<ArchivesAuto> archivesAutos = archivesAutoService.listByIds(Func.toLongList(ids));
+		for (ArchivesAuto ar  :archivesAutos) {
+			ar.setNodeId(nodeId);
+		}
+
+		return R.status(archivesAutoService.updateBatchById(archivesAutos));
+	}
+
+	/**
+	 * 删除卷内文件
+	 */
+	@PostMapping("/removeFiles")
+	@ApiOperationSupport(order = 15)
+	@ApiOperation(value = "删除案卷的卷内文件", notes = "传入ids")
+	public R removeFiles(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+
+		return R.status(archivesAutoService.removeFiles(ids));
+	}
 
 
 }

+ 3 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java

@@ -86,4 +86,7 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 	List<Map<String,String>> getAllArchiveAgeByContractType(@Param("projectId") Long projectId);
 
 	List<String> getFilingUnitList(@Param("projectId") Long projectId);
+
+
+	Integer splitFiles(@Param("ids") List<Long> ids);
 }

+ 11 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -255,14 +255,14 @@
         WHERE uaa.project_id =#{projectId} and uaa.is_deleted = #{type}
     </select>
     <select id="getAllArchiveAgeByContractType" resultType="java.util.Map">
-        SELECT CASE uaa.storage_time WHEN '10' THEN '10年' WHEN '30' THEN '30年' ELSE '永久' END as name,COUNT(uaa.storage_time) as value
+        SELECT CASE uaa.storage_time WHEN '1' THEN '10年' WHEN '2' THEN '30年' ELSE '永久' END as name,COUNT(uaa.storage_time) as value
         FROM m_archive_tree_contract matc left join u_archives_auto uaa on uaa.node_id =matc.id
         WHERE matc.project_id =#{projectId} and uaa.is_deleted =0
         GROUP BY uaa.storage_time
     </select>
 <!--    档案鉴定,档案查询-->
     <select id="pageByAuthenticate" resultType="org.springblade.archive.vo.ArchivesAutoVO">
-        select uaa.*
+        select uaa.id,uaa.file_number,uaa.name,uaa.file_size,CASE uaa.storage_time WHEN '1' THEN '10年' WHEN '2' THEN '30年' ELSE '永久' END as storageTimeValue
         from(
                 select id from m_archive_tree_contract
                 where project_id = #{vo.projectId} and ancestors like concat('%', #{vo.nodeId}, '%') or id = #{vo.nodeId}
@@ -283,4 +283,13 @@
     </select>
 
 
+    <update id="splitFiles" >
+        update u_archive_file set is_archive = 0 ,archive_id = null where
+        id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+
 </mapper>

+ 2 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchiveAutoPdfService.java

@@ -2,6 +2,7 @@ package org.springblade.archive.service;
 
 import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.business.entity.ArchiveFile;
+import org.springblade.manager.entity.ArchiveTreeContract;
 
 import java.util.List;
 import java.util.Map;
@@ -28,4 +29,5 @@ public interface IArchiveAutoPdfService {
 
     //合并pdf
     String MergePdfAndUpload(List<String> urlList,String fileName,String filePath,Long projectId) ;
+
 }

+ 12 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java

@@ -20,6 +20,7 @@ import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.archive.vo.ArchivesAutoVO;
 import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.manager.entity.ArchiveTreeContract;
 
 import java.util.List;
 import java.util.Map;
@@ -62,4 +63,15 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 	void splitArchvies(Long project);
 
 	public String getMergeArchivesFile(Long archiveId);
+
+	//拆卷
+	boolean slipt(String ids);
+
+	//从案卷里删除文件
+	boolean removeFiles(String ids);
+
+
+	void refreshFileNumberNoSlipt(List<ArchiveTreeContract> archiveTreeContracts);
+
+	void refreshFileNumberNoSlipt(Long projectId);
 }

+ 111 - 6
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExaminingReportImpl.java

@@ -16,8 +16,11 @@ import org.springblade.archive.mapper.ArchiveExaminingReportMapper;
 import org.springblade.archive.service.IArchiveExaminingReportDetailService;
 import org.springblade.archive.service.IArchiveExaminingReportService;
 import org.springblade.archive.socket.WebSocketServer;
+import org.springblade.archive.utils.FileUtils;
 import org.springblade.archive.vo.ArchiveExaminingSocketVo;
 import org.springblade.archive.vo.ArchiveExaminingVo;
+import org.springblade.business.entity.ArchiveFile;
+import org.springblade.business.feign.ArchiveFileClient;
 import org.springblade.common.constant.ArchiveConstant;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.oss.model.BladeFile;
@@ -25,15 +28,17 @@ import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.evisa.feign.EVisaClient;
+import org.springblade.evisa.vo.CertBeanVO;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.resource.feign.NewISmsClient;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Date;
+import java.util.*;
 import java.util.List;
 
 /**
@@ -49,6 +54,10 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
     private final IArchiveExaminingReportDetailService detailService;
 
     private final NewIOSSClient iossClient;
+
+    private final ArchiveFileClient archiveFileClient;
+
+    private final EVisaClient eVisaClient;
     /**
      * 推送状态到前端
      * @param id
@@ -87,12 +96,29 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
         report.setId(id);
         report.setStatus(2);
         this.updateById(report);
+        //获取项目中所有档案文件的工序资料pdfUrl
+        List<ArchiveFile> files = archiveFileClient.getAllPdfFileUrlByProjectIdAndFileType(vo.getProjectId());
+        //不合格对象
+        List<Map<String,String>> mapList = new ArrayList<>();
+        int unqualifiedCount = 0;
         //检测中
             //真实性
         if (StringUtils.isNotBlank(vo.getAuthenticity()) && "1".equals(vo.getAuthenticity())) {
-            Thread.sleep(5000L);
+            //检测项目下所有工序资料PDF签章有效性
+            for (ArchiveFile file : files) {
+                if (StringUtils.isNotBlank(file.getPdfFileUrl())) {
+                    CertBeanVO cb = eVisaClient.onlineCheckSeal(file.getPdfFileUrl());
+                    if (cb == null) {
+                        Map<String, String> map = new HashMap<>();
+                        map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对固化信息有效性检测");
+                        map.put("unqualifiedObject", file.getFileName());
+                        mapList.add(map);
+                        unqualifiedCount++;
+                    }
+                }
+            }
             detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
-                    ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对固化信息有效性检测", 0, "无", 0));
+                    ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对固化信息有效性检测", unqualifiedCount, unqualifiedCount == 0 ?"无":"详见附件", unqualifiedCount == 0?0:1));
             detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
                     ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据项数据长度检测", 0, "无", 0));
             detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
@@ -170,7 +196,6 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
         }
             //安全性
         if (StringUtils.isNotBlank(vo.getSecurity()) && "1".equals(vo.getSecurity())) {
-            Thread.sleep(5000L);
             detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_SECURITY,
                     ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对系统环境中是否安装杀毒软件检测", 0, "无", 0));
             detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_SECURITY,
@@ -178,13 +203,28 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
             report.setReportDetailStatus(4);
             this.updateById(report);
         }
+        Thread.sleep(3000L);
         //生成报告,生成PDF
         report.setStatus(3);
         this.updateById(report);
         String url = this.generateReportPdf(id);
+        //生成附件PDF
+        if (mapList.size() > 0){
+            String detailPdf = this.generateReportDetailPdf(mapList);
+            List<String> PdfUrls = new ArrayList<>();
+            PdfUrls.add(url);
+            PdfUrls.add(detailPdf);
+            String localUrl = "/www/wwwroot/Users/hongchuangyanfa/Desktop/archiveExaminingPdf/123.pdf";
+//            String localUrl = "D:\\develop\\test\\123.pdf";
+            //合并pdf
+            FileUtils.mergePdfPublicMethods(PdfUrls,localUrl);
+            BladeFile bladeFile = iossClient.uploadFile("123.pdf",localUrl);
+            report.setReportPdfUrl(bladeFile.getLink());
+        }else {
+            report.setReportPdfUrl(url);
+        }
         Thread.sleep(5000L);
         //完成
-        report.setReportPdfUrl(url);
         report.setStatus(4);
         this.updateById(report);
     }
@@ -278,7 +318,72 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
             dataTable.addCell(pdfTableStyle(detail.getUnqualifiedCount()+"", size10font, high, true, true));
             dataTable.addCell(pdfTableStyle(detail.getUnqualifiedObject(), size10font, high, true, true));
             document.add(dataTable);
+        }
+        document.close();
+        writer.close();
+        BladeFile bladeFile = iossClient.uploadFile(uuid+".pdf", localUrl+uuid+".pdf");
+        if (bladeFile != null && StringUtils.isNotBlank(bladeFile.getLink())){
+            return bladeFile.getLink();
+        }else {
+            return null;
+        }
+    }
 
+    /**
+     * 生成检测报告PDF
+     */
+    private String generateReportDetailPdf(List<Map<String,String>> mapList) throws IOException, DocumentException {
+        int high = 20;
+        int widthPercentage = 100;
+        String uuid = StringUtil.randomUUID();
+        String localUrl = "/www/wwwroot/Users/hongchuangyanfa/Desktop/archiveExaminingPdf/";
+//        String localUrl = "D:\\develop\\test\\";
+        //新建一个pdf文档对象,前一个参数是纸张大小,后四个为边距
+        Document document = new Document(PageSize.A4, 5, 5, 30, 30);
+        //建立一个书写器
+        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(localUrl+uuid+".pdf"));
+        document.open();
+        //创建字体
+        BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+        //字体对象,这里可以创建一个方法
+        Font size10font = new Font(baseFont, 10, Font.NORMAL); //大小为10的正常字体
+        Font size10font2 = new Font(baseFont, 10, Font.BOLD);  //大小为14的正常字体
+        //添加标题
+        //创建第一行表格
+        PdfPTable tableName = new PdfPTable(1);
+        tableName.setWidthPercentage(widthPercentage);  //设置标题长度占纸张比例
+        //给表格赋值
+        tableName.addCell(pdfTableStyle("检测报告附件表", size10font, high, true, true));
+        //将表格添加到文档对象中
+        document.add(tableName);
+        //表头文字
+        String[] name = new String[]{ "检测项目", "不合格对象"};
+        //创建第二行,并设置第二行中的表格数
+        PdfPTable twoTable = new PdfPTable(name.length);
+        twoTable.setWidthPercentage(widthPercentage);
+        //该数组是每个表格的宽度
+        float[] floats = new float[name.length];
+        floats[0] = 0.6f;
+        floats[1] = 0.5f;
+        //循环将表头数据添加到第二行表格中
+        for (int i = 0; i < name.length; i++) {
+            PdfPCell pdfPCell = pdfTableStyle(name[i], size10font2, high, true, true);
+            pdfPCell.setBackgroundColor(new BaseColor(231,230,230));
+            twoTable.addCell(pdfPCell);
+        }
+        //设置表格的宽度
+        twoTable.setTotalWidth(floats);
+        document.add(twoTable);
+        //将数据放入表格中
+        for (int i = 0; i < mapList.size(); i++) {
+            Map<String, String> map = mapList.get(i);
+            PdfPTable dataTable = new PdfPTable(name.length);
+            dataTable.setWidthPercentage(widthPercentage);
+            dataTable.setTotalWidth(floats);
+            dataTable.addCell(pdfTableStyle(map.get("examiningItem"), size10font, high, false, true));
+            dataTable.addCell(pdfTableStyle(map.get("unqualifiedObject"), size10font, high, true, true));
+            //如果出现不相同,则合并之前的
+            document.add(dataTable);
         }
         document.close();
         writer.close();

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

@@ -20,6 +20,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
@@ -115,7 +116,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		if (archivesAutos != null && archivesAutos.size() >0) {
 			archivesAutos.stream().forEach(aa -> {
 				if (StringUtils.isNotBlank(aa.getStorageTime())) {
-					aa.setStorageTimeValue("9999".equals(aa.getStorageTime()) ? "永久" : ("30".equals(aa.getStorageTime()) ? "30年" : "10年"));
+					aa.setStorageTimeValue("3".equals(aa.getStorageTime()) ? "永久" : ("2".equals(aa.getStorageTime()) ? "30年" : "10年"));
 				}
 				if (StringUtils.isNotBlank(aa.getSecretLevel())) {
 					aa.setSecretLevelValue("1".equals(aa.getSecretLevel()) ? "机密" : ("2".equals(aa.getSecretLevel()) ? "绝密" : "秘密"));
@@ -962,6 +963,16 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		return this.list(queryWrapper);
 	}
 
+
+	/**
+	 * 刷新项目档号
+	 * @param projectId
+	 */
+	public void refreshFileNumberNoSlipt(Long projectId) {
+		List<ArchiveTreeContract> list = archiveTreeContractClient.getListByProjectId(projectId);
+		this.refreshFileNumberNoSlipt(list);
+	}
+
 	/**
 	 * 不重组的情况下刷新档号
 	 * @param archiveTreeContracts
@@ -984,7 +995,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			index =1;
 			List<ArchivesAuto> archivesAutos = findArchivesAutosByIds(ids);
 			if (archivesAutos == null || archivesAutos.size() == 0) {
-				return;
+				continue;
 			}
 			String fileNumberPrefix=subList.get(0).getFileNumberPrefix();
 			String archiveNameSuffix=subList.get(0).getArchiveNameSuffix();
@@ -1055,11 +1066,62 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				urlList.add(frontUrls[2]);
 				urlList.add(frontUrls[3]);
 			}
-
-			url = archiveAutoPdfService.MergePdfAndUpload(urlList,archivesAuto.getName(),null,archivesAuto.getProjectId());
+			String fileName = SnowFlakeUtil.getId().toString();
+			url = archiveAutoPdfService.MergePdfAndUpload(urlList,fileName,null,archivesAuto.getProjectId());
 		}
 		return  url;
 	}
 
+	/**
+	 * 拆卷
+	 * @param ids
+	 * @return
+	 */
+	public  boolean slipt(String ids) {
+
+		List orgIds = Func.toLongList(ids);
+
+		List<String> strIds = new ArrayList<>();
+		List<Long> lIds = new ArrayList<>();
+
+		//排除锁定的和单文件案卷这种
+		List<ArchivesAuto> archivesAutos = this.listByIds(orgIds);
+		for (ArchivesAuto ar: archivesAutos) {
+			if (ar.getIsLock()!= null && ar.getIsLock() == 1) {
+				continue;
+			}
+			if (ar.getIsAutoFile()!= null &&  ar.getIsAutoFile() == 1) {
+				continue;
+			}
+			lIds.add(ar.getId());
+			strIds.add(ar.getId().toString());
+		}
+
+		//更新
+		List<ArchiveFile> files = archiveFileClient.getAllArchiveFileByArchiveIds(strIds);
+		if (files != null && files.size() > 0) {
+
+			List<Long> fids = files.stream()
+					.map(ArchiveFile::getId)
+					.collect(Collectors.toList());
+			baseMapper.splitFiles(fids);
+		}
+
+		//删除案卷
+		return this.deleteLogic(lIds);
+	}
+
+	/**
+	 * 从案卷删除文件
+	 * @param ids
+	 * @return
+	 */
+	public  boolean removeFiles(String ids) {
+		List<Long> fids = Func.toLongList(ids);
+		baseMapper.splitFiles(fids);
+		return true;
+	}
+
+
 
 }

+ 7 - 2
blade-service/blade-archive/src/main/java/org/springblade/archive/utils/ArchiveTreeUtil.java

@@ -45,9 +45,14 @@ public class ArchiveTreeUtil {
                 subTreeList.add(subTree);
 
             }else {
-                for (ArchiveTreeContractVO2 contractNode : subTree.getChildren()){
-                    subTreeList.add(contractNode);
+                if (subTree.getChildren().get(0).getExtType() == 2) {
+                    for (ArchiveTreeContractVO2 contractNode : subTree.getChildren()){
+                        subTreeList.add(contractNode);
+                    }
+                }else {
+                    subTreeList.add(subTree);
                 }
+
             }
         }
 

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

@@ -208,5 +208,10 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
         return files;
     }
 
+    @Override
+    public List<ArchiveFile> getAllPdfFileUrlByProjectIdAndFileType(Long projectId) {
+        return fileMapper.getAllPdfFileUrlByProjectIdAndFileType(projectId);
+    }
+
 
 }

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

@@ -76,4 +76,7 @@ public interface ArchiveFileMapper extends BaseMapper<ArchiveFile> {
     List<ArchiveFile> getAllArchiveFileByArchiveIds(@Param("ids") List<String> ids);
 
 	public List<ArchiveFile> getListByNodeID(@Param("nodeId") String nodeId);
+
+	//后续应该加入文件类型
+    List<ArchiveFile> getAllPdfFileUrlByProjectIdAndFileType(@Param("projectId")Long projectId);
 }

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

@@ -328,5 +328,9 @@
           is_deleted = 0
           order by sort
     </select>
+    <select id="getAllPdfFileUrlByProjectIdAndFileType" resultType="org.springblade.business.entity.ArchiveFile">
+        SELECT file_name,pdf_file_url
+        FROM u_archive_file WHERE project_id = #{projectId}
+    </select>
 
 </mapper>

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ProjectClientImpl.java

@@ -26,4 +26,11 @@ public class ProjectClientImpl implements ProjectClient {
     public ProjectInfo getById(String key) {
         return projectInfoService.getById(key);
     }
+
+    @Override
+    public void updateIsArchivesAutoById(Long id,Integer isArchivesAuto) {
+        ProjectInfo projectInfo = projectInfoService.getById(id);
+        projectInfo.setIsArchivesAuto(isArchivesAuto);
+        projectInfoService.updateById(projectInfo);
+    }
 }

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

@@ -79,7 +79,9 @@ public interface ArchiveTreeContractMapper extends BaseMapper<ArchiveTreeContrac
 	@MapKey("id")
 	List<Map<String, Object>> getArchiveTreeAndArchiveCount(@Param("projectId") Long projectId,@Param("nodeId") Long nodeId);
 
-    List<ArchiveTreeContract> getArchiveTreeByNodeType(@Param("projectId")Long projectId,@Param("nodeType") Long nodeType);
+    List<ArchiveTreeContractVO3> getArchiveTreeByNodeType(@Param("projectId")Long projectId,@Param("nodeType") String nodeType);
+
+    List<ArchiveTreeContractVO3> getArchiveTreeByNodeType2(@Param("projectId")Long projectId);
 
 	List<ArchiveTreeContractVO3> getChildrenNodeByNodeId(@Param("nodeId") Long nodeId);
 }

+ 19 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -331,9 +331,9 @@
         order by tree_sort asc
     </select>
     <select id="getListByProjectId" resultType="org.springblade.manager.entity.ArchiveTreeContract">
-        select id,project_id as projectId,parent_id as parentId,ancestors,node_name as nodeName,status,is_deleted as isDeleted,create_time as createTime
+        select id,project_id as projectId,parent_id as parentId,ancestors,node_name as nodeName,status,tree_code as treeCode, ext_type as extType, is_deleted as isDeleted,create_time as createTime
         from m_archive_tree_contract
-        where project_id=#{projectId};
+        where project_id=#{projectId} and is_deleted = 0 order by tree_sort asc;
     </select>
 
 
@@ -368,14 +368,26 @@
             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>
-    <select id="getArchiveTreeByNodeType" resultType="org.springblade.manager.entity.ArchiveTreeContract">
-        SELECT * FROM m_archive_tree_contract
-        WHERE  parent_id = (select id from m_archive_tree_contract
+    <select id="getArchiveTreeByNodeType" resultType="org.springblade.manager.vo.ArchiveTreeContractVO3">
+        SELECT matc1.*,if((SELECT COUNT(*) from m_archive_tree_contract matc WHERE matc.parent_id = matc1.id)=0,true,false)
+            as notExsitChild
+        FROM m_archive_tree_contract matc1
+        WHERE  matc1.parent_id = (select id from m_archive_tree_contract
                             WHERE parent_id = (select id from m_archive_tree_contract WHERE parent_id = 0 and project_id = #{projectId})
-                            and post_type = #{nodeType})
-          and is_deleted = 0
+                            and tree_code = #{nodeType})
+          and matc1.is_deleted = 0
+    </select>
 
+    <select id="getArchiveTreeByNodeType2" resultType="org.springblade.manager.vo.ArchiveTreeContractVO3">
+        SELECT matc1.*,if((SELECT COUNT(*) from m_archive_tree_contract matc WHERE matc.parent_id = matc1.id)=0,true,false)
+            as notExsitChild
+        FROM m_archive_tree_contract matc1
+        WHERE  matc1.parent_id in (select id from m_archive_tree_contract
+                            WHERE parent_id = (select id from m_archive_tree_contract WHERE parent_id = 0 and project_id = #{projectId})
+                              and tree_code is NULL)
+          and matc1.is_deleted = 0
     </select>
+
     <select id="getChildrenNodeByNodeId" resultType="org.springblade.manager.vo.ArchiveTreeContractVO3">
         select matc1.*,if((SELECT COUNT(*) from m_archive_tree_contract matc WHERE matc.parent_id = matc1.id)=0,true,false)
             as notExsitChild

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

@@ -96,7 +96,7 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
 
 	List<Map<String,Object>> getArchiveTreeAndArchiveCount(Long projectId,Long nodeId);
 
-    List<ArchiveTreeContract> getArchiveTreeByNodeType(Long projectId, Long nodeType);
+    List<ArchiveTreeContractVO3> getArchiveTreeByNodeType(Long projectId, Long nodeType);
 
 	List<ArchiveTreeContractVO3> getChildrenNodeByNodeId(Long nodeId);
 }

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

@@ -855,17 +855,16 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	}
 
 	@Override
-	public List<ArchiveTreeContract> getArchiveTreeByNodeType(Long projectId, Long nodeType) {
+	public List<ArchiveTreeContractVO3> getArchiveTreeByNodeType(Long projectId, Long nodeType) {
 		if (nodeType == 1){
-			nodeType = 1537246243393589249L;
+			return baseMapper.getArchiveTreeByNodeType2(projectId);
 		}else if (nodeType == 2){
-			nodeType = 1537247986361782274L;
+			return baseMapper.getArchiveTreeByNodeType(projectId,"C");
 		}else if (nodeType == 3){
-			nodeType = 1537246384519335938L;
+			return baseMapper.getArchiveTreeByNodeType(projectId,"S");
 		}else {
-			nodeType = 1607574141119365122L;
+			return null;
 		}
-		return baseMapper.getArchiveTreeByNodeType(projectId,nodeType);
 	}
 
 	@Override