Browse Source

跨节点移动

cr 1 month ago
parent
commit
f2c1aa440f

+ 11 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/MoveNodeDTO.java

@@ -0,0 +1,11 @@
+package org.springblade.manager.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MoveNodeDTO {
+    private List<Long> leftPkeyIds;
+    private Long rightPkeyId;
+}

+ 13 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -38,6 +38,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.IoUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.ResourceUtil;
+import org.springblade.manager.dto.MoveNodeDTO;
 import org.springblade.manager.dto.TableSortDTO;
 import org.springblade.manager.dto.WbsTreeContractDTO2;
 import org.springblade.manager.entity.*;
@@ -868,7 +869,19 @@ public class WbsTreeContractController extends BladeController {
         return iWbsTreeContractService.exportTree(contractId,response);
     }
 
+    @GetMapping("/getSiblingWbsContract")
+    @ApiOperation(value = "获取同一层级的所有节点节点")
+    @ApiOperationSupport(order = 32)
+    public R <List<WbsTreeContract>> getSiblingWbsContract(@RequestParam Long pKeyId){
+        return iWbsTreeContractService.getSiblingWbsContract(pKeyId);
+    }
 
+    @PostMapping("/moveNode")
+    @ApiOperation(value = "跨节点移动")
+    @ApiOperationSupport(order = 33)
+    public R moveNode (@RequestBody MoveNodeDTO dto){
+        return iWbsTreeContractService.moveNode(dto);
+    }
 
 
 

+ 6 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java

@@ -176,6 +176,11 @@ public interface WbsTreeContractMapper extends EasyBaseMapper<WbsTreeContract> {
 
     void updatePartitionCodeByPKyId(@Param("wbsTreeContract") WbsTreeContract wbsTreeContract);
 
-    Integer findIsExistTreeNode(List<String> ids);
+    List<WbsTreeContract> getSiblingWbsContract(@Param("pKeyId") Long pKeyId);
 
+    List<WbsTreeContract> getWbsTreeContractsByPKeyIds(@Param("pKeyIds") List<Long> pKeyIds);
+
+    List<WbsTreeContract> getChildWbsTreeContracts(@Param("pKeyId") Long pKeyId);
+
+    void updateAncestorsPid(@Param("ancestorsPid") String ancestorsPid, @Param("ancestors") String ancestors,@Param("pKeyId")Long pKeyId);
 }

+ 25 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -843,6 +843,11 @@
             WHERE p_key_id = #{wbsTreeContract.pKeyId}
         </if>
     </update>
+    <update id="updateAncestorsPid">
+        UPDATE m_wbs_tree_contract
+        SET ancestors_p_id = #{ancestorsPid},ancestors = #{ancestors}
+        WHERE p_key_id = #{pKeyId}
+    </update>
 
     <select id="selectQueryValueLikeNodeName" resultMap="ResultMap">
         select *
@@ -980,6 +985,15 @@
           AND wtc.wbs_id = #{wbsId}
           AND wtc.is_deleted = 0;
     </select>
+    <select id="findIsExistTreeNode" resultType="java.lang.Integer">
+        SELECT count(0) FROM `m_wbs_tree_contract` a
+        left join m_wbs_tree_private b on a.is_type_private_pid = b.p_key_id
+        where a.p_key_id in
+          <foreach collection="list" item="item" open="(" close=")" separator=",">
+              #{item}
+          </foreach>
+        and (b.p_key_id is null or b.is_deleted = 1)
+    </select>
     <select id="selectListForcheckAllNodeDate" resultType="org.springblade.manager.entity.WbsTreeContract">
         select * from m_wbs_tree_contract where
        <if test="projectId!=null and projectId!=''">
@@ -1039,14 +1053,18 @@
           </foreach>
 
     </select>
-    <select id="findIsExistTreeNode" resultType="java.lang.Integer">
-        SELECT count(0) FROM `m_wbs_tree_contract` a
-        left join m_wbs_tree_private b on a.is_type_private_pid = b.p_key_id
-        where a.p_key_id in
-        <foreach collection="list" item="item" open="(" close=")" separator=",">
-            #{item}
+    <select id="getSiblingWbsContract" resultType="org.springblade.manager.entity.WbsTreeContract">
+        select * from m_wbs_tree_contract where p_id= (select p_id from m_wbs_tree_contract where p_key_id=#{pKeyId}) and is_deleted=0;
+    </select>
+    <select id="getWbsTreeContractsByPKeyIds" resultType="org.springblade.manager.entity.WbsTreeContract">
+        select * from m_wbs_tree_contract where p_key_id in (
+        <foreach collection="list" item="pkeyId" separator=",">
+            #{pkeyId}
         </foreach>
-        and (b.p_key_id is null or b.is_deleted = 1)
+        ) and is_deleted=0
+    </select>
+    <select id="getChildWbsTreeContracts" resultType="org.springblade.manager.entity.WbsTreeContract">
+        select * from m_wbs_tree_contract where ancestors_p_id like #{pId}  and is_deleted=0
     </select>
 
 </mapper>

+ 7 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeContractService.java

@@ -95,9 +95,12 @@ public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
 
     boolean checkNodeAllDate(WbsTreeContract contract);
 
-    List<APIWbsContractSubdivisionVo> getWbsContractSubdivision(String contractId);
+    Integer findIsExistTreeNode(List<String> ids);
 
     List<WbsTreeContract> queryListByPIds(List<Long> pIds);
+
+    List<APIWbsContractSubdivisionVo> getWbsContractSubdivision(String contractId);
+
     ResponseEntity<Resource> exportTree(Long contractId, HttpServletResponse response) throws IOException, InvalidFormatException;
 
     R importPartitionCode(MultipartFile file);
@@ -106,5 +109,7 @@ public interface IWbsTreeContractService extends BaseService<WbsTreeContract> {
 
     R getImportProgress(Long projectId, Long contractId);
 
-    Integer findIsExistTreeNode(List<String> ids);
+    R<List<WbsTreeContract>> getSiblingWbsContract(Long pKeyId);
+
+    R moveNode(MoveNodeDTO dto);
 }

+ 31 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -4679,9 +4679,38 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         }
     }
 
+
+
+    @Override
+    public R<List<WbsTreeContract>> getSiblingWbsContract(Long pKeyId) {
+        return  R.data(wbsTreeContractMapper.getSiblingWbsContract(pKeyId));
+    }
+
     @Override
-    public Integer findIsExistTreeNode(List<String> ids) {
-        return baseMapper.findIsExistTreeNode(ids);
+    public R moveNode(MoveNodeDTO dto) {
+      List<WbsTreeContract> list= wbsTreeContractMapper.getWbsTreeContractsByPKeyIds(dto.getLeftPkeyIds());
+        WbsTreeContract fatherContract = this.getById(dto.getRightPkeyId());
+        for (WbsTreeContract contract : list) {
+            String oldancestorsPId = contract.getAncestorsPId();
+            String oldancestors = contract.getAncestors();
+            contract.setPId(fatherContract.getPKeyId());
+            contract.setParentId(fatherContract.getId());
+            contract.setAncestorsPId(fatherContract.getAncestorsPId()+","+contract.getPId());
+            contract.setAncestors(fatherContract.getAncestors());
+            //查出当前节点所有子节点。
+            List<WbsTreeContract> childContracts = wbsTreeContractMapper.getChildWbsTreeContracts(contract.getPKeyId());
+            if(!childContracts.isEmpty()){
+                for (WbsTreeContract childContract : childContracts) {
+                    String ancestorsPid =  childContract.getAncestorsPId();
+                    ancestorsPid=ancestorsPid.replace(oldancestorsPId,contract.getAncestorsPId());
+                    String ancestors = childContract.getAncestors();
+                    ancestors=ancestors.replace(oldancestors,contract.getAncestors());
+                    wbsTreeContractMapper.updateAncestorsPid(ancestorsPid,ancestors,childContract.getPKeyId());
+                }
+            }
+        }
+        this.updateBatchById(list);
+        return R.success("操作成功");
     }
 
     /**