Parcourir la source

档案优化节点删除异步删除子节点

cr il y a 4 jours
Parent
commit
b464afdbbf

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

@@ -258,8 +258,18 @@ public class ArchiveTreeContractController extends BladeController {
 //		});
 //
 //		return R.status(archiveTreeContractService.deleteLogic(Func.toLongList(id)));
-
-        return R.status(archiveTreeContractService.deleteTree(Long.parseLong(id)));
+        // 1. 查询节点基础信息(获取projectId)
+        ArchiveTreeContract dstNode = archiveTreeContractService.getById(id);
+        if (dstNode == null) {
+            return R.fail(200, "未查询到对应节点信息");
+        }else {
+            boolean b = archiveTreeContractService.removeById(id);
+            if(b){
+                //异步批量更新所有子节点为逻辑删除
+                archiveTreeContractService.deleteByAncestors(Long.parseLong(id), dstNode.getProjectId());
+            }
+            return R.status(b);
+        }
     }
 
 

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

@@ -22,14 +22,12 @@ import org.apache.ibatis.annotations.Param;
 import org.springblade.archive.dto.JiLinQueryDto;
 import org.springblade.archive.entity.ArchiveExpertConclusion;
 import org.springblade.business.entity.ArchiveFile;
-import org.springblade.business.entity.InformationQuery;
 import org.springblade.business.entity.TrialDetectionData;
 import org.springblade.business.entity.TrialSelfInspectionRecord;
 import org.springblade.business.vo.TrialSelfInspectionRecordFileVO;
 import org.springblade.manager.dto.ArchiveTreeContractDTO;
 import org.springblade.manager.entity.ArchiveTreeContract;
 import org.springblade.manager.entity.TrialClassificationConfiguration;
-import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.vo.*;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -192,5 +190,9 @@ public interface ArchiveTreeContractMapper extends BaseMapper<ArchiveTreeContrac
     Integer selectExtTypeByParentId(@Param("projectId")Long projectId,
                                     @Param("parentId") Long parentId);
 
-    List<ArchiveTreeContract> getArchiveTreeContractListByListOrderByTreeSort(@RequestBody List<Long> nodeIds);
+    List<ArchiveTreeContract> getArchiveTreeContractListByListOrderByTreeSort(@Param("nodeIds") List<Long> nodeIds);
+
+    Integer checkNodeExists(@Param("parentId") Long parentId, @Param("projectId") Long projectId, @Param("tenantId") String tenantId);
+
+    void deleteByAncestors(@Param("parentId") Long parentId, @Param("projectId") Long projectId);
 }

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

@@ -945,6 +945,15 @@
         </set>
         where is_deleted = 0 and project_id = #{node.projectId} and FIND_IN_SET(#{node.id},ancestors) > 0
     </update>
+    <update id="deleteByAncestors">
+        UPDATE m_archive_tree_contract
+        SET is_deleted = 1
+        WHERE is_deleted = 0
+          AND project_id = #{projectId}
+          AND (
+          CONCAT(',', ancestors, ',') LIKE CONCAT('%,', #{parentId}, ',%')
+            )
+    </update>
 
     <resultMap id="getArchiveTreeContractDtoMap" type="org.springblade.manager.dto.ArchiveTreeContractDTO">
         <id column="id" property="id"/>
@@ -1041,4 +1050,15 @@
         </foreach>
         ORDER BY case when d.tree_sort regexp '^[a-zA-Z]' then 0 when d.tree_sort regexp '^[0-9]' then 1 else 2 end, d.tree_sort
     </select>
+    <!-- 校验节点是否存在(可选,优化性能) -->
+    <select id="checkNodeExists" resultType="java.lang.Integer">
+        SELECT COUNT(1)
+        FROM m_archive_tree_contract
+        WHERE id = #{parentId}
+        AND is_deleted = 0
+        AND project_id = #{projectId}
+        <if test="tenantId != null and tenantId != ''">
+            AND tenant_id = #{tenantId}
+        </if>
+    </select>
 </mapper>

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

@@ -97,7 +97,7 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
 
     boolean UpdateByArchiveTree(ArchiveTree archiveTree);
 
-    boolean deleteTree(Long id);
+    Boolean deleteTree(Long id);
 
     void fillDefaultArchiveAutoInfo(List<ArchiveTreeContractVO2> tree, Long projectId,Long contractId);
 
@@ -149,4 +149,6 @@ public interface IArchiveTreeContractService extends BaseService<ArchiveTreeCont
     boolean deleteTreeEx(Long id);
 
     List<ArchiveTreeContract> getArchiveTreeContractListByListOrderByTreeSort(List<Long> nodeIds);
+
+    void deleteByAncestors(Long id, Long projectId);
 }

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

@@ -48,6 +48,7 @@ import org.springblade.manager.vo.*;
 import org.springblade.manager.mapper.ArchiveTreeContractMapper;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
@@ -752,26 +753,21 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 	 * @param id
 	 * @return
 	 */
-	public  boolean deleteTree(Long id) {
+	public Boolean deleteTree(Long id) {
 		ArchiveTreeContract dstNode = this.getById(id);
 		if (dstNode == null ) {
 			return false;
 		}
-
 		List<ArchiveTreeContractVO2> dstTrees = this.tree2Root(AuthUtil.getTenantId(),null,null,dstNode.getProjectId(),null);
 		if (dstTrees == null || dstTrees.size() == 0) {
 			return false;
 		}
-
 		ArchiveTreeContractVO2 subTree = ForestNodeMergerEx.getSubTree(dstTrees.get(0),id);
-
 		List<Long> ids = ForestNodeMergerEx.getChildrenIds(subTree);
-
 		ids.add(id);
 		this.deleteLogic(ids);
 		return true;
 	}
-
 	/**
 	 * 更轻量的删除节点树,同时删除节点下的案卷和文件
 	 * @param id
@@ -805,6 +801,12 @@ public class ArchiveTreeContractServiceImpl extends BaseServiceImpl<ArchiveTreeC
 		return baseMapper.getArchiveTreeContractListByListOrderByTreeSort(nodeIds);
 	}
 
+	@Override
+	@Async
+	public void deleteByAncestors(Long id, Long projectId) {
+		baseMapper.deleteByAncestors(id, projectId);
+	}
+
 
 	/**
 	 * 批量更新