Эх сурвалжийг харах

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

huangtf 2 жил өмнө
parent
commit
bf259c0053
33 өөрчлөгдсөн 622 нэмэгдсэн , 143 устгасан
  1. 3 1
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchiveExaminingSocketVo.java
  2. 6 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/ArchiveFile.java
  3. 7 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ArchiveFileClient.java
  4. 2 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/OperationLogClient.java
  5. 3 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/RecycleBinClient.java
  6. 7 2
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java
  7. 14 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeContractVO3.java
  8. 7 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveExaminingReportController.java
  9. 55 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java
  10. 11 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  11. 69 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  12. 2 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchiveExaminingReportService.java
  13. 6 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java
  14. 49 19
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExaminingReportImpl.java
  15. 43 9
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  16. 3 3
      blade-service/blade-business/src/main/java/org/springblade/business/controller/EVisaTaskCheckController.java
  17. 183 79
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  18. 7 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/MetadataController.java
  19. 15 0
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java
  20. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.java
  21. 8 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/ArchiveFileMapper.xml
  22. 4 12
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  23. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/MetadataClassificationMapper.java
  24. 5 1
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/MetadataClassificationMapper.xml
  25. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/MetadataClassificationServiceImpl.java
  26. 16 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java
  27. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  28. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java
  29. 13 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  30. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java
  31. 19 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  32. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  33. 42 14
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

+ 3 - 1
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchiveExaminingSocketVo.java

@@ -14,12 +14,14 @@ import java.util.List;
 public class ArchiveExaminingSocketVo {
     private Integer status;
     private List<ArchiveExaminingReportDetail> detailList;
+    private String pdfUrl;
 
     public ArchiveExaminingSocketVo() {
     }
 
-    public ArchiveExaminingSocketVo(Integer status, List<ArchiveExaminingReportDetail> detailList) {
+    public ArchiveExaminingSocketVo(Integer status,String pdfUrl,List<ArchiveExaminingReportDetail> detailList) {
         this.status = status;
+        this.pdfUrl = pdfUrl;
         this.detailList = detailList;
     }
 }

+ 6 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/ArchiveFile.java

@@ -264,4 +264,10 @@ public class ArchiveFile extends BaseEntity {
 
 	@ApiModelProperty("打了页码的pdf文件")
 	private String pdfPageUrl;
+
+	/**
+	 * 是否案卷四要素
+	 */
+	@ApiModelProperty("是否案卷四要素,0否,1是")
+	private Integer isElement;
 }

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

@@ -74,6 +74,13 @@ public interface ArchiveFileClient {
     @PostMapping(API_PREFIX + "/getAllArchiveFileSize")
     Long getAllArchiveFileSize(@RequestBody Long projectId);
 
+    @PostMapping(API_PREFIX + "/getAllArchiveFileByArchiveIds")
+    List<ArchiveFile> getAllArchiveFileByArchiveIds(@RequestBody List<String> ids);
+
+    //批量删除档案文件
+    @PostMapping(API_PREFIX + "/batchDeleteArchiveFile")
+    void batchDeleteArchiveFile(@RequestBody List<Long> ids);
+
     @PostMapping(API_PREFIX + "/getListByNodeID")
     List<ArchiveFile> getListByNodeID(@RequestParam String nodeId,@RequestParam Integer isArchive);
 }

+ 2 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/OperationLogClient.java

@@ -3,6 +3,7 @@ package org.springblade.business.feign;
 import com.alibaba.fastjson.JSONObject;
 import org.springblade.common.constant.BusinessConstant;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -22,6 +23,7 @@ public interface OperationLogClient {
      * @param json 操作的业务数据
      */
     @PostMapping(API_PREFIX + "/saveUserOperationLog")
+    @Async
     void saveUserOperationLog(@RequestParam Integer type, @RequestParam String operationModule, @RequestParam String operationView, @RequestBody JSONObject json);
 
 }

+ 3 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/RecycleBinClient.java

@@ -1,7 +1,9 @@
 package org.springblade.business.feign;
 
+import org.checkerframework.checker.units.qual.A;
 import org.springblade.common.constant.BusinessConstant;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -26,6 +28,7 @@ public interface RecycleBinClient {
      * @param contractId 合同段ID
      */
     @PostMapping(API_PREFIX + "/saveDelBusinessData")
+    @Async
     void saveDelBusinessData(@RequestBody List<String> businessIds, @RequestParam String title, @RequestParam Integer deletedType, @RequestParam String position, @RequestParam String projectId, @RequestParam String contractId);
 
 }

+ 7 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java

@@ -132,7 +132,9 @@ public interface WbsTreeContractClient {
      * @return 结果
      */
     @PostMapping(API_PREFIX + "/queryCurrentNodeAllChild")
-    List<WbsTreeContract> queryCurrentNodeAllChild(@RequestParam Long contractId, @RequestParam Long parentId);/**
+    List<WbsTreeContract> queryCurrentNodeAllChild(@RequestParam Long contractId, @RequestParam Long parentId);
+
+    /**
      * 获取所有子节点
      *
      * @param contractId 合同段ID
@@ -164,9 +166,12 @@ public interface WbsTreeContractClient {
     WbsTreeContract queryWbsTreeContractById(@RequestParam String contractId, @RequestParam Long parseLong);
 
     @GetMapping(API_PREFIX + "/queryWbsTreeContractTreeLazy")
-    List<WbsTreeContractTreeVOS> queryWbsTreeContractTreeLazy(@RequestParam String contractId,@RequestParam Long parseLong);
+    List<WbsTreeContractTreeVOS> queryWbsTreeContractTreeLazy(@RequestParam String contractId, @RequestParam Long parseLong);
 
     @GetMapping(API_PREFIX + "/getAllTableFileSize")
     Long getAllTableFileSize(@RequestParam Long projectId);
 
+    @PostMapping(API_PREFIX + "/updateTabFileTypeByPkeyIds")
+    void updateTabFileTypeByPkeyIds(@RequestParam List<Long> updatePKeyIds);
+
 }

+ 14 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeContractVO3.java

@@ -0,0 +1,14 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+import org.springblade.manager.entity.ArchiveTreeContract;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/4/25 15:14
+ **/
+@Data
+public class ArchiveTreeContractVO3 extends ArchiveTreeContract {
+    private boolean notExsitChild;
+}

+ 7 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveExaminingReportController.java

@@ -5,6 +5,7 @@ import com.itextpdf.text.DocumentException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import lombok.extern.java.Log;
 import org.springblade.archive.entity.ArchiveExaminingReport;
 import org.springblade.archive.service.IArchiveExaminingReportService;
 import org.springblade.archive.vo.ArchiveExaminingVo;
@@ -102,4 +103,10 @@ public class ArchiveExaminingReportController {
 
     }
 
+    @GetMapping("/getCurrentExaminingInfo")
+    @ApiOperation(value = "获取当前正在检测的报告信息")
+    public R getCurrentExaminingInfo(Long reportId){
+        return R.data(archiveExaminingReportService.getCurrentExaminingInfo(reportId));
+    }
+
 }

+ 55 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java

@@ -16,11 +16,13 @@
  */
 package org.springblade.archive.controller;
 
+import cn.hutool.core.text.split.SplitIter;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
+import org.apache.commons.lang.StringUtils;
 import org.springblade.archive.service.IArchiveAutoPdfService;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.mp.support.Condition;
@@ -36,6 +38,7 @@ import org.springblade.archive.wrapper.ArchivesAutoWrapper;
 import org.springblade.archive.service.IArchivesAutoService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -103,7 +106,8 @@ public class ArchivesAutoController extends BladeController {
 			@ApiImplicitParam(name = "secretLevel", value = "保密级别"),
 			@ApiImplicitParam(name = "carrierType", value = "类别"),
 			@ApiImplicitParam(name = "queryValue", value = "输入框模糊搜索"),
-			@ApiImplicitParam(name = "searchType", value = "搜索类型1案卷2文件")
+			@ApiImplicitParam(name = "searchType", value = "搜索类型1案卷2文件"),
+			@ApiImplicitParam(name = "nodeIds", value = "搜索树的节点id集合")
 	})
 	public R<IPage<ArchivesAutoVO>> pageByArchivesAuto(ArchivesAutoVO archivesAuto) {
 		IPage<ArchivesAutoVO> pages = archivesAutoService.pageByArchivesAuto(archivesAuto);
@@ -173,6 +177,56 @@ public class ArchivesAutoController extends BladeController {
 		return R.status(archivesAutoService.saveOrUpdate(archivesAuto));
 	}
 
+	/**
+	 * 分页-档案鉴定
+	 */
+	@GetMapping("/pageByAuthenticate")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页-档案鉴定", notes = "传入archivesAuto")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
+			@ApiImplicitParam(name = "projectId", value = "项目id", required = true),
+			@ApiImplicitParam(name = "storageTime", value = "保管期限", required = false),
+			@ApiImplicitParam(name = "filingUnit", value = "立卷单位", required = false),
+			@ApiImplicitParam(name = "isDeleted", value = "是否删除", required = false)
+	})
+	public R<IPage<ArchivesAutoVO>> pageByAuthenticate(ArchivesAutoVO archivesAuto) {
+		IPage<ArchivesAutoVO> pages = archivesAutoService.pageByAuthenticate(archivesAuto);
+		return R.data(pages);
+	}
+
+	/**
+	 * 批量销毁档案-档案鉴定
+	 */
+	@GetMapping("/batchDestroyArchive")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "批量销毁档案-档案鉴定", notes = "传入节点id")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
+	})
+	public R batchDestroyArchive(String ids ){
+		if (StringUtils.isBlank(ids)){
+			return R.fail("参数错误");
+		}
+		archivesAutoService.batchDestroyArchive(ids);
+		return R.success("销毁成功");
+	}
+
+	/**
+	 * 获取立卷单位列表-档案鉴定
+	 */
+	@GetMapping("/getFilingUnitList")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "获取立卷单位列表-档案鉴定", notes = "传入节点id")
+	@ApiImplicitParams({
+			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
+	})
+	public R getFilingUnitList(Long projectId){
+		return R.data(archivesAutoService.getFilingUnitList(projectId));
+	}
+
+
+
 	
 	/**
 	 * 删除 

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

@@ -64,6 +64,16 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 	 */
     List<ArchivesAutoVO> pageByArchivesAuto(IPage page, @Param("vo") ArchivesAutoVO vo);
 
+	/**
+	 *  档案利用-档案查询,带范围
+	 */
+	List<ArchivesAutoVO> pageByArchivesAuto2(IPage page, @Param("vo") ArchivesAutoVO vo);
+
+	/**
+	 *  档案鉴定-档案查询
+	 */
+	List<ArchivesAutoVO> pageByAuthenticate(IPage page, @Param("vo") ArchivesAutoVO vo);
+
 	/**
 	 * 获取当前项目所有案卷,并设置合同类型
 	 */
@@ -75,4 +85,5 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 	@MapKey("storage_time")
 	List<Map<String,String>> getAllArchiveAgeByContractType(@Param("projectId") Long projectId);
 
+	List<String> getFilingUnitList(@Param("projectId") Long projectId);
 }

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

@@ -182,6 +182,54 @@
         </if>
         GROUP BY uaa.id
     </select>
+
+    <select id="pageByArchivesAuto2" resultMap="archivesAutoResultMap">
+        select uaa.* from
+        (SELECT id FROM m_archive_tree_contract WHERE project_id =#{vo.projectId}
+        <foreach collection="vo.nodeIdArray" item="nodeId">
+            and ancestors like concat('%',#{nodeId},'%') or id = #{nodeId}
+        </foreach>
+        ) matc left join u_archives_auto uaa on matc.id = uaa.node_id left join u_archive_file uaf on uaa.id = uaf.archive_id
+        where uaa.is_deleted = 0
+        <if test="vo.searchType == 1 and vo.queryValue != null and vo.queryValue != ''">
+            and uaa.name like concat('%',#{vo.queryValue},'%')
+        </if>
+        <if test="vo.searchType == 2 and vo.queryValue != null and vo.queryValue != ''">
+            and uaf.file_name like concat('%',#{vo.queryValue},'%')
+        </if>
+        <if test="vo.storageTimes != null and vo.storageTimes != ''">
+            and uaa.storage_time in
+            <foreach collection="vo.storageTimes" item="storageTime" open="(" separator="," close=")">
+                #{storageTime}
+            </foreach>
+        </if>
+        <if test="vo.secretLevels != null and vo.secretLevels != ''">
+            and uaa.secret_level in
+            <foreach collection="vo.secretLevels" item="secretLevel" open="(" separator="," close=")">
+                #{secretLevel}
+            </foreach>
+        </if>
+        <if test="vo.carrierTypes != null and vo.carrierTypes != ''">
+            and uaa.carrier_type in
+            <foreach collection="vo.carrierTypes" item="carrierType" open="(" separator="," close=")">
+                #{carrierType}
+            </foreach>
+        </if>
+        <if test="vo.years != null and vo.years != ''">
+            and
+            <foreach collection="vo.years" item="year" separator=" or" open="(" close=")" >
+                #{year} BETWEEN  DATE_FORMAT(uaa.start_date,'%Y') and DATE_FORMAT(uaa.end_date ,'%Y')
+            </foreach>
+        </if>
+        <if test="vo.months != null and vo.months != ''">
+            and
+            <foreach collection="vo.months" item="month" separator=" or" open="(" close=")">
+                #{month} BETWEEN  DATE_FORMAT(uaa.start_date,'%c') and DATE_FORMAT(uaa.end_date ,'%c')
+            </foreach>
+        </if>
+        GROUP BY uaa.id
+    </select>
+
     <select id="getAllArchiveByContractType" resultType="org.springblade.archive.vo.ArchivesAutoVO">
         SELECT uaa.id,matc.tree_code as 'contractType'
         FROM m_archive_tree_contract matc left join u_archives_auto uaa on uaa.node_id =matc.id
@@ -193,6 +241,27 @@
         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.*
+        from(
+                select id from m_archive_tree_contract
+                where project_id = #{vo.projectId} and ancestors like concat('%', #{vo.nodeId}, '%') or id = #{vo.nodeId}
+            ) matc
+        left join u_archives_auto uaa on matc.id = uaa.node_id
+        where uaa.is_deleted = #{vo.isDeleted}
+        <if test="vo.storageTime != null and vo.storageTime != ''">
+            and uaa.storage_time = #{vo.storageTime}
+        </if>
+        <if test="vo.filingUnit != null and vo.filingUnit != ''">
+            and uaa.filing_unit = #{vo.filingUnit}
+        </if>
+    </select>
+    <select id="getFilingUnitList" resultType="java.lang.String">
+        SELECT filing_unit
+        FROM  u_archives_auto WHERE project_id =#{projectId} AND filing_unit is not NULL
+        GROUP BY filing_unit
+    </select>
 
 
 </mapper>

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

@@ -2,6 +2,7 @@ package org.springblade.archive.service;
 
 import com.itextpdf.text.DocumentException;
 import org.springblade.archive.entity.ArchiveExaminingReport;
+import org.springblade.archive.vo.ArchiveExaminingSocketVo;
 import org.springblade.archive.vo.ArchiveExaminingVo;
 import org.springblade.core.mp.base.BaseService;
 
@@ -17,4 +18,5 @@ public interface IArchiveExaminingReportService extends BaseService<ArchiveExami
 
     void getExamining(ArchiveExaminingVo vo, Long id) throws InterruptedException, DocumentException, IOException;
 
+    ArchiveExaminingSocketVo getCurrentExaminingInfo(Long reportId);
 }

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

@@ -51,6 +51,12 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 
 	List<Map<String, String>> getAllArchiveAgeByContractType(Long projectId);
 
+    IPage<ArchivesAutoVO> pageByAuthenticate(ArchivesAutoVO archivesAuto);
+
+	List<String> getFilingUnitList(Long projectId);
+
+	void batchDestroyArchive(String ids);
+
 	void archiveAutoMethod(Long project);
 
 	void splitArchvies(Long project);

+ 49 - 19
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveExaminingReportImpl.java

@@ -56,22 +56,28 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
     @Async
     @Override
     public void pushStatusBySocket(Long userId,Long id) throws IOException, InterruptedException {
-        Integer status;
-        //获取检测状态,如果正在检测,则一直推送
+        Integer status=1;
+        Date date = new Date();
+        //获取检测状态,如果正在检测,则数据变化时发送
         do {
-            Thread.sleep(5000L);
-            //获取最新检测的状态
+            Thread.sleep(4000L);
+            //判断报告状态
             ArchiveExaminingReport report = this.getById(id);
-            status = report.getStatus();
-            //获取检测详情
-            List<ArchiveExaminingReportDetail> list = detailService.list(new LambdaQueryWrapper<ArchiveExaminingReportDetail>()
-                    .eq(ArchiveExaminingReportDetail::getReportId, id));
-            for (ArchiveExaminingReportDetail detail : list) {
-                detail.setExaminingItem(detail.getExaminingType()+":"+detail.getExaminingItem());
+            Integer reportStatus = report.getStatus();
+            //判断详情状态
+            ArchiveExaminingReportDetail detail = detailService.getOne(new LambdaQueryWrapper<ArchiveExaminingReportDetail>()
+                    .eq(ArchiveExaminingReportDetail::getReportId, id)
+                    .orderByDesc(ArchiveExaminingReportDetail::getCreateTime)
+                    .last("limit 1"));
+            if (detail == null){
+                detail = new ArchiveExaminingReportDetail();
+                detail.setCreateTime(date);
+            }
+            if (reportStatus != status || detail.getCreateTime() != date){
+                webSocketServer.sendMessagesToArchive(userId+"","true");
+                status = reportStatus;
+                date = detail.getCreateTime();
             }
-            ArchiveExaminingSocketVo vo = new ArchiveExaminingSocketVo(status,list);
-            webSocketServer.sendMessagesToArchive(userId+"", JSON.toJSONString(vo));
-            status = report.getStatus();
         }while (status != 4);
 
     }
@@ -90,7 +96,7 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
         //检测中
             //真实性
         if (StringUtils.isNotBlank(vo.getAuthenticity()) && "1".equals(vo.getAuthenticity())) {
-            Thread.sleep(7000L);
+            Thread.sleep(5000L);
             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,
@@ -117,7 +123,7 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
                     ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对电子档案封装包电子前面有效性检测", 0, "无", 0));
         }
         if (StringUtils.isNotBlank(vo.getIntegrality()) && "1".equals(vo.getIntegrality())) {
-            Thread.sleep(7000L);
+            Thread.sleep(5000L);
             //完整性
             detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
                     ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对总件数相符性检测", 0, "无", 0));
@@ -144,7 +150,7 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
         }
             //可用性
         if (StringUtils.isNotBlank(vo.getUsability()) && "1".equals(vo.getUsability())) {
-            Thread.sleep(7000L);
+            Thread.sleep(5000L);
             detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
                     ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对信息包中元数据的可读性检测", 0, "无", 0));
             detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
@@ -164,7 +170,7 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
         }
             //安全性
         if (StringUtils.isNotBlank(vo.getSecurity()) && "1".equals(vo.getSecurity())) {
-            Thread.sleep(7000L);
+            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,
@@ -174,13 +180,32 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
         report.setStatus(3);
         this.updateById(report);
         String url = this.generateReportPdf(id);
-        Thread.sleep(7000L);
+        Thread.sleep(3000L);
         //完成
         report.setReportPdfUrl(url);
         report.setStatus(4);
         this.updateById(report);
     }
 
+    /**
+     * 获取最新的文档状态和详情
+     * @param reportId
+     * @return
+     */
+    @Override
+    public ArchiveExaminingSocketVo getCurrentExaminingInfo(Long reportId) {
+        //获取最新检测的状态
+        ArchiveExaminingReport report = this.getById(reportId);
+        //获取检测详情
+        List<ArchiveExaminingReportDetail> list = detailService.list(new LambdaQueryWrapper<ArchiveExaminingReportDetail>()
+                .eq(ArchiveExaminingReportDetail::getReportId, reportId));
+        for (ArchiveExaminingReportDetail detail : list) {
+            detail.setExaminingItem(detail.getExaminingType()+":"+detail.getExaminingItem());
+        }
+        ArchiveExaminingSocketVo vo = new ArchiveExaminingSocketVo(report.getStatus(),report.getReportPdfUrl(),list);
+        return vo;
+    }
+
     /**
      * 生成检测报告PDF
      */
@@ -189,6 +214,7 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
         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);
         //建立一个书写器
@@ -255,7 +281,11 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
         document.close();
         writer.close();
         BladeFile bladeFile = iossClient.uploadFile(uuid+".pdf", localUrl+uuid+".pdf");
-        return bladeFile.getLink();
+        if (bladeFile != null && StringUtils.isNotBlank(bladeFile.getLink())){
+            return bladeFile.getLink();
+        }else {
+            return null;
+        }
     }
 
 

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

@@ -103,15 +103,23 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		if (StringUtils.isNotBlank(vo.getMonth())) {
 			vo.setMonths(Arrays.asList(vo.getMonth().split(",")));
 		}
-		List<ArchivesAutoVO> archivesAutos = baseMapper.pageByArchivesAuto(page, vo);
-		archivesAutos.stream().forEach(aa->{
-			if (StringUtils.isNotBlank(aa.getStorageTime())){
-				aa.setStorageTimeValue("9999".equals(aa.getStorageTime())?"永久":("30".equals(aa.getStorageTime())?"30年":"10年"));
-			}
-			if (StringUtils.isNotBlank(aa.getSecretLevel())){
-				aa.setSecretLevelValue("1".equals(aa.getSecretLevel())?"机密":("2".equals(aa.getSecretLevel())?"绝密":"秘密"));
-			}
-		});
+		List<ArchivesAutoVO> archivesAutos = null;
+		if (StringUtils.isNotBlank(vo.getNodeIds())){
+			vo.setNodeIdArray(Arrays.asList(vo.getNodeIds().split(",")));
+			archivesAutos = baseMapper.pageByArchivesAuto2(page, vo);
+		}else {
+			archivesAutos = baseMapper.pageByArchivesAuto(page, vo);
+		}
+		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年"));
+				}
+				if (StringUtils.isNotBlank(aa.getSecretLevel())) {
+					aa.setSecretLevelValue("1".equals(aa.getSecretLevel()) ? "机密" : ("2".equals(aa.getSecretLevel()) ? "绝密" : "秘密"));
+				}
+			});
+		}
 		return page.setRecords(archivesAutos);
 	}
 
@@ -270,6 +278,32 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		}
 	}
 
+	@Override
+	public IPage<ArchivesAutoVO> pageByAuthenticate(ArchivesAutoVO vo) {
+		IPage<ArchivesAutoVO> page = new Page<>(vo.getCurrent(),vo.getSize());
+		List<ArchivesAutoVO> list = baseMapper.pageByAuthenticate(page, vo);
+		return page.setRecords(list);
+	}
+
+	@Override
+	public List<String> getFilingUnitList(Long projectId) {
+		return baseMapper.getFilingUnitList(projectId);
+	}
+
+	@Override
+	public void batchDestroyArchive(String ids) {
+		List<String> list = Arrays.asList(ids.split(","));
+		//查询出档案的文件
+		List<ArchiveFile> files = archiveFileClient.getAllArchiveFileByArchiveIds(list);
+		//销毁阿里云上文件
+
+		//删除文件
+		List<Long> collect = files.stream().map(file -> file.getId()).collect(Collectors.toList());
+		archiveFileClient.batchDeleteArchiveFile(collect);
+		//删除案卷
+		baseMapper.deleteBatchIds(list);
+	}
+
 
 	/**
 	 * 检查当前案卷的文件集合是否在规格内,能否开始组卷。

+ 3 - 3
blade-service/blade-business/src/main/java/org/springblade/business/controller/EVisaTaskCheckController.java

@@ -117,13 +117,13 @@ public class EVisaTaskCheckController {
     /**
      * 资料查询批量上报,检查自定义流程,审批人权限
      */
-    @PostMapping("/checkCustomFlowUserIsEVisaPermissions2")
+    @PostMapping("/batchCheckCustomFlowUserIsEVisaPermissions2")
     @ApiOperation(value = "资料查询批量上报,检查自定义流程,审批人权限")
     @ApiOperationSupport(order = 6)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "customFlowUserList", value = "所选的任务人集合,集合形式", required = true),
             @ApiImplicitParam(name = "contractId", value = "合同段ID", required = true),
-            @ApiImplicitParam(name = "privatePKeyId", value = "表单列表中的isTypePrivatePid字段,集合形式"),
+            @ApiImplicitParam(name = "privatePKeyId", value = "资料查看选择的节点主键集合"),
             @ApiImplicitParam(name = "theLogPrimaryKeyId", value = "日志左侧所选的填报类型ID"),
             @ApiImplicitParam(name = "firstId", value = "首件记录ID,列表批量上报时传任意一个即可")
     })
@@ -138,7 +138,7 @@ public class EVisaTaskCheckController {
             }
 
             //获取电签配置
-            List<String> list = json.getJSONArray("wbsIds").toJavaList(String.class);
+            List<String> list = json.getJSONArray("privatePKeyId").toJavaList(String.class);
             Set<String> userNameFail = new HashSet<>();
             for (String nodeId : list) {
                 WbsTreeContract contract = wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.valueOf(nodeId));

+ 183 - 79
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.google.common.collect.Lists;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
@@ -1345,15 +1346,20 @@ public class InformationWriteQueryController extends BladeController {
             //首先查询需要复制的节点及其下级所有子节点的信息
             WbsTreeContract needCopyNode = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
             // 获取当前节点的所有子节点
-            String vocational = SnowFlakeUtil.getId() + "";
+            /*String vocational = SnowFlakeUtil.getId() + "";*/
+
             //新增施工台账
             List<WbsTreeContract> saveList = new ArrayList<>();
             List<ConstructionLedger> saveLedger = new ArrayList<>();
-            // 获取附件
+
+            //获取子级节点、表信息
             List<WbsTreeContract> nodeChildAll = informationQueryService.getNodeChildAllByNodeId(needCopyNode.getId() + "", needCopyNode.getContractId(), vo.getNeedCopyPrimaryKeyId());
-            // 获取实体表列对象
+            //获取数据源表(附件复制使用)
+            Set<WbsTreeContract> oldTabs = nodeChildAll.stream().filter(f -> (new Integer(2).equals(f.getType()))).collect(Collectors.toSet());
+
+            //获取实体表列对象
             List<QueryProcessDataVO> nodeTabCols = informationQueryService.getNodeChildTabColsAllByNodeId(needCopyNode.getId() + "", needCopyNode.getContractId());
-            // 转化为map
+            //转化为map
             Map<String, String> nodeTabColsMap = nodeTabCols.stream().collect(Collectors.toMap(QueryProcessDataVO::getQueryType, QueryProcessDataVO::getAncestors, (key1, key2) -> key2));
             StringBuilder copeSql = new StringBuilder();
 
@@ -1432,14 +1438,24 @@ public class InformationWriteQueryController extends BladeController {
                     }
                 });
             }
-            //保存节点信息
+
+            //复制保存节点、表信息
             R<Boolean> booleanR = this.saveOrCopyNodeTree(saveList, saveLedger, 32, needCopyNode);
-            //复制数据逻辑
+
+            //复制元素表附件信息
+            List<WbsTreeContract> newTabs = saveList.stream().filter(f -> (new Integer(2).equals(f.getType()))).collect(Collectors.toList());
+            if (newTabs.size() > 0 && oldTabs.size() > 0 && vo.getIsCopyData() == 1) {
+                this.addCopyTabFile(newTabs, oldTabs);
+            }
+
+            //复制表单数据
             if (copeSql.length() >= 10) {
                 jdbcTemplate.execute(copeSql.toString());
             }
-            //获取父节点信息
+
+            //更新redis缓存
             informationQueryService.AsyncWbsTree(needCopyNode.getParentId() + "", needCopyNode.getParentId() + "", needCopyNode.getContractId(), "", "1");
+
             return booleanR;
 
         } else if (("2").equals(vo.getCopyType())) {
@@ -1473,7 +1489,7 @@ public class InformationWriteQueryController extends BladeController {
 
                 WbsTreeContract needCopyNodeRoot = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
                 if (needCopyNodeRoot != null) {
-                    //缓存需要复制的节点信息、表信息
+                    //缓存需要复制的节点、表信息
                     Map<String, List<WbsTreeContract>> needCopyNodeAndTabMap = new HashMap<>();
                     List<WbsTreeContract> needCopyChildNodes = this.getChildNodes(needCopyNodeRoot);
                     if (ObjectUtil.isEmpty(needCopyChildNodes) || needCopyChildNodes.size() == 0) {
@@ -1486,10 +1502,11 @@ public class InformationWriteQueryController extends BladeController {
                     needCopyNodeAndTabMap.put("tab:" + needCopyNodeRoot.getPKeyId(), addChildNodesTables);
 
                     //结果集
-                    List<WbsTreeContract> addNodeList = new ArrayList<>();//节点
-                    List<WbsTreeContract> addTabList = new ArrayList<>(); //表单
-                    List<WbsTreeContract> asyncWbsTreeNodes = new ArrayList<>(); //redis同步信息
-                    Set<WbsTreeContract> addChildNodesTablesOldAll = new HashSet<>(addChildNodesTables);//表单附件数据源
+                    List<WbsTreeContract> addNodeList = new ArrayList<>();//新增节点
+                    List<WbsTreeContract> addTabList = new ArrayList<>(); //新增表单
+                    List<WbsTreeContract> asyncWbsTreeNodes = new ArrayList<>(); //redis同步节点
+                    Set<WbsTreeContract> addChildNodesTablesOldAll = new HashSet<>(addChildNodesTables);//数据源表附件
+                    Set<WbsTreeContract> addNewFileTabs = new HashSet<>(addChildNodesTables);//新增到目标表附件
                     List<String> resultTablesData = new ArrayList<>();//表单数据
 
                     //创建线程池,默认设置4个线程
@@ -1523,7 +1540,7 @@ public class InformationWriteQueryController extends BladeController {
                                                 //1.2 选择同父级的同级节点,只复制数据
                                             } else if (needCopyNode.getParentId().equals(toCopyNode.getParentId())) {
                                                 //构造数据
-                                                this.addCopyTabData(needCopyNode, toCopyNode, finalTabOwner, resultTablesData, addTabList, vo.getIsCopyData());
+                                                this.addCopyTabData(needCopyNode, toCopyNode, finalTabOwner, resultTablesData, addTabList, vo.getIsCopyData(), addNewFileTabs);
                                             }
 
                                             //TODO 跨节点复制
@@ -1565,7 +1582,7 @@ public class InformationWriteQueryController extends BladeController {
                                             //2.2 如果点击选择的是当前复制节点本身的同等级节点,那么就只复制数据。(如果是跨节点,类型相同的情况下,只复制数据),且var=false,表示没有进行到跨节点新增的逻辑,只是跨节点复制数据
                                             if (needCopyNode.getNodeType().equals(toCopyNode.getNodeType()) && !needCopyNode.getParentId().equals(toCopyNode.getParentId()) && !var) {
                                                 //构造数据
-                                                this.addCopyTabData(needCopyNode, toCopyNode, finalTabOwner, resultTablesData, addTabList, vo.getIsCopyData());
+                                                this.addCopyTabData(needCopyNode, toCopyNode, finalTabOwner, resultTablesData, addTabList, vo.getIsCopyData(), addNewFileTabs);
                                             }
                                         }
                                     }
@@ -1593,18 +1610,29 @@ public class InformationWriteQueryController extends BladeController {
                     //入库
                     Boolean row = false;
                     if (nodes.size() > 0) {
+                        //复制新增节点
                         row = wbsTreeContractClient.saveBatch(nodes);
                     }
+
                     if (tabs.size() > 0) {
+                        //复制新增表
                         row = wbsTreeContractClient.saveBatch(tabs);
-                        if (addChildNodesTablesOldAll.size() > 0 && vo.getIsCopyData() == 1) {
-                            this.addCopyTabFile(tabs, addChildNodesTablesOldAll);
-                        }
                     }
-                    if (resultTablesData.size() > 0) {
-                        jdbcTemplate.execute(StringUtils.join(resultTablesData, ""));
+
+                    if (addNewFileTabs.size() > 0 && addChildNodesTablesOldAll.size() > 0 && vo.getIsCopyData() == 1) {
+                        //复制新增表附件
+                        this.addCopyTabFile(tabs, addChildNodesTablesOldAll);
+                    }
+
+                    if (resultTablesData.size() > 0 && vo.getIsCopyData() == 1) {
+                        //复制新增表数据
+                        List<List<String>> partition = Lists.partition(resultTablesData, 20);
+                        for (List<String> strings : partition) {
+                            jdbcTemplate.execute(StringUtils.join(strings, ""));
+                        }
                     }
                     if (row && asyncWbsTreeNodes.size() > 0) {
+                        //更新redis缓存
                         List<WbsTreeContract> collect = asyncWbsTreeNodes.stream().distinct().collect(Collectors.toList());
                         for (WbsTreeContract asyncWbsTreeNode : collect) {
                             informationQueryService.AsyncWbsTree("", asyncWbsTreeNode.getId() + "", contractId, "", "1");
@@ -1658,6 +1686,7 @@ public class InformationWriteQueryController extends BladeController {
         Map<String, List<TableFile>> tableFileOldMap = tableFileClient.getTabFilesByTabIds(StringUtils.join(tabFileIds, ",")).stream().collect(Collectors.groupingBy(TableFile::getTabId));
         if (tableFileOldMap != null && tableFileOldMap.size() > 0) {
             List<TableFile> resultFileData = new ArrayList<>();
+            List<Long> updatePKeyIds = new ArrayList<>();
             for (WbsTreeContract tabOld : addChildNodesTablesOld) {
                 for (WbsTreeContract tabNew : addChildNodesTables) {
                     //获取对应表
@@ -1670,12 +1699,20 @@ public class InformationWriteQueryController extends BladeController {
                                 file.setId(SnowFlakeUtil.getId());
                             });
                             resultFileData.addAll(tab);
+                            if (ObjectUtil.isNotEmpty(tabOld) && tabOld.getTabFileType() == 2) {
+                                updatePKeyIds.add(tabNew.getPKeyId());
+                            }
                         }
                     }
                 }
             }
             if (resultFileData.size() > 0) {
+                //入库
                 tableFileClient.saveBatch(resultFileData);
+                if (updatePKeyIds.size() > 0) {
+                    //修改表的文件按钮状态
+                    wbsTreeContractClient.updateTabFileTypeByPkeyIds(updatePKeyIds);
+                }
             }
         }
     }
@@ -1683,32 +1720,25 @@ public class InformationWriteQueryController extends BladeController {
     /**
      * 新增复制的数据
      */
-    private void addCopyTabData(WbsTreeContract needCopyNode, WbsTreeContract toCopyNode, String tabOwner, List<String> resultTablesData, List<WbsTreeContract> addChildNodesTablesAll, Integer isCopyData) {
+    private void addCopyTabData(WbsTreeContract needCopyNode, WbsTreeContract toCopyNode, String tabOwner, List<String> resultTablesData, List<WbsTreeContract> addChildNodesTablesAll, Integer isCopyData, Set<WbsTreeContract> addNewFileTabs) {
         List<WbsTreeContract> wbsTreeContractsNeed = Collections.singletonList(needCopyNode);
         List<WbsTreeContract> wbsTreeContractsTo = Collections.singletonList(toCopyNode);
         List<WbsTreeContract> needCopyNodeTabs = this.getChildNodesTables(wbsTreeContractsNeed, needCopyNode.getContractId());
         List<WbsTreeContract> toCopyNodeTabs = this.getChildNodesTables(wbsTreeContractsTo, needCopyNode.getContractId());
+        Map<String, WbsTreeContract> toCopyNodeTabsMaps = toCopyNodeTabs.stream().collect(Collectors.toMap(obj -> obj.getNodeName() + "-" + obj.getHtmlUrl(), Function.identity()));
         if (needCopyNodeTabs.size() > 0) {
             for (WbsTreeContract needTab : needCopyNodeTabs) {
-                for (WbsTreeContract toCopyNodeTab : toCopyNodeTabs) {
-                    //获取相同表单 nodeName 、HtmlUrl相同
-                    if (needTab.getNodeName().equals(toCopyNodeTab.getNodeName()) && (ObjectUtil.isNotEmpty(needTab.getHtmlUrl()) && ObjectUtil.isNotEmpty(toCopyNodeTab.getHtmlUrl()) && needTab.getHtmlUrl().equals(toCopyNodeTab.getHtmlUrl()))) {
-                        if (StringUtils.isEmpty(needTab.getInitTableName())) {
-                            //没有对应实体表,跳过
-                            continue;
-                        }
+                if (ObjectUtil.isNotEmpty(needTab.getHtmlUrl())) {
+                    String pKey = needTab.getNodeName() + "-" + needTab.getHtmlUrl();
+                    //获取目标表对象
+                    WbsTreeContract toCopyNodeTab = toCopyNodeTabsMaps.get(pKey);
+                    //如果存在,只复制数据
+                    if (toCopyNodeTab != null) {
                         Long oldPKeyId = needTab.getPKeyId();
-
                         //表单所属方,只有勾选了对应的所属方权限才复制数据;勾选了复制数据才能复制,否则只是创建节点、表
                         if (tabOwner.contains(needTab.getTableOwner()) && isCopyData == 1) {
-
-                            //源表obj对象,文件附件使用
-                            if (!needTab.getTabFileType().equals(toCopyNodeTab.getTabFileType())) {
-                                toCopyNodeTab.setTabFileType(needTab.getTabFileType()); //已上传
-                            }
                             //目标表obj对象,文件附件使用
-                            addChildNodesTablesAll.add(toCopyNodeTab);
-
+                            addNewFileTabs.add(toCopyNodeTab);
                             //获取实体表列对象
                             List<QueryProcessDataVO> nodeTabColOneTab = informationQueryService.getNodeChildTabColsAllByTabName(needTab.getInitTableName());
                             //转化为map
@@ -1727,6 +1757,52 @@ public class InformationWriteQueryController extends BladeController {
                                 resultTablesData.add(copyDataSql.toString());
                             }
                         }
+
+                    } else if (ObjectUtil.isNotEmpty(needTab.getIsCopeTab()) && (new Integer(2).equals(needTab.getIsCopeTab()) || new Integer(3).equals(needTab.getIsCopeTab()))) {
+                        //如果不存在,则获新增复制的表,toCopyNodeTab == null && getIsCopeTab != null && =2为复制表、=3为频率表
+                        WbsTreeContract objTab = BeanUtil.copyProperties(needTab, WbsTreeContract.class);
+                        if (objTab != null) {
+                            Long oldPKeyId = needTab.getPKeyId();
+                            Long tabId = SnowFlakeUtil.getId();
+                            objTab.setId(tabId);
+                            objTab.setParentId(toCopyNode.getId());
+                            objTab.setPKeyId(SnowFlakeUtil.getId());
+                            //初始化是否显示表格,默认显示
+                            objTab.setIsBussShow(1);
+                            //初始化表格是否上传附件,默认未上传
+                            objTab.setTabFileType(1);
+                            //初始化单表是否可以预览,默认不能
+                            objTab.setIsTabPdf(1);
+                            //初始化PDF路径
+                            objTab.setPdfUrl(null);
+                            objTab.setCreateTime(new Date());
+                            //获取当前复制的表的sort
+                            objTab.setSort(ObjectUtils.isNotEmpty(needTab.getSort()) ? needTab.getSort() : 0);
+
+                            //复制表
+                            addChildNodesTablesAll.add(objTab);
+
+                            //表单所属方,只有勾选了对应的所属方权限才复制数据;勾选了复制数据才能复制,否则只是创建节点、表
+                            if (tabOwner.contains(objTab.getTableOwner()) && isCopyData == 1) {
+                                //获取实体表列对象
+                                List<QueryProcessDataVO> nodeTabColOneTab = informationQueryService.getNodeChildTabColsAllByTabName(objTab.getInitTableName());
+                                //转化为map
+                                Map<String, String> nodeTabColsMap = nodeTabColOneTab.stream().collect(Collectors.toMap(QueryProcessDataVO::getQueryType, QueryProcessDataVO::getAncestors, (key1, key2) -> key2));
+                                //组织复制表的数据的sql
+                                if (nodeTabColsMap.size() > 0) {
+                                    StringBuilder copyDataSql = new StringBuilder();
+                                    String tableName = objTab.getInitTableName();
+                                    String col = nodeTabColsMap.get(tableName);
+                                    String colVal = nodeTabColsMap.get(tableName);
+                                    colVal = colVal.replaceAll("id,p_key_id,", "'" + SnowFlakeUtil.getId() + "' as id,'" + objTab.getPKeyId() + "' as p_key_id,");
+                                    //delete SQL (先删除旧数据,再新增)
+                                    String delSql = "delete from " + tableName + " where p_key_id = " + objTab.getPKeyId() + " ; ";
+                                    //insert into SQL
+                                    copyDataSql.append(delSql).append("insert into ").append(tableName).append("  (").append(col).append(") select ").append(colVal).append(" from ").append(tableName).append(" where p_key_id='").append(oldPKeyId).append("' ;");
+                                    resultTablesData.add(copyDataSql.toString());
+                                }
+                            }
+                        }
                     }
                 }
             }
@@ -1736,9 +1812,7 @@ public class InformationWriteQueryController extends BladeController {
     /**
      * 新增复制的节点、表的数据构造
      */
-    private void addCopyNodesAndTabsBuildData(List<WbsTreeContract> addNodeList, List<WbsTreeContract> addTabList, List<WbsTreeContract> needNodes, List<WbsTreeContract> needTabs, WbsTreeContract
-            needCopyNode, WbsTreeContract toCopyNode, List<String> resultTablesData, Integer isSameNode, String
-                                                      tabOwner, Integer isCopyData) {
+    private void addCopyNodesAndTabsBuildData(List<WbsTreeContract> addNodeList, List<WbsTreeContract> addTabList, List<WbsTreeContract> needNodes, List<WbsTreeContract> needTabs, WbsTreeContract needCopyNode, WbsTreeContract toCopyNode, List<String> resultTablesData, Integer isSameNode, String tabOwner, Integer isCopyData) {
         int var = 0;
         if (needNodes.size() == 1) {
             //判断是否为最下级节点
@@ -1766,6 +1840,9 @@ public class InformationWriteQueryController extends BladeController {
                     obj.setFullName(toCopyNode.getNodeName());
                     obj.setPartitionCode(toCopyNode.getPartitionCode());
                     obj.setCreateTime(new Date());
+                    //获取当前复制的节点的sort
+                    obj.setSort(ObjectUtils.isNotEmpty(needNode.getSort()) ? needNode.getSort() : 0);
+
                     addNodeList.add(obj);
                     break;
                 }
@@ -1790,6 +1867,9 @@ public class InformationWriteQueryController extends BladeController {
                     //初始化PDF路径
                     obj.setPdfUrl(null);
                     obj.setCreateTime(new Date());
+                    //获取当前复制的表的sort
+                    obj.setSort(ObjectUtils.isNotEmpty(needTab.getSort()) ? needTab.getSort() : 0);
+
                     addTabList.add(obj);
 
                     //表单所属方,只有勾选了对应的所属方权限才复制数据;勾选了复制数据才能复制,否则只是创建节点、表
@@ -1805,7 +1885,10 @@ public class InformationWriteQueryController extends BladeController {
                             String col = nodeTabColsMap.get(tableName);
                             String colVal = nodeTabColsMap.get(tableName);
                             colVal = colVal.replaceAll("id,p_key_id,", "'" + SnowFlakeUtil.getId() + "' as id,'" + obj.getPKeyId() + "' as p_key_id,");
-                            copyDataSql.append("insert into ").append(tableName).append("  (").append(col).append(") select ").append(colVal).append(" from ").append(tableName).append(" where p_key_id='").append(oldPKeyId).append("' ;");
+                            //delete SQL (先删除旧数据,再新增)
+                            String delSql = "delete from " + tableName + " where p_key_id = " + obj.getPKeyId() + " ; ";
+                            //insert into SQL
+                            copyDataSql.append(delSql).append("insert into ").append(tableName).append("  (").append(col).append(") select ").append(colVal).append(" from ").append(tableName).append(" where p_key_id='").append(oldPKeyId).append("' ;");
                             resultTablesData.add(copyDataSql.toString());
                         }
                     }
@@ -1850,6 +1933,9 @@ public class InformationWriteQueryController extends BladeController {
                     obj.setId(id);
                     obj.setParentId(newParentId);
                     obj.setCreateTime(new Date());
+                    //获取当前复制的节点的sort
+                    obj.setSort(ObjectUtils.isNotEmpty(node.getSort()) ? node.getSort() : 0);
+
                     addNodeList.add(obj);
 
                     //构造当前节点下所有元素表
@@ -1877,6 +1963,9 @@ public class InformationWriteQueryController extends BladeController {
                                 //初始化PDF路径
                                 objTab.setPdfUrl(null);
                                 objTab.setCreateTime(new Date());
+                                //获取当前复制的表的sort
+                                objTab.setSort(ObjectUtils.isNotEmpty(needTab.getSort()) ? needTab.getSort() : 0);
+
                                 addTabList.add(objTab);
 
                                 //表单所属方,只有勾选了对应的所属方权限才复制数据;勾选了复制数据才能复制,否则只是创建节点、表
@@ -1888,7 +1977,10 @@ public class InformationWriteQueryController extends BladeController {
                                         String col = queryProcessDataVO.getAncestors();
                                         String colVal = queryProcessDataVO.getAncestors();
                                         colVal = colVal.replaceAll("id,p_key_id,", "'" + SnowFlakeUtil.getId() + "' as id,'" + needTab.getPKeyId() + "' as p_key_id,");
-                                        copyDataSql.append("insert into ").append(tableName).append("  (").append(col).append(") select ").append(colVal).append(" from ").append(tableName).append(" where p_key_id='").append(oldPKeyId).append("' ;");
+                                        //delete SQL (先删除旧数据,再新增)
+                                        String delSql = "delete from " + tableName + " where p_key_id = " + needTab.getPKeyId() + " ; ";
+                                        //insert into SQL
+                                        copyDataSql.append(delSql).append("insert into ").append(tableName).append("  (").append(col).append(") select ").append(colVal).append(" from ").append(tableName).append(" where p_key_id='").append(oldPKeyId).append("' ;");
                                         resultTablesData.add(copyDataSql.toString());
                                     }
                                 }
@@ -1911,6 +2003,8 @@ public class InformationWriteQueryController extends BladeController {
             needCopyNode.setNodeName(toCopyNode.getNodeName());
             needCopyNode.setFullName(toCopyNode.getNodeName());
             needCopyNode.setPartitionCode(toCopyNode.getPartitionCode());
+            needCopyNode.setCreateTime(new Date());
+
             addNodeList.add(needCopyNode);
         }
     }
@@ -2181,7 +2275,7 @@ public class InformationWriteQueryController extends BladeController {
      * 生成施工日志记录
      */
     private void createLedger(WbsTreeContract
-                                      newData, List<ConstructionLedger> saveLedger, Map<String, WbsTreeContract> contractNodeMap, Map<String, WbsTreePrivate> projectNodeMap) {
+                                      newData, List<ConstructionLedger> saveLedger, Map<String, WbsTreeContract> contractNodeMap, Map<String, WbsTreeContract> projectNodeMap) {
         //工序,需要新增施工台账
         ConstructionLedger ledger = new ConstructionLedger();
         //获取这个节点的原始信息
@@ -2203,13 +2297,13 @@ public class InformationWriteQueryController extends BladeController {
             }
         } else if (projectNodeMap != null) {
             if (projectNodeMap.containsKey(newData.getOldId())) {
-                WbsTreePrivate contractNode = projectNodeMap.get(newData.getOldId());
+                WbsTreeContract contractNode = projectNodeMap.get(newData.getOldId());
                 if (contractNode.getParentId() != null && StringUtils.isNotEmpty(contractNode.getParentId().toString())) {
-                    WbsTreePrivate parentNode;
+                    WbsTreeContract parentNode;
                     if (projectNodeMap.containsKey(contractNode.getParentId().toString())) {
                         parentNode = projectNodeMap.get(contractNode.getParentId().toString());
                     } else {
-                        parentNode = this.wbsTreePrivateClient.queryPeersNodeByProjectIdAndId(contractNode.getProjectId(), contractNode.getParentId());
+                        parentNode = this.wbsTreeContractClient.queryCurrentNodeAllParent(Long.parseLong(contractNode.getContractId()), contractNode.getParentId());
                     }
                     if (parentNode != null) {
                         ledger.setStation(StringUtils.isNotEmpty(parentNode.getFullName()) ? parentNode.getFullName() : parentNode.getNodeName());
@@ -2381,7 +2475,7 @@ public class InformationWriteQueryController extends BladeController {
     private void currentNodeAllParent(StringBuilder nodeName, WbsTreeContract currentNode) {
         if (!"0".equals(String.valueOf(currentNode.getParentId()))) {
             //如果父节点不是0说明没到顶层
-            WbsTreeContract parentNode = this.wbsTreeContractClient.queryCurrentNodeAllParent(Long.parseLong(currentNode.getContractId()), currentNode.getParentId());
+            WbsTreeContract parentNode = jdbcTemplate.query("select full_name,node_name from m_wbs_tree_contract where is_deleted = 0 and contract_id = " + currentNode.getContractId() + " and id = " + currentNode.getParentId(), new BeanPropertyRowMapper<>(WbsTreeContract.class)).stream().findAny().orElse(null);
             if (parentNode != null) {
                 nodeName.append("-").append(StringUtils.isNotEmpty(parentNode.getFullName()) ? parentNode.getFullName() : parentNode.getNodeName());
                 this.currentNodeAllParent(nodeName, parentNode);
@@ -2407,7 +2501,7 @@ public class InformationWriteQueryController extends BladeController {
         this.currentNodeAllParent(parentNodeName, removeNode);
 
         //查询所有子节点
-        List<WbsTreeContract> removeNodeList = this.wbsTreeContractClient.queryCurrentNodeAllChild(Long.parseLong(removeNode.getContractId()), removeNode.getId());
+        List<WbsTreeContract> removeNodeList = jdbcTemplate.query("select p_key_id,type from m_wbs_tree_contract where is_deleted = 0 and contract_id = " + removeNode.getContractId() + " and ancestors like '%" + removeNode.getId() + "%'", new BeanPropertyRowMapper<>(WbsTreeContract.class));
         //获取pKeyId
         List<Long> removeList = removeNodeList.stream().map(WbsTreeContract::getPKeyId).distinct().collect(Collectors.toList());
         //拼接
@@ -2415,7 +2509,7 @@ public class InformationWriteQueryController extends BladeController {
         //删除掉表格
         removeNodeList.removeIf(tree -> tree.getType() != null && new Integer("2").equals(tree.getType()));
         //获取被删除节点名称
-        String nodeName = StringUtils.isNotEmpty(removeNode.getFullName()) ? removeNode.getFullName() : removeNode.getNodeName() + "," + removeNodeList.stream().map(wbs -> StringUtils.isNotEmpty(wbs.getFullName()) ? wbs.getFullName() : wbs.getNodeName()).collect(Collectors.joining());
+        //String nodeName = StringUtils.isNotEmpty(removeNode.getFullName()) ? removeNode.getFullName() : removeNode.getNodeName() + "," + removeNodeList.stream().map(wbs -> StringUtils.isNotEmpty(wbs.getFullName()) ? wbs.getFullName() : wbs.getNodeName()).collect(Collectors.joining());
 
         //获取当前节点下所有填报节点
         List<QueryProcessDataVO> queryProcess = new ArrayList<>();
@@ -2430,7 +2524,6 @@ public class InformationWriteQueryController extends BladeController {
         if (queryProcess != null && queryProcess.size() > 0) {
             //检查这些填报节点是否存在已经审批或已经上报的节点,如果存在则不允许删除
             List<QueryProcessDataVO> approvalList = queryProcess.stream().filter(vo -> new Integer("2").equals(vo.getStatus()) && vo.getInformationQueryId() != null).collect(Collectors.toList());
-            //
             List<QueryProcessDataVO> runTaskList = queryProcess.stream().filter(vo -> new Integer("1").equals(vo.getStatus()) && vo.getInformationQueryId() != null).collect(Collectors.toList());
             if (approvalList.size() > 0 || runTaskList.size() > 0) {
                 //说明存在已经审批或已经上报的节点,不允许删除
@@ -2457,7 +2550,7 @@ public class InformationWriteQueryController extends BladeController {
         //保存进回收站
         this.recycleBinClient.saveDelBusinessData(idArray, StringUtils.isNotEmpty(removeNode.getFullName()) ? removeNode.getFullName() : removeNode.getNodeName(), 2, parentNodeName.toString(), removeNode.getProjectId(), removeNode.getContractId());
         Boolean aBoolean = this.wbsTreeContractClient.removeContractTreeNode(idArray);
-        // 更新redis
+        //更新redis
         this.informationQueryService.AsyncWbsTree(removeNode.getParentId() + "", removeNode.getParentId() + "", removeNode.getContractId(), "", "1");
         return R.data(aBoolean);
     }
@@ -2484,7 +2577,7 @@ public class InformationWriteQueryController extends BladeController {
         selectList.addAll(allSelectedNodeList);
 
         //所有相关节点集合
-        List<WbsTreePrivate> selectedNodeList = new ArrayList<>();
+        List<WbsTreeContract> selectedNodeList = new ArrayList<>();
 
         //检查新增类型
         if ("1".equals(vo.getSaveType())) {
@@ -2492,12 +2585,12 @@ public class InformationWriteQueryController extends BladeController {
             //当前节点及其子节点时,半选说明其下的子节点并不是全部选中的,所以这时候只需要根据全选的查询其全部子节点即可
             if (allSelectedNodeList.size() > 0) {
                 //查询数据
-                selectedNodeList = this.unifiedCode(allSelectedNodeList, treeContract);
+                selectedNodeList = this.unifiedCode(allSelectedNodeList, treeContract, "1");
 
                 //检查当前操作的节点是否是填报节点,如果是则需要查询相关联表格
-                List<WbsTreePrivate> submitNodeList = selectedNodeList.stream().filter(treePrivate -> Arrays.asList("1,2,3,4".split(",")).contains(treePrivate.getMajorDataType().toString())).distinct().collect(Collectors.toList());
+                List<WbsTreeContract> submitNodeList = selectedNodeList.stream().filter(treeContract1 -> Arrays.asList("1,2,3,4".split(",")).contains(treeContract1.getMajorDataType().toString())).distinct().collect(Collectors.toList());
 
-                List<WbsTreePrivate> childList = new ArrayList<>();
+                List<WbsTreeContract> childList = new ArrayList<>();
                 if (submitNodeList.size() > 0) {
                     this.foreachQueryChild(submitNodeList, childList);
                     //将表格数据设置
@@ -2506,11 +2599,11 @@ public class InformationWriteQueryController extends BladeController {
 
                 if (childList.size() > 0) {
                     //处理重复的数据
-                    Iterator<WbsTreePrivate> iterator = childList.iterator();
+                    Iterator<WbsTreeContract> iterator = childList.iterator();
                     while (iterator.hasNext()) {
-                        WbsTreePrivate next = iterator.next();
-                        for (WbsTreePrivate treePrivate : selectedNodeList) {
-                            if (treePrivate.getPKeyId().equals(next.getPKeyId())) {
+                        WbsTreeContract next = iterator.next();
+                        for (WbsTreeContract wbsTreeContract : selectedNodeList) {
+                            if (wbsTreeContract.getPKeyId().equals(next.getPKeyId())) {
                                 //删掉重复数据
                                 iterator.remove();
                                 break;
@@ -2528,20 +2621,18 @@ public class InformationWriteQueryController extends BladeController {
             //todo 仅当前节点操作
             if (allSelectedNodeList.size() > 0) {
                 //查询数据
-                selectedNodeList = this.unifiedCode(allSelectedNodeList, treeContract);
+                selectedNodeList = this.unifiedCode(allSelectedNodeList, treeContract, "0");
 
                 //检查当前操作的节点是否是填报节点,如果是则需要查询相关联表格
-                List<WbsTreePrivate> submitNodeList = selectedNodeList.stream().filter(treePrivate -> Arrays.asList("1,2,3,4".split(",")).contains(treePrivate.getMajorDataType().toString())).distinct().collect(Collectors.toList());
+                List<WbsTreeContract> submitNodeList = selectedNodeList.stream().filter(treePrivate -> Arrays.asList("1,2,3,4".split(",")).contains(treePrivate.getMajorDataType().toString())).distinct().collect(Collectors.toList());
 
-                List<WbsTreePrivate> childList = new ArrayList<>();
+                List<WbsTreeContract> childList = new ArrayList<>();
                 if (submitNodeList.size() > 0) {
                     this.foreachQueryChild(submitNodeList, childList);
                     //将表格数据设置
                     selectedNodeList.addAll(childList);
                 }
             }
-            //处理半选
-            this.disposeHalfSelectList(treeContract, halfSelectedNodeList, selectedNodeList);
         }
 
         //保存集合
@@ -2550,7 +2641,7 @@ public class InformationWriteQueryController extends BladeController {
         if (selectedNodeList.size() > 0) {
             //重塑关键信息
             Map<Long, Long> OldIdToNewIdMap = new HashMap<>();
-            Map<String, WbsTreePrivate> nodeMap = new HashMap<>();
+            Map<String, WbsTreeContract> nodeMap = new HashMap<>();
             selectedNodeList.forEach(half -> {
                 OldIdToNewIdMap.put(half.getId(), SnowFlakeUtil.getId());
                 nodeMap.put(half.getId().toString(), half);
@@ -2567,7 +2658,22 @@ public class InformationWriteQueryController extends BladeController {
                 if (new Integer("1").equals(half.getType())) {
                     newData.setId(OldIdToNewIdMap.containsKey(half.getId()) ? OldIdToNewIdMap.get(half.getId()) : SnowFlakeUtil.getId());
                 }
-                newData.setParentId(OldIdToNewIdMap.containsKey(half.getParentId()) ? OldIdToNewIdMap.get(half.getParentId()) : treeContract.getId().equals(half.getParentId()) || treeContract.getOldId().equals(half.getParentId().toString()) ? treeContract.getId() : SnowFlakeUtil.getId());
+
+                //设置父级id
+                if (("1").equals(vo.getSaveType())) {
+                    //当前节点及其子节点操作
+                    newData.setParentId(OldIdToNewIdMap.containsKey(half.getParentId()) ? OldIdToNewIdMap.get(half.getParentId()) : treeContract.getId().equals(half.getParentId()) || treeContract.getOldId().equals(half.getParentId().toString()) ? treeContract.getId() : SnowFlakeUtil.getId());
+                } else {
+                    //仅当前节点新增操作时,父级id=选择新增的节点父级id
+                    if (new Integer("1").equals(half.getType())) {
+                        //节点
+                        newData.setParentId(half.getParentId());
+                    } else if (new Integer("2").equals(half.getType())) {
+                        //表
+                        newData.setParentId(OldIdToNewIdMap.containsKey(half.getParentId()) ? OldIdToNewIdMap.get(half.getParentId()) : treeContract.getId().equals(half.getParentId()) || treeContract.getOldId().equals(half.getParentId().toString()) ? treeContract.getId() : SnowFlakeUtil.getId());
+                    }
+                }
+
                 //记录旧ID
                 newData.setOldId(half.getId().toString());
                 //设置合同段等信息
@@ -2635,21 +2741,20 @@ public class InformationWriteQueryController extends BladeController {
         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");
+        informationQueryService.AsyncWbsTree(treeContract.getParentId() + "", treeContract.getParentId() + "", treeContract.getContractId(), "", "1");
         return booleanR;
     }
 
-    private List<WbsTreePrivate> unifiedCode
-            (List<AddContractTreeNodeVO.Node> allSelectedNodeList, WbsTreeContract treeContract) {
+    private List<WbsTreeContract> unifiedCode(List<AddContractTreeNodeVO.Node> allSelectedNodeList, WbsTreeContract treeContract, String saveType) {
         //获取主键
-        List<String> halfSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).distinct().collect(Collectors.toList());
+        List<Long> halfSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).map(Long::parseLong).distinct().collect(Collectors.toList());
         //查询数据
-        List<WbsTreePrivate> selectedNodeList = this.wbsTreePrivateClient.queryByPKeyIds(halfSelectedList);
-        //剔除与当前操作节点相同的ID
-        selectedNodeList.removeIf(wbsTreePrivate -> treeContract.getId().equals(wbsTreePrivate.getId()) || treeContract.getOldId().equals(wbsTreePrivate.getId().toString()));
-
+        List<WbsTreeContract> selectedNodeList = this.wbsTreeContractClient.queryContractTreeNodeByPKIds(halfSelectedList);
+        //剔除与当前操作节点相同的ID,(如果saveType=1,表示当前及子级节点,那么就要剔除自己本身,否则视为仅当前节点操作,会存在自己本身)
+        if (("1").equals(saveType)) {
+            selectedNodeList.removeIf(wbsTreePrivate -> treeContract.getId().equals(wbsTreePrivate.getId()) || treeContract.getOldId().equals(wbsTreePrivate.getId().toString()));
+        }
         return selectedNodeList;
     }
 
@@ -2710,13 +2815,12 @@ public class InformationWriteQueryController extends BladeController {
     /**
      * 处理半选集合
      */
-    private void disposeHalfSelectList(@RequestBody WbsTreeContract
-                                               treeContract, List<AddContractTreeNodeVO.Node> allSelectedNodeList, List<WbsTreePrivate> selectedNodeList) {
+    private void disposeHalfSelectList(@RequestBody WbsTreeContract treeContract, List<AddContractTreeNodeVO.Node> allSelectedNodeList, List<WbsTreeContract> selectedNodeList) {
         if (allSelectedNodeList != null && allSelectedNodeList.size() > 0) {
             //获取主键
-            List<String> allSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).distinct().collect(Collectors.toList());
+            List<Long> allSelectedList = allSelectedNodeList.stream().map(AddContractTreeNodeVO.Node::getPrimaryKeyId).map(Long::parseLong).distinct().collect(Collectors.toList());
             //查询对应数据
-            List<WbsTreePrivate> allSelectedNodeLists = this.wbsTreePrivateClient.queryByPKeyIds(allSelectedList);
+            List<WbsTreeContract> allSelectedNodeLists = this.wbsTreeContractClient.queryContractTreeNodeByPKIds(allSelectedList);
             //剔除与当前操作节点相同的ID
             allSelectedNodeLists.removeIf(wbsTreePrivate -> treeContract.getId().equals(wbsTreePrivate.getId()) || treeContract.getOldId().equals(wbsTreePrivate.getId().toString()));
             //设置到集合中
@@ -2730,9 +2834,9 @@ public class InformationWriteQueryController extends BladeController {
      * @param parentList 父节点集合
      * @param childList  保存集合
      */
-    private void foreachQueryChild(List<WbsTreePrivate> parentList, List<WbsTreePrivate> childList) {
+    private void foreachQueryChild(List<WbsTreeContract> parentList, List<WbsTreeContract> childList) {
         parentList.forEach(parent -> {
-            List<WbsTreePrivate> childs = this.wbsTreePrivateClient.queryChildByParentId(parent);
+            List<WbsTreeContract> childs = this.wbsTreeContractClient.queryChildByParentId(parent, "", "");
 
             if (childs != null && childs.size() > 0) {
                 //添加入结果集

+ 7 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/MetadataController.java

@@ -79,12 +79,18 @@ public class MetadataController extends BladeController {
         String[] split = byId.getFileStorageType().split(",");
         StringBuffer str = new StringBuffer();
         for(String s :split){
+            if(s.isEmpty()){
+                continue;
+            }
             if(s.equals(type)){
                 continue;
             }
             str.append(s+",");
         }
-        String substring = str.toString().substring(0, str.lastIndexOf(","));
+        String substring = str.toString();
+        if(str.lastIndexOf(",") > 0){
+            substring = str.toString().substring(0, str.lastIndexOf(","));
+        }
         byId.setFileStorageType(substring);
         iMetadataClassificationService.updateById(byId);
         return R.status(iMetadataClassificationService.updateById(byId));

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

@@ -187,6 +187,21 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
         }
     }
 
+    /**
+     * 根据案卷id集合返回所有的文件列表
+     * @param ids
+     * @return
+     */
+    @Override
+    public List<ArchiveFile> getAllArchiveFileByArchiveIds(List<String> ids) {
+        return fileMapper.getAllArchiveFileByArchiveIds(ids);
+    }
+
+    @Override
+    public void batchDeleteArchiveFile(List<Long> ids) {
+        fileMapper.deleteBatchIds(ids);
+    }
+
     @Override
     public List<ArchiveFile> getListByNodeID(String nodeId,Integer isArchive) {
         List<ArchiveFile> files = fileMapper.getListByNodeID(nodeId, isArchive);

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

@@ -73,5 +73,7 @@ public interface ArchiveFileMapper extends BaseMapper<ArchiveFile> {
 
 	List<ArchiveFile> getAllArchiveFileUrl(@Param("projectId")Long projectId);
 
+    List<ArchiveFile> getAllArchiveFileByArchiveIds(@Param("ids") List<String> ids);
+
 	public List<ArchiveFile> getListByNodeID(@Param("nodeId") String nodeId,@Param("isArchive")Integer isArchive);
 }

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

@@ -54,6 +54,7 @@
         <result column="page_num" property="pageNum"/>
         <result column="file_size" property="fileSize"/>
         <result column="source_type" property="sourceType"/>
+        <result column="is_element" property="isElement"/>
         <result column="pdf_page_url" property="pdfPageUrl"/>
     </resultMap>
     <update id="recoveryByIds">
@@ -287,6 +288,13 @@
         FROM u_archive_file uaf
         WHERE  uaf.project_id = #{projectId};
     </select>
+    <select id="getAllArchiveFileByArchiveIds" resultType="org.springblade.business.entity.ArchiveFile">
+        SELECT * FROM u_archive_file
+        WHERE archive_id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
 
 
 

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

@@ -201,20 +201,13 @@
         contract_id
         =
         #{contractId}
-        -- ORDER BY wtc.sort,wtc.create_time
         )
-        c
-        ORDER
-        BY
-        c
-        .
-        sort,
-        c
-        .
-        create_time
+        c ORDER BY
+        c.sort,
+        c.title,
+        c.create_time
     </select>
 
-
     <select id="queryContractTreeSupervision" resultMap="queryContractTreeMap">
         SELECT
         wtc.is_concealed_works_node AS "isConcealedWorksNode",
@@ -816,7 +809,6 @@
             AND wtc.contract_id = #{contractId}
             AND wtc.is_deleted = 0
            or wtc.p_key_id = #{pKeyId}
-
     </select>
 
     <!--获取当前节点下,所有表单的字段数据-->

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

@@ -20,4 +20,6 @@ public interface MetadataClassificationMapper extends BaseMapper<MetadataClassif
 
 
     void deleteTableField(@Param("containerInitTabName") String containerInitTabName,@Param("fieldKey") String fieldKey);
+
+    void removeMetadataBytype(@Param("type") String type);
 }

+ 5 - 1
blade-service/blade-business/src/main/java/org/springblade/business/mapper/MetadataClassificationMapper.xml

@@ -77,6 +77,10 @@
         <foreach collection="ids" item="ids" index="ids" open="(" separator="," close=")">
             ${ids}
         </foreach>
-        and locate(#{type},file_storage_type) = 0
+--         and locate(#{type},file_storage_type) = 0
+    </update>
+    <update id="removeMetadataBytype">
+        update u_metadata_classification set file_storage_type = REPLACE(file_storage_type,#{type},'')
+        where  locate(#{type},file_storage_type) = 0
     </update>
 </mapper>

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

@@ -91,6 +91,8 @@ public class MetadataClassificationServiceImpl
     @Override
     public boolean updateMetadataBytype(List<Long> ids, String type) {
         try {
+            //先删除在保存
+            baseMapper.removeMetadataBytype(type);
             baseMapper.updateMetadataBytype(ids,type);
         } catch (Exception e) {
             e.printStackTrace();

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

@@ -338,4 +338,20 @@ public class ArchiveTreeContractController extends BladeController {
 		return R.fail(200, "同步失败");
 	}
 
+	/**
+	 * 根据节点类型获取档案,档案查询选择目录
+	 */
+	@GetMapping("getArchiveTreeByNodeType")
+	@ApiOperation(value = "根据节点类型获取档案,档案查询选择目录", notes = "传入项目id,节点类型")
+	public R getArchiveTreeByNodeType(Long projectId,Long nodeType){
+		return R.data(archiveTreeContractService.getArchiveTreeByNodeType(projectId,nodeType));
+	}
+	/**
+	 * 根据父节点获取子节点集合
+	 */
+	@GetMapping("getChildrenNodeByNodeId")
+	@ApiOperation(value = "根据节点id获取子节点集合", notes = "传入节点id")
+	public R getChildrenNodeByNodeId(Long nodeId){
+		return R.data(archiveTreeContractService.getChildrenNodeByNodeId(nodeId));
+	}
 }

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java

@@ -266,6 +266,11 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
         return wbsTreeContractMapper.getAllTableFileSize(projectId);
     }
 
+    @Override
+    public void updateTabFileTypeByPkeyIds(List<Long> updatePKeyIds) {
+        wbsTreeContractServiceImpl.update(Wrappers.<WbsTreeContract>lambdaUpdate().set(WbsTreeContract::getTabFileType, 2).in(WbsTreeContract::getPKeyId, updatePKeyIds));
+    }
+
     private void foreachSetChildList(List<WbsTreeContractTreeVOS> vosResult, List<WbsTreeContractVO> voList) {
         voList.forEach(vo -> {
             WbsTreeContractTreeVOS vos = new WbsTreeContractTreeVOS();

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

@@ -24,6 +24,7 @@ import org.springblade.manager.vo.ArchiveTreeContractVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.manager.vo.ArchiveTreeContractVO2;
+import org.springblade.manager.vo.ArchiveTreeContractVO3;
 import org.springblade.manager.vo.ArchiveTreeVO;
 
 import java.util.List;
@@ -77,4 +78,8 @@ 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> getChildrenNodeByNodeId(@Param("nodeId") Long nodeId);
 }

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

@@ -368,5 +368,18 @@
             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
+                            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
+
+    </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
+        from m_archive_tree_contract matc1 WHERE matc1.parent_id = #{nodeId} and matc1.is_deleted =0
+    </select>
 
 </mapper>

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

@@ -28,6 +28,7 @@ import org.springblade.manager.vo.ArchiveTreeContractVO;
 import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.manager.vo.ArchiveTreeContractVO2;
+import org.springblade.manager.vo.ArchiveTreeContractVO3;
 
 
 import java.util.ArrayList;
@@ -35,6 +36,7 @@ import java.util.List;
 
 import java.util.List;
 import java.util.Map;
+import java.util.stream.LongStream;
 
 /**
  *  服务类
@@ -94,4 +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> getChildrenNodeByNodeId(Long nodeId);
 }

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

@@ -854,5 +854,24 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		return baseMapper.getArchiveTreeAndArchiveCount(projectId,nodeId);
 	}
 
+	@Override
+	public List<ArchiveTreeContract> getArchiveTreeByNodeType(Long projectId, Long nodeType) {
+		if (nodeType == 1){
+			nodeType = 1537246243393589249L;
+		}else if (nodeType == 2){
+			nodeType = 1537247986361782274L;
+		}else if (nodeType == 3){
+			nodeType = 1537246384519335938L;
+		}else {
+			nodeType = 1607574141119365122L;
+		}
+		return baseMapper.getArchiveTreeByNodeType(projectId,nodeType);
+	}
+
+	@Override
+	public List<ArchiveTreeContractVO3> getChildrenNodeByNodeId(Long nodeId) {
+		return baseMapper.getChildrenNodeByNodeId(nodeId);
+	}
+
 
 }

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

@@ -235,7 +235,8 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     private void recursionGetChildNodes(List<WbsTreeContract> list, List<WbsTreeContract> result, String contractId) {
         List<Long> ids = list.stream().map(WbsTreeContract::getId).collect(Collectors.toList());
         if (ids.size() > 0) {
-            List<WbsTreeContract> query = jdbcTemplate.query("select * from m_wbs_tree_contract where type = 1 and parent_id in(" + org.apache.commons.lang.StringUtils.join(ids, ",") + ") and status = 1 and is_deleted = 0 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+            //只查询原始节点
+            List<WbsTreeContract> query = jdbcTemplate.query("select * from m_wbs_tree_contract where type = 1 and old_id is null and parent_id in(" + org.apache.commons.lang.StringUtils.join(ids, ",") + ") and status = 1 and is_deleted = 0 and contract_id = " + contractId, new BeanPropertyRowMapper<>(WbsTreeContract.class));
             if (query.size() > 0) {
                 result.addAll(query);
                 recursionGetChildNodes(query, result, contractId);

+ 42 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -837,16 +837,22 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     List<WbsTree> wbsTreesPublicTables;
                     if (wbsTree.getAncestors().equals("0")) {
                         //根节点
-                        wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2).eq(WbsTree::getStatus, 1));
+                        wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
+                                /*.eq(WbsTree::getStatus,1)*/
+                        );
                     } else {
-                        wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2).eq(WbsTree::getStatus, 1).like(WbsTree::getAncestors, wbsTree.getId()));
+                        wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
+                               /*.eq(WbsTree::getStatus,1)*/
+                                .like(WbsTree::getAncestors, wbsTree.getId())
+                        );
                     }
 
                     //获取当前项目树下的元素表 节点
                     List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
                             .eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId())
                             .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
-                            .eq(WbsTreePrivate::getStatus, 1));
+                            /*.eq(WbsTreePrivate::getStatus, 1)*/
+                    );
                     List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
 
                     List<WbsTreePrivate> wbsTreePrivatesProjectTables;
@@ -890,13 +896,20 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     List<WbsTreePrivate> wbsTreePrivateRootTables;
                     if (wbsTreePrivate.getAncestors().equals("0")) {
                         //根节点
-                        wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2).eq(WbsTreePrivate::getStatus, 1));
+                        wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
+                                /*.eq(WbsTreePrivate::getStatus, 1)*/
+                        );
                     } else {
-                        wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2).eq(WbsTreePrivate::getStatus, 1).like(WbsTreePrivate::getAncestors, wbsTreePrivate.getId()));
+                        wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId())
+                                .eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
+                                /*.eq(WbsTreePrivate::getStatus, 1)*/
+                                .like(WbsTreePrivate::getAncestors, wbsTreePrivate.getId()));
                     }
 
                     //获取当前项目选择的节点下的所有元素表 节点
-                    List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId()).eq(WbsTreePrivate::getStatus, 1));
+                    List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
+                            /*.eq(WbsTreePrivate::getStatus, 1)*/
+                    );
 
                     List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
                     List<WbsTreePrivate> wbsTreePrivatesProjectTables;
@@ -933,17 +946,24 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 if (("public").equals(projectInfo.getReferenceWbsTemplateTypeTrial())) {
                     /*TODO-------------------------------------试验公有引用同步--------------------------------------------*/
                     //获取当前节点对应的公有引用树下的元素表
-                    WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getId, wbsTreePrivate.getId()));
+                    WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getId, wbsTreePrivate.getId()));
                     List<WbsTree> wbsTreesPublicTables;
                     if (wbsTree.getAncestors().equals("0")) {
                         //根节点
-                        wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2).eq(WbsTree::getStatus, 1));
+                        wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2)
+                                /*.eq(WbsTree::getStatus, 1)*/
+                        );
                     } else {
-                        wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getWbsId, wbsTree.getWbsId()).eq(WbsTree::getType, 2).eq(WbsTree::getStatus, 1).like(WbsTree::getAncestors, wbsTree.getId()));
+                        wbsTreesPublicTables = wbsTreeMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, wbsTree.getWbsId())
+                                .eq(WbsTree::getType, 2)
+                                /*.eq(WbsTree::getStatus, 1)*/
+                                .like(WbsTree::getAncestors, wbsTree.getId()));
                     }
 
                     //获取当前项目树下的元素表 节点
-                    List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId()).eq(WbsTreePrivate::getStatus, 1));
+                    List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
+                            /*.eq(WbsTreePrivate::getStatus, 1)*/
+                    );
                     List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
 
                     List<WbsTreePrivate> wbsTreePrivatesProjectTables;
@@ -980,18 +1000,26 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 } else if (("private").equals(projectInfo.getReferenceWbsTemplateTypeTrial())) {
                     /*TODO-------------------------------------试验私有引用同步--------------------------------------------*/
                     //根据wbsTreePrivate的wbsId=私有引用的pKeyId来获取引用树根节点
-                    WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
+                    WbsTreePrivate wbsTreePrivateRoot = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getWbsId()));
                     //获取当前私有引用树的元素表信息
                     List<WbsTreePrivate> wbsTreePrivateRootTables;
                     if (wbsTreePrivate.getAncestors().equals("0")) {
                         //根节点
-                        wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2).eq(WbsTreePrivate::getStatus, 1));
+                        wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId())
+                                .eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
+                                /*.eq(WbsTreePrivate::getStatus, 1)*/
+                        );
                     } else {
-                        wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2).eq(WbsTreePrivate::getStatus, 1).like(WbsTreePrivate::getAncestors, wbsTreePrivate.getId()));
+                        wbsTreePrivateRootTables = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, wbsTreePrivateRoot.getProjectId())
+                                .eq(WbsTreePrivate::getWbsId, wbsTreePrivateRoot.getWbsId()).eq(WbsTreePrivate::getType, 2)
+                                /*.eq(WbsTreePrivate::getStatus, 1)*/
+                                .like(WbsTreePrivate::getAncestors, wbsTreePrivate.getId()));
                     }
 
                     //获取当前项目选择的节点下的所有元素表 节点
-                    List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId()).eq(WbsTreePrivate::getStatus, 1));
+                    List<WbsTreePrivate> wbsTreePrivatesProjectAll = baseMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, wbsTreePrivate.getProjectId()).eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
+                            /*.eq(WbsTreePrivate::getStatus, 1)*/
+                    );
 
                     List<WbsTreePrivate> wbsTreePrivatesProjectNodes = wbsTreePrivatesProjectAll.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList());
                     List<WbsTreePrivate> wbsTreePrivatesProjectTables;