递归解决逐级保存问题

问题描述:

批量新增, 保存传入List<VO>中只有自己的名称和上级的名称,需要根据上级pcompid,生成自身的compid

部分数据的上级已经存在,即存在pcompid,而部分数据的上级也是本次保存存入的,

所以需要按层级逐级保存(因为需要先保存上级,生成对应的COMPID,下级把上级的COMPID填入PCOMPID字段中,才能保存,即saveMultiBasicOrgnize只能根据PCOMPID生成自身COMPID) 

 

    public List<BasicOrganizationSetVO> saveMultiBasicOrgnizeList(
               List<BasicOrganizationSetVO> basicOrganizationSetVOs) {
               // 生成树结构  
              List<BasicOrganizationSetVO> orgtree = new ArrayList<BasicOrganizationSetVO>();
                 for (BasicOrganizationSetVO node : basicOrganizationSetVOs) {
                     if (StringUtils.isNotEmpty(node.getPcompid())) {
                      // 根节点,保存根节点并返回compid
                      node = saveMultiBasicOrgnize(node);
                      orgtree.add(node);
                         build(node, basicOrganizationSetVOs);// 递归保存
                     }
                 }
                 return orgtree; 
             }
             /**
              * 递归保存组织树结构
              * @param node
              * @param nodes
              */
             private void build(BasicOrganizationSetVO node, List<BasicOrganizationSetVO> nodes) {
                 List<BasicOrganizationSetVO> children = getChildren(node, nodes);
                 if (!children.isEmpty()) {
                     for (BasicOrganizationSetVO child : children) {
                         build(child, nodes);
                     }
                 }
             }
             
             /**
              * 查询子节点数据并保存
              * @param node
              * @param nodes
              * @return
              */
             private List<BasicOrganizationSetVO> getChildren(BasicOrganizationSetVO node, List<BasicOrganizationSetVO> nodes) {
                 List<BasicOrganizationSetVO> children = new ArrayList<BasicOrganizationSetVO>();
                 for (BasicOrganizationSetVO org : nodes) {
                     String pName = org.getParent();
                     if (StringUtil.isEquals(node.getCompname(), pName)) {
                      // 获取上级节点的compid并set到子节点中          
                      org.setPcompid(node.getCompid());
                      org.setPmanagecompid(node.getCompid());
                      org = saveMultiBasicOrgnize(org);
                         children.add(org);
                     }
                 }
                 return children;
             }

 

posted on 2022-07-16 23:13  你疼故事汇  阅读(108)  评论(1)    收藏  举报