فهرست منبع

回收站删除位置优化,恢复优化

lvy 5 روز پیش
والد
کامیت
4753cdb6c8

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

@@ -3695,9 +3695,9 @@ public R removeContractTreeNodeJudge(@RequestParam String ids) {
 
             //保存进回收站
             this.recycleBinService.save(new RecycleBin(String.join(",", idArray), "工程划分批量删除", 2, positionStr, projectId, contractId));
-            this.recycleBinInfoService.saveRecycleBinInfoByWbsTreeContract(String.join(",", idArray),ids);
             //改为物理删除 (8.28改为逻辑删除,方便恢复)
             this.wbsTreeContractClient.removeContractTreeNode(idArray);
+            this.recycleBinInfoService.saveRecycleBinInfoByWbsTreeContract(String.join(",", idArray),ids);
             //更新redis
             this.informationQueryService.delAsyncWbsTree(removeWbsTreeContracts.get(0).getContractId());
             this.wbsTreeContractStatisticsClient.delWbsTreeContractNodes(String.join(",", idArray));

+ 20 - 3
blade-service/blade-business/src/main/java/org/springblade/business/controller/RecycleBinController.java

@@ -218,16 +218,33 @@ public class RecycleBinController extends BladeController {
                 return R.data(true);
             }
             List<RecycleBinInfo> recycleBinInfoList = this.recycleBinInfoService.list(Wrappers.<RecycleBinInfo>lambdaQuery().in(RecycleBinInfo::getId, collect).eq(RecycleBinInfo::getStatus, 0).eq(RecycleBinInfo::getDelType, 2));
-            if (collect.size() == 1 && dto.getRecoverOperationData() == 1) {
-                List<RecycleBinInfo> list = this.recycleBinInfoService.list(Wrappers.<RecycleBinInfo>lambdaQuery().eq(RecycleBinInfo::getOperationId, recycleBinInfoList.get(0).getOperationId())
+            if (dto.getRecoverOperationData() == 1) {
+                Set<Long> set = recycleBinInfoList.stream().map(RecycleBinInfo::getDelRootId).collect(Collectors.toSet());
+                recycleBinInfoList = this.recycleBinInfoService.list(Wrappers.<RecycleBinInfo>lambdaQuery().in(RecycleBinInfo::getDelRootId, set)
                                 .eq(RecycleBinInfo::getDelType, 2).eq(RecycleBinInfo::getStatus, 0));
-                recycleBinInfoList.addAll(list);
             }
             boolean regainNode = false;
             if (!recycleBinInfoList.isEmpty()) {
                 List<String> processNodeList = new ArrayList<>();
                 try {
                     //恢复数据
+                    Set<Long> parentIds = new HashSet<>();
+                    for (RecycleBinInfo info : recycleBinInfoList) {
+                        String position = info.getPosition();
+                        if (position ==  null) {
+                            continue;
+                        }
+                        String[] split = position.split(",");
+                        for (String s : split) {
+                            if (StringUtil.isNumeric(s) && !s.equals("0")) {
+                                parentIds.add(Long.parseLong(s));
+                            }
+                        }
+                    }
+                    if (!parentIds.isEmpty()) {
+                        List<RecycleBinInfo> list = this.recycleBinInfoService.list(Wrappers.<RecycleBinInfo>lambdaQuery().in(RecycleBinInfo::getDelId, parentIds).eq(RecycleBinInfo::getDelType, 2).eq(RecycleBinInfo::getStatus, 0));
+                        recycleBinInfoList.addAll(list);
+                    }
                     processNodeList = recycleBinInfoList.stream().map(item -> item.getDelId() + "").collect(Collectors.toList());
                     regainNode = this.wbsTreeContractClient.regainRemoveTreeByPrimaryKeyIds(processNodeList);
                 } catch (Exception e) {

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/mapper/RecycleBinInfoMapper.java

@@ -13,5 +13,5 @@ public interface RecycleBinInfoMapper extends BaseMapper<RecycleBinInfo> {
 
     IPage<RecycleBinInfo> page(IPage<RecycleBinInfo> iPage, @Param("vo") RecycleBinInfoVO recycleBinInfoVO);
 
-    Collection<RecycleBinInfo> queryOperation(String ids);
+    Collection<RecycleBinInfo> queryOperation(Collection<Long> ids);
 }

+ 5 - 1
blade-service/blade-business/src/main/java/org/springblade/business/mapper/RecycleBinInfoMapper.xml

@@ -86,6 +86,10 @@
         </if>
     </select>
     <select id="queryOperation" resultType="org.springblade.business.entity.RecycleBinInfo">
-        select operation_id,del_root_name from u_recycle_bin_info where operation_id in ( select operation_id from u_recycle_bin_info where id in ( #{ids} ) and is_deleted = 0 group by operation_id )  group by operation_id, del_root_name having count(1) > 1
+        select del_root_id,del_root_name from u_recycle_bin_info where del_root_id in ( select del_root_id from u_recycle_bin_info where id in (
+            <foreach collection="ids" item="id" separator=",">
+                #{id}
+            </foreach>
+            ) and is_deleted = 0 group by del_root_id )  group by del_root_id, del_root_name having count(1) > 1
     </select>
 </mapper>

+ 27 - 18
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/RecycleBinInfoServiceImpl.java

@@ -116,13 +116,11 @@ public class RecycleBinInfoServiceImpl extends BaseServiceImpl<RecycleBinInfoMap
             return new ArrayList<>();
         }
         String[] split = ids.split(",");
-        ids = Arrays.stream(split).filter(StringUtil::isNumeric).collect(Collectors.joining(","));
-        if (ids.isEmpty()) {
+        Set<Long> set = Arrays.stream(split).filter(StringUtil::isNumeric).map(Long::parseLong).collect(Collectors.toSet());
+        if (set.isEmpty()) {
             return new ArrayList<>();
         }
-
-//        return this.list(Wrappers.<RecycleBinInfo>lambdaQuery().eq(RecycleBinInfo::getOperationId, info.getOperationId()).eq(RecycleBinInfo::getDelType, info.getDelType()).eq(RecycleBinInfo::getStatus, info.getStatus()));
-        return this.baseMapper.queryOperation(ids);
+        return this.baseMapper.queryOperation(set);
     }
 
     @Override
@@ -130,22 +128,31 @@ public class RecycleBinInfoServiceImpl extends BaseServiceImpl<RecycleBinInfoMap
         if (ids == null || ids.isEmpty()) {
             return true;
         }
-        List<WbsTreeContract> query = jdbcTemplate.query("select * from m_wbs_tree_contract where p_key_id in ( " + ids + ") and is_deleted = 0 and type = 1", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+        List<WbsTreeContract> query = jdbcTemplate.query("select * from m_wbs_tree_contract where p_key_id in ( " + ids + ") and is_deleted = 1 and type = 1", new BeanPropertyRowMapper<>(WbsTreeContract.class));
         if (query.isEmpty()) {
             return true;
         }
-        List<WbsTreeContract> rootContracts = new ArrayList<>();
+
         List<String> parentIds = new ArrayList<>();
-        for (WbsTreeContract contract : query) {
-            if (rootIds.contains(contract.getPKeyId() + "")) {
-                rootContracts.add(contract);
-            }
-            String ancestorsPId = contract.getAncestorsPId();
-            if (StringUtil.hasText(ancestorsPId)) {
-                String[] split = ancestorsPId.split(",");
-                for (String s : split) {
-                    if (StringUtil.isNumeric(s)) {
-                        parentIds.add(s);
+        Map<Long, WbsTreeContract> rootMap = new HashMap<>();
+        {
+            Map<Long, WbsTreeContract> tempMap = query.stream().collect(Collectors.toMap(WbsTreeContract::getPKeyId, item -> item));
+            for (WbsTreeContract contract : query) {
+                String ancestorsPId = contract.getAncestorsPId();
+                if (StringUtil.hasText(ancestorsPId)) {
+                    String[] split = ancestorsPId.split(",");
+                    WbsTreeContract root = null;
+                    for (String s : split) {
+                        if (StringUtil.isNumeric(s)) {
+                            parentIds.add(s);
+                            WbsTreeContract wbsTreeContract = tempMap.get(Long.parseLong(s));
+                            if (root == null && wbsTreeContract != null) {
+                                root = wbsTreeContract;
+                            }
+                        }
+                    }
+                    if (root != null) {
+                        rootMap.put(contract.getPKeyId(), root);
                     }
                 }
             }
@@ -156,7 +163,7 @@ public class RecycleBinInfoServiceImpl extends BaseServiceImpl<RecycleBinInfoMap
         } else {
             parentContracts = new ArrayList<>();
         }
-        Map<Long, WbsTreeContract> rootMap = rootContracts.stream().collect(Collectors.toMap(WbsTreeContract::getPKeyId, item -> item));
+
         Map<Long, WbsTreeContract> parentMap = parentContracts.stream().collect(Collectors.toMap(WbsTreeContract::getPKeyId, item -> item));
         String contractId = query.get(0).getContractId();
         List<InformationQuery> queries = informationQueryService.list(Wrappers.<InformationQuery>lambdaQuery().select(InformationQuery::getWbsId, InformationQuery::getClassify, InformationQuery::getName)
@@ -182,6 +189,7 @@ public class RecycleBinInfoServiceImpl extends BaseServiceImpl<RecycleBinInfoMap
             info.setCreateUser(AuthUtil.getUserId());
             info.setOperationTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
             info.setDelId(contract.getPKeyId());
+            info.setPosition(contract.getAncestorsPId());
 
             WbsTreeContract delRoot = rootMap.get(contract.getPKeyId());
             if (delRoot != null) {
@@ -335,6 +343,7 @@ public class RecycleBinInfoServiceImpl extends BaseServiceImpl<RecycleBinInfoMap
                     info.setCreateTime(recycleBin.getCreateTime());
                     info.setOperationTime(recycleBin.getOperationTime());
                     info.setDelId(contract.getPKeyId());
+                    info.setPosition(contract.getAncestorsPId());
                     if (recycleBin.getIsDeleted() == 1) {
                         info.setStatus(1);
                         info.setUpdateUser(recycleBin.getUpdateUser());