6 files modified
1 files added
| New file |
| | |
| | | package cn.gistack.common.node; |
| | | |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 部门用户树node |
| | | * @author zhongrj |
| | | * @date 2023-04-23 |
| | | */ |
| | | @Data |
| | | public class DeptUserTreeNode extends TreeNode{ |
| | | |
| | | /** |
| | | * 手机号 |
| | | */ |
| | | private String phone; |
| | | } |
| | |
| | | package cn.gistack.common.utils; |
| | | |
| | | import cn.gistack.common.node.DeptUserTreeNode; |
| | | import cn.gistack.common.node.TreeNode; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * map 转 tree 组织机构(父子id不会重复的情况,数据查询来自同一个表) |
| | | * @param treeMap |
| | | * @return |
| | | */ |
| | | public static List<TreeNode> getDeptAndUserNodeTree(Map<String, DeptUserTreeNode> treeMap){ |
| | | List<TreeNode> tree = new ArrayList<>(); |
| | | if (treeMap.size() > 1) { |
| | | treeMap.forEach((id, treeNode) -> { |
| | | if (!treeNode.getHasChildren()){ |
| | | // 判断是否有绑定多个部门 |
| | | List<String> asList = Arrays.asList(treeNode.getParentId().split(",")); |
| | | if (asList.size()>1){ |
| | | for (String parentId : asList) { |
| | | if (treeMap.containsKey(parentId)) { |
| | | treeMap.get(parentId).getChildren().add(treeNode); |
| | | } else { |
| | | tree.add(treeNode); |
| | | } |
| | | } |
| | | }else { |
| | | if (treeMap.containsKey(treeNode.getParentId())) { |
| | | treeMap.get(treeNode.getParentId()).getChildren().add(treeNode); |
| | | } else { |
| | | tree.add(treeNode); |
| | | } |
| | | } |
| | | }else { |
| | | if (treeMap.containsKey(treeNode.getParentId())) { |
| | | treeMap.get(treeNode.getParentId()).getChildren().add(treeNode); |
| | | } else { |
| | | tree.add(treeNode); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | return tree; |
| | | } |
| | | |
| | | /** |
| | | * list 转 tree 组织机构 |
| | | * @param parentList |
| | | * @param childrenList |
| | |
| | | */ |
| | | package cn.gistack.system.controller; |
| | | |
| | | import cn.gistack.common.node.DeptUserTreeNode; |
| | | import cn.gistack.common.node.TreeNode; |
| | | import cn.gistack.common.utils.NodeTreeUtil; |
| | | import cn.gistack.system.vo.DeptVO; |
| | | import cn.gistack.system.wrapper.DeptWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 查询组织机构树数据(下级包含人员信息) |
| | | * @param treeNode |
| | | * @return |
| | | */ |
| | | @GetMapping("/getDeptAndUserTree") |
| | | @ApiOperation(value = "查询组织机构树数据(下级包含人员信息)") |
| | | public R getDeptAndUserTree(DeptUserTreeNode treeNode) { |
| | | return R.data(deptService.getDeptAndUserTree(treeNode)); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | */ |
| | | package cn.gistack.system.mapper; |
| | | |
| | | import cn.gistack.common.node.DeptUserTreeNode; |
| | | import cn.gistack.common.node.TreeNode; |
| | | import cn.gistack.system.entity.Dept; |
| | | import cn.gistack.system.vo.DeptVO; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import org.apache.ibatis.annotations.MapKey; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
| | |
| | | */ |
| | | List<String> getDeptNames(Long[] ids); |
| | | |
| | | /** |
| | | * 查询组织机构树数据(下级包含人员信息) |
| | | * @param treeNode |
| | | * @return |
| | | */ |
| | | @MapKey(value = "id") |
| | | Map<String, DeptUserTreeNode> getDeptAndUserTree(@Param("treeNode") DeptUserTreeNode treeNode); |
| | | |
| | | /** |
| | | * 查询组织机构树 |
| | | * @param treeNode |
| | | * @return |
| | | */ |
| | | @MapKey(value = "id") |
| | | Map<String, DeptUserTreeNode> getDeptMap(@Param("treeNode") DeptUserTreeNode treeNode); |
| | | |
| | | /** |
| | | * 查询用户树 |
| | | * @param treeNode |
| | | * @return |
| | | */ |
| | | @MapKey(value = "id") |
| | | Map<String, DeptUserTreeNode> getUserMap(@Param("treeNode") DeptUserTreeNode treeNode); |
| | | } |
| | |
| | | and is_deleted = 0 |
| | | </select> |
| | | |
| | | <!--查询组织机构树数据(下级包含人员信息)--> |
| | | <select id="getDeptAndUserTree" resultType="cn.gistack.common.node.DeptUserTreeNode"> |
| | | ( |
| | | SELECT |
| | | dept.id, |
| | | dept.parent_id parentId, |
| | | dept.dept_name AS name, |
| | | 0 AS phone, |
| | | ( |
| | | SELECT |
| | | CASE WHEN count(1) > 0 THEN 1 ELSE 0 END |
| | | FROM |
| | | blade_dept |
| | | WHERE |
| | | parent_id = dept.id and is_deleted = 0 |
| | | ) AS hasChildren |
| | | FROM |
| | | blade_dept dept WHERE dept.is_deleted = 0 |
| | | <if test="treeNode.id!=null and treeNode.id!=''"> |
| | | and dept.id = #{treeNode.id} |
| | | </if> |
| | | ) |
| | | union |
| | | ( |
| | | select |
| | | bu.id, |
| | | bu.dept_id parentId, |
| | | bu.account AS name, |
| | | bu.phone, |
| | | 0 as hasChildren |
| | | from blade_user bu left join blade_dept bd on bd.id = bu.dept_id |
| | | where 1=1 and bu.is_deleted = 0 and bu.status = 1 |
| | | <if test="treeNode.id!=null and treeNode.id!=''"> |
| | | and bu.dept_id like concat(concat('%',#{treeNode.id}),'%') |
| | | </if> |
| | | ) |
| | | </select> |
| | | |
| | | <!--查询组织机构树--> |
| | | <select id="getDeptMap" resultType="cn.gistack.common.node.DeptUserTreeNode"> |
| | | SELECT |
| | | dept.id, |
| | | dept.parent_id parentId, |
| | | dept.dept_name AS name, |
| | | 0 AS phone, |
| | | ( |
| | | SELECT |
| | | CASE WHEN count(1) > 0 THEN 1 ELSE 0 END |
| | | FROM |
| | | blade_dept |
| | | WHERE |
| | | parent_id = dept.id and is_deleted = 0 |
| | | ) AS hasChildren |
| | | FROM |
| | | blade_dept dept WHERE dept.is_deleted = 0 |
| | | <if test="treeNode.id!=null and treeNode.id!=''"> |
| | | and dept.id = #{treeNode.id} |
| | | </if> |
| | | </select> |
| | | |
| | | <!--查询组织机构树数据(下级包含人员信息)--> |
| | | <select id="getUserMap" resultType="cn.gistack.common.node.DeptUserTreeNode"> |
| | | select |
| | | bu.id, |
| | | bu.dept_id parentId, |
| | | bu.account AS name, |
| | | bu.phone, |
| | | 0 as hasChildren |
| | | from blade_user bu left join blade_dept bd on bd.id = bu.dept_id |
| | | where 1=1 and bu.is_deleted = 0 and bu.status = 1 |
| | | <if test="treeNode.id!=null and treeNode.id!=''"> |
| | | and bu.dept_id like concat(concat('%',#{treeNode.id}),'%') |
| | | </if> |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | */ |
| | | package cn.gistack.system.service; |
| | | |
| | | import cn.gistack.common.node.DeptUserTreeNode; |
| | | import cn.gistack.common.node.TreeNode; |
| | | import cn.gistack.system.entity.Dept; |
| | | import cn.gistack.system.vo.DeptVO; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | |
| | | */ |
| | | List<DeptVO> search(String deptName, Long parentId); |
| | | |
| | | /** |
| | | * 查询组织机构树数据(下级包含人员信息) |
| | | * @param treeNode |
| | | * @return |
| | | */ |
| | | List<TreeNode> getDeptAndUserTree(DeptUserTreeNode treeNode); |
| | | } |
| | |
| | | */ |
| | | package cn.gistack.system.service.impl; |
| | | |
| | | import cn.gistack.common.node.DeptUserTreeNode; |
| | | import cn.gistack.common.node.TreeNode; |
| | | import cn.gistack.common.utils.NodeTreeUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | |
| | | return DeptWrapper.build().listNodeVO(deptList); |
| | | } |
| | | |
| | | /** |
| | | * 查询组织机构树数据(下级包含人员信息) |
| | | * @param treeNode |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<TreeNode> getDeptAndUserTree(DeptUserTreeNode treeNode) { |
| | | // 查询数据 |
| | | Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMap(treeNode); |
| | | Map<String, DeptUserTreeNode> userMap = baseMapper.getUserMap(treeNode); |
| | | deptMap.putAll(userMap); |
| | | // 处理并返回 |
| | | return NodeTreeUtil.getDeptAndUserNodeTree(deptMap); |
| | | } |
| | | } |