소스 검색

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

lvy 5 일 전
부모
커밋
796f7b83e7

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

@@ -3693,9 +3693,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));

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

@@ -29,8 +29,11 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.feign.WbsTreeContractClient;
 import org.springblade.system.user.vo.UserVO2;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.business.entity.RecycleBin;
@@ -66,6 +69,7 @@ public class RecycleBinController extends BladeController {
     private final WbsTreeContractStatisticsClientImpl wbsTreeContractStatisticsClient;
     private final IRecycleBinInfoService recycleBinInfoService;
     private final BladeRedis bladeRedis;
+    private final JdbcTemplate jdbcTemplate;
 
     /**
      * 恢复
@@ -201,18 +205,41 @@ 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.getBusinessId();
+                        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);
+                    List<WbsTreeContract> query = jdbcTemplate.query("SELECT p_key_id  FROM m_wbs_tree_contract a WHERE  ( SELECT count(1) FROM m_wbs_tree_contract WHERE contract_id = a.contract_id and type = 1 AND p_id = a.p_id AND full_name = a.full_name AND p_key_id != a.p_key_id AND is_deleted = 0 ) > 0 " +
+                            "AND is_deleted = 0 and a.p_key_id in ( " + String.join(",", processNodeList) + ")", new BeanPropertyRowMapper<>(WbsTreeContract.class));
+                    if (!query.isEmpty()) {
+                        String collect1 = query.stream().map(item -> item.getPKeyId() + "").collect(Collectors.joining(","));
+                        jdbcTemplate.execute("update m_wbs_tree_contract set full_name = CONCAT( full_name, '(恢)' ) where p_key_id in (" + collect1 + ")");
+                    }
                 } catch (Exception e) {
                     e.printStackTrace();
                 }

+ 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.setBusinessId(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.setBusinessId(contract.getAncestorsPId());
                     if (recycleBin.getIsDeleted() == 1) {
                         info.setStatus(1);
                         info.setUpdateUser(recycleBin.getUpdateUser());

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

@@ -150,18 +150,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
     @Override
     public Boolean regainRemoveTreeByPrimaryKeyIds(List<String> primaryKeyIds) {
-        // 恢复时如果底层节点名称相同就加上 `(恢)`
-        Boolean bool = this.baseMapper.regainRemoveTreeByPrimaryKeyIds(primaryKeyIds);
-        List<WbsTreeContract> list = this.list(Wrappers.<WbsTreeContract>lambdaQuery().in(WbsTreeContract::getPKeyId, primaryKeyIds));
-        if (list != null && !list.isEmpty()) {
-            list.forEach(item -> {
-                String nodeName = item.getNodeName();
-                if (nodeName.contains("(恢复)")) {
-                    item.setNodeName(nodeName.replace("(恢复)", ""));
-                }
-            });
-        }
-        return bool;
+        return this.baseMapper.regainRemoveTreeByPrimaryKeyIds(primaryKeyIds);
     }
 
     @Override