소스 검색

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

yangyj 2 년 전
부모
커밋
a3cb62af46
36개의 변경된 파일595개의 추가작업 그리고 158개의 파일을 삭제
  1. 6 2
      blade-common/src/main/java/org/springblade/common/utils/ForestNodeMergerEx.java
  2. 8 4
      blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/LargeFileEndpoint.java
  3. 3 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/entity/ArchivesAuto.java
  4. 4 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/feign/ArchiveAutoClient.java
  5. 19 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/MetadataClassificationClient.java
  6. 2 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ArchiveTreeContractClient.java
  7. 2 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchivesAutoController.java
  8. 5 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/feign/ArchiveAutoClientImpl.java
  9. 4 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  10. 29 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  11. 2 2
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/IArchivesAutoService.java
  12. 25 9
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java
  13. 69 11
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  14. 4 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/utils/FileUtils.java
  15. 6 0
      blade-service/blade-business/pom.xml
  16. 18 9
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  17. 19 0
      blade-service/blade-business/src/main/java/org/springblade/business/feignClient/MetadataClassificationClientImpl.java
  18. 4 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/MetadataClassificationMapper.java
  19. 4 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/MetadataClassificationMapper.xml
  20. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/IMetadataClassificationService.java
  21. 168 5
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/MetadataClassificationServiceImpl.java
  22. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ArchiveTreeContractController.java
  23. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  24. 6 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  25. 6 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ArchiveTreeContractImpl.java
  26. 0 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/SaveUserInfoByProjectClientImpl.java
  27. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/TableFileClientImpl.java
  28. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.java
  29. 24 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml
  30. 3 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IArchiveTreeContractService.java
  31. 13 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArTreeContractInitServiceImpl.java
  32. 33 9
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractServiceImpl.java
  33. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java
  34. 17 9
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  35. 65 63
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  36. 16 10
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

+ 6 - 2
blade-common/src/main/java/org/springblade/common/utils/ForestNodeMergerEx.java

@@ -215,20 +215,24 @@ public class ForestNodeMergerEx {
         }
     }
 
-    public static <T extends INodeEx<T>> void InitTreeSort(T tree, String treeSort) {
+    public static <T extends INodeEx<T>> void InitTreeSort(T tree, String treeSort,int idx) {
 
         Integer localSort = 100;
         if (tree.getSort() != null ) {
             localSort =  tree.getSort() + 100;
+        }else {
+            localSort+= idx;
         }
 
         String localTreeSort = treeSort + localSort ;
         tree.setTreeSort(localTreeSort);
 
         List<T> childrens = tree.getChildren();
+        int index = 1;
         if (childrens!= null) {
             for (T child :childrens) {
-                InitTreeSort(child,localTreeSort);
+                InitTreeSort(child,localTreeSort,index);
+                index++;
             }
         }
     }

+ 8 - 4
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/LargeFileEndpoint.java

@@ -18,6 +18,7 @@ package org.springblade.resource.endpoint;
 
 import com.aliyun.oss.model.*;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.itextpdf.text.pdf.PdfReader;
 import io.swagger.annotations.Api;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
@@ -348,8 +349,8 @@ public class LargeFileEndpoint {
 		largeFile.setSuffix(param.getObjectType());
 		iLargeFileService.save(largeFile);
 
-		if(param.getTotalChunks()== param.getChunkNumber()){
-			Thread.sleep(400);
+		if((param.getTotalChunks()+"").equals(param.getChunkNumber()+"") ){
+			Thread.sleep(1000);
 		//第八步 检查文件是否全部完成上传
 		lock.lock();
 		try {
@@ -384,9 +385,11 @@ public class LargeFileEndpoint {
 				if(param.getFilename().contains("pdf")){
 //					FileInputStream inputStream1 = new FileInputStream(filePath + param.getFilename());
 					try {
-						PDDocument document = PDDocument.load(multipartFile.getInputStream());
+						//PDDocument document = PDDocument.load(multipartFile.getInputStream());
+						PdfReader pdfReader = new PdfReader(multipartFile.getInputStream());
+						int pages = pdfReader.getNumberOfPages();
 						//获取文件页数
-						newBladeFile.setPage(document.getPages().getCount());
+						newBladeFile.setPage(pages);
 					} catch (IOException e) {
 						e.printStackTrace();
 					}
@@ -601,4 +604,5 @@ public class LargeFileEndpoint {
 		return param.getIdentifier() + extension;
 	}
 
+
 }

+ 3 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/entity/ArchivesAuto.java

@@ -157,6 +157,9 @@ public class ArchivesAuto extends BaseEntity {
 
 	private Integer autoFileSort;
 
+	//是否已销毁
+	private Integer isDestroy;
+
 	/**
 	 * 立卷单位
 	 * **/

+ 4 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/feign/ArchiveAutoClient.java

@@ -9,6 +9,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -21,4 +22,7 @@ public interface ArchiveAutoClient {
     @PostMapping(API_PREFIX + "/saveListByNodes")
     @Transactional(rollbackFor = Exception.class)
     R saveArchiveAutoByNodes(@RequestBody List<ArchivesAuto> list);
+
+    @PostMapping(API_PREFIX + "/saveArchiveAutoById")
+    ArchivesAuto saveArchiveAutoById(@RequestParam Long id);
 }

+ 19 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/MetadataClassificationClient.java

@@ -0,0 +1,19 @@
+package org.springblade.business.feign;
+
+import org.springblade.common.constant.BusinessConstant;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Map;
+
+@FeignClient(value =
+        BusinessConstant.APPLICATION_WEATHER_NAME
+)
+public interface MetadataClassificationClient {
+
+    String API_PREFIX = "/metadataClassificationClient";
+
+    @PostMapping(API_PREFIX + "/createMetadataFile")
+    boolean createMetadataFile(@RequestParam Long fileId,@RequestParam Integer type);
+}

+ 2 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ArchiveTreeContractClient.java

@@ -36,4 +36,6 @@ public interface ArchiveTreeContractClient {
     @PostMapping(API_PREFIX + "/getArchiveTreeContractById")
     ArchiveTreeContract getArchiveTreeContractById(@RequestParam Long id);
 
+    @PostMapping(API_PREFIX + "/getArchiveTreeContractListByIds")
+    List<ArchiveTreeContract> getArchiveTreeContractListByIds(@RequestParam String ids);
 }

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

@@ -337,9 +337,9 @@ public class ArchivesAutoController extends BladeController {
 			projectClient.updateIsArchivesAutoById(projectId,1);
 
 			//将项目未锁定案卷拆卷
-			archivesAutoService.splitArchvies(projectId);
+			archivesAutoService.splitArchvies(projectId,contractId,nodeId);
 			//项目自动组卷入口
-			archivesAutoService.archiveAutoMethod(projectId);
+			archivesAutoService.archiveAutoMethod(projectId,contractId,nodeId);
 			//刷新项目档号
 			archivesAutoService.refreshFileNumberNoSlipt(projectId,contractId,nodeId);
 			//设置自动组卷结束

+ 5 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/feign/ArchiveAutoClientImpl.java

@@ -23,4 +23,9 @@ public class ArchiveAutoClientImpl implements ArchiveAutoClient {
 
         return  R.status(archivesAutoService.saveBatch(list));
     }
+
+    @Override
+    public ArchivesAuto saveArchiveAutoById(Long id) {
+        return archivesAutoService.getById(id);
+    }
 }

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

@@ -106,4 +106,8 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 	Integer splitFiles(@Param("ids") List<Long> ids);
 
 	List<DictBiz> getCarrierTypeByDict();
+
+	void batchDestroyByIds(@Param("ids")List<String> ids);
+
+	String getUserRoleName(@Param("projectId")Long projectId,@Param("contractId") Long contractId,@Param("userId") Long userId);
 }

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

@@ -183,6 +183,9 @@
         <if test="vo.projectId != null and vo.projectId != ''">
             and matc.project_id = #{vo.projectId}
         </if>
+        <if test="vo.contractId != null and vo.contractId != ''">
+            and uaa.contract_id = #{vo.contractId}
+        </if>
         <if test="vo.searchType == 1 and vo.queryValue != null and vo.queryValue != ''">
             and uaa.name like concat('%',#{vo.queryValue},'%')
         </if>
@@ -231,6 +234,9 @@
         </foreach>
         ) matc left join u_archives_auto uaa on matc.id = uaa.node_id left join u_archive_file uaf on uaa.id = uaf.archive_id
         where uaa.is_deleted = 0
+        <if test="vo.contractId != null and vo.contractId != ''">
+            and uaa.contract_id = #{vo.contractId}
+        </if>
         <if test="vo.searchType == 1 and vo.queryValue != null and vo.queryValue != ''">
             and uaa.name like concat('%',#{vo.queryValue},'%')
         </if>
@@ -273,7 +279,7 @@
     <select id="getAllArchiveByContractType" resultType="org.springblade.archive.vo.ArchivesAutoVO">
         SELECT uaa.id,matc.tree_code as 'contractType'
         FROM m_archive_tree_contract matc left join u_archives_auto uaa on uaa.node_id =matc.id
-        WHERE uaa.project_id =#{projectId} and uaa.is_deleted = #{type}
+        WHERE uaa.project_id =#{projectId} and uaa.is_deleted = #{type} and uaa.is_destroy = #{type}
     </select>
     <select id="getAllArchiveAgeByContractType" resultType="java.util.Map">
         SELECT CASE uaa.storage_time WHEN '1' THEN '10年' WHEN '2' THEN '30年' ELSE '永久' END as name,COUNT(uaa.storage_time) as value
@@ -289,7 +295,13 @@
                 where project_id = #{vo.projectId} and ancestors like concat('%', #{vo.nodeId}, '%') or id = #{vo.nodeId}
             ) matc
         left join u_archives_auto uaa on matc.id = uaa.node_id
-        where uaa.is_deleted = #{vo.isDeleted}
+        where
+        <if test="vo.isDeleted == 0">
+            uaa.is_deleted = 0 and uaa.is_destroy = 0
+        </if>
+        <if test="vo.isDeleted == 1">
+            uaa.is_deleted = 1 and uaa.is_destroy = 1
+        </if>
         <if test="vo.storageTime != null and vo.storageTime != ''">
             and uaa.storage_time = #{vo.storageTime}
         </if>
@@ -305,6 +317,14 @@
     <select id="getCarrierTypeByDict" resultType="org.springblade.system.entity.DictBiz">
         SELECT * FROM blade_dict_biz WHERE code = 'storage_type' AND  parent_id > 0 AND tenant_id = 000000
     </select>
+    <select id="getUserRoleName" resultType="java.lang.String">
+        SELECT br.role_name
+        FROM blade_role br
+        WHERE br.id = (
+            SELECT role_id  FROM m_project_assignment_user
+            WHERE project_id = #{projectId} AND contract_id = #{contractId} AND user_id = #{userId}
+        )
+    </select>
 
 
     <update id="splitFiles" >
@@ -314,6 +334,13 @@
             #{id}
         </foreach>
     </update>
+    <update id="batchDestroyByIds">
+        update u_archives_auto set is_deleted = 1 ,is_destroy = 1 where
+        id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
 
 
 </mapper>

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

@@ -59,9 +59,9 @@ public interface IArchivesAutoService extends BaseService<ArchivesAuto> {
 
 	void batchDestroyArchive(String ids);
 
-	void archiveAutoMethod(Long project);
+	void archiveAutoMethod(Long project,Long contractId,Long nodeId);
 
-	void splitArchvies(Long project);
+	void splitArchvies(Long project,Long contractId,Long nodeId);
 
 	public String getMergeArchivesFile(Long archiveId);
 

+ 25 - 9
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchiveAutoPdfServiceImpl.java

@@ -100,11 +100,11 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
 
         DataVO dataVO = FormulaUtil.convertCellToIndex("C2");
         String key =  "1__"+ dataVO.getY() + "_" + dataVO.getX();
-        DataInfo.put(key,"档号123456");
+        DataInfo.put(key,"档号12345688888888888888888888888888888888888888888888888888888888888");
 
         DataVO dataVO1 = FormulaUtil.convertCellToIndex("A9");
         String key1 =  "2__"+ dataVO1.getY() + "_" + dataVO1.getX();
-        DataInfo.put(key1,"hahahahaa");
+        DataInfo.put(key1,"hahahahaa9999999999999999999999999999999999999999999999999999999999999");
         try {
             String url = getBussPdfInfo(pkeyId.toString(),DataInfo,excelUrl,file_path,null,null);
         } catch (Exception e) {
@@ -565,6 +565,13 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
                         if (row != null) {
                             Cell cell = row.getCell(x1 );
                             if (cell != null || ObjectUtils.isNotEmpty(cell)) {
+//                                boolean bflag = true;
+//                                if (bflag) {
+//                                    CellStyle newStyle = workbook.createCellStyle();//创建单元格样式
+//                                    newStyle.cloneStyleFrom(cell.getCellStyle());
+//                                    newStyle.setWrapText(true);
+//                                    cell.setCellStyle(newStyle);
+//                                }
                                 cell.setCellValue(myData);
                             }
                         }
@@ -638,11 +645,13 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
 
         for (ArchiveFile file : datas) {
             String fileTime = file.getFileTime();
-            if (minDate.isEmpty() || fileTime.compareTo(minDate) < 0) {
-                minDate = fileTime;
-            }
-            if (maxDate.isEmpty() || fileTime.compareTo(maxDate) > 0) {
-                maxDate = fileTime;
+            if(StringUtils.isNotEmpty(fileTime)){
+                if (minDate.isEmpty() || fileTime.compareTo(minDate) <= 0) {
+                    minDate = fileTime;
+                }
+                if (maxDate.isEmpty() || fileTime.compareTo(maxDate) >= 0) {
+                    maxDate = fileTime;
+                }
             }
         }
 
@@ -700,7 +709,10 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
         //
         String url = file.getPdfFileUrl();
         if (StringUtil.isEmpty(url)) {
-            url = file.getFileUrl();
+            String fileUrl = file.getFileUrl();
+            if(fileUrl.endsWith(".pdf") || fileUrl.endsWith(".PDF")){
+                url = file.getFileUrl();
+            }
         }
 
         //todo 生成相册内容,待补充
@@ -719,7 +731,11 @@ public class ArchiveAutoPdfServiceImpl implements IArchiveAutoPdfService {
 
         List<String> fileUrls = new ArrayList<>();
         for (ArchiveFile file: datas) {
-            fileUrls.add(getPdfFileUrl(file));
+            String url = getPdfFileUrl(file);
+            if(StringUtils.isEmpty(url)){
+                continue;
+            }
+            fileUrls.add(url);
         }
 
         fileUrls.addAll(frontUrls);

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

@@ -124,10 +124,19 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			vo.setCarrierTypes(Arrays.asList(vo.getCarrierType().split(",")));
 		}
 		List<ArchivesAutoVO> archivesAutos = null;
-		if (StringUtils.isNotBlank(vo.getNodeIds())){
+		//获取合同段类型
+		ContractInfo contractInfo = contractClient.getContractById(vo.getContractId());
+		Integer contractType = contractInfo.getContractType();
+		//根据用户在当前合同段的权限,判断返回
+		BladeUser user = AuthUtil.getUser();
+		String name = baseMapper.getUserRoleName(vo.getProjectId(),vo.getContractId(),user.getUserId());
+		if (name.contains("超级管理员") || contractType == 3) {
+			vo.setContractId(null);
+		}
+		if (StringUtils.isNotBlank(vo.getNodeIds())) {
 			vo.setNodeIdArray(Arrays.asList(vo.getNodeIds().split(",")));
 			archivesAutos = baseMapper.pageByArchivesAuto2(page, vo);
-		}else {
+		} else {
 			archivesAutos = baseMapper.pageByArchivesAuto(page, vo);
 		}
 		if (archivesAutos != null && archivesAutos.size() >0) {
@@ -247,7 +256,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	}
 
 	@Override
-	public void splitArchvies(Long projectId){
+	public void splitArchvies(Long projectId,Long contractId,Long nodeId){
 		List<String> removeFiles = new ArrayList<>();
 		//清除案卷封面等pdf
 		List<String> archivesOutUrlList = baseMapper.getArchivesOutUrlList(projectId);
@@ -280,16 +289,20 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	}
 
 	@Override
-	public void archiveAutoMethod(Long projectId){
+	public void archiveAutoMethod(Long projectId,Long contractId,Long nodeId){
 		//步骤一:把档号集合初始化
 		indexMap = new HashMap<>();
 		//步骤二:查询归档树节点。存在未归档文件的节点。
 		List<ArchiveTreeContract> list = archiveTreeContractClient.getHavedFileNodeByProjectID(projectId);
+
+		//按合同段过滤
+		List<ArchiveTreeContract> authlist = authFilter(list, contractId, nodeId);
+
 		//步骤三:遍历归档树节点整理出 默认规则节点,分类并卷节点,单独组卷节点 三个集合。
 		List<ArchiveTreeContract> list1= new ArrayList<>();
 		List<ArchiveTreeContract> list2= new ArrayList<>();
 		List<ArchiveTreeContract> list3= new ArrayList<>();
-		for(ArchiveTreeContract treeContract:list){
+		for(ArchiveTreeContract treeContract:authlist){
 			Integer archiveAutoType = treeContract.getArchiveAutoType();
 			switch (archiveAutoType){
 				case 1:
@@ -366,8 +379,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			List<Long> collect = files.stream().map(file -> file.getId()).collect(Collectors.toList());
 			archiveFileClient.batchDeleteArchiveFile(collect);
 		}
-		//删除案卷
-		baseMapper.deleteBatchIds(list);
+		//销毁案卷
+		baseMapper.batchDestroyByIds(list);
 	}
 
 
@@ -511,11 +524,53 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 		//立卷人 从节点规格获取
 		String rollor = node.getRollor();
-		archivesAuto.setRollor(node.getRollor());
+		if(StringUtils.isEmpty(rollor)){
+			//节点没有值,就从合同段获取,没有合同段id的 用业主的合同段
+			Long nodeContractId = archivesAuto.getContractId();
+			if(nodeContractId!=null){
+				if(nodeContract==null){
+					nodeContract = contractClient.getContractById(nodeContractId);
+				}
+				rollor = nodeContract.getFiler();
+			}else{
+				List<Long> pids= new ArrayList<>();
+				pids.add(archivesAuto.getProjectId());
+				if(contracts==null){
+					contracts = contractClient.queryContractListByIds(pids);
+				}
+				for(ContractInfo c:contracts){
+					if(c.getContractType()==3){
+						rollor = c.getFiler();;
+					}
+				}
+			}
+		}
+		archivesAuto.setRollor(rollor);
 
 		//审核人 从节点规格获取
 		String reviewer = node.getReviewer();
-		archivesAuto.setReviewer(node.getReviewer());
+		if(StringUtils.isEmpty(reviewer)){
+			//节点没有值,就从合同段获取,没有合同段id的 用业主的合同段
+			Long nodeContractId = archivesAuto.getContractId();
+			if(nodeContractId!=null){
+				if(nodeContract==null){
+					nodeContract = contractClient.getContractById(nodeContractId);
+				}
+				reviewer = nodeContract.getReviewer();
+			}else{
+				List<Long> pids= new ArrayList<>();
+				pids.add(archivesAuto.getProjectId());
+				if(contracts==null){
+					contracts = contractClient.queryContractListByIds(pids);
+				}
+				for(ContractInfo c:contracts){
+					if(c.getContractType()==3){
+						reviewer = c.getReviewer();
+					}
+				}
+			}
+		}
+		archivesAuto.setReviewer(reviewer);
 
 		//载体类型
 		if (node.getStorageType()!= null){
@@ -525,7 +580,10 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		//archivesAuto.setStorageLocation();//存放位置
 		archivesAuto.setIsArchive(1);//已归档
 		//archivesAuto.setRemark();//备注
-		archivesAuto.setRollDate(LocalDateTime.now());//立卷日期
+		LocalDateTime now = LocalDateTime.now();
+		LocalDateTime nextday = now.plusDays(1);
+		archivesAuto.setRollDate(now);//立卷日期
+		archivesAuto.setReviewDate(nextday);//审核日期
 
 		archivesAuto.setNodeId(node.getId());//归档树节点
 		archivesAuto.setOutUrl("");//TODO 生成案卷的封面 目录 备考表,背级
@@ -1154,7 +1212,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 					}
 				}
 
-				String fileNumber = fileNumberPrefix + index;
+				String fileNumber = fileNumberPrefix +"_"+ index;
 				if (archiveAutoPdfService.refreshFileNumber(archivesAuto,fileNumber)){
 					changeList.add(archivesAuto);
 				}

+ 4 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/utils/FileUtils.java

@@ -433,6 +433,10 @@ public class FileUtils {
             for(String url:uris) {
                 try {
                     //todo 匿名访问特性
+                    if(StringUtils.isEmpty(url)){
+                        result.add("");
+                        continue;
+                    }
 
                     String fileNameWithExtension = url.substring(url.lastIndexOf("/") + 1); // 获取带有扩展名的文件名
 

+ 6 - 0
blade-service/blade-business/pom.xml

@@ -160,6 +160,12 @@
             <artifactId>metadata-extractor</artifactId>
             <version>2.16.0</version>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-archive-api</artifactId>
+            <version>2.9.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
 
     </dependencies>
 

+ 18 - 9
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1443,7 +1443,7 @@ public class InformationWriteQueryController extends BladeController {
                     }
                 });
             }
-
+            needCopyNode.setNodeName(vo.getNeedCopyNodeName());
             //复制保存节点、表信息
             R<Boolean> booleanR = this.saveOrCopyNodeTree(saveList, saveLedger, 32, needCopyNode);
 
@@ -1636,8 +1636,15 @@ public class InformationWriteQueryController extends BladeController {
                         //更新redis缓存
                         informationQueryService.delAsyncWbsTree(contractId);
                     }
-
-                    return R.success("操作成功");
+                    StringBuilder addNames = new StringBuilder();
+                    addNames.append("[");
+                    for (WbsTreeContract node : toCopyNodes) {
+                        addNames.append(node.getNodeName()+"-");
+                    }
+                    String substring = addNames.substring(0, addNames.length() - 1);
+                    needCopyNodeRoot.setNodeName(substring+"]");
+//                    return R.success("操作成功");
+                    return this.saveOrCopyNodeTree(addNodeList, null, 32, needCopyNodeRoot);
                 } else {
                     throw new ServiceException("没有找到需要复制的节点信息,请联系管理员");
                 }
@@ -1716,7 +1723,9 @@ public class InformationWriteQueryController extends BladeController {
             }
 
             if (resultFileData.size() > 0) {
-                //入库
+                //先删除,在入库
+                List<String> tabIds = resultFileData.stream().map(TableFile::getTabId).distinct().collect(Collectors.toList());
+                jdbcTemplate.execute("delete from m_table_file WHERE tab_id in(" + StringUtils.join(tabIds, ",") + ")");
                 if (tableFileClient.saveBatch(resultFileData) && updatePKeyIds.size() > 0) {
                     //修改表的文件按钮状态
                     wbsTreeContractClient.updateTabFileTypeByPkeyIds(new ArrayList<>(updatePKeyIds));
@@ -2751,7 +2760,7 @@ public class InformationWriteQueryController extends BladeController {
                 }
             });
         }
-
+        treeContract.setNodeName(vo.getAllSelectedList().get(0).getNodeName());
         R<Boolean> booleanR = this.saveOrCopyNodeTree(saveList, saveLedger, 2, treeContract);
 
         //更新redis
@@ -2807,8 +2816,8 @@ public class InformationWriteQueryController extends BladeController {
                     operationType, WbsTreeContract currentNode) {
 
         if (saveList.size() > 0) {
-            StringBuilder str = new StringBuilder();
-            str.append("-" + saveList.get(0).getFullName());
+//            StringBuilder str = new StringBuilder();
+//            str.append("-" + saveList.get(0).getFullName());
             //保存施工日志
             /*if (saveLedger.size() > 0) {
                 this.constructionLedgerService.saveBatch(saveLedger, 1000);
@@ -2826,11 +2835,11 @@ public class InformationWriteQueryController extends BladeController {
                 result.add(currentNode);
                 this.queryParentNode(currentNode, result);
                 StringBuilder pathName = new StringBuilder();
-                for (int i = 1, l = result.size(); i <= l; i++) {
+                for (int i = 1, l = result.size(); i < l; i++) {
                     WbsTreeContract node = result.get(result.size() - i);
                     pathName.append("-").append(StringUtils.isNotEmpty(node.getFullName()) ? node.getFullName() : node.getNodeName());
                 }
-                pathName.append(str);
+                pathName.append("-"+currentNode.getNodeName());
                 JSONObject json = new JSONObject();
                 json.put("operationObjIds", JSONArray.parseArray(JSONObject.toJSONString(saveList.stream().map(WbsTreeContract::getPKeyId).distinct().collect(Collectors.toList())), String.class));
                 json.put("operationObjName", pathName.substring(1));

+ 19 - 0
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/MetadataClassificationClientImpl.java

@@ -0,0 +1,19 @@
+package org.springblade.business.feignClient;
+
+import lombok.AllArgsConstructor;
+import org.springblade.business.feign.MetadataClassificationClient;
+import org.springblade.business.service.IMetadataClassificationService;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@RestController
+@AllArgsConstructor
+public class MetadataClassificationClientImpl implements MetadataClassificationClient {
+    private final IMetadataClassificationService iMetadataClassificationService;
+
+
+    @Override
+    public boolean createMetadataFile(Long fileId, Integer type) {
+        return iMetadataClassificationService.createMetadataFile(fileId,type);
+    }
+}

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

@@ -7,6 +7,7 @@ import org.springblade.business.entity.TrialContainerClassification;
 
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public interface MetadataClassificationMapper extends BaseMapper<MetadataClassification> {
 
@@ -22,4 +23,7 @@ public interface MetadataClassificationMapper extends BaseMapper<MetadataClassif
     void deleteTableField(@Param("containerInitTabName") String containerInitTabName,@Param("fieldKey") String fieldKey);
 
     void removeMetadataBytype(@Param("type") String type);
+
+
+    List<HashMap<String, Object>> getMetadaFileByFileId(@Param("fileId") Long fileId);
 }

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

@@ -82,4 +82,8 @@
         update u_metadata_classification set file_storage_type = REPLACE(file_storage_type,#{type},'')
         where  locate(#{type},file_storage_type) > 0
     </update>
+    <select id="getMetadaFileByFileId" resultType="java.util.HashMap" >
+        select * from u_metadata_file where and file_id != #{fileId}
+        order by create_time desc limit 1
+    </select>
 </mapper>

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

@@ -16,4 +16,6 @@ public interface IMetadataClassificationService extends BaseService<MetadataClas
     boolean updateMetadataBytype(List<Long> ids,String type);
 
     boolean deleteTableField(Long ids);
+
+    boolean createMetadataFile(Long fileId,Integer type);
 }

+ 168 - 5
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/MetadataClassificationServiceImpl.java

@@ -1,11 +1,15 @@
 package org.springblade.business.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.AllArgsConstructor;
-import org.springblade.business.dto.TrialContainerClassificationDTO;
 
+import org.springblade.archive.entity.ArchivesAuto;
+import org.springblade.archive.feign.ArchiveAutoClient;
+import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.entity.MetadataClassification;
 import org.springblade.business.mapper.MetadataClassificationMapper;
+import org.springblade.business.service.IArchiveFileService;
 import org.springblade.business.service.IMetadataClassificationService;
 
 import org.springblade.common.utils.SnowFlakeUtil;
@@ -14,18 +18,25 @@ import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.manager.entity.ArchiveTreeContract;
+import org.springblade.manager.entity.ContractInfo;
+import org.springblade.manager.feign.ArchiveTreeContractClient;
+import org.springblade.manager.feign.ContractClient;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 @Service
 @AllArgsConstructor
 public class MetadataClassificationServiceImpl
         extends BaseServiceImpl<MetadataClassificationMapper, MetadataClassification>
         implements IMetadataClassificationService {
-
+    private final IArchiveFileService iArchiveFileService;
+    private final ArchiveTreeContractClient archiveTreeContractClient;
+    private final ContractClient contractClient;
+    private final ArchiveAutoClient archiveAutoClient;
+    private final JdbcTemplate jdbcTemplate;
 
     @Override
     public MetadataClassification classificationDetail(Integer type) {
@@ -113,4 +124,156 @@ public class MetadataClassificationServiceImpl
         }
         return true;
     }
+
+    /**
+     * fileId 文件id
+     * type 管理端的元数据分类
+     * **/
+
+    public boolean createMetadataFile(Long fileId,Integer type){
+        try {
+            BladeUser user = AuthUtil.getUser();
+            if(fileId != null){
+                /**判断是否已经获取过**/
+                List<HashMap<String,Object>> metadataMapList = baseMapper.getMetadaFileByFileId(fileId);
+                Map<String,Object> metadataMap = null;
+                boolean isAdd = true;
+                if(metadataMapList != null && metadataMapList.size()>0){
+                    metadataMap = metadataMapList.get(0);
+                    isAdd = false;
+                }else{
+                    metadataMap = new HashMap<>();
+                }
+                /**获取全部的字段**/
+                QueryWrapper<MetadataClassification> metadata = new QueryWrapper<>();
+                metadata.lambda().eq(MetadataClassification::getIsDeleted,0);
+                List<MetadataClassification> metadataClassifications = baseMapper.selectList(metadata);
+                //全部字段
+                Map<String,MetadataClassification> mapAll = new LinkedHashMap<>();
+                for(MetadataClassification m : metadataClassifications){
+                    mapAll.put(m.getContainerName(),m);
+                }
+                Long id = null;
+                switch (type){
+                    case 0:
+                        this.archiveFileMetadata(fileId,metadataClassifications,user,isAdd,metadataMap);
+                        break;
+                }
+
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+    /**文件收集上传**/
+    private void archiveFileMetadata(Long fileId,List<MetadataClassification> metadataClassifications,BladeUser user,boolean isAdd,Map<String,Object> metadataMap){
+        ArchiveFile byId = iArchiveFileService.getById(fileId);
+        StringBuilder sqlBuild = new StringBuilder();
+        StringBuilder fieldBuild = new StringBuilder();
+        StringBuilder valueBuild = new StringBuilder();
+        if(byId != null && !byId.getNodeId().isEmpty()) {
+            Map<String,Object> keyValue = new LinkedHashMap<>();
+
+            /**聚合层次**/
+            ArchiveTreeContract archiveTreeContractById = archiveTreeContractClient.getArchiveTreeContractById(Long.parseLong(byId.getNodeId()));
+            List<ArchiveTreeContract> list = archiveTreeContractClient.getArchiveTreeContractListByIds(archiveTreeContractById.getAncestors());
+            StringBuffer nameStr = new StringBuffer();
+            for(ArchiveTreeContract treeContract : list){
+                nameStr.append(treeContract.getNodeName());
+                nameStr.append("/");
+            }
+            keyValue.put("聚合层次",nameStr.toString());
+            /**全宗名称 手写**/
+
+            /**立档单位名称**/
+            String dutyUser = "";
+            if(byId.getDutyUser().isEmpty() && !byId.getContractId().isEmpty()){
+                ContractInfo contractById = contractClient.getContractById(Long.parseLong(byId.getContractId()));
+                if(contractById.getContractType() == 1){
+                    dutyUser = contractById.getConstructionUnitName();
+                }else if(contractById.getContractType() == 2){
+                    dutyUser = contractById.getSupervisionUnitName();
+                }else{
+                    dutyUser = contractById.getContractorUnitName();
+                }
+            }else{
+                dutyUser = byId.getDutyUser();
+            }
+            keyValue.put("立档单位名称",dutyUser);
+            /**元数据目录文件 同聚合层次**/
+            keyValue.put("元数据目录文件",nameStr.toString());
+            /**文件页数**/
+            keyValue.put("文件页数",byId.getFilePage());
+            /**生成方式 1原生,2数字化 2**/
+            keyValue.put("生成方式", byId.getSourceType());
+            /**题名**/
+            keyValue.put("题名", byId.getFileName());
+            /**关键词**/
+            String keyWords = "";
+            if(byId.getFileName().length()<8){
+                keyWords = byId.getFileName();
+            }else{
+                keyWords = byId.getFileName().substring(0,7);
+            }
+            keyValue.put("关键词", keyWords);
+            /**摘要**/
+            String zhaiyao = "该文件为【数字化】于【"+byId.getFileTime()+"】形成,共【"+byId.getFilePage()+"】页、【"+byId.getFileName()+"】,责任者为【"+dutyUser+"】";
+            keyValue.put("摘要", zhaiyao);
+            /**文件日期**/
+            keyValue.put("文件日期", byId.getFileTime());
+            /**密级**/
+            if(byId.getArchiveId() !=null){
+                ArchivesAuto archivesAuto = archiveAutoClient.saveArchiveAutoById(byId.getArchiveId());
+                keyValue.put("密级", archivesAuto.getSecretLevel());
+            }
+            /**文号**/
+            keyValue.put("文号", byId.getFileNumber());
+            /**格式名称**/
+            keyValue.put("格式名称", byId.getFileUrl().substring(byId.getFileUrl().lastIndexOf(".")));
+            /**存储位置**/
+            keyValue.put("存储位置", byId.getFileUrl());
+            /**计算机文件名**/
+            String substring = byId.getFileUrl().substring(byId.getFileUrl().lastIndexOf("/"), byId.getFileUrl().lastIndexOf("."));
+            keyValue.put("计算机文件名", substring);
+            /**计算机文件大小**/
+            keyValue.put("计算机文件大小", byId.getFileSize());
+            /**扫描分辨率 300dpi**/
+            keyValue.put("扫描分辨率", "300dpi");
+            /**扫描色彩模式 彩色**/
+            keyValue.put("扫描色彩模式", "彩色");
+            /**责任者名称**/
+            keyValue.put("责任者名称", byId.getDutyUser());
+            if(isAdd) {
+                sqlBuild.append("insert into u_metadata_file ");
+                for (MetadataClassification key : metadataClassifications) {
+                    fieldBuild.append(" , ");
+                    fieldBuild.append(key.getFieldKey());
+                    if (keyValue.get(key.getContainerName()) != null) {
+                        valueBuild.append(" , ");
+                        valueBuild.append("'");
+                        valueBuild.append(keyValue.get(key.getContainerName()));
+                        valueBuild.append("'");
+                    } else {
+                        valueBuild.append(" , ");
+                        valueBuild.append(" NULL ");
+                    }
+                }
+                sqlBuild.append("(id,tenant_id, create_user, create_time, update_user, update_time, status, is_deleted,contract_id, file_id " + fieldBuild.toString() + " ) ");
+                sqlBuild.append("values('" + SnowFlakeUtil.getId() + "','" + user.getTenantId() + "','" + user.getUserId() + "', '" + new Date() + "', '" + user.getUserId() + "', '" + new Date() + "', '0', '0','" + byId.getContractId() + "', '" + fileId + "'," + valueBuild.toString() + ")");
+            }else{
+                sqlBuild.append("update u_metadata_file set ");
+                for(MetadataClassification key : metadataClassifications){
+                    if(keyValue.get(key.getContainerName()) != null){
+                        fieldBuild.append(" "+key.getFieldKey() + " = '"+keyValue.get(key.getContainerName())+"' , ");
+                    }
+                }
+                sqlBuild.append(" update_user = '"+user.getUserId()+"' , ");
+                sqlBuild.append(" update_time = '"+new Date()+"' , ");
+                sqlBuild.append(" where id = "+metadataMap.get("id"));
+            }
+            jdbcTemplate.execute(sqlBuild.toString());
+        }
+    }
 }

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

@@ -343,8 +343,8 @@ public class ArchiveTreeContractController extends BladeController {
 	 */
 	@GetMapping("getArchiveTreeByNodeType")
 	@ApiOperation(value = "根据节点类型获取档案,档案查询选择目录", notes = "传入项目id,节点类型")
-	public R getArchiveTreeByNodeType(Long projectId,Long nodeType){
-		return R.data(archiveTreeContractService.getArchiveTreeByNodeType(projectId,nodeType));
+	public R getArchiveTreeByNodeType(Long projectId,Long contractId,Integer nodeType){
+		return R.data(archiveTreeContractService.getArchiveTreeByNodeType(projectId,contractId,nodeType));
 	}
 	/**
 	 * 根据父节点获取子节点集合

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

@@ -619,6 +619,7 @@ public class ExcelTabController extends BladeController {
             return R.fail("暂无表单!");
         }
         File file1 = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
+//        File file1 = ResourceUtil.getFile("C:\\Users\\泓创研发01\\Desktop\\privateUrl\\1578963584895942656.html");
         FileInputStream fileInputStream = new FileInputStream(file1);
 
         String htmlString = IoUtil.readToString(fileInputStream);
@@ -1666,9 +1667,7 @@ public class ExcelTabController extends BladeController {
         for (int i = 1; i < dataArray.size(); i++) {
             JSONObject jsonObject = dataArray.getJSONObject(i);
             pkeyIds += "," + jsonObject.getString("pkeyId");
-            ;
             groupIds += "," + jsonObject.getString("tabGroupId");
-            ;
         }
         /*全加载,或者可以优化成依赖加载*/
         List<TableInfo> tableInfoList = this.excelTabService.getTableInfoList(dataArray);
@@ -3049,6 +3048,7 @@ public class ExcelTabController extends BladeController {
         }
 
         File file1 = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
+//        File file1 = ResourceUtil.getFile("C:\\Users\\泓创研发01\\Desktop\\privateUrl\\1578963584895942656.html");
         FileInputStream fileInputStream = new FileInputStream(file1);
         String htmlString = IoUtil.readToString(fileInputStream);
         // 解析 style

+ 6 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -218,8 +218,12 @@ public class WbsTreeController extends BladeController {
                             .select(WbsTreePrivate::getPKeyId).eq(WbsTreePrivate::getStatus, 1).eq(WbsTreePrivate::getType, 2).eq(WbsTreePrivate::getId, id)).stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
                     List<Long> contractPKeyIds = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
                             .select(WbsTreeContract::getPKeyId).eq(WbsTreeContract::getStatus, 1).eq(WbsTreeContract::getType, 2).and(obj -> obj.eq(WbsTreeContract::getId, id).or().eq(WbsTreeContract::getOldId, id))).stream().map(WbsTreeContract::getPKeyId).collect(Collectors.toList());
-                    jdbcTemplate.execute("update m_wbs_tree_private set is_deleted = 1 where p_key_id in(" + StringUtils.join(projectPKeyIds, ",") + ")");
-                    jdbcTemplate.execute("update m_wbs_tree_contract set is_deleted = 1 where p_key_id in(" + StringUtils.join(contractPKeyIds, ",") + ")");
+                    if (projectPKeyIds.size()>0){
+                        jdbcTemplate.execute("update m_wbs_tree_private set is_deleted = 1 where p_key_id in(" + StringUtils.join(projectPKeyIds, ",") + ")");
+                    }
+                    if (contractPKeyIds.size()>0){
+                        jdbcTemplate.execute("update m_wbs_tree_contract set is_deleted = 1 where p_key_id in(" + StringUtils.join(contractPKeyIds, ",") + ")");
+                    }
 
                     return R.success("删除成功");
                 }

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

@@ -70,5 +70,11 @@ public class ArchiveTreeContractImpl implements ArchiveTreeContractClient {
         return archiveTreeContract;
     }
 
+    @Override
+    public List<ArchiveTreeContract> getArchiveTreeContractListByIds(String ids) {
+
+        return archiveTreeContractService.getArchiveTreeContractListByIds(ids);
+    }
+
 
 }

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

@@ -54,11 +54,6 @@ public class SaveUserInfoByProjectClientImpl implements SaveUserInfoByProjectCli
         obj.setContractId(String.valueOf(contractId));
         obj.setRoleId(String.valueOf(roleId));
         obj.setStatus(1);
-
-        saveUserInfoByProjectService.remove(Wrappers.<SaveUserInfoByProjectDTO>query().lambda()
-                        .eq(SaveUserInfoByProjectDTO::getUserId, userId)
-                        .eq(SaveUserInfoByProjectDTO::getRoleId, roleId)
-                        .eq(SaveUserInfoByProjectDTO::getContractId, contractId));
         saveUserInfoByProjectService.save(obj);
     }
 

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

@@ -39,6 +39,7 @@ public class TableFileClientImpl implements TableFileClient {
     public List<TableFile> getTabFilesByTabIds(String tabFileIds) {
         return tableFileService.getBaseMapper().selectList(Wrappers.<TableFile>lambdaQuery()
                 .in(TableFile::getTabId, Func.toLongList(tabFileIds))
+                .ne(TableFile::getType,1) //排除源文件
                 .isNotNull(TableFile::getTabId)
         );
     }

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

@@ -86,4 +86,7 @@ public interface ArchiveTreeContractMapper extends BaseMapper<ArchiveTreeContrac
 	List<ArchiveTreeContractVO3> getChildrenNodeByNodeId(@Param("nodeId") Long nodeId);
 
 	List<ArchiveTreeContract> getAuthCodeList(@Param("id") String id,@Param("authCode") String authCode,@Param("contractId") Long contractId);
+
+	List<ArchiveTreeContract> getArchiveTreeContractListByIds(@Param("idsList") List<String> idsList);
+    String getUserRoleName(@Param("projectId")Long projectId,@Param("contractId") Long contractId,@Param("userId") Long userId);
 }

+ 24 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ArchiveTreeContractMapper.xml

@@ -224,7 +224,7 @@
         <if test="code!=null and code!=''">
             AND (d.tree_code = #{code} or d.tree_code = #{contractId} or d.parent_id = 0)
         </if>
-        ORDER BY d.sort
+        ORDER BY d.tree_sort, d.sort
     </select>
 
     <select id="tree2" resultMap="ArchiveTreeContractVO2ResultMap">
@@ -328,7 +328,7 @@
               AND ( is_archive = 0 OR is_archive IS NULL )
               AND node_id IS NOT NULL
         )
-        order by tree_sort asc
+        order by ancestors asc,tree_sort asc
     </select>
     <select id="getListByProjectId" resultType="org.springblade.manager.entity.ArchiveTreeContract">
         select id,project_id as projectId,parent_id as parentId,ancestors,node_name as nodeName,status,tree_code as treeCode, ext_type as extType,
@@ -358,12 +358,12 @@
             matc1.node_name as name,
             (SELECT COUNT(*)
              FROM u_archives_auto uaa1
-             WHERE  uaa1.is_deleted =0 and (uaa1.node_id in
+             WHERE  uaa1.is_destroy =0 and uaa1.is_deleted =0 and (uaa1.node_id in
                  (select id from m_archive_tree_contract matc2 WHERE matc2.project_id = #{projectId} and matc2.ancestors like CONCAT('%',matc1.id,'%')) or uaa1.node_id = matc1.id)
             ) as 'auto',
             (SELECT COUNT(*)
              FROM u_archives_auto uaa1
-             WHERE  uaa1.is_deleted =1 and (uaa1.node_id in
+             WHERE  uaa1.is_destroy =1 and uaa1.is_deleted =1 and (uaa1.node_id in
                 (select id from m_archive_tree_contract matc2 WHERE matc2.project_id = #{projectId} and matc2.ancestors like CONCAT('%',matc1.id,'%')) or uaa1.node_id = matc1.id)
             ) as 'deleted',
             if((SELECT COUNT(*) from m_archive_tree_contract matc WHERE parent_id = matc1.id)=0,false,true) as hasChildren
@@ -408,4 +408,24 @@
         </if>
         ORDER BY d.sort
     </select>
+    <select id="getArchiveTreeContractListByIds" resultMap="archiveTreeContractResultMap">
+        SELECT
+        d.*
+        FROM
+        m_archive_tree_contract d
+        WHERE
+        d.is_deleted = 0
+        <foreach item="id" collection="idsList" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        ORDER BY d.ancestors
+    </select>
+    <select id="getUserRoleName" resultType="java.lang.String">
+        SELECT br.role_name
+        FROM blade_role br
+        WHERE br.id = (
+            SELECT role_id  FROM m_project_assignment_user
+            WHERE project_id = #{projectId} AND contract_id = #{contractId} AND user_id = #{userId}
+        )
+    </select>
 </mapper>

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

@@ -96,8 +96,10 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
 
 	List<Map<String,Object>> getArchiveTreeAndArchiveCount(Long projectId,Long nodeId);
 
-    List<ArchiveTreeContractVO3> getArchiveTreeByNodeType(Long projectId, Long nodeType);
+    List<ArchiveTreeContractVO3> getArchiveTreeByNodeType(Long projectId, Long contractId,Integer nodeType);
 
 	List<ArchiveTreeContractVO3> getChildrenNodeByNodeId(Long nodeId);
 	String getAuthCode(Long contractId);
+
+	List<ArchiveTreeContract> getArchiveTreeContractListByIds(String ids);
 }

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

@@ -238,7 +238,7 @@ public class ArTreeContractInitServiceImpl {
 
         InitAncestors(trees.get(0),"0");
 
-        InitTreeSort(trees.get(0), "");
+        InitTreeSort(trees.get(0), "",0);
 
         archiveAutoRuleSync.syncArchiveTreeContractList(vo2Map,proVo2Trees);
 
@@ -268,14 +268,22 @@ public class ArTreeContractInitServiceImpl {
      *
      * @param tree
      */
-    public void InitTreeSort(ArchiveTreeContractVO2 tree, String treeSort) {
-        String localTreeSort = treeSort + tree.sortNum() ;
+    public void InitTreeSort(ArchiveTreeContractVO2 tree, String treeSort,int idx) {
+        Integer localSort = 100;
+        if (tree.getSort() != null ) {
+            localSort =  tree.getSort() + 100;
+        }else {
+            localSort+= idx;
+        }
+        String localTreeSort = treeSort + localSort ;
         tree.setTreeSort(localTreeSort);
 
         List<ArchiveTreeContractVO2> childrens = tree.getChildren();
+        int index = 1;
         if (childrens!= null) {
             for (ArchiveTreeContractVO2 child :childrens) {
-                InitTreeSort(child,localTreeSort);
+                InitTreeSort(child,localTreeSort,index);
+                index++;
             }
         }
     }
@@ -645,6 +653,7 @@ public class ArTreeContractInitServiceImpl {
             treeContractVO2.setArchiveAutoType(archiveTreeContract.getArchiveAutoType());
             treeContractVO2.setArchiveAutoGroupId(archiveTreeContract.getArchiveAutoGroupId());
             treeContractVO2.setArchiveAutoGroupSelect(archiveTreeContract.getArchiveAutoGroupSelect());
+            treeContractVO2.setExtType(archiveTreeContract.getExtType());
             vos.add(treeContractVO2);
             vo2Map.put(treeContractVO2.getId(),treeContractVO2);
         }

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

@@ -374,6 +374,12 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		return code;
 	}
 
+	@Override
+	public List<ArchiveTreeContract> getArchiveTreeContractListByIds(String ids) {
+		List<String> idsList = Arrays.asList(ids.split(","));
+		return baseMapper.getArchiveTreeContractListByIds(idsList);
+	}
+
 	/**
 	 *  同步项目级
 	 * @param dstNode
@@ -721,7 +727,7 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		}
 		ArchiveTreeContractVO2  tree = trees.get(0);
 
-		ForestNodeMergerEx.InitTreeSort(tree,"");
+		ForestNodeMergerEx.InitTreeSort(tree,"",0);
 
 		List<ArchiveTreeContractVO2> changeList = new ArrayList<>();
 
@@ -865,15 +871,33 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	}
 
 	@Override
-	public List<ArchiveTreeContractVO3> getArchiveTreeByNodeType(Long projectId, Long nodeType) {
-		if (nodeType == 1){
-			return baseMapper.getArchiveTreeByNodeType2(projectId);
-		}else if (nodeType == 2){
-			return baseMapper.getArchiveTreeByNodeType(projectId,"C");
-		}else if (nodeType == 3){
-			return baseMapper.getArchiveTreeByNodeType(projectId,"S");
+	public List<ArchiveTreeContractVO3> getArchiveTreeByNodeType(Long projectId, Long contractId,Integer nodeType) {
+		//获取合同段类型
+		ContractInfo contractInfo = contractInfoService.selectById(contractId + "");
+		Integer contractType = contractInfo.getContractType();
+		//根据用户在当前合同段的权限,判断返回
+		BladeUser user = AuthUtil.getUser();
+		String name = baseMapper.getUserRoleName(projectId,contractId,user.getUserId());
+		if (name.contains("超级管理员") || contractType == 3) {
+			//
+			if (nodeType == 1) {
+				return baseMapper.getArchiveTreeByNodeType2(projectId);
+			} else if (nodeType == 2) {
+				return baseMapper.getArchiveTreeByNodeType(projectId, "C");
+			} else if (nodeType == 3) {
+				return baseMapper.getArchiveTreeByNodeType(projectId, "S");
+			} else {
+				return null;
+			}
 		}else {
-			return null;
+			//只返回对应类型的
+			if (contractType == 1 && nodeType == 2){
+					return baseMapper.getArchiveTreeByNodeType(projectId, "C");
+			} else if (contractType == 2 && nodeType == 3) {
+					return baseMapper.getArchiveTreeByNodeType(projectId, "S");
+			}else {
+				return null;
+			}
 		}
 	}
 

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

@@ -114,7 +114,7 @@ public class ArchiveTreeContractSyncImpl {
         //排序
         ForestNodeMergerEx.InitAncestors(tree,"0");
 
-        ForestNodeMergerEx.InitTreeSort(tree, "");
+        ForestNodeMergerEx.InitTreeSort(tree, "",0);
 
         //更新自动组卷节点
         archiveAutoRuleSync.syncArchiveTreeContractList(vo2Map,proVo2Trees);

+ 17 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -2,6 +2,7 @@ package org.springblade.manager.service.impl;
 
 import cn.hutool.core.date.StopWatch;
 import cn.hutool.log.StaticLog;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -309,6 +310,10 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     } else {
                         String dataVal = dataInfo2.getString(dataMap.get(k).get(0));
                         if (StringUtils.isNotEmpty(dataVal)) {
+                            if (dataVal.contains("Ljava")){
+                                Object o = dataInfo2.get(dataMap.get(k).get(0));
+                                dataVal = JSON.toJSONString(o).replace("\"","");
+                            }
                             dataMap2.put(k, dataVal + "_^_" + dataMap.get(k).get(0).split("__")[1]);
                         }
                     }
@@ -1260,7 +1265,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             tabPdf.delete();
         }
 
-        // 获取清表信息
+        //获取清表信息
         ExcelTab excelTab = this.getById(wbsTreeContract.getExcelId());
 
         if (excelTab == null) {
@@ -1269,7 +1274,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
         Map<String, Object> DataInfo = (Map<String, Object>) getBussDataInfo(pkeyId, 0).getData();
 
-        // 获取excel流 和 html流
+        //获取excel流 和 html流
         InputStream exceInp = CommonUtil.getOSSInputStream(excelTab.getFileUrl());
         org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(exceInp);
 
@@ -1277,7 +1282,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         Sheet sheet = workbook.getSheetAt(0);
         sheet.setForceFormulaRecalculation(true);
 
-        // 标题添加
+        //标题添加
         ProjectInfo projectInfo = projectInfoService.getById(wbsTreeContract.getProjectId());
 
         int all = sheet.getRow(0).getLastCellNum();
@@ -1319,7 +1324,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             }
         }
 
-        // 数据不为空 &&
+        //数据不为空
         if (StringUtils.isNotEmpty(wbsTreeContract.getHtmlUrl())) {
             File htmlFile = ResourceUtil.getFile(wbsTreeContract.getHtmlUrl());
             if (htmlFile.exists()) {
@@ -1508,11 +1513,12 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         FileUtils.setExcelScaleToPdf(excelPath, pdfPath);
         BladeFile bladeFile = newIOSSClient.uploadFile(pkeyId + ".pdf", pdfPath);
 
+        //附件
         TableFile tableFile1 = tableFileService.getBaseMapper().selectList(Wrappers.<TableFile>query().lambda().eq(TableFile::getTabId, pkeyId + "").eq(TableFile::getType, 1)).stream().findAny().orElse(null);
         if (tableFile1 != null) {
             /*tableFile1.setDomainPdfUrl(bladeFile.getLink());
             tableFileService.saveOrUpdate(tableFile1);*/
-            tableFileService.update(Wrappers.<TableFile>lambdaUpdate().set(TableFile::getDomainPdfUrl,bladeFile.getLink()).eq(TableFile::getId,tableFile1.getId()));
+            tableFileService.update(Wrappers.<TableFile>lambdaUpdate().set(TableFile::getDomainPdfUrl, bladeFile.getLink()).eq(TableFile::getId, tableFile1.getId()));
         } else {
             TableFile tableFile = new TableFile();
             String fileExtension = FileUtil.getFileExtension(wbsTreeContract.getFullName() + ".pdf");
@@ -2319,12 +2325,14 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         FileOutputStream outputStream = new FileOutputStream(excelPath);
         workbook.write(outputStream);
         FileUtils.setExcelScaleToPdf(excelPath, pdfPath);
-
         BladeFile bladeFile = newIOSSClient.uploadFile(pkeyId + ".pdf", pdfPath);
-        TableFile tableFile1 = tableFileService.getBaseMapper().selectOne(Wrappers.<TableFile>query().lambda().eq(TableFile::getTabId, pkeyId + "").eq(TableFile::getType, 1).eq(TableFile::getTrialRecordId, id));
+
+        //附件
+        TableFile tableFile1 = tableFileService.getBaseMapper().selectList(Wrappers.<TableFile>query().lambda().eq(TableFile::getTabId, pkeyId + "").eq(TableFile::getType, 1)).stream().findAny().orElse(null);
         if (tableFile1 != null) {
-            tableFile1.setDomainPdfUrl(bladeFile.getLink());
-            tableFileService.saveOrUpdate(tableFile1);
+            /*tableFile1.setDomainPdfUrl(bladeFile.getLink());
+            tableFileService.saveOrUpdate(tableFile1);*/
+            tableFileService.update(Wrappers.<TableFile>lambdaUpdate().set(TableFile::getDomainPdfUrl, bladeFile.getLink()).eq(TableFile::getId, tableFile1.getId()));
         } else {
             TableFile tableFile = new TableFile();
             String fileExtension = FileUtil.getFileExtension(wbsTreePrivate.getFullName() + ".pdf");

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

@@ -894,26 +894,26 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
     @Override
     public R<String> syncPrivateProjectFormula(Long projectId, Long pKeyId) {
-        if(projectId!=null&&pKeyId!=null){
+        if (projectId != null && pKeyId != null) {
             ProjectInfo projectInfo = projectInfoMapper.selectById(projectId);
-            ProjectInfo sourceProject=jdbcTemplate.queryForObject("select a.* from m_project_info a join m_wbs_tree_private b on a.id=b.project_id where b.p_key_id="+projectInfo.getReferenceWbsTemplateId()+" limit 1",new BeanPropertyRowMapper<>(ProjectInfo.class));
+            ProjectInfo sourceProject = jdbcTemplate.queryForObject("select a.* from m_project_info a join m_wbs_tree_private b on a.id=b.project_id where b.p_key_id=" + projectInfo.getReferenceWbsTemplateId() + " limit 1", new BeanPropertyRowMapper<>(ProjectInfo.class));
             /*只需要同步私有引用就可以了*/
-            if("private".equals(projectInfo.getReferenceWbsTemplateType())&&sourceProject!=null){
+            if ("private".equals(projectInfo.getReferenceWbsTemplateType()) && sourceProject != null) {
                 WbsTreePrivate selectNodeNow = baseMapper.selectOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, pKeyId).eq(WbsTreePrivate::getStatus, 1));
                 if (selectNodeNow == null) {
                     throw new ServiceException("未获取到当前选择同步的节点信息,请联系管理员");
                 }
-                List<ElementFormulaMapping> insertList=new ArrayList<>();
-                List<Formula> insertFormulaList=new ArrayList<>();
-                List<Formula> updateFormulaList=new ArrayList<>();
+                List<ElementFormulaMapping> insertList = new ArrayList<>();
+                List<Formula> insertFormulaList = new ArrayList<>();
+                List<Formula> updateFormulaList = new ArrayList<>();
                 /*同步公共部分*/
-                global(sourceProject.getId(),projectInfo,insertList,insertFormulaList,updateFormulaList);
+                global(sourceProject.getId(), projectInfo, insertList, insertFormulaList, updateFormulaList);
                 /*同步节点部分,查找模版的叶子节点,查找目标叶子节点,id一样的是关联数据  */
-                part(sourceProject.getId(),projectInfo,insertList,insertFormulaList,updateFormulaList);
+                part(sourceProject.getId(), projectInfo, insertList, insertFormulaList, updateFormulaList);
                 /*保存记录*/
-                int n=saveAll(insertList,insertFormulaList,updateFormulaList);
-                if(n>0){
-                    R.success("成功同步"+n+"条公式");
+                int n = saveAll(insertList, insertFormulaList, updateFormulaList);
+                if (n > 0) {
+                    R.success("成功同步" + n + "条公式");
                 }
             }
             return R.success("引用公有模版无需同步");
@@ -921,73 +921,75 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return R.fail("同步异常,请联系管理员");
     }
 
-    private int saveAll(List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList){
-        int n=0;
-        if(!insertList.isEmpty()) {
-            this.elementFormulaMappingService.saveBatch(insertList,1000);
+    private int saveAll(List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList) {
+        int n = 0;
+        if (!insertList.isEmpty()) {
+            this.elementFormulaMappingService.saveBatch(insertList, 1000);
         }
-        if(!insertFormulaList.isEmpty()) {
-            this.formulaService.saveBatch(insertFormulaList,1000);
-            n+=insertList.size();
+        if (!insertFormulaList.isEmpty()) {
+            this.formulaService.saveBatch(insertFormulaList, 1000);
+            n += insertList.size();
         }
-        if(!updateFormulaList.isEmpty()) {
-            this.formulaService.updateBatchById(updateFormulaList,1000);
-            n+=updateFormulaList.size();
+        if (!updateFormulaList.isEmpty()) {
+            this.formulaService.updateBatchById(updateFormulaList, 1000);
+            n += updateFormulaList.size();
         }
         return n;
     }
 
-    private void global(Long srcProjectId,ProjectInfo distProject,List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList){
-        this.check( srcProjectId, distProject, insertList,  insertFormulaList,  updateFormulaList,FormulaBean.PRO_GLOBAL);
+    private void global(Long srcProjectId, ProjectInfo distProject, List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList) {
+        this.check(srcProjectId, distProject, insertList, insertFormulaList, updateFormulaList, FormulaBean.PRO_GLOBAL);
     }
-    private void part(Long srcProjectId,ProjectInfo distProject,List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList){
-        this.check( srcProjectId, distProject, insertList,  insertFormulaList,  updateFormulaList,FormulaBean.PRO_PART);
+
+    private void part(Long srcProjectId, ProjectInfo distProject, List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList) {
+        this.check(srcProjectId, distProject, insertList, insertFormulaList, updateFormulaList, FormulaBean.PRO_PART);
     }
-    private void check(Long srcProjectId,ProjectInfo distProject,List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList,int model){
-        Map<String,ElementFormulaMapping> efmListScopeMap=new HashMap<>();
-        Map<String,ElementFormulaMapping> sourceEfmListScopeMap=new HashMap<>();
-        Map<Long,Formula> formulaScopeMap = new HashMap<>();
-        Map<Long,Formula> sourceFormulaScopeMap = new HashMap<>();
-        List<ElementFormulaMapping> efmListScope=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,distProject.getId()).eq(ElementFormulaMapping::getScope, model));
-        if(!efmListScope.isEmpty()){
+
+    private void check(Long srcProjectId, ProjectInfo distProject, List<ElementFormulaMapping> insertList, List<Formula> insertFormulaList, List<Formula> updateFormulaList, int model) {
+        Map<String, ElementFormulaMapping> efmListScopeMap = new HashMap<>();
+        Map<String, ElementFormulaMapping> sourceEfmListScopeMap = new HashMap<>();
+        Map<Long, Formula> formulaScopeMap = new HashMap<>();
+        Map<Long, Formula> sourceFormulaScopeMap = new HashMap<>();
+        List<ElementFormulaMapping> efmListScope = this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId, distProject.getId()).eq(ElementFormulaMapping::getScope, model));
+        if (!efmListScope.isEmpty()) {
             formulaScopeMap = this.formulaService.listByIds(efmListScope.stream().map(ElementFormulaMapping::getFormulaId).collect(Collectors.toList())).stream().collect(Collectors.toMap(Formula::getId, f -> f));
         }
-        List<ElementFormulaMapping>sourceEfmListScope=this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId,srcProjectId).eq(ElementFormulaMapping::getScope, model));
-        if(!sourceEfmListScope.isEmpty()){
+        List<ElementFormulaMapping> sourceEfmListScope = this.elementFormulaMappingService.list(Wrappers.<ElementFormulaMapping>lambdaQuery().eq(ElementFormulaMapping::getProjectId, srcProjectId).eq(ElementFormulaMapping::getScope, model));
+        if (!sourceEfmListScope.isEmpty()) {
             sourceFormulaScopeMap = this.formulaService.listByIds(sourceEfmListScope.stream().map(ElementFormulaMapping::getFormulaId).collect(Collectors.toList())).stream().collect(Collectors.toMap(Formula::getId, f -> f));
         }
-        if(FormulaBean.PRO_PART.equals(model)) {
+        if (FormulaBean.PRO_PART.equals(model)) {
             efmListScopeMap = efmListScope.stream().collect(Collectors.toMap(e -> e.getElementId() + "" + e.getNodeId(), t -> t));
             sourceEfmListScopeMap = sourceEfmListScope.stream().collect(Collectors.toMap(e -> e.getElementId() + "" + e.getNodeId(), t -> t));
-        }else{
+        } else {
             efmListScopeMap = efmListScope.stream().collect(Collectors.toMap(e -> e.getElementId().toString(), t -> t));
             sourceEfmListScopeMap = sourceEfmListScope.stream().collect(Collectors.toMap(e -> e.getElementId().toString(), t -> t));
         }
-        String[] exclude= new String[]{"id"};
+        String[] exclude = new String[]{"id"};
         Map<String, ElementFormulaMapping> finalEfmListScopeMap = efmListScopeMap;
         Map<Long, Formula> finalSourceFormulaScopeMap = sourceFormulaScopeMap;
         Map<Long, Formula> finalFormulaScopeMap = formulaScopeMap;
-        sourceEfmListScopeMap.forEach((k, v)->{
-            if(!finalEfmListScopeMap.containsKey(k)){
+        sourceEfmListScopeMap.forEach((k, v) -> {
+            if (!finalEfmListScopeMap.containsKey(k)) {
                 /*不存在*/
                 ElementFormulaMapping target = new ElementFormulaMapping();
-                BeanUtils.copyProperties(v,target,exclude);
+                BeanUtils.copyProperties(v, target, exclude);
                 target.setWbsId(distProject.getReferenceWbsTemplateId());
                 target.setProjectId(distProject.getId());
                 insertList.add(target);
-                Formula sf= finalSourceFormulaScopeMap.get(v.getFormulaId());
-                Formula target2= new Formula();
-                BeanUtils.copyProperties(sf,target2);
-                Long id=SnowFlakeUtil.getId();
+                Formula sf = finalSourceFormulaScopeMap.get(v.getFormulaId());
+                Formula target2 = new Formula();
+                BeanUtils.copyProperties(sf, target2);
+                Long id = SnowFlakeUtil.getId();
                 target.setFormulaId(id);
                 target2.setId(id);
                 insertFormulaList.add(target2);
-            }else{
+            } else {
                 /*存在则比较,有差异则覆盖*/
-                Formula sf= finalSourceFormulaScopeMap.get(v.getFormulaId());
-                Formula tf= finalFormulaScopeMap.get(finalEfmListScopeMap.get(k).getFormulaId());
-                if(!tf.getFormula().equals(sf.getFormula())){
-                    BeanUtils.copyProperties(sf,tf,exclude);
+                Formula sf = finalSourceFormulaScopeMap.get(v.getFormulaId());
+                Formula tf = finalFormulaScopeMap.get(finalEfmListScopeMap.get(k).getFormulaId());
+                if (!tf.getFormula().equals(sf.getFormula())) {
+                    BeanUtils.copyProperties(sf, tf, exclude);
                     updateFormulaList.add(tf);
                 }
 
@@ -1964,23 +1966,23 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
         //获取公式颜色
         String tabName = wbsTreePrivate.getInitTableName();
-        //字段查询 获取公式字段
-        String colKeys = "SELECT e_key from m_wbs_tree a ,m_wbs_form_element b WHERE a.init_table_name = '" + tabName + "' and a.id=b.f_id and b.id  in(SELECT element_id from m_formula c where c.is_deleted=0) ";
+        //字段查询获取公式字段
+        String colKeys = "SELECT e_key from m_table_info a ,m_wbs_form_element b WHERE a.tab_en_name = '" + tabName + "' and a.id=b.f_id and b.id  in(SELECT element_id from m_element_formula_mapping c where c.is_deleted=0) ";
         List<Map<String, Object>> maps = jdbcTemplate.queryForList(colKeys);
-        for (Map<String, Object> keys : maps) {
-            String key = keys.get("e_key") + "__";
-            Elements gsColor = doc.select("el-input[keyname~=^" + key + "]");
-            for (Element element : gsColor) {
-                //System.out.println(element.parent());
-                element.parent().attr("gscolor", "11");
-            }
-            Elements dateColor = doc.select("el-date-picker[keyname~=^" + key + "]");
-            for (Element element : dateColor) {
-                //System.out.println(element.parent());
-                element.parent().attr("gscolor", "11");
+        if (maps.size() > 0) {
+            for (Map<String, Object> keys : maps) {
+                String key = keys.get("e_key") + "__";
+                Elements gsColor = doc.select("el-input[keyname~=^" + key + "]");
+                for (Element element : gsColor) {
+                    element.parent().attr("gscolor", "11");
+                }
+
+                Elements dateColor = doc.select("el-date-picker[keyname~=^" + key + "]");
+                for (Element element : dateColor) {
+                    element.parent().attr("gscolor", "11");
+                }
             }
         }
-
         doc.select("Col").remove();
         fileInputStream.close();
         return R.data(table + "");

+ 16 - 10
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

@@ -62,6 +62,7 @@ import org.springblade.system.user.service.IUserService;
 import org.springblade.system.user.util.AesInfoUtil;
 import org.springblade.system.user.vo.UserVO;
 import org.springblade.system.user.wrapper.UserWrapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -94,6 +95,7 @@ public class UserController {
     private final IUserService userService;
     private final BladeRedis bladeRedis;
     private final SaveUserInfoByProjectClient saveUserInfoByProjectClient;
+    private final JdbcTemplate jdbcTemplate;
 
     /**
      * 查询单条
@@ -447,7 +449,7 @@ public class UserController {
             }
             QueryWrapper<User> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq("account", tokenAccount);
-           // queryWrapper.eq("password", tokenPw);
+            // queryWrapper.eq("password", tokenPw);
             queryWrapper.eq("sys_type", 2);
             User userInfo = userService.getOne(queryWrapper);
             if (userInfo == null) {
@@ -455,7 +457,7 @@ public class UserController {
             }
             //获取用户list
             HttpClient httpClient = HttpClientBuilder.create().build();
-            HttpPost httpPost = new HttpPost("http://localhost:8090/blade-auth/oauth/token");
+            HttpPost httpPost = new HttpPost("http://172.31.222.127:8090/blade-auth/oauth/token");
             httpPost.setHeader("Authorization", "Basic Y2xpZW50OmNsaWVudF9zZWNyZXQ="); //这个需要 client:
             httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
             httpPost.setHeader("Tenant-Id", "000000");
@@ -491,7 +493,7 @@ public class UserController {
      * 定时同步白马项目用户信息
      */
     @Scheduled(cron = "0 0 4 * * ?")
-  //  @Scheduled(cron = "0 */5 * * * ?")
+    //@Scheduled(cron = "0 * * * * ?")
     public void syncProjectUserInfo() throws ParseException, IOException {
         JSONObject json = new JSONObject();
         json.put("fn", "all");
@@ -521,14 +523,14 @@ public class UserController {
                         String projectName = jsonObject.getString("projectName") + ""; //公司名称
                         String status = jsonObject.getString("status"); //状态(1:启用  2:冻结  3:删除)
                         User newUser = new User();
-                        if(projectName.indexOf("白马项目") >= 0
+                        if (projectName.contains("白马项目")
                                 || constructionCompany.equals("重庆白马航运发展有限公司")
                                 || constructionCompany.equals("中国水利水电第八工程局有限公司")
                                 || constructionCompany.equals("中国水利水电第四工程局中电建路桥集团联合体")
                                 || companyName.equals("重庆白马航运发展有限公司")
                                 || companyName.equals("中国水利水电第八工程局有限公司")
                                 || companyName.equals("中国水利水电第四工程局中电建路桥集团联合体")
-                        )  {
+                        ) {
                             User sysUser = userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getSysId, id).eq(User::getSysType, 2));
                             if (sysUser != null) {
                                 newUser = sysUser;
@@ -553,13 +555,17 @@ public class UserController {
                             newUser.setStatus(Integer.parseInt(status));
                             newUser.setIdNumber(idCard);
                             newUser.setCompanyName(companyName);
-                            newUser.setRoleId("1537249581371707394"); //角色施工-资料员id:1537249581371707394
-                            userService.saveOrUpdate(newUser);
-                            userService.submitUserDept(newUser);
 
-                            //绑定项目,设置默认角色信息 白马项目id:1612329251049537537;第二期合同段id:1612335077269143554;角色施工-资料员id:1537249581371707394
-                            saveUserInfoByProjectClient.saveInfoRelation(newUser.getId(), 1612329251049537537L, 1612335077269143554L, 1537249581371707394L);
+                            Long count = jdbcTemplate.queryForObject("select count(1) from m_project_assignment_user where user_id = " + newUser.getId() + " and  project_id = 1612329251049537537 and contract_id = 1612335077269143554 and post_id is null and status = 1 and is_deleted = 0", Long.class);
+                            if (count == null || count == 0L) {
+                                //绑定项目,设置默认角色信息 白马项目id:1612329251049537537;第二期合同段id:1612335077269143554;角色施工-资料员id:1537249581371707394
+                                saveUserInfoByProjectClient.saveInfoRelation(newUser.getId(), 1612329251049537537L, 1612335077269143554L, 1537249581371707394L);
+
+                                newUser.setRoleId("1537249581371707394"); //角色施工-资料员id:1537249581371707394
+                            }
 
+                            userService.saveOrUpdate(newUser);
+                            userService.submitUserDept(newUser);
                         }
                     }
                 }