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); + } + }