diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/TreeBuild.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/TreeBuild.java new file mode 100644 index 00000000..e2363717 --- /dev/null +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/TreeBuild.java @@ -0,0 +1,77 @@ +package com.bonus.common.biz.domain; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author ma_sh + * @create 2024/10/16 10:17 + */ +public class TreeBuild { + + public List nodeList = new ArrayList<>(); + + /** + * 构造方法 + * @param nodeList 将数据集合赋值给nodeList,即所有数据作为所有节点。 + */ + public TreeBuild(List nodeList){ + this.nodeList = nodeList; + } + + /** + * 获取需构建的所有根节点(顶级节点) "0" + * @return 所有根节点List集合 + */ + public List getRootNode(){ + // 保存所有根节点(所有根节点的数据) + List rootNodeList = new ArrayList<>(); + // treeNode:查询出的每一条数据(节点) + for (TreeNode treeNode : nodeList){ + // 判断当前节点是否为根节点,此处注意:若parentId类型是String,则要采用equals()方法判断。 + if (0 == treeNode.getParentId()) { + // 是,添加 + rootNodeList.add(treeNode); + } + } + return rootNodeList; + } + + /** + * 根据每一个顶级节点(根节点)进行构建树形结构 + * @return 构建整棵树 + */ + public List buildTree(){ + // treeNodes:保存一个顶级节点所构建出来的完整树形 + List treeNodes = new ArrayList(); + // getRootNode():获取所有的根节点 + for (TreeNode treeRootNode : getRootNode()) { + // 将顶级节点进行构建子树 + treeRootNode = buildChildTree(treeRootNode); + // 完成一个顶级节点所构建的树形,增加进来 + treeNodes.add(treeRootNode); + } + return treeNodes; + } + + /** + * 递归-----构建子树形结构 + * @param pNode 根节点(顶级节点) + * @return 整棵树 + */ + public TreeNode buildChildTree(TreeNode pNode){ + List childTree = new ArrayList(); + // nodeList:所有节点集合(所有数据) + for (TreeNode treeNode : nodeList) { + // 判断当前节点的父节点ID是否等于根节点的ID,即当前节点为其下的子节点 + if (treeNode.getParentId() == pNode.getId()) { + // 再递归进行判断当前节点的情况,调用自身方法 + childTree.add(buildChildTree(treeNode)); + } + } + // for循环结束,即节点下没有任何节点,树形构建结束,设置树结果 + pNode.setChildren(childTree); + return pNode; + } + +} diff --git a/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/TreeNode.java b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/TreeNode.java new file mode 100644 index 00000000..14a80bec --- /dev/null +++ b/bonus-common-biz/src/main/java/com/bonus/common/biz/domain/TreeNode.java @@ -0,0 +1,41 @@ +package com.bonus.common.biz.domain; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author ma_sh + * @create 2024/10/16 10:16 + */ +@Data +public class TreeNode { + + private long id; + + private String label; + + private long parentId; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private String level; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private String unitName; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private String companyId; + + private String code; + + private float num; + + private String modelCode; + + private String manageType; + + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children = new ArrayList<>(); +} diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmUnitPersonController.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmUnitPersonController.java index dc823236..774f3b97 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmUnitPersonController.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/controller/BmUnitPersonController.java @@ -1,9 +1,6 @@ package com.bonus.material.basic.controller; -import java.util.List; -import com.bonus.common.biz.domain.SysDeptTree; -import com.bonus.common.biz.domain.TreeSelect; import com.bonus.common.log.enums.OperaType; import com.bonus.material.common.annotation.PreventRepeatSubmit; import io.swagger.annotations.Api; @@ -42,9 +39,8 @@ public class BmUnitPersonController extends BaseController */ @ApiOperation(value = "查询部门用户下拉树") @GetMapping("/getDeptUserTree") - public AjaxResult selectDeptTree(SysDeptTree sysDept) { - List deptList = bmUnitPersonService.selectDeptTree(sysDept); - return AjaxResult.success(deptList); + public AjaxResult selectDeptTree(BmUnitPerson unitPerson) { + return bmUnitPersonService.selectDeptTree(unitPerson); } /** diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmUnitPerson.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmUnitPerson.java index 7dbc32a7..12075193 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmUnitPerson.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/domain/BmUnitPerson.java @@ -41,5 +41,8 @@ public class BmUnitPerson extends BaseEntity @ApiModelProperty(value = "数据所属组织") private String companyId; - + /** + * 二级树标识 1代表查询二级树 + */ + private Integer isTree; } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmUnitPersonMapper.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmUnitPersonMapper.java index 5051acb4..a43511b0 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmUnitPersonMapper.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/mapper/BmUnitPersonMapper.java @@ -3,6 +3,7 @@ package com.bonus.material.basic.mapper; import java.util.List; import com.bonus.common.biz.domain.SysDeptTree; +import com.bonus.common.biz.domain.TreeNode; import com.bonus.material.basic.domain.BmUnitPerson; /** @@ -32,8 +33,8 @@ public interface BmUnitPersonMapper /** * 查询部门树 - * @param sysDept + * @param unitPerson * @return */ - List selectDeptTree(SysDeptTree sysDept); + List selectDeptTree(BmUnitPerson unitPerson); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/IBmUnitPersonService.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/IBmUnitPersonService.java index 0dc918bf..0819cf7a 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/IBmUnitPersonService.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/IBmUnitPersonService.java @@ -1,9 +1,5 @@ package com.bonus.material.basic.service; -import java.util.List; - -import com.bonus.common.biz.domain.SysDeptTree; -import com.bonus.common.biz.domain.TreeSelect; import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.material.basic.domain.BmUnitPerson; @@ -34,9 +30,9 @@ public interface IBmUnitPersonService /** * 查询部门下拉树结构 - * @param sysDept + * @param unitPerson * @return */ - List selectDeptTree(SysDeptTree sysDept); + AjaxResult selectDeptTree(BmUnitPerson unitPerson); } diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmUnitPersonServiceImpl.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmUnitPersonServiceImpl.java index e7bbb19e..38d41a45 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmUnitPersonServiceImpl.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/basic/service/impl/BmUnitPersonServiceImpl.java @@ -1,14 +1,12 @@ package com.bonus.material.basic.service.impl; import java.util.*; -import java.util.stream.Collectors; import com.alibaba.nacos.common.utils.CollectionUtils; -import com.bonus.common.biz.domain.SysDeptTree; -import com.bonus.common.biz.domain.TreeSelect; +import com.bonus.common.biz.domain.TreeBuild; +import com.bonus.common.biz.domain.TreeNode; import com.bonus.common.biz.enums.HttpCodeEnum; import com.bonus.common.core.utils.DateUtils; -import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.web.domain.AjaxResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -69,71 +67,24 @@ public class BmUnitPersonServiceImpl implements IBmUnitPersonService /** * 查询部门下拉树结构 - * @param sysDept + * @param unitPerson * @return */ @Override - public List selectDeptTree(SysDeptTree sysDept) { - List deptList = bmUnitPersonMapper.selectDeptTree(sysDept); - return buildDeptTreeSelect(deptList); - } - - private List buildDeptTreeSelect(List deptList) { - List deptTrees = buildDeptTree(deptList); - return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); - } - - private List buildDeptTree(List deptList) { - List returnList = new ArrayList<>(); - List tempList = deptList.stream().map(SysDeptTree::getDeptId).collect(Collectors.toList()); - for (SysDeptTree sysDept : deptList) { - // 如果是顶级节点, 遍历该父节点的所有子节点 - if (!tempList.contains(sysDept.getParentId())) { - recursionFn(deptList, sysDept); - returnList.add(sysDept); + public AjaxResult selectDeptTree(BmUnitPerson unitPerson) { + List groupList = new ArrayList<>(); + List list = new ArrayList<>(); + try { + list = bmUnitPersonMapper.selectDeptTree(unitPerson); + if (CollectionUtils.isNotEmpty(list)) { + // 创建树形结构(数据集合作为参数) + TreeBuild treeBuild = new TreeBuild(list); + // 原查询结果转换树形结构 + groupList = treeBuild.buildTree(); } + } catch (Exception e) { } - if (returnList.isEmpty()) { - returnList = deptList; - } - return returnList; + return AjaxResult.success(groupList); } - /** - * 递归列表 - */ - private void recursionFn(List list, SysDeptTree t) { - // 得到子节点列表 - List childList = getChildList(list, t); - t.setChildren(childList); - for (SysDeptTree tChild : childList) { - if (hasChild(list, tChild)) { - recursionFn(list, tChild); - } - } - } - - /** - * 得到子节点列表 - */ - private List getChildList(List list, SysDeptTree t) { - List tlist = new ArrayList<>(); - Iterator it = list.iterator(); - while (it.hasNext()) { - SysDeptTree n = (SysDeptTree) it.next(); - if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().equals(t.getDeptId())) { - tlist.add(n); - } - } - return tlist; - } - - /** - * 判断是否有子节点 - */ - private boolean hasChild(List list, SysDeptTree t) { - return getChildList(list, t).size() > 0 ? true : false; - } - - } diff --git a/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmUnitPersonMapper.xml b/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmUnitPersonMapper.xml index ee631e92..207fdd31 100644 --- a/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmUnitPersonMapper.xml +++ b/bonus-modules/bonus-material/src/main/resources/mapper/material/basic/BmUnitPersonMapper.xml @@ -4,15 +4,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - SELECT - d.dept_id AS deptId, + d.dept_id AS id, d.parent_id AS parentId, d.ancestors, - d.dept_name AS deptName, + d.dept_name AS label, d.order_num, d.leader, d.phone, @@ -33,17 +33,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" FROM ( SELECT - d.dept_id AS deptId, + d.dept_id AS id, d.parent_id AS parentId, - d.dept_name AS deptName + d.dept_name AS label FROM sys_dept d WHERE d.del_flag = '0' AND d.STATUS = '0' UNION SELECT - su.user_id AS deptId, + su.user_id AS id, su.dept_id AS parentId, - su.user_name AS deptName + su.user_name AS label FROM sys_user su LEFT JOIN sys_dept sd ON su.dept_id = sd.dept_id ) AS combined_results