瀏覽代碼

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

# Conflicts:
#	blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
#	blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
yangyj 3 年之前
父節點
當前提交
460d2a36e8
共有 22 個文件被更改,包括 245 次插入128 次删除
  1. 1 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/RecycleBin.java
  2. 5 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ArchiveTreeClient.java
  3. 3 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java
  4. 11 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/ArchiveFileController.java
  5. 63 40
      blade-service/blade-business/src/main/java/org/springblade/business/controller/ImageClassificationFileController.java
  6. 22 2
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  7. 12 4
      blade-service/blade-business/src/main/java/org/springblade/business/controller/RecycleBinController.java
  8. 15 8
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  9. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  10. 40 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/SignPfxFileController.java
  11. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java
  12. 5 15
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  13. 5 11
      blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelUtil.java
  14. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ArchiveTreeClientImpl.java
  15. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  16. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java
  17. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeServiceImpl.java
  18. 10 12
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  19. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  20. 13 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java
  21. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  22. 21 24
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

+ 1 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/RecycleBin.java

@@ -88,7 +88,7 @@ public class RecycleBin extends BaseEntity {
         this.contractId = Long.parseLong(contractId);
 
         this.setCreateUser(AuthUtil.getUserId());
-        this.setCreateUserName(AuthUtil.getNickName());
+        this.createUserName = AuthUtil.getNickName();
         Date now = new Date();
         this.setCreateTime(now);
         this.operationTime = DateUtil.format(now, "yyyy-MM-dd HH:mm:ss");

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

@@ -1,9 +1,11 @@
 package org.springblade.manager.feign;
 
 import org.springblade.core.tool.api.R;
+import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.vo.ArchiveTreeVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
@@ -18,6 +20,9 @@ public interface ArchiveTreeClient {
      */
     String API_PREFIX = "/api/manager/archive";
 
+    @PostMapping(API_PREFIX + "/queryTreeNodeByIds")
+    List<ArchiveTree> queryTreeNodeByIds(@RequestParam List<String> ids);
+
     /**
      * 获取归档树映射
      */

+ 3 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java

@@ -22,6 +22,9 @@ public interface WbsTreeContractClient {
      */
     String API_PREFIX = "/api/manager/WbsTreeContract";
 
+    @PostMapping(API_PREFIX + "/queryContractTreeNodeByPKIds")
+    List<WbsTreeContract> queryContractTreeNodeByPKIds(@RequestParam List<Long> PKIds);
+
     @GetMapping(API_PREFIX + "/selectQueryCurrentNodeByAncestors")
     List<WbsTreeContract> selectQueryCurrentNodeByAncestors(@RequestParam List<String> ids, @RequestParam String contractId);
 

+ 11 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/ArchiveFileController.java

@@ -22,6 +22,7 @@ import org.springblade.business.vo.TaskVO;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.evisa.feign.EVisaClient;
+import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.feign.ArchiveTreeClient;
 import org.springblade.manager.feign.ContractClient;
@@ -295,12 +296,21 @@ public class ArchiveFileController extends BladeController {
 		try{
 			if(fileList != null && fileList.size() > 0){
 				String title = fileList.stream().map(ArchiveFile::getFileName).distinct().collect(Collectors.joining(","));
+				//获取绑定节点信息
+				String position = "";
+				List<String> nodeIds = fileList.stream().map(ArchiveFile::getNodeId).distinct().collect(Collectors.toList());
+				if(nodeIds.size() > 0){
+					List<ArchiveTree> treeList = this.archiveTreeClient.queryTreeNodeByIds(nodeIds);
+					if(treeList != null && treeList.size() > 0){
+						position = treeList.stream().map(ArchiveTree::getNodeName).distinct().collect(Collectors.joining());
+					}
+				}
 
 				//保存操作日志
 				this.operationLogClient.saveUserOperationLog(27, "其他文件", "工程文件", ids, title);
 
 				//保存回收站记录
-				this.recycleBinClient.saveDelBusinessData(ids, title, 1, null, fileList.get(0).getProjectId(), fileList.get(0).getContractId());
+				this.recycleBinClient.saveDelBusinessData(ids, title, 1, position, fileList.get(0).getProjectId(), fileList.get(0).getContractId());
 			}
 		}catch (Exception e){
 			e.printStackTrace();

+ 63 - 40
blade-service/blade-business/src/main/java/org/springblade/business/controller/ImageClassificationFileController.java

@@ -33,6 +33,7 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.IoUtil;
 import org.springblade.manager.entity.ExcelTab;
 import org.springblade.manager.entity.ImageClassificationConfig;
+import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.feign.ExcelTabClient;
 import org.springblade.manager.feign.ImageClassificationConfigClient;
 import org.springblade.manager.feign.WbsTreeContractClient;
@@ -148,39 +149,53 @@ public class ImageClassificationFileController extends BladeController {
 							Workbook workbook = null;
 
 							List<String> pdfFileList = new ArrayList<>();
-							//每个图片就是一个文件
-							for(String uri : uris){
+							//两个图片一组
+							List<List<String>> groupUrls = CommonUtil.getBatchSize(JSONObject.parseArray(JSONObject.toJSONString(uris), String.class), 2);
+							for(List<String> urls : groupUrls){
 								try{
 									//创建模板Workbook
 									modInput = CommonUtil.getOSSInputStream(excelTab.getFileUrl());
 									workbook = WorkbookFactory.create(modInput);
-									CreationHelper helper = workbook.getCreationHelper();
-									Sheet sheet = workbook.getSheetAt(0);
-									Drawing<?> drawing = sheet.createDrawingPatriarch();
-									ClientAnchor anchor = helper.createClientAnchor();
-									anchor.setRow1(0);
-									anchor.setCol1(0);
-
-									//创建图片
-									drawing.createPicture(anchor, workbook.addPicture(CommonUtil.InputStreamToBytes(CommonUtil.getOSSInputStream(uri)), Workbook.PICTURE_TYPE_PNG));
-									//图片定位
-									FileUtils.imageOrientation(sheet, anchor, new DataVO(0, 0));
-
-									//定位其它信息
-									//文字说明
-									sheet.getRow(1).getCell(6).setCellValue(file.getTextContent());
-									//照片号
-									sheet.getRow(20).getCell(6).setCellValue(file.getPhotoCode());
-									//底片号
-									sheet.getRow(24).getCell(6).setCellValue(file.getFilmCode());
-									//题名
-									sheet.getRow(28).getCell(0).setCellValue(file.getTitle());
-									//参见号
-									sheet.getRow(28).getCell(4).setCellValue(file.getSeeAlsoCode());
-									//拍摄时间
-									sheet.getRow(30).getCell(4).setCellValue(DateUtil.format(file.getShootingTime(), "yyyy-MM-dd"));
-									//参见号
-									sheet.getRow(32).getCell(4).setCellValue(file.getShootingUser());
+
+									for(int i = 0, l = urls.size(); i < l; i ++){
+										try{
+											CreationHelper helper = workbook.getCreationHelper();
+											Sheet sheet = workbook.getSheetAt(0);
+											Drawing<?> drawing = sheet.createDrawingPatriarch();
+											ClientAnchor anchor = helper.createClientAnchor();
+											if(i == 0){
+												anchor.setRow1(0);
+												anchor.setCol1(0);
+											} else {
+												anchor.setRow1(28);
+												anchor.setCol1(1);
+											}
+
+											//创建图片
+											drawing.createPicture(anchor, workbook.addPicture(CommonUtil.InputStreamToBytes(CommonUtil.getOSSInputStream(urls.get(i))), Workbook.PICTURE_TYPE_PNG));
+											//图片定位
+											FileUtils.imageOrientation(sheet, anchor, i == 1 ? new DataVO(0, 0) : new DataVO(1, 28));
+
+											//定位其它信息
+											//文字说明
+											sheet.getRow(i == 0 ? 1 : 29).getCell(i == 0 ? 5 : 0).setCellValue(file.getTextContent());
+											//照片号
+											sheet.getRow(i == 0 ? 11 : 39).getCell(i == 0 ? 5 : 0).setCellValue(file.getPhotoCode());
+											//底片号
+											sheet.getRow(i == 0 ? 17 : 45).getCell(i == 0 ? 5 : 0).setCellValue(file.getFilmCode());
+											//题名
+											sheet.getRow(i == 0 ? 23 : 51).getCell(i == 0 ? 0 : 3).setCellValue(file.getTitle());
+											//参见号
+											sheet.getRow(i == 0 ? 23 : 51).getCell(i == 0 ? 3 : 0).setCellValue(file.getSeeAlsoCode());
+											//拍摄时间
+											sheet.getRow(i == 0 ? 25 : 53).getCell(i == 0 ? 3 : 0).setCellValue(DateUtil.format(file.getShootingTime(), "yyyy-MM-dd"));
+											//拍摄者
+											sheet.getRow(i == 0 ? 27 : 55).getCell(i == 0 ? 3 : 0).setCellValue(file.getShootingUser());
+
+										}catch (Exception e){
+											e.printStackTrace();
+										}
+									}
 
 									String locationFile = "/Users/doc/print/" + SnowFlakeUtil.getId() + ".xlsx";
 									outputStream = new FileOutputStream(locationFile);
@@ -198,7 +213,7 @@ public class ImageClassificationFileController extends BladeController {
 										pdfFileList.add(bladeFile.getPdfUrl());
 									}
 
-								}catch (Exception e){
+								} catch (Exception e){
 									e.printStackTrace();
 								} finally {
 									if(outputStream != null){
@@ -267,15 +282,6 @@ public class ImageClassificationFileController extends BladeController {
 			//为空,说明初始化
 			//获取根节点
 			rootTreeNode = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, 1, "0");
-//			if(rootTreeNode != null && rootTreeNode.size() != 0){
-//				rootTreeNode.forEach(vo -> {
-//					//获取一级子节点
-//					List<WbsTreeContractTreeVOS> treeNodes = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, 1, vo.getId());
-//					if(treeNodes != null && treeNodes.size() != 0){
-//						vo.setChildren(treeNodes);
-//					}
-//				});
-//			}
 		} else {
 			//不为空,获取其下子节点
 			rootTreeNode = this.wbsTreeContractClient.queryContractWbsTreeByContractIdAndType(contractId, 1, parentId);
@@ -509,6 +515,7 @@ public class ImageClassificationFileController extends BladeController {
 	@ApiOperation(value = "修改影音资料信息", notes = "传入表单数据")
 	public R<Boolean> update(@Valid @RequestBody ImageClassificationFileVO fileVO){
 		ImageClassificationFile newData = this.copyBeanData(fileVO, false);
+		newData.setMargePdfUrl("");
 		return R.data(this.imageClassificationFileService.updateById(newData));
 	}
 
@@ -565,11 +572,27 @@ public class ImageClassificationFileController extends BladeController {
 		try{
 			String title = fileList.stream().map(ImageClassificationFile::getFileName).distinct().collect(Collectors.joining(","));
 
+			String position = "";
+			try{
+				//获取节点集合
+				List<Long> wbsIds = fileList.stream().map(ImageClassificationFile::getWbsId).distinct().collect(Collectors.toList());
+				if(wbsIds.size() > 0){
+					//查询这些节点的信息
+					List<WbsTreeContract> wbsNodeList = this.wbsTreeContractClient.queryContractTreeNodeByPKIds(wbsIds);
+					if(wbsNodeList != null && wbsNodeList.size() > 0){
+						position = wbsNodeList.stream().map(node -> StringUtils.isNotEmpty(node.getFullName()) ? node.getFullName() : node.getDeptName()).distinct().collect(Collectors.joining());
+					}
+				}
+
+			}catch (Exception e){
+				e.printStackTrace();
+			}
+
 			//保存操作日志
 			this.operationLogClient.saveUserOperationLog(31, "其它文件", "影像资料", ids, title);
 
 			//保存回收站记录
-			this.recycleBinClient.saveDelBusinessData(ids, title, 1, null, fileList.get(0).getProjectId().toString(), fileList.get(0).getContractId().toString());
+			this.recycleBinClient.saveDelBusinessData(ids, title, 1, position, fileList.get(0).getProjectId().toString(), fileList.get(0).getContractId().toString());
 		}catch (Exception e){
 			e.printStackTrace();
 		}

+ 22 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -517,7 +517,7 @@ public class InformationWriteQueryController extends BladeController {
 				result.removeIf(query -> StringUtils.isEmpty(query.getPdfUrl()) && StringUtils.isEmpty(query.getPdfUrl()));
 				if(result.size() > 0){
 					List<String> urls = new ArrayList<>();
-					result.forEach(query -> urls.add(StringUtils.isNotEmpty(query.getEVisaPdfUrl()) ? query.getEVisaPdfUrl() + "@@@" + query.getName() : query.getPdfUrl() + "@@@" + query.getName()));
+					result.forEach(query -> urls.add(StringUtils.isNotEmpty(query.getEVisaPdfUrl()) ? query.getEVisaPdfUrl() + "@@@" + query.getName() + "-" + query.getId() : query.getPdfUrl() + "@@@" + query.getName() + "-" + query.getId()));
 					//删除空数据
 					urls.removeIf(StringUtils::isEmpty);
 					//打包下载
@@ -1057,6 +1057,19 @@ public class InformationWriteQueryController extends BladeController {
 		return R.data(this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(primaryKeyId));
 	}
 
+	/**
+	 * 获取所有父节点
+	 */
+	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());
+			if(parentNode != null){
+				nodeName.append("-").append(StringUtils.isNotEmpty(parentNode.getFullName()) ? parentNode.getFullName() : parentNode.getDeptName());
+				this.currentNodeAllParent(nodeName, parentNode);
+			}
+		}
+	}
 
 	/**
 	 * 删除节点
@@ -1070,12 +1083,19 @@ public class InformationWriteQueryController extends BladeController {
 	public R<Boolean> removeContractTreeNode(@RequestParam String ids){
 		//根据传入的节点,将其所有子节点删除
 		WbsTreeContract removeNode = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(ids));
+		//查询当前操作的节点的父级关系
+		StringBuilder parentNodeName = new StringBuilder();
+        this.currentNodeAllParent(parentNodeName, removeNode);
+
 		//查询所有子节点
 		List<WbsTreeContract> removeNodeList = this.wbsTreeContractClient.queryCurrentNodeAllChild(Long.parseLong(removeNode.getContractId()), removeNode.getId());
 		//获取pKeyId
 		List<Long> removeList = removeNodeList.stream().map(WbsTreeContract::getPKeyId).distinct().collect(Collectors.toList());
 		//拼接
 		ids = ids + "," + String.join(",", JSONArray.parseArray(JSONObject.toJSONString(removeList), String.class));
+		//删除掉表格
+        removeNodeList.removeIf(tree -> tree.getType() != null && new Integer("2").equals(tree.getType()));
+		//获取被删除节点名称
 		String nodeName = StringUtils.isNotEmpty(removeNode.getFullName()) ? removeNode.getFullName() : removeNode.getDeptName() + "," + removeNodeList.stream().map(wbs -> StringUtils.isNotEmpty(wbs.getFullName()) ? wbs.getFullName() : wbs.getDeptName()).collect(Collectors.joining());
 
 		//获取当前节点下所有填报节点
@@ -1098,7 +1118,7 @@ public class InformationWriteQueryController extends BladeController {
 		//保存操作记录
 		this.operationLogClient.saveUserOperationLog(4, "资料管理", "工序资料", ids, nodeName);
 		//保存进回收站
-		this.recycleBinClient.saveDelBusinessData(ids, removeNode.getDeptName(), 2, "", removeNode.getProjectId(), removeNode.getContractId());
+		this.recycleBinClient.saveDelBusinessData(ids, removeNode.getDeptName(), 2, parentNodeName.toString(), removeNode.getProjectId(), removeNode.getContractId());
 
 		return R.data(this.wbsTreeContractClient.removeContractTreeNode(ids));
 	}

+ 12 - 4
blade-service/blade-business/src/main/java/org/springblade/business/controller/RecycleBinController.java

@@ -81,11 +81,11 @@ public class RecycleBinController extends BladeController {
 				}
 			}
 			//文件类型
-			List<RecycleBin> filetypeList = recycleBinList.stream().filter(recycleBin -> new Integer("1").equals(recycleBin.getDelType())).distinct().collect(Collectors.toList());
-			if(filetypeList.size() > 0){
+			List<RecycleBin> fileTypeList = recycleBinList.stream().filter(recycleBin -> new Integer("1").equals(recycleBin.getDelType())).distinct().collect(Collectors.toList());
+			if(fileTypeList.size() > 0){
 				//恢复集合
 				List<String> fileList = new ArrayList<>();
-				this.foreachQueryData(filetypeList, recycleBinIds, fileList);
+				this.foreachQueryData(fileTypeList, recycleBinIds, fileList);
 				try{
 					if(fileList.size() > 0){
 						//文件数据包括工程文件及影像资料,这里采用最简单粗暴的方法进行恢复
@@ -129,6 +129,10 @@ public class RecycleBinController extends BladeController {
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "分页")
 	public R<IPage<RecycleBin>> list(RecycleBin recycleBin, Query query) {
+		//是否是全部
+		boolean isAll = StringUtils.isNotEmpty(recycleBin.getCreateUserName()) && "ALL".equals(recycleBin.getCreateUserName());
+		recycleBin.setCreateUserName(null);
+
 		QueryWrapper<RecycleBin> wrapper = Condition.getQueryWrapper(recycleBin);
 
 		//获取当前时间
@@ -137,7 +141,11 @@ public class RecycleBinController extends BladeController {
 		Date oldDate = DateUtil.minusDays(nowDate, 30);
 
 		wrapper.lambda().between(RecycleBin::getCreateTime, oldDate, nowDate);
-		wrapper.lambda().eq(RecycleBin::getCreateUser, AuthUtil.getUserId());
+		if(isAll){
+			wrapper.lambda().eq(RecycleBin::getContractId, recycleBin.getContractId().toString());
+		} else {
+			wrapper.lambda().eq(RecycleBin::getCreateUser, AuthUtil.getUserId());
+		}
 
 		return R.data(this.recycleBinService.page(Condition.getPage(query), wrapper));
 	}

+ 15 - 8
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -85,7 +85,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
 			//拼接填报人信息
 			String fileUser = user.getUserId() + "-" + user.getNickName();
 			if(StringUtils.isNotEmpty(oldData.getFileUserIdAndName())){
-				if(!oldData.getFileUserIdAndName().contains(fileUser)){
+				if(!oldData.getFileUserIdAndName().contains(user.getUserId().toString())){
 					//不包含,拼接
 					oldData.setFileUserIdAndName(oldData.getFileUserIdAndName() + "," + fileUser);
 				}
@@ -119,7 +119,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
 			//流程状态,默认未上报
 			newData.setStatus(0);
 			//填报人ID及姓名
-			newData.setFileUserIdAndName(user.getUserId() + "-" + user.getUserName());
+			newData.setFileUserIdAndName(user.getUserId() + "-" + user.getNickName());
 			//数据源类型
 			newData.setSourceType(sourceType);
 			newData.setCreateUser(user.getUserId());
@@ -158,13 +158,17 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
 				});
 				//二次去重
 				HashSet<String> hashSet = new HashSet<>(userList);
+				List<String> users = new ArrayList<>();
 				hashSet.forEach(user -> {
 					String[] array = user.split("-");
-					User bUser = this.userClient.userInfoById(Long.parseLong(array[0])).getData();
-					if(bUser != null){
-						result.add(new FileUserVO(array[0], bUser.getRealName()));
-					} else {
-						result.add(new FileUserVO(array[0], array[1]));
+					if(!users.contains(array[0])){
+						User bUser = this.userClient.userInfoById(Long.parseLong(array[0])).getData();
+						if(bUser != null){
+							result.add(new FileUserVO(array[0], bUser.getRealName()));
+						} else {
+							result.add(new FileUserVO(array[0], array[1]));
+						}
+						users.add(array[0]);
 					}
 				});
 			}
@@ -211,7 +215,10 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
 					String[] fileUserIdAndNames = fileUserIdAndName.split(",");
 					List<String> names = new ArrayList<>();
 					for(String str : fileUserIdAndNames){
-						names.add(str.split("-")[1]);
+						String[] strs = str.split("-");
+						if(!names.contains(strs[1])){
+							names.add(strs[1]);
+						}
 					}
 					//只拼接名字
 					vor.setFileUserIdAndName(String.join(",", names));

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

@@ -740,6 +740,7 @@ public class ExcelTabController extends BladeController {
 
             //处理文件提名
             String fileName = this.wbsParamService.createFileTitle(wbsTreeContractByP.getPKeyId(), Long.parseLong(wbsTreeContractByP.getContractId()));
+            fileName = StringUtils.isNotEmpty(fileName) ? fileName : "缺少文件提名配置";
 
             //huangjn 保存成功后调用生成资料查询列表数据
             this.informationQueryClient.saveOrUpdateInformationQueryData(wbsTreeContractByP.getPKeyId()+"", fileName, Integer.parseInt(classify), 2);

+ 40 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/SignPfxFileController.java

@@ -20,6 +20,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.mixsmart.utils.StringUtils;
+import feign.Contract;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
@@ -32,9 +33,8 @@ 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.SaveUserInfoByProjectDTO;
-import org.springblade.manager.entity.ContractInfo;
-import org.springblade.manager.entity.ProjectInfo;
-import org.springblade.manager.entity.SignPfxDeputy;
+import org.springblade.manager.entity.*;
+import org.springblade.manager.feign.ProjectAssignmentUserClient;
 import org.springblade.manager.service.*;
 import org.springblade.manager.vo.*;
 import org.springblade.system.entity.DictBiz;
@@ -47,7 +47,6 @@ import org.springblade.system.vo.RoleVO;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.manager.entity.SignPfxFile;
 import org.springblade.core.boot.ctrl.BladeController;
 
 import java.util.ArrayList;
@@ -84,6 +83,8 @@ public class SignPfxFileController extends BladeController {
 
 	private final IUserClient userClient;
 
+	private final ProjectAssignmentUserClient projectAssignmentUserClient;
+
 	/**
 	 * 根据合同段ID获取项目下的所有合同段
 	 * @return 结果
@@ -307,7 +308,41 @@ public class SignPfxFileController extends BladeController {
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "获取所有有效项目")
 	public R<List<ProjectInfo>> queryProjectList(){
-		return R.data(this.projectInfoService.list(Wrappers.<ProjectInfo>lambdaQuery().eq(ProjectInfo::getIsDeleted, 0)));
+		List<ProjectInfo> projectInfos = this.projectInfoService.list(Wrappers.<ProjectInfo>lambdaQuery().eq(ProjectInfo::getIsDeleted, 0));
+
+		Iterator<ProjectInfo> iterator = projectInfos.iterator();
+		while (iterator.hasNext()){
+			ProjectInfo next = iterator.next();
+			//首先先看是否有项目证书
+			long count = this.signPfxFileService.count(Wrappers.<SignPfxFile>lambdaQuery().like(SignPfxFile::getProjectContractRole, next.getId()));
+			if(count <= 0){
+				//如果没有项目证书,再查询项目人员是否有个人证书
+				List<ContractInfo> contracts = this.contractInfoService.selectContractInfoPageByPid(next.getId().toString());
+				if(contracts != null && contracts.size() > 0){
+					boolean remove = true;
+					//循环合同段,只要有一个合同段的人员有数据
+					for(ContractInfo contract : contracts){
+						List<SaveUserInfoByProjectDTO> users = this.projectAssignmentUserClient.queryContractDownAllUser(contract.getId().toString());
+						if(users != null && users.size() > 0){
+							//获取人员ID
+							List<String> userList = users.stream().map(SaveUserInfoByProjectDTO::getUserId).distinct().collect(Collectors.toList());
+							count = this.signPfxFileService.count(Wrappers.<SignPfxFile>lambdaQuery().in(SignPfxFile::getCertificateUserId, userList));
+							if(count > 0){
+								//只要有一个,保留
+								remove = false;
+								break;
+							}
+						}
+					}
+					if(remove){
+						//找不到个人证书,删除当前项目
+						iterator.remove();
+					}
+				}
+			}
+		}
+
+		return R.data(projectInfos);
 	}
 
 	/**

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java

@@ -75,6 +75,7 @@ public class WbsFormElementController extends BladeController {
 
     /**
      * 新增或修改 wbs表单元素
+     * @deprecated 未使用
      */
     @PostMapping("/submit")
     @ApiOperationSupport(order = 4)

+ 5 - 15
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -124,7 +124,7 @@ public class WbsTreeController extends BladeController {
                     .set("deptCategoryName", DictCache.getValue(DictEnum.ORG_CATEGORY, WbsTreeDTO.getDeptCategory()));
             return R.data(kv);
         }
-        return R.fail("操作失败");
+        return R.fail(200,"操作失败");
     }
 
 
@@ -144,7 +144,7 @@ public class WbsTreeController extends BladeController {
                 .eq(WbsTreePrivate::getId, id)
         );
         if (wbsTreePrivates.size() > 0) {
-            return R.fail("当前节点已被项目引用,删除失败");
+            return R.fail(200,"当前节点已被项目引用,删除失败");
         }
         return R.status(wbsTreeService.deleteLogicById(id));
     }
@@ -175,7 +175,7 @@ public class WbsTreeController extends BladeController {
         if (StringUtils.isNotEmpty(id)) {
             List<WbsFormElementVO> wbsFormElements = wbsTreeService.selectFormElements(id);
             if (wbsFormElements.size() > 0) {
-                return R.fail("该表单中的存在元素,删除失败");
+                return R.fail(200,"该表单中的存在元素,删除失败");
             }
             List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
                     .eq(WbsTreePrivate::getStatus, 1)
@@ -188,7 +188,7 @@ public class WbsTreeController extends BladeController {
                 return R.success("删除成功");
             }
         }
-        return R.fail("删除失败");
+        return R.fail(200,"删除失败");
     }
 
     /**
@@ -254,22 +254,12 @@ public class WbsTreeController extends BladeController {
     public R importWbsTree(@RequestPart("excelFile") MultipartFile excelFile,
                            @RequestPart("wbsTreeFu") WbsTree wbsTreeFu) throws IOException {
         WbsTree wbsTree1 = wbsTreeService.getById(wbsTreeFu.getParentId());
-        /*if (wbsTree1.getProjectNodeId().equals(wbsTreeFu.getParentId())) {
-            wbsTreeService.deleteBatchByProjectNodeId(wbsTree1.getProjectNodeId());
-            boolean result = wbsTreeService.importWbsTree(excelFile, wbsTreeFu, wbsTree1);
-            if (result) {
-                return R.success("覆盖导入成功");
-            } else {
-                return R.fail("请选择正确模板导入");
-            }
-        } else {*/
         boolean result = wbsTreeService.importWbsTree(excelFile, wbsTreeFu, wbsTree1);
         if (result) {
             return R.success("新增导入成功");
         } else {
-            return R.fail("请选择正确模板导入");
+            return R.fail(200,"请选择正确模板导入");
         }
-        //}
     }
 
     /**

+ 5 - 11
blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelUtil.java

@@ -1,14 +1,11 @@
 package org.springblade.manager.excel;
 
-import cn.hutool.core.exceptions.ExceptionUtil;
-import org.apache.commons.lang.exception.ExceptionUtils;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springblade.manager.entity.WbsTree;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
@@ -17,15 +14,12 @@ import java.util.stream.Collectors;
 
 public class WbsExcelUtil {
     /*public static void main(String[] args) throws IOException {
-        *//*WbsExcelUtil excelUtil = new WbsExcelUtil();
+        WbsExcelUtil excelUtil = new WbsExcelUtil();
         //读取excel数据
-        int sum = 0;
-        ArrayList<Map<String, String>> result = excelUtil.readExcelToObj("D:\\Download\\特大斜拉桥、特大悬索桥.xls");
-        for (Map<String, String> map : result) {
-            System.out.println("输出:" + map);
-            sum++;
-        }
-        System.out.println("sum" + sum);*//*
+        ArrayList<Map<String, String>> result = excelUtil.readExcelToObj("C:\\Users\\泓创开发\\Desktop\\excel节点模板\\路面工程.xls");
+        result.forEach(map -> map.forEach((k, v) -> {
+            System.out.println(k + " : " + v);
+        }));
     }*/
 
 

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

@@ -1,8 +1,10 @@
 package org.springblade.manager.feign;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.manager.entity.ArchiveTree;
 import org.springblade.manager.service.IArchiveTreeService;
 import org.springblade.manager.vo.ArchiveTreeVO;
 import org.springframework.web.bind.annotation.RestController;
@@ -15,6 +17,11 @@ public class ArchiveTreeClientImpl implements ArchiveTreeClient {
 
     private final IArchiveTreeService archiveTreeService;
 
+    @Override
+    public List<ArchiveTree> queryTreeNodeByIds(List<String> ids) {
+        return this.archiveTreeService.list(Wrappers.<ArchiveTree>lambdaQuery().in(ArchiveTree::getId, ids));
+    }
+
     @Override
     public R<List<ArchiveTreeVO>> tree(Integer disPlayTree, Integer nodeType) {
         return R.data(this.archiveTreeService.tree(AuthUtil.getTenantId(), disPlayTree, nodeType));

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

@@ -34,6 +34,11 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
 
     private final IDictBizClient dictBizClient;
 
+    @Override
+    public List<WbsTreeContract> queryContractTreeNodeByPKIds(List<Long> PKIds) {
+        return this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().in(WbsTreeContract::getPKeyId, PKIds));
+    }
+
     @Override
     public List<WbsTreeContract> selectQueryCurrentNodeByAncestors(List<String> ids, String contractId) {
         return this.wbsTreeContractService.selectQueryCurrentNodeByAncestors(ids, contractId);

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

@@ -63,4 +63,5 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
     boolean importWbsTreeTableAndForm(MultipartFile excelFile, WbsTree wbsTree);
 
     boolean deleteLogicById(String id);
+
 }

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

@@ -116,7 +116,7 @@ public class ArchiveTreeServiceImpl extends BaseServiceImpl<ArchiveTreeMapper, A
         List<String> idQ = Arrays.asList(idList);
         List<String> idList1 = idQ.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
         List<String> idList2 = new ArrayList<>();
-        archiveTrees.stream().forEach(id -> {
+        archiveTrees.forEach(id -> {
             idList2.add(String.valueOf(id.getId()));
         });
         List<String> diffRent = getDiffRent(idList1, idList2);

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

@@ -160,8 +160,7 @@ public class ContractInfoServiceImpl
 
     @Override
     public List<WbsTreeContractVO2> treeTwo(String projectId) {
-        List<WbsTreeContractVO2> list = wbsTreeContractMapper.selectListByCondition(projectId);
-        return list;
+        return wbsTreeContractMapper.selectListByCondition(projectId);
     }
 
     /**
@@ -208,13 +207,13 @@ public class ContractInfoServiceImpl
             //新增contract_type =2监理 =3指挥部(业主)类型Wbs树
             if (contractInfo.getContractType().equals(2) || contractInfo.getContractType().equals(3)) {
                 List<WbsTreeContractVO3> infos = contractInfo.getIdList();
-                infos.stream().forEach(info -> {
+                infos.forEach(info -> {
                     List<WbsTreeContract> wbsTreeContracts = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
                             .eq(WbsTreeContract::getContractId, info.getContractId())
                     );
 
                     //初始化
-                    wbsTreeContracts.stream().forEach(i -> {
+                    wbsTreeContracts.forEach(i -> {
                         Long id = SnowFlakeUtil.getId();
                         i.setPKeyId(id);
                         i.setContractIdRelation(i.getContractId());
@@ -250,7 +249,7 @@ public class ContractInfoServiceImpl
 
                 List<WbsTreeContractVO3> list = contractInfo.getIdList();
                 if (list.size() > 0) {
-                    list.stream().forEach(cId -> {
+                    list.forEach(cId -> {
                         //入参根节点id
                         String contractId = cId.getContractId();
                         idList1.add(contractId);
@@ -265,7 +264,7 @@ public class ContractInfoServiceImpl
                         .eq(WbsTreeContract::getParentId, 0)
                 );
 
-                wbsTreeContracts.stream().forEach(id -> {
+                wbsTreeContracts.forEach(id -> {
                     String contractIdRelation = id.getContractIdRelation();
                     idList2.add(String.valueOf(contractIdRelation));
                 });
@@ -274,7 +273,7 @@ public class ContractInfoServiceImpl
 
                 if (idList1.size() > idList2.size()) {
                     //新增
-                    result.stream().forEach(id -> {
+                    result.forEach(id -> {
                         //查询当前需要引用的施工合同wbs树根节点信息
                         WbsTreeContract wbsTreeContract = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
                                 .eq(WbsTreeContract::getContractId, id)
@@ -296,7 +295,7 @@ public class ContractInfoServiceImpl
                             );
 
                             //初始化
-                            wbsTreeContractsList.stream().forEach(i -> {
+                            wbsTreeContractsList.forEach(i -> {
                                 Long id1 = SnowFlakeUtil.getId();
                                 i.setPKeyId(id1);
                                 i.setContractIdRelation(i.getContractId());
@@ -309,7 +308,7 @@ public class ContractInfoServiceImpl
                     });
                 } else {
 
-                    result.stream().forEach(id -> {
+                    result.forEach(id -> {
                         //根据关联项目id = getContractIdRelation 删除树
                         wbsTreeContractMapper.delete(Wrappers.<WbsTreeContract>update().lambda()
                                 .set(WbsTreeContract::getIsDeleted, 1)
@@ -334,7 +333,7 @@ public class ContractInfoServiceImpl
             );
             if (list.size() > 0) {
                 Long contractId = contractInfo.getId();
-                list.stream().forEach(i -> {
+                list.forEach(i -> {
                     i.setContractId(String.valueOf(contractId));
                     saveUserInfoByProjectMapper.updateById(i);
                 });
@@ -403,7 +402,6 @@ public class ContractInfoServiceImpl
         return diff;
     }
 
-
     /**
      * 新增合同段保存2(施工-监理引用施工合同wbs私有树)
      */
@@ -427,7 +425,7 @@ public class ContractInfoServiceImpl
             //新增合同段 监理、业主与施工wbs树信息
             if (contractInfo.getContractType().equals(2) || contractInfo.getContractType().equals(3)) {
                 List<WbsTreeContractVO3> infos = contractInfo.getIdList();
-                infos.stream().forEach(info -> {
+                infos.forEach(info -> {
                     baseMapper.insertContractRelationJLYZ(SnowFlakeUtil.getId(), contractInfo.getId(), info.getContractId());
 
                 });

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

@@ -26,6 +26,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.mixsmart.utils.ListUtils;
 import com.mixsmart.utils.StringUtils;
 import lombok.AllArgsConstructor;
+import lombok.Data;
 import org.springblade.business.feign.InformationQueryClient;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.oss.model.BladeFile;
@@ -270,6 +271,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
 					//处理文件提名
 					String fileName = this.wbsParamService.createFileTitle(wbsTreeContractByP.getPKeyId(), Long.parseLong(wbsTreeContractByP.getContractId()));
+					fileName = StringUtils.isNotEmpty(fileName) ? fileName : "缺少文件提名配置";
 
 					//huangjn 保存成功后调用生成资料查询列表数据
 					this.informationQueryClient.saveOrUpdateInformationQueryData(wbsTreeContractByP.getPKeyId()+"", fileName, Integer.parseInt(tableInfo.getClassify()), 2);

+ 13 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -314,11 +314,21 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                 }*/
 
                 //设置默认长度
-                if (eLength < 255) {
+                if (eLength < 255 && eLength > 65) {
                     eLength = 255;
+                } else if (eLength == 1000) {
+                    eLength = 500;
+                } else if (eLength >= 0 && eLength <= 65) {
+                    eLength = 20;
                 }
-                //修改
-                baseMapper.updateFiledType(initTableName, eKey, "varchar", eLength);
+
+                //判断是否存在该Key字段
+                int row1 = wbsTreeMapper.isThereAField(initTableName, eKey);
+                if (row1 > 0) {
+                    //修改
+                    baseMapper.updateFiledType(initTableName, eKey, "varchar", eLength);
+                }
+
             }
         }
 

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

@@ -218,7 +218,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     @Transactional(rollbackFor = Exception.class)
     public boolean updateBatchByPid(List<WbsTreePrivateDTO3> wbsTreePrivates) {
         try {
-            wbsTreePrivates.stream().forEach(list -> {
+            wbsTreePrivates.forEach(list -> {
                 baseMapper.updateBatchByPid(list);
             });
         } catch (Exception e) {

+ 21 - 24
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -2,6 +2,7 @@ package org.springblade.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
+import lombok.SneakyThrows;
 import net.sourceforge.pinyin4j.PinyinHelper;
 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
 import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
@@ -9,6 +10,7 @@ import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
 import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
 import org.apache.commons.lang.StringUtils;
+import org.jsoup.helper.DataUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -72,10 +74,10 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     @Override
     public List<WbsTreeVO2> tree(String wbsId, String tenantId, String type) {
 
-        //方法1-数据量过大响应格式错误
+        //1-响应格式错误
         /*return ForestNodeMerger.merge(baseMapper.tree(wbsId, tenantId, type));*/
 
-        //方法2
+        //2
         List<WbsTreeVO2> wbsTreeVO2s = baseMapper.tree2(wbsId, tenantId, type);
 
         //构建
@@ -212,12 +214,12 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             wbsTree.setIsDeleted(BladeConstant.DB_NOT_DELETED);
             wbsTree.setStatus(1);
 
-            maps.stream().forEach(map -> {
+            maps.forEach(map -> {
                 String deptName = map.get("表名");
                 wbsTree.setDeptName(deptName);
                 wbsTree.setTableType(getTableType(map.get("表类型")));
                 Long id = SnowFlakeUtil.getId();
-                String initTableName = "m_" + DateUtil.time() + "_" + id.toString();
+                String initTableName = "m_" + DateUtil.time() + "_" + id;
                 wbsTree.setInitTableName(initTableName);
                 wbsTree.setId(id);
 
@@ -238,13 +240,13 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             });
 
             //新增元素
-            list.stream().forEach(i -> {
+            list.forEach(i -> {
                 Long elementTableId = i.getId();
                 String tableName = i.getTableName();
                 String initTableName = i.getInitTableName();
                 final int[] keyNumb = {0};
 
-                result2.stream().forEach(map -> {
+                result2.forEach(map -> {
                     if (tableName.equals(map.get("表名"))) {
                         keyNumb[0]++;
                         WbsFormElement wbsFormElement = new WbsFormElement();
@@ -409,7 +411,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     @Override
     public List<WbsFormElementVO> selectFormElements(String id) {
         List<WbsFormElementVO> wbsFormElements = wbsTreeMapper.selectFormElements(id);
-        wbsFormElements.stream().forEach(elements -> {
+        wbsFormElements.forEach(elements -> {
             String eAllowDeviation = elements.getEAllowDeviation();
             //转义
             String escapeChar = getEscapeChar(eAllowDeviation);
@@ -452,7 +454,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         wbsTree1.setProjectNodeId(wbsTree1.getId());
         File file = WbsExcelUtil.convert(excelFile);
         String canonicalPath = file.getCanonicalPath();
-
         try {
             //解析excel
             WbsExcelUtil excelUtil = new WbsExcelUtil();
@@ -543,7 +544,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         }
 
         WbsTree wbsTree = null;
-
         //不重复 直接新增
         if (wbsTrees.size() <= 0) {
             wbsTreeZi.setStatus(1);
@@ -553,9 +553,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 wbsTreeZi.setIsConcrete(0);
                 wbsTreeZi.setIsExpernode(0);
             }
-
         } else {
-
             //重复 判断是否为同一父节点,相同父节点跳过,不同新增
             for (WbsTree tree : wbsTrees) {
                 if (wbsTreeZi.getDeptCategory() == 2 || wbsTreeZi.getDeptCategory() == 3
@@ -571,11 +569,9 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         break;
                     }
                 }
-
                 wbsTree = tree;
             }
         }
-
         return wbsTree;
     }
 
@@ -670,7 +666,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
                     .eq(WbsTreePrivate::getType, 1)
             );
-            wbsTreePrivates.stream().forEach(wbsTreePrivate -> {
+            wbsTreePrivates.forEach(wbsTreePrivate -> {
                 idList2.add(String.valueOf(wbsTreePrivate.getId()));
             });
         }
@@ -682,7 +678,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
                     .eq(WbsTreePrivate::getType, 1)
             );
-            wbsTreePrivates2.stream().forEach(wbsTreePrivate -> {
+            wbsTreePrivates2.forEach(wbsTreePrivate -> {
                 idList2.add(String.valueOf(wbsTreePrivate.getId()));
             });
         }
@@ -746,7 +742,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         //获取当前项目下所有施工合同段id
                         List<ContractInfo> contractInfoIds = contractInfoMapper.selectContractIdByProjectId(pawDTO.getProjectId());
                         //公有同步元素表
-                        diffRent1.stream().forEach(tableId -> {
+                        diffRent1.forEach(tableId -> {
                             WbsTree wbsTree = wbsTreeMapper.selectById(tableId);
                             //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
                             WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
@@ -863,7 +859,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         //私有同步元素表
                         List<WbsTreePrivate> lists = new ArrayList<>();
 
-                        diffRent1.stream().forEach(tableId -> {
+                        diffRent1.forEach(tableId -> {
                             List<WbsTreePrivate> wbsTreePrivates3 = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
                                     .eq(WbsTreePrivate::getId, tableId)
                                     .eq(WbsTreePrivate::getWbsId, wbsTreePrivate.getWbsId())
@@ -873,7 +869,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                             lists.addAll(wbsTreePrivates3);
                         });
 
-                        lists.stream().forEach(list -> {
+                        lists.forEach(list -> {
                             //判断当前新增的表在私有wbs中是否存在上级节点,存在表示可以新增,不存在表示不新增
                             WbsTreePrivate wbsTreePrivate1 = wbsTreePrivateMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda()
                                     .eq(WbsTreePrivate::getId, list.getParentId())
@@ -953,7 +949,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
                     if (wbsTreeContractList.size() > 0) {
                         List<ContractInfo> contractInfoArrayList = new ArrayList<>();
-                        wbsTreeContractList.stream().forEach(list -> {
+                        wbsTreeContractList.forEach(list -> {
                             ContractInfo contractInfos = contractInfoMapper.selectOne(Wrappers.<ContractInfo>query().lambda()
                                     .eq(ContractInfo::getId, list.getContractId())
                             );
@@ -976,7 +972,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
                     if (wbsTreeContractList.size() > 0) {
                         List<ContractInfo> contractInfoArrayList = new ArrayList<>();
-                        wbsTreeContractList.stream().forEach(list -> {
+                        wbsTreeContractList.forEach(list -> {
                             ContractInfo contractInfos = contractInfoMapper.selectOne(Wrappers.<ContractInfo>query().lambda()
                                     .eq(ContractInfo::getId, list.getContractId())
                             );
@@ -1020,7 +1016,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         }
                     }
 
-                    addListData.stream().forEach(tree -> {
+                    addListData.forEach(tree -> {
                         WbsTreePrivate wbsTreePrivate2 = getWbsTreePrivate1(tree, pawDTO);
                         insertData.add(wbsTreePrivate2);
                     });
@@ -1045,7 +1041,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         }
                     }
 
-                    addListData.stream().forEach(tree -> {
+                    addListData.forEach(tree -> {
                         WbsTreePrivate wbsTreePrivate2 = getWbsTreePrivate2(tree, pawDTO);
                         insertData2.add(wbsTreePrivate2);
                     });
@@ -1126,7 +1122,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         wbsTreePrivate.setCreateUser(wbsTree.getCreateUser());
         wbsTreePrivate.setCreateDept(wbsTree.getCreateDept());
 
-
         return wbsTreePrivate;
     }
 
@@ -1167,6 +1162,8 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         wbsTreePrivate.setUpdateUser(wbsTree.getUpdateUser());
         wbsTreePrivate.setCreateUser(wbsTree.getCreateUser());
         wbsTreePrivate.setCreateDept(wbsTree.getCreateDept());
+        //引用私有wbs,同步清表id
+        wbsTreePrivate.setExcelId(wbsTree.getExcelId());
 
         return wbsTreePrivate;
     }
@@ -1271,7 +1268,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     && (wbsFormElement.getELength() > 1000 || wbsFormElement.getELength() < 10)) {
                 throw new ServiceException("请输入正确的长度,该类型范围为10-1000");
             }
-            if ((wbsFormElement.getEType() == 2 || wbsFormElement.getEType() == 5 )
+            if ((wbsFormElement.getEType() == 2 || wbsFormElement.getEType() == 5)
                     && (wbsFormElement.getELength() > 255 || wbsFormElement.getELength() < 10)) {
                 throw new ServiceException("请输入正确的长度,该类型范围为10-255");
             }