Преглед изворни кода

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

yangyj пре 2 година
родитељ
комит
b5d1de8f27
18 измењених фајлова са 423 додато и 109 уклоњено
  1. 0 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/WbsTreeContractDTO.java
  2. 6 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTree.java
  3. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ArchiveTreeContract.java
  4. 8 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeVO2.java
  5. 28 13
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  6. 79 18
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java
  7. 9 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  8. 10 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  9. 6 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java
  10. 30 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  11. 8 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeMapper.xml
  12. 12 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java
  13. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java
  14. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java
  15. 106 6
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  16. 94 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  17. 11 61
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  18. 6 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/wrapper/ArchiveTreeContractWrapper.java

+ 0 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/WbsTreeContractDTO.java

@@ -1,6 +1,5 @@
 package org.springblade.manager.dto;
 
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;

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

@@ -145,11 +145,16 @@ public class ArchiveTree extends BaseEntity {
     @ApiModelProperty(value = "自动立卷设置的节点ID")
     private Long archiveAutoNodeId;
 
+    /**
+     * 分类并卷的分类ID,当archiveAutoType=2时,用来确定同一类型。新增时随机生成,一同提交设置的节点都是同一类。 编辑时 采用已有的
+     */
+    private Long archiveAutoGroupId;
+
     /**
      * 是否自动立卷规则选择设置的节点 选中的节点设为1 方便页面显示列表
      */
     @ApiModelProperty(value = "是否为设置的节点")
-    private Integer archiveAutoSelect;
+    private Integer archiveAutoGroupSelect;
 
     /**
      * 试验资料类型

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

@@ -41,6 +41,12 @@ public class ArchiveTreeContract extends BaseEntity {
 
 	private static final long serialVersionUID = 1L;
 
+	/**
+	 * 租户Id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+
 	/**
 	* 项目ID
 	*/

+ 8 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ArchiveTreeVO2.java

@@ -141,8 +141,15 @@ public class ArchiveTreeVO2 implements INode<ArchiveTreeVO2> {
     @ApiModelProperty(value = "自动立卷关联Id")
     private Long archiveAutoNodeId;
 
+
+    /**
+     * 分类并卷的分类ID,当archiveAutoType=2时,用来确定同一类型。新增时随机生成,一同提交设置的节点都是同一类。 编辑时 采用已有的
+     */
+    @ApiModelProperty(value = "分类并卷的分类ID")
+    private Long archiveAutoGroupId;
+
     @ApiModelProperty(value = "是否为设置的节点")
-    private Integer archiveAutoSelect;
+    private Integer archiveAutoGroupSelect;
 
     /**
      * 是否为接口节点 '0'否 '1'是

+ 28 - 13
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -541,7 +541,7 @@ public class InformationWriteQueryController extends BladeController {
     @PostMapping("/abolishOne-sj")
     @ApiOperationSupport(order = 24)
     @ApiOperation(value = "单个废除-首件")
-    public R<Boolean> abolishOneSJ(@RequestParam String primaryKeyId,@RequestParam String id) {
+    public R<Boolean> abolishOneSJ(@RequestParam String primaryKeyId, @RequestParam String id) {
         //查询填报状态
         InformationQuery businessData = this.informationQueryService.getOne(Wrappers.<InformationQuery>lambdaQuery()
                 .eq(InformationQuery::getId, id));
@@ -682,13 +682,13 @@ public class InformationWriteQueryController extends BladeController {
     @PostMapping("/queryNodeStatus-sj")
     @ApiOperationSupport(order = 23)
     @ApiOperation(value = "/查询节点状态-首件")
-    @ApiModelProperty(value = "id",notes = "当前该条首件的记录id")
-    public R<String> queryNodeStatusSj(@RequestParam String primaryKeyId, @RequestParam String classify,String id) {
+    @ApiModelProperty(value = "id", notes = "当前该条首件的记录id")
+    public R<String> queryNodeStatusSj(@RequestParam String primaryKeyId, @RequestParam String classify, String id) {
         //记录状态
         String status = "1";
         //查询填报状态,type=3首件
         InformationQuery businessData = this.informationQueryService.getOne(Wrappers.<InformationQuery>lambdaQuery()
-                .eq(InformationQuery::getId,id)
+                .eq(InformationQuery::getId, id)
                 .eq(InformationQuery::getType, 3)
         );
         if (businessData != null) {
@@ -1309,8 +1309,13 @@ public class InformationWriteQueryController extends BladeController {
                     //获取当前所有复制的节点的最大sort
                     String sql = "select sort from m_wbs_tree_contract where contract_id = '" + node.getContractId() + "' and (id = '" + node.getId() + "' or old_id = '" + node.getId() + "')";
                     List<WbsTreeContract> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
-                    List<Integer> collect = query.stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
-                    Integer max = collect.stream().reduce(collect.get(0), Integer::max);
+                    List<Integer> collect = query.stream().filter(f -> ObjectUtils.isNotEmpty(f.getSort())).collect(Collectors.toList()).stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
+                    Integer max;
+                    if (collect.size() > 0) {
+                        max = collect.stream().reduce(collect.get(0), Integer::max);
+                    } else {
+                        max = 1;
+                    }
                     //设置sort
                     newData.setSort(max);
 
@@ -1385,8 +1390,13 @@ public class InformationWriteQueryController extends BladeController {
                         //获取当前所有复制的节点的最大sort
                         String sql = "select sort from m_wbs_tree_contract where contract_id = '" + node.getContractId() + "' and (id = '" + node.getId() + "' or old_id = '" + node.getId() + "')";
                         List<WbsTreeContract> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
-                        List<Integer> collect = query.stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
-                        Integer max = collect.stream().reduce(collect.get(0), Integer::max);
+                        List<Integer> collect = query.stream().filter(f -> ObjectUtils.isNotEmpty(f.getSort())).collect(Collectors.toList()).stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
+                        Integer max;
+                        if (collect.size() > 0) {
+                            max = collect.stream().reduce(collect.get(0), Integer::max);
+                        } else {
+                            max = 1;
+                        }
                         //设置sort
                         newData.setSort(max);
 
@@ -1822,8 +1832,13 @@ public class InformationWriteQueryController extends BladeController {
                 //获取当前所有复制的节点的最大sort
                 String sql = "select sort from m_wbs_tree_contract where contract_id = '" + treeContract.getContractId() + "' and (id = '" + half.getId() + "' or old_id = '" + half.getId() + "')";
                 List<WbsTreeContract> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
-                List<Integer> collect = query.stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
-                Integer max = collect.stream().reduce(collect.get(0), Integer::max);
+                List<Integer> collect = query.stream().filter(f -> ObjectUtils.isNotEmpty(f.getSort())).collect(Collectors.toList()).stream().map(WbsTreeContract::getSort).collect(Collectors.toList());
+                Integer max;
+                if (collect.size() > 0) {
+                    max = collect.stream().reduce(collect.get(0), Integer::max);
+                } else {
+                    max = 1;
+                }
                 //设置sort
                 newData.setSort(max);
 
@@ -1897,7 +1912,7 @@ public class InformationWriteQueryController extends BladeController {
         if (saveList.size() > 0) {
             //保存施工日志
             if (saveLedger.size() > 0) {
-                this.constructionLedgerService.saveBatch(saveLedger,1000);
+                this.constructionLedgerService.saveBatch(saveLedger, 1000);
             }
 
             try {
@@ -2137,8 +2152,8 @@ public class InformationWriteQueryController extends BladeController {
                     List<String> treeIds = queryDataResult.stream().map(QueryProcessDataVO::getPrimaryKeyId).distinct().collect(Collectors.toList());
                     //通过合同段主键在首件关联表中查询出所有数据
                     List<TreeContractFirst> firstList = treeContractFirstService.list(new LambdaQueryWrapper<TreeContractFirst>().in(TreeContractFirst::getWbsNodeId, treeIds));
-                    List<String> list = firstList.stream().map(fl -> (fl.getWbsNodeId()+"")).collect(Collectors.toList());
-                    queryDataResult = queryDataResult.stream().filter(qdr->list.contains(qdr.getPrimaryKeyId())).collect(Collectors.toList());
+                    List<String> list = firstList.stream().map(fl -> (fl.getWbsNodeId() + "")).collect(Collectors.toList());
+                    queryDataResult = queryDataResult.stream().filter(qdr -> list.contains(qdr.getPrimaryKeyId())).collect(Collectors.toList());
 //                    for (QueryProcessDataVO queryProcessDataVO : queryDataResult) {
 //                        TreeContractFirst first = treeContractFirstService.getOne(new LambdaQueryWrapper<TreeContractFirst>()
 //                                .eq(TreeContractFirst::getWbsNodeId, queryProcessDataVO.getPrimaryKeyId()));

+ 79 - 18
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java

@@ -24,12 +24,17 @@ import javax.validation.Valid;
 
 import org.checkerframework.checker.units.qual.A;
 import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.ArchiveTreeContractAutoRuleMapDTO;
+import org.springblade.manager.dto.ArchiveTreeContractDTO;
+import org.springblade.manager.dto.ArchiveTreeDTO;
+import org.springblade.manager.dto.ArchiveTreeSortDTO;
 import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.service.IArchiveTreeService;
 import org.springblade.manager.vo.ArchiveTreeContractAutoRuleVO;
@@ -49,6 +54,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
 /**
  *  控制器
  *
@@ -71,9 +78,9 @@ public class ArchiveTreeContractController extends BladeController {
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入archiveTreeContract")
-	public R<ArchiveTreeContractVO> detail(ArchiveTreeContract archiveTreeContract) {
+	public R<ArchiveTreeContract> detail(ArchiveTreeContract archiveTreeContract) {
 		ArchiveTreeContract detail = archiveTreeContractService.getOne(Condition.getQueryWrapper(archiveTreeContract));
-		return R.data(ArchiveTreeContractWrapper.build().entityVO(detail));
+		return R.data(detail);
 	}
 
 	/**
@@ -82,7 +89,7 @@ public class ArchiveTreeContractController extends BladeController {
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入archiveTreeContract")
-	public R<IPage<ArchiveTreeContractVO>> list(ArchiveTreeContract archiveTreeContract, Query query) {
+	public R<IPage<ArchiveTreeContractVO2>> list(ArchiveTreeContract archiveTreeContract, Query query) {
 		IPage<ArchiveTreeContract> pages = archiveTreeContractService.page(Condition.getPage(query), Condition.getQueryWrapper(archiveTreeContract));
 		return R.data(ArchiveTreeContractWrapper.build().pageVO(pages));
 	}
@@ -104,9 +111,18 @@ public class ArchiveTreeContractController extends BladeController {
 	 */
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "新增", notes = "传入archiveTreeContract")
-	public R save(@Valid @RequestBody ArchiveTreeContract archiveTreeContract) {
-		return R.status(archiveTreeContractService.save(archiveTreeContract));
+	@ApiOperation(value = "新增", notes = "传入archiveTreeContractDTO")
+	public R save(@Valid @RequestBody ArchiveTreeContractDTO archiveTreeContractDTO) {
+
+		if (archiveTreeContractDTO.getProjectId() == null) {
+			archiveTreeContractDTO.setProjectId(1578599210897772545L);
+		}
+
+		if (archiveTreeContractService.submit(archiveTreeContractDTO)) {
+			CacheUtil.clear(SYS_CACHE);
+			return R.data(archiveTreeContractDTO);
+		}
+		return R.fail(200, "操作失败");
 	}
 
 	/**
@@ -116,6 +132,7 @@ public class ArchiveTreeContractController extends BladeController {
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "修改", notes = "传入archiveTreeContract")
 	public R update(@Valid @RequestBody ArchiveTreeContract archiveTreeContract) {
+		archiveTreeContract.setFullName(archiveTreeContract.getNodeName());
 		return R.status(archiveTreeContractService.updateById(archiveTreeContract));
 	}
 
@@ -135,9 +152,19 @@ public class ArchiveTreeContractController extends BladeController {
 	 */
 	@PostMapping("/remove")
 	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(archiveTreeContractService.deleteLogic(Func.toLongList(ids)));
+	@ApiOperation(value = "逻辑删除", notes = "传入id")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String id) {
+		List<ArchiveTreeContract> archiveTrees = archiveTreeContractService.selectByParentIdOrId(id);
+		archiveTrees.forEach(archiveTree -> {
+			if (archiveTree.getParentId() == Long.parseLong(id)) {
+				throw new ServiceException("当前节点下存在子节点,删除失败");
+			}
+			if (archiveTree.getIsUploadFileDisplayConfigurationTree() == 1) {
+				throw new ServiceException("当前节点被引用中,删除失败");
+			}
+		});
+
+		return R.status(archiveTreeContractService.deleteLogic(Func.toLongList(id)));
 	}
 
 
@@ -152,10 +179,9 @@ public class ArchiveTreeContractController extends BladeController {
 			@ApiImplicitParam(name = "projectId", value = "项目id", required = true)
 	})
 	public R<List<ArchiveTreeContractVO2>> lazyTree(Long parentId,Long projectId) {
-		if (projectId == null) {
-			projectId = 1578599210897772545L;
-		}
-
+//		if (projectId == null) {
+//			projectId = 1578599210897772545L;
+//		}
 		List<ArchiveTreeContractVO2> tree = archiveTreeContractService.lazyTree2(AuthUtil.getTenantId(), parentId,projectId);
 		if (tree != null && tree.size() > 0) {
 			return R.data(tree);
@@ -176,9 +202,6 @@ public class ArchiveTreeContractController extends BladeController {
 			@ApiImplicitParam(name = "projectId", value = "项目id", required = true)
 	})
 	public R<List<ArchiveTreeContractVO2>> tree(Integer disPlayTree, Integer nodeType,Long projectId){
-		if (projectId == null) {
-			projectId = 1578599210897772545L;
-		}
 
 		List<ArchiveTreeContractVO2> tree = archiveTreeContractService.tree2(AuthUtil.getTenantId(), disPlayTree, nodeType,projectId);
 		if (tree != null && tree.size() > 0) {
@@ -190,6 +213,11 @@ public class ArchiveTreeContractController extends BladeController {
 
 
 
+
+
+
+
+
 	@GetMapping("/test")
 	public R test(){
 		Long projectId = 1578599210897772545L;
@@ -243,8 +271,41 @@ public class ArchiveTreeContractController extends BladeController {
 			@ApiImplicitParam(name = "projectId", value = "项目id", required = true)
 	})
 	public R<ArchiveTree> initTree(Long projectId) {
-		List<ArchiveTree> trees = archiveTreeService.treeList(AuthUtil.getTenantId(), null, null);
-		archiveTreeContractService.initTree(AuthUtil.getTenantId(), projectId,trees);
+		archiveTreeContractService.initTree2(AuthUtil.getTenantId(), projectId);
 		return R.fail(200, "初始化创建成功");
 	}
+
+	/**
+	 * 保存/修改上传文件显示配置树
+	 */
+	@PostMapping("/submit-display-config-tree")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "保存/修改上传文件显示配置树", notes = "传入ids")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "ids", value = "ids字符串拼接 ',' ", required = true)
+	})
+	public R<List<ArchiveTreeContractVO2>> submitDisplayConfigTree(@RequestParam String ids) {
+		return R.status(archiveTreeContractService.submitDisplayConfigTree(ids));
+	}
+
+	/**
+	 * 获取归档树同级节点
+	 */
+	@GetMapping("/get-same-grade-node")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "获取归档树同级节点", notes = "传入节点id")
+	public R<List<ArchiveTreeContract>> getSameGradeNode(@RequestParam String id) {
+		return R.data(archiveTreeContractService.getSameGradeNode(id));
+	}
+
+	/**
+	 * 提交归档树手动排序
+	 */
+	@PostMapping("/submit-tree-sort")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "提交归档树手动排序", notes = "List<ArchiveTreeContractDTO>集合")
+	public R submitArchiveTreeSort(@RequestBody List<ArchiveTreeContractDTO> listSort) {
+		return R.status(archiveTreeContractService.submitArchiveTreeSort(listSort));
+	}
+
 }

+ 9 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -3,6 +3,7 @@ package org.springblade.manager.controller;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -131,6 +132,8 @@ public class ExcelTabController extends BladeController {
     // 项目信息
     private final IProjectInfoService projectInfoService;
 
+    private final ITableInfoService tableInfoService;
+
     /**
      * 详情
      */
@@ -489,6 +492,12 @@ public class ExcelTabController extends BladeController {
         //解析
         Element table = doc.select("table").first();
         Elements trs = table.select("tr");
+        if (aPrivate.getInitTableId() == null){
+            org.springblade.manager.entity.TableInfo tableInfo = tableInfoService.getOne(new LambdaQueryWrapper<org.springblade.manager.entity.TableInfo>()
+                    .eq(org.springblade.manager.entity.TableInfo::getTabEnName, aPrivate.getInitTableName()));
+            aPrivate.setInitTableId(tableInfo.getId()+"");
+            updateWrapper.set("init_table_id", tableInfo.getId()+"");
+        }
 
         List<WbsFormElement> elementList = wbsFormElementService.selectElementListByFid(aPrivate.getInitTableId() + "");
 

+ 10 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -482,6 +482,16 @@ public class WbsTreePrivateController extends BladeController {
         return R.status(wbsTreePrivateService.syncNodeParam(projectId));
     }
 
+    /**
+     * 同步项目下所有节点的电签默认信息
+     */
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "同步项目下所有节点的电签默认信息", notes = "传入项目projectId")
+    @RequestMapping(value = "/sync-project-eVisa", method = RequestMethod.POST)
+    public R syncProjectEVisa(@RequestParam String projectId) {
+        return R.status(wbsTreePrivateService.syncProjectEVisa(projectId));
+    }
+
     /**
      * 同步项目下节点的元素表
      */

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

@@ -74,4 +74,10 @@ public interface ArchiveTreeContractMapper extends BaseMapper<ArchiveTreeContrac
 	 * @return
 	 */
 	List<ArchiveTreeContractAutoRuleVO> getAllSonNodeforGroupView(@Param("ancestors")String ancestors, @Param("groupId")Long groupId);
+
+	int updateBatch(@Param("diffRent") List<String> diffRent);
+
+	int updateBatch2(@Param("diffRent") List<String> diffRent);
+
+	int updateBatch3();
 }

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

@@ -340,4 +340,34 @@
         order by ancestors asc,sort asc
     </select>
 
+    <update id="updateBatch">
+        UPDATE m_archive_tree_contract
+        SET is_upload_file_display_configuration_tree = 1
+        WHERE id IN
+        <foreach item="diffRent" collection="diffRent" open="(" close=")" separator=",">
+            #{diffRent}
+        </foreach>
+        AND is_deleted = 0
+        AND status = 1
+    </update>
+
+    <update id="updateBatch2">
+        UPDATE m_archive_tree_contract
+        SET is_upload_file_display_configuration_tree = 0
+        WHERE id IN
+        <foreach item="diffRent" collection="diffRent" open="(" close=")" separator=",">
+            #{diffRent}
+        </foreach>
+        AND is_deleted = 0
+        AND status = 1
+    </update>
+    <update id="updateBatch3">
+        UPDATE m_archive_tree_contract
+        SET is_upload_file_display_configuration_tree = 0
+        WHERE
+        node_type = 2
+        AND is_deleted = 0
+        AND status = 1
+    </update>
+
 </mapper>

+ 8 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeMapper.xml

@@ -34,7 +34,8 @@
         <result column="exp_data_type" property="expDataType"/>
         <result column="archive_auto_type" property="archiveAutoType"/>
         <result column="archive_auto_node_id" property="archiveAutoNodeId"/>
-        <result column="archive_auto_select" property="archiveAutoSelect"/>
+        <result column="archive_auto_group_select" property="archiveAutoGroupSelect"/>
+        <result column="archive_auto_group_id" property="archiveAutoGroupId"/>
         <result column="is_upload_file_display_configuration_tree" property="isUploadFileDisplayConfigurationTree"/>
     </resultMap>
 
@@ -60,7 +61,8 @@
         <result column="ext_id" property="extId"/>
         <result column="archive_auto_type" property="archiveAutoType"/>
         <result column="archive_auto_node_id" property="archiveAutoNodeId"/>
-        <result column="archive_auto_select" property="archiveAutoSelect"/>
+        <result column="archive_auto_group_id" property="archiveAutoGroupId"/>
+        <result column="archive_auto_group_select" property="archiveAutoGroupSelect"/>
         <result column="is_interface_node" property="isInterfaceNode"/>
         <result column="interface_type" property="interfaceType"/>
         <result column="sort" property="sort"/>
@@ -201,7 +203,8 @@
         d.exp_data_type,
         d.archive_auto_type,
         d.archive_auto_node_id,
-        d.archive_auto_select,
+        d.archive_auto_group_select,
+        d.archive_auto_group_id,
         d.is_interface_node,
         d.interface_type,
         d.sort,
@@ -238,7 +241,8 @@
         exp_data_type,
         archive_auto_type,
         archive_auto_node_id,
-        archive_auto_select,
+        archive_auto_group_select,
+        archive_auto_group_id,
         is_interface_node,
         interface_type,
         sort

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

@@ -18,6 +18,8 @@ package org.springblade.manager.service;
 
 import feign.Param;
 import org.springblade.manager.dto.ArchiveTreeContractAutoRuleMapDTO;
+import org.springblade.manager.dto.ArchiveTreeContractDTO;
+import org.springblade.manager.dto.ArchiveTreeDTO;
 import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.vo.ArchiveTreeContractAutoRuleVO;
@@ -83,5 +85,15 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
 	 */
 	boolean updateArchiveAutoRule(ArchiveTreeContractAutoRuleMapDTO dto);
 
+	List<ArchiveTreeContract> selectByParentIdOrId(String id);
+
+	boolean submit(ArchiveTreeContractDTO archiveTreeDTO);
+
+	List<ArchiveTreeContract> getSameGradeNode(String id);
+
+	boolean submitArchiveTreeSort(List<ArchiveTreeContractDTO> listSort);
+
+	boolean submitDisplayConfigTree(String ids);
+
 
 }

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

@@ -72,4 +72,7 @@ public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
     List<WbsTreePrivate> searchNodeAllTable(String primaryKeyId, String type, String tableType, String contractId, String projectId, Integer isAdd, Long id);
 
     Object getExcelHtml(String primaryKeyId) throws IOException;
+
+    boolean syncProjectEVisa(String projectId);
+
 }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java

@@ -151,6 +151,7 @@ public class ArTreeContractInitServiceImpl {
         contractNode.setExtType(2);
         contractNode.setNodeType(0);
         contractNode.setIsUploadFileDisplayConfigurationTree(1);
+        contractNode.setTenantId(tenantId);
         contractNode.setParentId(newRootId);
         contractNode.setProjectId(projectId);
         contractNode.setContractId(contractInfo.getId());

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

@@ -24,8 +24,13 @@ import lombok.AllArgsConstructor;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.ArchiveTreeContractAutoRuleMapDTO;
+import org.springblade.manager.dto.ArchiveTreeContractDTO;
+import org.springblade.manager.dto.ArchiveTreeDTO;
+import org.springblade.manager.dto.ArchiveTreeSortDTO;
 import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.entity.ContractInfo;
@@ -34,6 +39,7 @@ import org.springblade.manager.mapper.ArchiveTreeMapper;
 import org.springblade.manager.service.IArchiveTreeService;
 import org.springblade.manager.service.IContractInfoService;
 import org.springblade.manager.service.IProjectInfoService;
+import org.springblade.manager.utils.DiffListUtil;
 import org.springblade.manager.vo.*;
 import org.springblade.manager.mapper.ArchiveTreeContractMapper;
 import org.springblade.manager.service.IArchiveTreeContractService;
@@ -43,6 +49,7 @@ import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  *  服务实现类
@@ -400,13 +407,106 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		return false;
 	}
 
-	/**
-	 * 清理旧的项目归档树
-	 * @param tenantId
-	 * @param projectId
-	 */
-	void clearProjectTree(String tenantId, Long projectId){
+	@Override
+	public List<ArchiveTreeContract> selectByParentIdOrId(String id) {
+		return baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
+				.eq(ArchiveTreeContract::getId, id)
+				.or()
+				.eq(ArchiveTreeContract::getParentId, id)
+		);
+	}
+
+	@Override
+	public boolean submit(ArchiveTreeContractDTO archiveTreeContractDTO) {
+		if (Func.isEmpty(archiveTreeContractDTO.getParentId())) {
+			archiveTreeContractDTO.setTenantId(AuthUtil.getTenantId());
+			archiveTreeContractDTO.setParentId(BladeConstant.TOP_PARENT_ID);
+			archiveTreeContractDTO.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
+		}
+		if (archiveTreeContractDTO.getParentId() > 0) {
+			ArchiveTreeContract parent = getById(archiveTreeContractDTO.getParentId());
+			if (Func.toLong(archiveTreeContractDTO.getParentId()) == Func.toLong(archiveTreeContractDTO.getId())) {
+				throw new ServiceException("父节点不可选择自身!");
+			}
+			archiveTreeContractDTO.setTenantId(parent.getTenantId());
+			String ancestors = parent.getAncestors() + StringPool.COMMA + archiveTreeContractDTO.getParentId();
+			archiveTreeContractDTO.setAncestors(ancestors);
+		}
+
+		archiveTreeContractDTO.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		archiveTreeContractDTO.setFullName(archiveTreeContractDTO.getNodeName());
+		if (archiveTreeContractDTO.getNodeType() == 1) {
+			archiveTreeContractDTO.setIsStorageNode(1);
+		}
+		if (archiveTreeContractDTO.getId() == null) {
+			List<ArchiveTreeContract> trees = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
+					.eq(ArchiveTreeContract::getParentId, archiveTreeContractDTO.getParentId())
+			);
+
+			List<ArchiveTreeContract> collect = trees.stream().filter(f -> {
+				if (f.getSort() == null) {
+					f.setSort(0);
+				}
+				return true;
+			}).collect(Collectors.toList());
+			Optional<ArchiveTreeContract> max = collect.stream().max(Comparator.comparingInt(ArchiveTreeContract::getSort));
+			Integer sort = 0;
+			if (max.isPresent()) {
+				sort = max.get().getSort();
+			}
+			archiveTreeContractDTO.setSort(sort + 1);
+		}
+
+		return save(archiveTreeContractDTO);
+	}
 
+	@Override
+	public List<ArchiveTreeContract> getSameGradeNode(String id) {
+		ArchiveTreeContract archiveTree = baseMapper.selectById(id);
+		return baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
+				.eq(ArchiveTreeContract::getParentId, archiveTree.getParentId())
+				.orderByAsc(ArchiveTreeContract::getSort));
+	}
+
+
+	@Override
+	public boolean submitArchiveTreeSort(List<ArchiveTreeContractDTO> listSort) {
+		int sortNumber = 1;
+		for (ArchiveTreeContractDTO archiveTreeSortDTO : listSort) {
+			archiveTreeSortDTO.setSort(sortNumber);
+			sortNumber++;
+			baseMapper.updateById(archiveTreeSortDTO);
+		}
+		return true;
+	}
+
+	@Override
+	public boolean submitDisplayConfigTree(String ids) {
+		if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isEmpty(ids)) {
+			baseMapper.updateBatch3();
+			return true;
+		}
+		List<ArchiveTreeContract> archiveTrees = baseMapper.selectList(Wrappers.<ArchiveTreeContract>query().lambda()
+				.eq(ArchiveTreeContract::getIsUploadFileDisplayConfigurationTree, 1));
+		String[] idList = ids.split(",");
+		List<String> idQ = Arrays.asList(idList);
+		List<String> idList1 = idQ.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
+		List<String> idList2 = new ArrayList<>();
+		archiveTrees.forEach(id -> {
+			idList2.add(String.valueOf(id.getId()));
+		});
+		List<String> diffRent = DiffListUtil.getDiffRent(idList1, idList2);
+		if (diffRent.size() == 0) {
+			return true;
+		} else {
+			int row;
+			if (idList1.size() > idList2.size()) {
+				row = baseMapper.updateBatch(diffRent);
+			} else {
+				row = baseMapper.updateBatch2(diffRent);
+			}
+			return row > 0;
+		}
 	}
 
 }

+ 94 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -57,6 +57,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     private final ProjectInfoMapper projectInfoMapper;
     private final WbsTreePrivateMapper wbsTreePrivateMapper;
     private final JdbcTemplate jdbcTemplate;
+    private final TextdictInfoServiceImpl textDictInfoService;
 
     @Override
     public List<WbsTreePrivateVO> tree(String wbsId, String projectId) {
@@ -1601,6 +1602,99 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return R.data(table + "");
     }
 
+    @Override
+    public boolean syncProjectEVisa(String projectId) {
+        if (StringUtils.isNotEmpty(projectId)) {
+            ProjectInfo projectInfo = projectInfoMapper.selectById(projectId);
+            if (projectInfo != null && ("private").equals(projectInfo.getReferenceWbsTemplateType()) && ObjectUtils.isNotEmpty(projectInfo.getReferenceWbsTemplateId())) {
+                //构造参数集合
+                List<TextdictInfo> insertData = new ArrayList<>();
+                Map<String, List<TextdictInfo>> textDictInfoData = new HashMap<>();
+
+                //获取当前引用的项目节点树的根节点信息
+                WbsTreePrivate oneRecordRoot = this.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, projectInfo.getReferenceWbsTemplateId()));
+
+                //获取当前项目下节点树所有节点、表、独立表
+                List<WbsTreePrivate> wbsTreePrivatesNodeAndTabNow = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, projectId).eq(WbsTreePrivate::getWbsType, 1).eq(WbsTreePrivate::getStatus, 1).and(obj -> obj.eq(WbsTreePrivate::getType, 1).or().eq(WbsTreePrivate::getType, 2)));
+                List<WbsTreePrivate> wbsTreePrivatesTableDL = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, projectId).eq(WbsTreePrivate::getType, 10).eq(WbsTreePrivate::getParentId, -10).eq(WbsTreePrivate::getStatus, 1));
+                wbsTreePrivatesNodeAndTabNow.addAll(wbsTreePrivatesTableDL);
+                //获取当前项目节点树的所有id
+                List<Long> saveIds = wbsTreePrivatesNodeAndTabNow.stream().filter(f -> f.getType().equals(1)).collect(Collectors.toList()).stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
+
+                //获取当前引用的节点树下所有节点、表、独立表
+                List<WbsTreePrivate> wbsTreePrivatesNodeAndTab = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, oneRecordRoot.getProjectId()).eq(WbsTreePrivate::getWbsId, oneRecordRoot.getWbsId()).eq(WbsTreePrivate::getStatus, 1).and(obj -> obj.eq(WbsTreePrivate::getType, 1).or().eq(WbsTreePrivate::getType, 2)));
+                List<WbsTreePrivate> wbsTreePrivatesTableDLOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, oneRecordRoot.getProjectId()).eq(WbsTreePrivate::getType, 10).eq(WbsTreePrivate::getStatus, 1).eq(WbsTreePrivate::getParentId, -10).isNull(WbsTreePrivate::getWbsId));
+                wbsTreePrivatesNodeAndTab.addAll(wbsTreePrivatesTableDLOld);
+
+                //获取当前对应电签位置配置信息
+                List<Long> pIdsDL = wbsTreePrivatesNodeAndTab.stream().filter(f -> f.getType().equals(10) || f.getType().equals(2)).collect(Collectors.toList()).stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
+                String sql = "select * from m_textdict_info where tab_id in (" + org.apache.commons.lang.StringUtils.join(pIdsDL, ",") + ") and is_deleted = 0";
+                List<TextdictInfo> textDictInfosAll = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TextdictInfo.class));
+
+                //构造原始电签信息
+                for (WbsTreePrivate wbsTreePrivate : wbsTreePrivatesNodeAndTab) {
+                    if (wbsTreePrivate.getType() == 2) {
+                        for (Long id : saveIds) {
+                            if (id.equals(wbsTreePrivate.getParentId())) {
+                                //根据元素表pKeyId,获取电签位置匹配信息、编辑默认信息
+                                List<TextdictInfo> textDictInfos = textDictInfosAll.stream().filter(f ->
+                                        ObjectUtils.isNotEmpty(f.getTabId()) && f.getTabId().equals(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
+                                if (textDictInfos.size() > 0) {
+                                    textDictInfoData.put(wbsTreePrivate.getPKeyId() + "," + wbsTreePrivate.getId(), textDictInfos);
+                                }
+                            }
+                        }
+                    }
+
+                    if (wbsTreePrivate.getType() == 10 && wbsTreePrivate.getParentId() == -10) { //type=10,parentId=-10 独立库
+                        //判断是否存在独立表单,存在则不新增
+                        List<WbsTreePrivate> collect = wbsTreePrivatesTableDL.stream().filter(f -> f.getId().equals(wbsTreePrivate.getId())).collect(Collectors.toList());
+                        if (collect.size() == 0) {
+                            //根据元素表pKeyId,获取电签位置匹配信息、编辑默认信息
+                            List<TextdictInfo> textDictInfos = textDictInfosAll.stream().filter(f -> ObjectUtils.isNotEmpty(f.getTabId())
+                                    && f.getTabId().equals(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
+                            if (textDictInfos.size() > 0) {
+                                textDictInfoData.put(wbsTreePrivate.getPKeyId() + "," + wbsTreePrivate.getId(), textDictInfos);
+                            }
+                        }
+                    }
+                }
+
+                //只同步独立库中有关联过清表的元素表type=10,以及原始方式的元素表type=2
+                List<WbsTreePrivate> collect = wbsTreePrivatesNodeAndTabNow.stream().filter(f -> f.getType().equals(2) || (f.getHtmlUrl() != null && f.getType().equals(10))).collect(Collectors.toList());
+
+                collect.forEach(tree -> {
+                    textDictInfoData.forEach((k, v) -> {
+                        String nodeId = k.split(",")[1];
+                        if (tree.getId().equals(Long.parseLong(nodeId))) {
+                            for (TextdictInfo textdictInfo : v) {
+                                TextdictInfo obj = BeanUtil.copyProperties(textdictInfo, TextdictInfo.class);
+                                assert obj != null;
+                                obj.setTabId(String.valueOf(tree.getPKeyId()));
+                                obj.setId(SnowFlakeUtil.getId());
+                                insertData.add(obj);
+                            }
+                        }
+                    });
+                });
+
+                //去重,删除当前表的电签信息
+                for (TextdictInfo insertDatum : insertData) {
+                    String delSql = "delete from m_textdict_info where tab_id = " + insertDatum.getTabId();
+                    jdbcTemplate.execute(delSql);
+                }
+
+                //新增
+                textDictInfoService.insertBatch(insertData, 1000);
+
+                return true;
+            } else {
+                throw new ServiceException("未获取到项目的关联的私有wbs树信息");
+            }
+        }
+        return false;
+    }
+
     @Transactional(rollbackFor = Exception.class)
     public boolean insertBatch(Collection<WbsTreePrivate> entityList, int batchSize) {
         try {

+ 11 - 61
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -550,12 +550,12 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             List<String> idList2 = new ArrayList<>();
 
             if (pawDTO.getReferenceType().equals("public")) {
-                //当前公有引用ids
+                //当前公有引用
                 List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId()).eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId()).eq(WbsTreePrivate::getType, 1));
                 List<String> collect = wbsTreePrivates.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
                 idList2.addAll(collect);
             } else if (pawDTO.getReferenceType().equals("private")) {
-                //当前私有引用ids
+                //当前私有引用
                 List<WbsTreePrivate> wbsTreePrivates2 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId()).eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId()).eq(WbsTreePrivate::getType, 1));
                 List<String> collect = wbsTreePrivates2.stream().map(WbsTreePrivate::getId).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
                 idList2.addAll(collect);
@@ -564,14 +564,13 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             List<String> saveIds = idList1.stream().filter(f -> !idList2.contains(f)).collect(Collectors.toList());
             List<String> delIds = idList2.stream().filter(f -> !idList1.contains(f)).collect(Collectors.toList());
 
-            //1.同步私有电签默认信息
+            //TODO -------同步私有电签默认信息--------
             if (saveIds.size() == 0 && delIds.size() == 0) {
                 if (pawDTO.getReferenceType().equals("private")) {
-
-                    //新增独立表单库数据
+                    //新增独立表单
                     this.insertDLTabAsync(pawDTO);
 
-                    //获取私有引用项目的wbs树的所有节点、元素表、独立表(type=10)
+                    /*//获取私有引用项目的wbs树的所有节点、元素表、独立表(type=10)
                     WbsTreePrivate wbsTreePrivate = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, pawDTO.getPrimaryKeyId()));
                     List<WbsTreePrivate> wbsTreePrivateAllOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
                             .eq(WbsTreePrivate::getProjectId, Long.parseLong(wbsTreePrivate.getProjectId()))
@@ -588,11 +587,11 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     List<WbsTreePrivate> wbsTreePrivateNowTables = wbsTreePrivatesAllNow.stream().filter(f -> f.getType() == 2 || f.getType() == 10).collect(Collectors.toList());
 
                     //同步私有-电签匹配数据、默认信息数据
-                    this.insertTextDictInfoAsync(WbsTreePrivateTables, wbsTreePrivateNowTables);
+                    this.insertTextDictInfoAsync(WbsTreePrivateTables, wbsTreePrivateNowTables);*/
                 }
 
             } else {
-                //2.删除
+                //TODO ------------删除------------
                 if (delIds.size() > 0) {
                     if (pawDTO.getReferenceType().equals("public")) {
                         List<Long> ids1 = delIds.stream().map(Long::parseLong).collect(Collectors.toList());
@@ -652,26 +651,22 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     }
                 }
 
-                //3.新增
+                //TODO ------------新增------------
                 if (saveIds.size() > 0) {
                     if (saveIds.size() >= 1000) {
-                        //加锁
                         String redisValue = bladeRedis.get("submit-wbs-project:" + pawDTO.getProjectId());
                         if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
                             throw new ServiceException("请勿重复提交,请60秒后再尝试");
                         }
                     }
 
-                    //公有-数据初始化节点
+                    //构造入参集合
                     List<WbsTreePrivate> insertData1 = new ArrayList<>();
-                    //私有-数据初始化节点
                     List<WbsTreePrivate> insertData2 = new ArrayList<>();
-                    //私有-电签匹配数据、默认信息数据
-                    List<TextdictInfo> insertData3 = new ArrayList<>();
 
                     if (pawDTO.getReferenceType().equals("public")) {
                         List<WbsTree> addListData = new ArrayList<>();
-                        //获取当前wbs树下所有节点、表信息
+                        //获取当前树下所有节点、表信息
                         List<WbsTree> treesAll = baseMapper.selectList(Wrappers.<WbsTree>lambdaQuery().eq(WbsTree::getWbsId, pawDTO.getWbsId()).eq(WbsTree::getStatus, 1));
                         for (WbsTree wbsTree : treesAll) {
                             for (String id : saveIds) {
@@ -698,29 +693,19 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     } else if (pawDTO.getReferenceType().equals("private")) {
                         List<WbsTreePrivate> addListData = new ArrayList<>();
 
-                        //私有引用-电签匹配数据、默认信息数据
-                        Map<Long, List<TextdictInfo>> textDictInfoData = new HashMap<>();
-
-                        //查询出当前wbs树下所有节点、表信息(type=10独立表)
+                        //获取当前树下所有节点、表信息(type=10独立表)
                         List<WbsTreePrivate> wbsTreePrivatesNodeAndTab = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
                                 .eq(WbsTreePrivate::getStatus, 1)
                                 .eq(WbsTreePrivate::getProjectId, pawDTO.getReferencePrivateWbsProjectId())
                                 .eq(WbsTreePrivate::getWbsId, pawDTO.getWbsId())
                                 .and(obj -> obj.eq(WbsTreePrivate::getType, 1).or().eq(WbsTreePrivate::getType,2))
                         );
-
                         List<WbsTreePrivate> wbsTreePrivatesTableDLOld = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, pawDTO.getReferencePrivateWbsProjectId()).eq(WbsTreePrivate::getType, 10).eq(WbsTreePrivate::getStatus, 1).eq(WbsTreePrivate::getParentId, -10).isNull(WbsTreePrivate::getWbsId));
                         wbsTreePrivatesNodeAndTab.addAll(wbsTreePrivatesTableDLOld);
 
                         //获取当前项目下的所有独立表
                         List<WbsTreePrivate> wbsTreePrivatesTableDL = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId()).eq(WbsTreePrivate::getType, 10).eq(WbsTreePrivate::getParentId, -10).eq(WbsTreePrivate::getStatus, 1));
 
-                        //查询对应电签位置配置信息的pKeyIds
-                        List<Long> pIdsDL = wbsTreePrivatesNodeAndTab.stream().filter(f -> f.getType().equals(10) || f.getType().equals(2)).collect(Collectors.toList()).stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
-                        String pKeyIds = StringUtils.join(pIdsDL, ",");
-                        String sql = "select `id`,`name`,`type`,tab_id,col_key,sig_role_id,is_deleted,sig_role_name,col_name,pyzbx,pyzby from m_textdict_info where tab_id in (" + pKeyIds + ") and is_deleted = 0";
-                        List<TextdictInfo> textDictInfosAll = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TextdictInfo.class));
-
                         for (WbsTreePrivate wbsTreePrivate : wbsTreePrivatesNodeAndTab) {
                             if (wbsTreePrivate.getType() == 1 || wbsTreePrivate.getType() == 2) {
                                 for (String id : saveIds) {
@@ -729,13 +714,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
                                     } else if (Long.parseLong(id) == (wbsTreePrivate.getParentId()) && wbsTreePrivate.getType() == 2) {
                                         addListData.add(wbsTreePrivate);
-
-                                        //根据元素表pKeyId,获取电签位置匹配信息、编辑默认信息
-                                        List<TextdictInfo> textDictInfos = textDictInfosAll.stream().filter(f -> ObjectUtils.isNotEmpty(f.getTabId())
-                                                && f.getTabId().equals(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
-                                        if (textDictInfos.size() > 0) {
-                                            textDictInfoData.put(wbsTreePrivate.getPKeyId(), textDictInfos);
-                                        }
                                     }
                                 }
                             }
@@ -745,13 +723,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                                 List<WbsTreePrivate> collect = wbsTreePrivatesTableDL.stream().filter(f -> f.getId().equals(wbsTreePrivate.getId())).collect(Collectors.toList());
                                 if (collect.size() == 0) {
                                     addListData.add(wbsTreePrivate);
-
-                                    //根据元素表pKeyId,获取电签位置匹配信息、编辑默认信息
-                                    List<TextdictInfo> textDictInfos = textDictInfosAll.stream().filter(f -> ObjectUtils.isNotEmpty(f.getTabId())
-                                            && f.getTabId().equals(String.valueOf(wbsTreePrivate.getPKeyId()))).collect(Collectors.toList());
-                                    if (textDictInfos.size() > 0) {
-                                        textDictInfoData.put(wbsTreePrivate.getPKeyId(), textDictInfos);
-                                    }
                                 }
                             }
                         }
@@ -777,23 +748,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                                     wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));
                                 }
                                 insertData2.add(wbsTreePrivate);
-
-                                //电签
-                                if (wbsTreePrivate.getType() == 2 || (wbsTreePrivate.getType() == 10 && wbsTreePrivate.getParentId() == -10)) { //type=10,parentId=-10 独立库引用元素库
-                                    if (textDictInfoData.size() > 0) {
-                                        textDictInfoData.forEach((k, v) -> {
-                                            if (tree.getPKeyId().equals(k)) {
-                                                for (TextdictInfo textdictInfo : v) {
-                                                    TextdictInfo obj = BeanUtil.copyProperties(textdictInfo, TextdictInfo.class);
-                                                    assert obj != null;
-                                                    obj.setTabId(String.valueOf(wbsTreePrivate.getPKeyId()));
-                                                    obj.setId(SnowFlakeUtil.getId());
-                                                    insertData3.add(obj);
-                                                }
-                                            }
-                                        });
-                                    }
-                                }
                             }
                         });
                     }
@@ -813,9 +767,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
                         this.insertBatch(insertData2, 1000);
 
-                        //电签
-                        textDictInfoService.insertBatch(insertData3, 1000);
-
                         if (pawDTO.getWbsType() == 1) {
                             projectInfoMapper.updateTemplateInfoQuality(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
                         }
@@ -824,7 +775,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         }
                     }
                     if (saveIds.size() >= 1000) {
-                        //解锁
                         bladeRedis.set("submit-wbs-project:" + pawDTO.getProjectId(), "1");
                         bladeRedis.expire("submit-wbs-project:" + pawDTO.getProjectId(), 60);
                     }

+ 6 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/wrapper/ArchiveTreeContractWrapper.java

@@ -20,6 +20,8 @@ import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.vo.ArchiveTreeContractVO;
+import org.springblade.manager.vo.ArchiveTreeContractVO2;
+
 import java.util.Objects;
 
 /**
@@ -28,16 +30,16 @@ import java.util.Objects;
  * @author 00
  * @since 2023-02-18
  */
-public class ArchiveTreeContractWrapper extends BaseEntityWrapper<ArchiveTreeContract, ArchiveTreeContractVO>  {
+public class ArchiveTreeContractWrapper extends BaseEntityWrapper<ArchiveTreeContract, ArchiveTreeContractVO2>  {
 
 	public static ArchiveTreeContractWrapper build() {
 		return new ArchiveTreeContractWrapper();
  	}
 
 	@Override
-	public ArchiveTreeContractVO entityVO(ArchiveTreeContract archiveTreeContract) {
-		ArchiveTreeContractVO archiveTreeContractVO = Objects.requireNonNull(BeanUtil.copy(archiveTreeContract, ArchiveTreeContractVO.class));
-
+	public ArchiveTreeContractVO2 entityVO(ArchiveTreeContract archiveTreeContract) {
+		ArchiveTreeContractVO2 archiveTreeContractVO = Objects.requireNonNull(BeanUtil.copy(archiveTreeContract, ArchiveTreeContractVO2.class));
+		archiveTreeContractVO.setTitle(archiveTreeContract.getNodeName());
 		//User createUser = UserCache.getUser(archiveTreeContract.getCreateUser());
 		//User updateUser = UserCache.getUser(archiveTreeContract.getUpdateUser());
 		//archiveTreeContractVO.setCreateUserName(createUser.getName());