Ver código fonte

分盒组卷节点和父节点没有组卷规则的情况

huangtf 1 ano atrás
pai
commit
e7649fee46

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

@@ -707,10 +707,15 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
         List<ArchiveTreeContract> authlist = authFilter(list, contractId, nodeId);
 
         //步骤三:遍历归档树节点整理出 默认规则节点,分类并卷节点,单独组卷节点 三个集合。
+		List<ArchiveTreeContract> list0 = new ArrayList<>();
         List<ArchiveTreeContract> list1 = new ArrayList<>();
 		List<ArchiveTreeContract> list2= new ArrayList<>();
 		List<ArchiveTreeContract> list3= new ArrayList<>();
 		for(ArchiveTreeContract treeContract:authlist){
+			if (treeContract.getArchiveAutoType() == null || treeContract.getArchiveAutoType() == -1) {
+				list0.add(treeContract);
+				continue;
+			}
 			Integer archiveAutoType = treeContract.getArchiveAutoType();
 			switch (archiveAutoType){
 				case 1:
@@ -728,21 +733,29 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 		//分盒文件集合
 		Map<String,List<ArchiveFile>> boxMap = new LinkedHashMap<>();
+		Map<Long,String> boxFileMap = new LinkedHashMap<>();
 
-		archiveAutoMethod3(list3,boxMap);//单独组卷
+		archiveAutoMethod3(list3,boxMap,boxFileMap);//单独组卷
 		//设置完成度30%
 		projectClient.updateIsArchivesAutoById(projectId,30);
-		archiveAutoMethod2(list2,projectId,boxMap);//分类组卷
+		archiveAutoMethod2(list2,projectId,boxMap,boxFileMap);//分类组卷
 		//设置完成度50%
 		projectClient.updateIsArchivesAutoById(projectId,50);
-		archiveAutoMethod1(list1,boxMap);//默认组卷
+		archiveAutoMethod1(list1,boxMap,boxFileMap);//默认组卷
+
+		//分盒组卷的且节点没配置组卷类型的
+		archiveAutoMethod0(list0,boxMap,boxFileMap);//默认组卷
 		//设置完成度70%
 		projectClient.updateIsArchivesAutoById(projectId,70);
 		archiveAutoMethodBox(boxMap);//分盒组卷
 	}
 
-	private void addBoxMap(ArchiveFile file,Map<String,List<ArchiveFile>> boxMap){
+	private void addBoxMap(ArchiveFile file,Map<String,List<ArchiveFile>> boxMap,Map<Long,String> boxFileMap){
 		String boxName = file.getBoxName();
+		if (boxFileMap.containsKey(file.getId())) {
+			return;
+		}
+
 		if(boxMap.containsKey(boxName)){
 			List<ArchiveFile> boxFiles = boxMap.get(boxName);
 			boxFiles.add(file);
@@ -752,6 +765,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 			boxFiles.add(file);
 			boxMap.put(boxName,boxFiles);
 		}
+		boxFileMap.put(file.getId(),"1");
 	}
 
 	@Override
@@ -1377,7 +1391,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 					//步骤5:判断文件是否存在分盒设置
 					if(file.getBoxNumber()!=null && file.getBoxNumber()!=-1){
 						//添加到分盒文件集合
-						addBoxMap(file,boxMap);
+						addBoxMap(file,boxMap,null);
 						if(archiveFilesSize==archiveFiles.size() && waitArchiveFiles.size()>0){
 							//最后一个文件直接将waitArchiveFiles组卷
 							createArchive3(waitArchiveFiles,node,archivesSize);
@@ -1451,7 +1465,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	 * @param list
 	 * @param boxMap
 	 */
-	private void archiveAutoMethod3(List<ArchiveTreeContract> list,Map<String,List<ArchiveFile>> boxMap){
+	private void archiveAutoMethod3(List<ArchiveTreeContract> list,Map<String,List<ArchiveFile>> boxMap,Map<Long,String> boxFileMap){
 		//步骤1:遍历节点集合
 		for(ArchiveTreeContract node:list){
 			//步骤2:查询节点下的未组卷文件
@@ -1466,7 +1480,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 					//步骤4:断文件是否存在分盒设置
 					if(file.getBoxNumber()!=null && file.getBoxNumber()!=-1){
 						//添加到分盒文件集合
-						addBoxMap(file,boxMap);
+						addBoxMap(file,boxMap,boxFileMap);
 					}else{
 						//单独组卷流程
 						Integer filePage = file.getFilePage();
@@ -1488,7 +1502,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	/**
 	 * 分类并卷组卷  设置分类的节点下只有一个案卷,节点下的所有文件都组成这个案卷。如果设置分类节点(select=1的)多个,案卷归属排序第一个节点。
 	 */
-	private void archiveAutoMethod2(List<ArchiveTreeContract> list,Long projectId,Map<String,List<ArchiveFile>> boxMap){
+	private void archiveAutoMethod2(List<ArchiveTreeContract> list,Long projectId,
+									Map<String,List<ArchiveFile>> boxMap,Map<Long,String> boxFileMap){
 
 		//分类并卷集合<groupId,List<文件>>
 		Map<Long,List<ArchiveFile>> archiveMap = new HashMap<>();
@@ -1507,7 +1522,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 					//步骤4:判断文件是否存在分盒设置
 					if(file.getBoxNumber()!=null && file.getBoxNumber()!=-1){
 						//添加到分盒文件集合
-						addBoxMap(file,boxMap);
+						addBoxMap(file,boxMap,boxFileMap);
 					}else{
 						//分类并卷流程
 						//步骤5:将文件按照<groupId,List<文件>>放入集合
@@ -1539,7 +1554,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	/**
 	 * 默认组卷流程 文件可以跨节点组卷,受最高并卷节点限制范围,跨节点文件组卷时,案卷规格按照第一个文件所在的节点规格 组卷。
 	 */
-	private void archiveAutoMethod1(List<ArchiveTreeContract> list,Map<String,List<ArchiveFile>> boxMap){
+	private void archiveAutoMethod1(List<ArchiveTreeContract> list,Map<String,List<ArchiveFile>> boxMap,
+									Map<Long,String> boxFileMap){
 		//最高并卷节点
 		Long archiveAutoNodeId=null;
 
@@ -1593,7 +1609,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 				//步骤3.4:判断文件是否存在分盒设置
 				if(file.getBoxNumber()!=null && file.getBoxNumber()!=-1) {
 					//添加到分盒文件集合
-					addBoxMap(file,boxMap);
+					addBoxMap(file,boxMap,boxFileMap);
 					if(nodeSize==list.size() && archiveFilesSize==archiveFiles.size()){
 						//如果当前是最后一个文件直接将waitArchiveFiles组卷
 						createArchive1(waitArchiveFiles,archivesSize);
@@ -1678,6 +1694,26 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 	}
 
+
+	/**
+	 * 默认组卷流程 文件可以跨节点组卷,受最高并卷节点限制范围,跨节点文件组卷时,案卷规格按照第一个文件所在的节点规格 组卷。
+	 */
+	private void archiveAutoMethod0(List<ArchiveTreeContract> list,Map<String,List<ArchiveFile>> boxMap,Map<Long,String> boxFileMap){
+
+		for(ArchiveTreeContract node:list){
+			//步骤3.2:查询出当前节点未组卷的文件
+			List<ArchiveFile> archiveFiles = archiveFileClient.getListByNodeID(node.getId().toString());
+			//步骤3.3:遍历未组卷文件
+			for(ArchiveFile file:archiveFiles) {
+				//步骤3.4:判断文件是否存在分盒设置
+				if (file.getBoxNumber() != null && file.getBoxNumber() != -1) {
+					//添加到分盒文件集合
+					addBoxMap(file, boxMap,boxFileMap);
+				}
+			}
+		}
+	}
+
 	/**
 	 * 分盒组卷流程
 	 * @param boxMap

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

@@ -47,6 +47,10 @@ public class ArchiveTreeContractImpl implements ArchiveTreeContractClient {
     @Override
     public List<ArchiveTreeContract> getHavedFileNodeByProjectID(Long projectId) {
         List<ArchiveTreeContract> list = archiveTreeContractMapper.getHavedFileNodeByProjectID(projectId);
+
+        List<ArchiveTreeContract> boxList = archiveTreeContractMapper.getHavedBoxFileNodeByProjectID(projectId);
+
+        list.addAll(boxList);
         return list;
     }
 

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

@@ -75,6 +75,8 @@ public interface ArchiveTreeContractMapper extends BaseMapper<ArchiveTreeContrac
 
     List<ArchiveTreeContract> getHavedFileNodeByProjectID(@Param("projectId") Long projectId);
 
+    List<ArchiveTreeContract> getHavedBoxFileNodeByProjectID(@Param("projectId") Long projectId);
+
     List<ArchiveTreeContract> getListByProjectId(@Param("projectId") Long projectId);
 
     List<ArchiveTreeContract> getStorageNodeByGroupId(@Param("projectId") Long projectId, @Param("archiveAutoGroupId") Long archiveAutoGroupId);

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

@@ -338,6 +338,33 @@
         )
         order by ancestors asc,tree_sort asc
     </select>
+
+    <select id="getHavedBoxFileNodeByProjectID" resultMap="archiveTreeContractResultMap">
+        SELECT
+            *
+        FROM
+            m_archive_tree_contract
+        WHERE
+            1 = 1
+          AND project_id = #{projectId}
+          AND is_deleted = 0
+          AND id IN (
+            SELECT
+                node_id
+            FROM
+                u_archive_file
+            WHERE
+                1 = 1
+              AND project_id = #{projectId}
+              AND is_deleted = 0
+              AND ( is_archive = 0 OR is_archive IS NULL )
+              AND node_id IS NOT NULL
+              AND box_number IS NOT NULL
+        )
+        order by ancestors asc,tree_sort asc
+    </select>
+
+
     <select id="getListByProjectId" resultType="org.springblade.manager.entity.ArchiveTreeContract">
         select id,project_id as projectId,contract_id as contractId,parent_id as parentId,ancestors,node_name as nodeName,status,tree_code as treeCode, ext_type as extType,
                is_deleted as isDeleted,create_time as createTime, file_number_prefix as fileNumberPrefix