Browse Source

质检-新增节点获取项目全加载树,隐藏项目配置节点

qianxb 7 months ago
parent
commit
9dd87f2917

+ 60 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/PrivateTreeVO2.java

@@ -0,0 +1,60 @@
+package org.springblade.manager.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.core.tool.node.INode;
+import org.springblade.meter.vo.MeterFullTreeVO;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2024/8/2 16:03
+ **/
+@Data
+public class PrivateTreeVO2 implements INode<PrivateTreeVO2> {
+
+    /**
+     * 主键ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 父节点ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+
+    /**
+     * 子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<PrivateTreeVO2> children;
+
+    /**
+     * 是否有子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private Boolean hasChildren;
+
+    @Override
+    public List<PrivateTreeVO2> getChildren() {
+        if (this.children == null) {
+            this.children = new ArrayList<>();
+        }
+        return this.children;
+    }
+    @ApiModelProperty(value = "节点名称")
+    private String nodeName;
+    @JsonProperty(value = "pKeyId")
+    private Long pKeyId;
+    private Long aaa;
+
+}

+ 19 - 8
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/WbsTreeController.java

@@ -15,6 +15,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.vo.PrivateTreeVO;
+import org.springblade.manager.vo.PrivateTreeVO2;
 import org.springblade.manager.vo.WbsTreeContractLazyVO;
 import org.springblade.system.user.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -128,18 +129,28 @@ public class WbsTreeController extends BladeController {
         return R.data(iUserService.queryContractWbsTreeByFirstInfo(parentId, contractId, contractIdRelation));
     }
 
-    /**
-     * 项目全加载树
-     *
-     * @author liuyc
-     * @date 2024年1月30日09:56:37
-     */
+//    /**
+//     * 项目全加载树
+//     *
+//     * @author liuyc
+//     * @date 2024年1月30日09:56:37
+//     */
+//    @GetMapping("/private/tree")
+//    @ApiOperationSupport(order = 4)
+//    @ApiOperation(value = "项目全加载树", notes = "传入当前项目id")
+//    public R<List<PrivateTreeVO>> treePrivate(@RequestParam String projectId) {
+//        if (ObjectUtil.isNotEmpty(projectId)) {
+//            return R.data(iUserService.treePrivate(projectId));
+//        }
+//        return R.data(null);
+//    }
+
     @GetMapping("/private/tree")
     @ApiOperationSupport(order = 4)
     @ApiOperation(value = "项目全加载树", notes = "传入当前项目id")
-    public R<List<PrivateTreeVO>> treePrivate(@RequestParam String projectId) {
+    public R<List<PrivateTreeVO2>> treePrivate2(@RequestParam String projectId) {
         if (ObjectUtil.isNotEmpty(projectId)) {
-            return R.data(iUserService.treePrivate(projectId));
+            return R.data(iUserService.treePrivate2(projectId));
         }
         return R.data(null);
     }

+ 2 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.java

@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.business.entity.InformationQuery;
 import org.springblade.business.vo.InformationQueryVO;
+import org.springblade.manager.vo.PrivateTreeVO2;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.excel.UserExcel;
 import org.springblade.system.user.vo.UserContractInfoVO;
@@ -74,4 +75,5 @@ public interface UserMapper extends BaseMapper<User> {
 
     List<InformationQuery> selectInformationQueryPageTwo(@Param("query") InformationQueryVO vo);
 
+    List<PrivateTreeVO2> getAllNode(@Param("projectId") String projectId);
 }

+ 8 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml

@@ -222,5 +222,13 @@
             </if>
 
     </select>
+    <select id="getAllNode" resultType="org.springblade.manager.vo.PrivateTreeVO2">
+        SELECT p_key_id as pKeyId,id,parent_id,node_name
+        FROM m_wbs_tree_private
+        where project_id = #{projectId}
+        AND wbs_type = 1 AND type = 1 AND status = 1 AND is_deleted = 0
+          and is_add_conceal = 0 AND node_type != 111
+        ORDER BY sort
+    </select>
 
 </mapper>

+ 2 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java

@@ -8,6 +8,7 @@ import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.vo.PrivateTreeVO;
+import org.springblade.manager.vo.PrivateTreeVO2;
 import org.springblade.manager.vo.WbsTreeContractLazyVO;
 import org.springblade.system.user.dto.UserDTO;
 import org.springblade.system.user.entity.User;
@@ -238,4 +239,5 @@ public interface IUserService extends BaseService<User> {
 
     List<PrivateTreeVO> treePrivate(String projectId);
 
+    List<PrivateTreeVO2> treePrivate2(String projectId);
 }

+ 16 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -39,8 +39,10 @@ import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.entity.*;
 import org.springblade.manager.feign.ContractClient;
 import org.springblade.manager.vo.PrivateTreeVO;
+import org.springblade.manager.vo.PrivateTreeVO2;
 import org.springblade.manager.vo.WbsTreeContractLazyQueryInfoVO;
 import org.springblade.manager.vo.WbsTreeContractLazyVO;
+import org.springblade.meter.vo.MeterFullTreeVO;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.cache.DictCache;
 import org.springblade.system.cache.ParamCache;
@@ -60,6 +62,7 @@ import org.springblade.system.user.service.IUserDeptService;
 import org.springblade.system.user.service.IUserOauthService;
 import org.springblade.system.user.service.IUserService;
 import org.springblade.system.user.util.FileUtils;
+import org.springblade.system.user.util.ForestNodeMerger;
 import org.springblade.system.user.vo.UserVO;
 import org.springblade.system.user.wrapper.UserWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -1146,6 +1149,19 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
         return buildTree(wbsTreePrivatesNodes, projectId);
     }
 
+    @Override
+    public List<PrivateTreeVO2> treePrivate2(String projectId) {
+        //查询出所有节点
+        List<PrivateTreeVO2> vos = baseMapper.getAllNode(projectId);
+        //转换为树
+        List<PrivateTreeVO2> list = ForestNodeMerger.merge(vos);
+        if (list.size() != 1){
+            throw new ServiceException("当前项目级节点修改中,请联系管理员");
+        }
+        list.get(0).setNodeName( jdbcTemplate.queryForObject("SELECT project_name FROM m_project_info WHERE is_deleted = 0 and id = " + projectId, String.class));
+        return list;
+    }
+
     private List<PrivateTreeVO> buildTree(List<WbsTreePrivate> wbsTreePrivatesNodes, String projectId) {
         List<PrivateTreeVO> privateTreeVOS = BeanUtil.copyProperties(wbsTreePrivatesNodes, PrivateTreeVO.class);
         if (!privateTreeVOS.isEmpty()) {

+ 60 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/util/ForestNodeMerger.java

@@ -0,0 +1,60 @@
+package org.springblade.system.user.util;
+
+import org.springblade.common.utils.INodeEx;
+import org.springblade.core.tool.node.ForestNodeManager;
+import org.springblade.core.tool.node.INode;
+
+import java.util.List;
+
+/**
+ *  树工具
+ */
+public class ForestNodeMerger {
+    public static <T extends INode<T>> List<T> merge(List<T> items) {
+        ForestNodeManager<T> forestNodeManager = new ForestNodeManager(items);
+        items.forEach((forestNode) -> {
+            if (forestNode.getParentId() != null && forestNode.getParentId() != 0L) {
+                INode<T> node = forestNodeManager.getTreeNodeAt(forestNode.getParentId());
+                if (node != null) {
+                    node.getChildren().add(forestNode);
+                } else {
+                    forestNodeManager.addParentId(forestNode.getId());
+                }
+            }
+
+        });
+        return forestNodeManager.getRoot();
+    }
+
+    public static <T extends INode<T>> void getTreeList(T tree, List<T> nodes) {
+        if (tree == null) {
+            return;
+        }
+
+        nodes.add(tree);
+
+        List<T> childrens = tree.getChildren();
+        if (childrens != null) {
+            for (T child : childrens) {
+                getTreeList(child, nodes);
+            }
+        }
+    }
+
+    public static <T extends INodeEx<T>> void getTreeListEx(T tree, List<T> nodes) {
+        if (tree == null) {
+            return;
+        }
+
+        nodes.add(tree);
+
+        List<T> childrens = tree.getChildren();
+        if (childrens != null) {
+            for (T child : childrens) {
+                getTreeListEx(child, nodes);
+            }
+        }
+    }
+
+
+}