diff --git a/system/system-application/src/main/java/cn/iocoder/mall/admin/application/controller/admins/DeptmentController.java b/system/system-application/src/main/java/cn/iocoder/mall/admin/application/controller/admins/DeptmentController.java
index 8a77b27cdd8432be3928a8ff3f0c4f61fca3854a..b18e32cdc61234e3283b5d57c43dfea05d6d6b29 100644
--- a/system/system-application/src/main/java/cn/iocoder/mall/admin/application/controller/admins/DeptmentController.java
+++ b/system/system-application/src/main/java/cn/iocoder/mall/admin/application/controller/admins/DeptmentController.java
@@ -1,17 +1,27 @@
 package cn.iocoder.mall.admin.application.controller.admins;
 
 import cn.iocoder.common.framework.vo.CommonResult;
+import cn.iocoder.common.framework.vo.PageResult;
 import cn.iocoder.mall.admin.api.DeptmentService;
 import cn.iocoder.mall.admin.api.bo.deptment.DeptmentBO;
+import cn.iocoder.mall.admin.api.constant.ResourceConstants;
 import cn.iocoder.mall.admin.api.dto.depetment.DeptmentAddDTO;
+import cn.iocoder.mall.admin.api.dto.depetment.DeptmentPageDTO;
+import cn.iocoder.mall.admin.application.convert.DeptmentConvert;
+import cn.iocoder.mall.admin.application.vo.deptment.DeptmentVO;
+import cn.iocoder.mall.admin.application.vo.resource.ResourceTreeNodeVO;
 import cn.iocoder.mall.admin.sdk.context.AdminSecurityContextHolder;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 import static cn.iocoder.common.framework.vo.CommonResult.success;
 
 /**
@@ -29,6 +39,33 @@ public class DeptmentController {
     @Autowired
     private DeptmentService deptmentService;
 
+    @GetMapping("tree/page")
+    @ApiOperation(value = "根部门分页的部门树")
+    public CommonResult<PageResult<DeptmentVO>> treePage(DeptmentPageDTO deptmentPageDTO){
+        PageResult<DeptmentBO> pageResult = deptmentService.getPageRootDeptment(deptmentPageDTO);
+        PageResult<DeptmentVO> voPageResult = DeptmentConvert.INSTANCE.convert(pageResult);
+        List<DeptmentBO> list = deptmentService.getAllDeptments();
+        List<DeptmentVO> voList = DeptmentConvert.INSTANCE.convert(list);
+        Map<Integer, DeptmentVO> nodeMap = voList.stream().collect(Collectors.toMap(e->e.getId(), e->e));
+
+        nodeMap.values().stream()
+                .filter(node -> !node.getPid().equals(ResourceConstants.PID_ROOT))
+                .forEach((childNode) -> {
+                    // 获得父节点
+                    DeptmentVO parentNode = nodeMap.get(childNode.getPid());
+                    if (parentNode.getChildren() == null) { // 初始化 children 数组
+                        parentNode.setChildren(new ArrayList<>());
+                    }
+                    // 将自己添加到父节点中
+                    parentNode.getChildren().add(childNode);
+                });
+
+        voPageResult.getList().forEach(d->{
+            d.setChildren(nodeMap.get(d.getId()).getChildren());
+        });
+        return success(voPageResult);
+    }
+
     @PostMapping("add")
     @ApiOperation(value = "新增部门", notes = "选择部门名称,父级部门")
     public CommonResult<DeptmentBO> add(@RequestBody DeptmentAddDTO deptmentAddDTO){
@@ -36,4 +73,7 @@ public class DeptmentController {
                 AdminSecurityContextHolder.getContext().getAdminId(), deptmentAddDTO));
 
     }
+
+
+
 }
diff --git a/system/system-application/src/main/java/cn/iocoder/mall/admin/application/convert/DeptmentConvert.java b/system/system-application/src/main/java/cn/iocoder/mall/admin/application/convert/DeptmentConvert.java
new file mode 100644
index 0000000000000000000000000000000000000000..61f0caeb359856aeee775dae6d4deab2aacd3749
--- /dev/null
+++ b/system/system-application/src/main/java/cn/iocoder/mall/admin/application/convert/DeptmentConvert.java
@@ -0,0 +1,32 @@
+package cn.iocoder.mall.admin.application.convert;
+
+import cn.iocoder.common.framework.vo.PageResult;
+import cn.iocoder.mall.admin.api.bo.deptment.DeptmentBO;
+import cn.iocoder.mall.admin.application.vo.deptment.DeptmentVO;
+import cn.iocoder.mall.admin.dataobject.DeptmentDO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.Mappings;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * Description:
+ *
+ * @author: zhenxianyimeng
+ * @date: 2019-06-22
+ * @time: 00:23
+ */
+@Mapper
+public interface DeptmentConvert {
+
+    DeptmentConvert INSTANCE = Mappers.getMapper(DeptmentConvert.class);
+
+    @Mappings({@Mapping(source = "list", target = "list")})
+    PageResult<DeptmentVO> convert(PageResult<DeptmentBO> pageResult);
+
+    @Mappings({})
+    List<DeptmentVO> convert(List<DeptmentBO> list);
+}
diff --git a/system/system-application/src/main/java/cn/iocoder/mall/admin/application/vo/deptment/DeptmentVO.java b/system/system-application/src/main/java/cn/iocoder/mall/admin/application/vo/deptment/DeptmentVO.java
index 929d5e1533f13f40cf7b0d68d1738b6d5f940662..ebf99bda93badc662f1ac77c56524fc69ee2c7d7 100644
--- a/system/system-application/src/main/java/cn/iocoder/mall/admin/application/vo/deptment/DeptmentVO.java
+++ b/system/system-application/src/main/java/cn/iocoder/mall/admin/application/vo/deptment/DeptmentVO.java
@@ -1,6 +1,11 @@
 package cn.iocoder.mall.admin.application.vo.deptment;
 
 import cn.iocoder.mall.admin.api.bo.deptment.DeptmentBO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
 
 /**
  * Description:
@@ -9,6 +14,9 @@ import cn.iocoder.mall.admin.api.bo.deptment.DeptmentBO;
  * @date: 2019-06-15
  * @time: 16:57
  */
+@Data
+@ApiModel("部门VO")
 public class DeptmentVO extends DeptmentBO {
-
+    @ApiModelProperty("子部门数组")
+    private List<DeptmentVO> children;
 }
diff --git a/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/DeptmentService.java b/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/DeptmentService.java
index e6b9f53e2f6e95b2ce2c613d19b491840604080a..d1ab4ef808dbdc4ed2ecc20a3fd7d95093bb4d59 100644
--- a/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/DeptmentService.java
+++ b/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/DeptmentService.java
@@ -1,7 +1,11 @@
 package cn.iocoder.mall.admin.api;
 
+import cn.iocoder.common.framework.vo.PageResult;
 import cn.iocoder.mall.admin.api.bo.deptment.DeptmentBO;
 import cn.iocoder.mall.admin.api.dto.depetment.DeptmentAddDTO;
+import cn.iocoder.mall.admin.api.dto.depetment.DeptmentPageDTO;
+
+import java.util.List;
 
 /**
  * Description:
@@ -13,4 +17,10 @@ import cn.iocoder.mall.admin.api.dto.depetment.DeptmentAddDTO;
 public interface DeptmentService {
 
     DeptmentBO addDeptment(Integer adminId, DeptmentAddDTO deptmentAddDTO);
+
+    PageResult<DeptmentBO> getPageRootDeptment(DeptmentPageDTO deptmentPageDTO);
+
+    List<DeptmentBO> getAllDeptments();
+
+    List<DeptmentBO> getAllNotRootDeptment();
 }
diff --git a/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/constant/DeptmentConstants.java b/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/constant/DeptmentConstants.java
new file mode 100644
index 0000000000000000000000000000000000000000..14a939885849860b5bd46d508e09bacbdb7c554a
--- /dev/null
+++ b/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/constant/DeptmentConstants.java
@@ -0,0 +1,16 @@
+package cn.iocoder.mall.admin.api.constant;
+
+/**
+ * Description:
+ *
+ * @author: zhenxianyimeng
+ * @date: 2019-06-16
+ * @time: 23:15
+ */
+public interface DeptmentConstants {
+
+    /**
+     * 顶级部门的pid
+     */
+    Integer PID_ROOT = 0;
+}
diff --git a/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/depetment/DeptmentAddDTO.java b/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/depetment/DeptmentAddDTO.java
index f440aa1404a8590255cb8eb369b93c494c577cbe..ba6d9a2c64d0b0bf97a60078ea11ebaaa8f89c9e 100644
--- a/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/depetment/DeptmentAddDTO.java
+++ b/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/depetment/DeptmentAddDTO.java
@@ -30,4 +30,6 @@ public class DeptmentAddDTO {
     @NotNull(message = "可以为空,默认0,顶层")
     @Min(value = 0,message = "父id不能小于0")
     private Integer pid = 0;
+
+
 }
diff --git a/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/depetment/DeptmentPageDTO.java b/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/depetment/DeptmentPageDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb12e15492fb3b89001c58fdb99e111dc50c2b4a
--- /dev/null
+++ b/system/system-service-api/src/main/java/cn/iocoder/mall/admin/api/dto/depetment/DeptmentPageDTO.java
@@ -0,0 +1,19 @@
+package cn.iocoder.mall.admin.api.dto.depetment;
+
+import cn.iocoder.common.framework.vo.PageParam;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * Description:
+ *
+ * @author: zhenxianyimeng
+ * @date: 2019-06-21
+ * @time: 00:22
+ */
+@Data
+public class DeptmentPageDTO extends PageParam {
+    @ApiModelProperty(value = "根部门名字", example = "研发部")
+    private String name;
+}
diff --git a/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/convert/DeptmentConvert.java b/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/convert/DeptmentConvert.java
index ac3cfd31cf393152bea116ddea1daa08e8b3538d..885f533172829402f7a41e091a034f3d614908fe 100644
--- a/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/convert/DeptmentConvert.java
+++ b/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/convert/DeptmentConvert.java
@@ -1,12 +1,17 @@
 package cn.iocoder.mall.admin.convert;
 
+import cn.iocoder.common.framework.vo.PageResult;
 import cn.iocoder.mall.admin.api.bo.deptment.DeptmentBO;
 import cn.iocoder.mall.admin.api.dto.depetment.DeptmentAddDTO;
 import cn.iocoder.mall.admin.dataobject.DeptmentDO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
 import org.mapstruct.Mappings;
 import org.mapstruct.factory.Mappers;
 
+import java.util.List;
+
 /**
  * Description:
  *
@@ -25,4 +30,9 @@ public interface DeptmentConvert {
     @Mappings({})
     DeptmentBO convert(DeptmentDO deptmentDO);
 
+    @Mappings({@Mapping(source = "records", target = "list")})
+    PageResult<DeptmentBO> convert(IPage<DeptmentDO> list);
+
+    @Mappings({})
+    List<DeptmentBO> convert(List<DeptmentDO> list);
 }
diff --git a/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dao/DeptmentMapper.java b/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dao/DeptmentMapper.java
index 99b6fa76cf743312ecc2a91a6917fa592a2318e7..040ab6175e34abb0de2852bacd083fc4234cd089 100644
--- a/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dao/DeptmentMapper.java
+++ b/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/dao/DeptmentMapper.java
@@ -1,11 +1,17 @@
 package cn.iocoder.mall.admin.dao;
 
+import cn.iocoder.common.framework.mybatis.QueryWrapperX;
+import cn.iocoder.mall.admin.api.dto.depetment.DeptmentPageDTO;
 import cn.iocoder.mall.admin.dataobject.AdminDO;
 import cn.iocoder.mall.admin.dataobject.DeptmentDO;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * Description:
  *
@@ -23,5 +29,24 @@ public interface DeptmentMapper extends BaseMapper<DeptmentDO> {
         );
     }
 
+    default IPage<DeptmentDO> selectDeptPage(DeptmentPageDTO deptmentPageDTO, Integer pid){
+        return selectPage(new Page<>(deptmentPageDTO.getPageNo(), deptmentPageDTO.getPageSize()),
+                new QueryWrapperX<DeptmentDO>()
+                        .likeIfPresent("name", deptmentPageDTO.getName())
+                        .eqIfPresent("pid", pid)
+                        .eq("deleted", false));
+
+    }
+
+    default List<DeptmentDO> getDeptByPid(Integer pid){
+        return selectList(new QueryWrapperX<DeptmentDO>()
+                .eqIfPresent("pid", pid)
+                .eq("deleted", false));
+    }
 
+    default List<DeptmentDO> getDeptExcudePid(Integer pid){
+        return selectList(new QueryWrapper<DeptmentDO>()
+            .ne("pid",pid)
+            .eq("deleted",false));
+    }
 }
diff --git a/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/service/DeptmentServiceImpl.java b/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/service/DeptmentServiceImpl.java
index 067a83446150c08c273bdd84ed09817f04551fb5..b56da932aa7316351468c356af88592ed75ccdc1 100644
--- a/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/service/DeptmentServiceImpl.java
+++ b/system/system-service-impl/src/main/java/cn/iocoder/mall/admin/service/DeptmentServiceImpl.java
@@ -1,16 +1,22 @@
 package cn.iocoder.mall.admin.service;
 
 import cn.iocoder.common.framework.util.ServiceExceptionUtil;
+import cn.iocoder.common.framework.vo.PageResult;
 import cn.iocoder.mall.admin.api.DeptmentService;
 import cn.iocoder.mall.admin.api.bo.deptment.DeptmentBO;
 import cn.iocoder.mall.admin.api.constant.AdminErrorCodeEnum;
+import cn.iocoder.mall.admin.api.constant.DeptmentConstants;
 import cn.iocoder.mall.admin.api.dto.depetment.DeptmentAddDTO;
+import cn.iocoder.mall.admin.api.dto.depetment.DeptmentPageDTO;
 import cn.iocoder.mall.admin.convert.DeptmentConvert;
 import cn.iocoder.mall.admin.dao.DeptmentMapper;
 import cn.iocoder.mall.admin.dataobject.DeptmentDO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * Description:
  *
@@ -25,17 +31,36 @@ public class DeptmentServiceImpl implements DeptmentService {
     private DeptmentMapper deptmentMapper;
 
     @Override
-        public DeptmentBO addDeptment(Integer adminId, DeptmentAddDTO deptmentAddDTO) {
-            if(deptmentAddDTO.getPid() != 0 &&
-                    deptmentMapper.selectById(deptmentAddDTO.getPid()) == null){
-                throw ServiceExceptionUtil.exception(AdminErrorCodeEnum.DEPT_PARENT_NOT_EXITS.getCode());
-            }
-            //不同的大部门下好像可以小部门名字一样,验证同级别部门名字
-            if (null != deptmentMapper.findDeptByNameAndPid(deptmentAddDTO.getName(), deptmentAddDTO.getPid())) {
-                throw ServiceExceptionUtil.exception(AdminErrorCodeEnum.DEPT_SAME_LEVEL_NAME_EXITS.getCode());
-            }
-            DeptmentDO deptmentDO = DeptmentConvert.INSTANCE.convert(deptmentAddDTO);
-            deptmentMapper.insert(deptmentDO);
-            return DeptmentConvert.INSTANCE.convert(deptmentDO);
+    public DeptmentBO addDeptment(Integer adminId, DeptmentAddDTO deptmentAddDTO) {
+        if (deptmentAddDTO.getPid() != 0 &&
+                deptmentMapper.selectById(deptmentAddDTO.getPid()) == null) {
+            throw ServiceExceptionUtil.exception(AdminErrorCodeEnum.DEPT_PARENT_NOT_EXITS.getCode());
+        }
+        //不同的大部门下好像可以小部门名字一样,验证同级别部门名字
+        if (null != deptmentMapper.findDeptByNameAndPid(deptmentAddDTO.getName(), deptmentAddDTO.getPid())) {
+            throw ServiceExceptionUtil.exception(AdminErrorCodeEnum.DEPT_SAME_LEVEL_NAME_EXITS.getCode());
         }
+        DeptmentDO deptmentDO = DeptmentConvert.INSTANCE.convert(deptmentAddDTO);
+        deptmentMapper.insert(deptmentDO);
+        return DeptmentConvert.INSTANCE.convert(deptmentDO);
+    }
+
+    @Override
+    public PageResult<DeptmentBO> getPageRootDeptment(DeptmentPageDTO deptmentPageDTO) {
+        IPage<DeptmentDO> page = deptmentMapper.selectDeptPage(deptmentPageDTO, DeptmentConstants.PID_ROOT);
+        return DeptmentConvert.INSTANCE.convert(page);
+    }
+
+    @Override
+    public List<DeptmentBO> getAllDeptments() {
+        List<DeptmentDO> list = deptmentMapper.getDeptByPid(null);
+        return DeptmentConvert.INSTANCE.convert(list);
+    }
+
+    @Override
+    public List<DeptmentBO> getAllNotRootDeptment() {
+        List<DeptmentDO> list = deptmentMapper.getDeptExcudePid(DeptmentConstants.PID_ROOT);
+        return DeptmentConvert.INSTANCE.convert(list);
+    }
+
 }