diff --git a/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/controller/RegionController.java b/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/controller/RegionController.java new file mode 100644 index 0000000..360aacd --- /dev/null +++ b/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/controller/RegionController.java @@ -0,0 +1,26 @@ +package day.gitlab.dolphin.module.rbac.controller; + +import day.gitlab.dolphin.common.web.entity.ApiResponse; +import day.gitlab.dolphin.common.web.entity.PageRequest; +import day.gitlab.dolphin.common.web.entity.PageResponse; +import day.gitlab.dolphin.module.rbac.controller.dto.RegionDTO; +import day.gitlab.dolphin.module.rbac.controller.vo.RegionVO; +import day.gitlab.dolphin.module.rbac.service.RegionService; +import lombok.RequiredArgsConstructor; +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; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/region") +public class RegionController { + + private final RegionService regionService; + + @PostMapping("/paginate") + public ApiResponse> paginate(@RequestBody PageRequest pageRequest) { + return ApiResponse.success(regionService.paginate(pageRequest)); + } +} diff --git a/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/controller/dto/RegionDTO.java b/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/controller/dto/RegionDTO.java new file mode 100644 index 0000000..220a6de --- /dev/null +++ b/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/controller/dto/RegionDTO.java @@ -0,0 +1,35 @@ +package day.gitlab.dolphin.module.rbac.controller.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RegionDTO { + + private String id; + + private String parentId; + + private String parentCode; + + private String rootId; + + private String rootCode; + + private String name; + + private String code; + + private String extCode; + + private Integer sort; + + private String description; + + private List ids; +} diff --git a/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/controller/vo/RegionVO.java b/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/controller/vo/RegionVO.java new file mode 100644 index 0000000..3ca8f47 --- /dev/null +++ b/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/controller/vo/RegionVO.java @@ -0,0 +1,40 @@ +package day.gitlab.dolphin.module.rbac.controller.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RegionVO { + + private String id; + + private String parentId; + + private String parentCode; + + private String rootId; + + private String rootCode; + + private String name; + + private String code; + + private String extCode; + + private Integer sort; + + private String description; + + private Date createTime; + + private Date updateTime; + + private List children; +} diff --git a/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/service/RegionService.java b/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/service/RegionService.java index 5e79676..2b5e7c0 100644 --- a/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/service/RegionService.java +++ b/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/service/RegionService.java @@ -1,8 +1,14 @@ package day.gitlab.dolphin.module.rbac.service; +import day.gitlab.dolphin.common.web.entity.PageRequest; +import day.gitlab.dolphin.common.web.entity.PageResponse; +import day.gitlab.dolphin.module.rbac.controller.dto.RegionDTO; +import day.gitlab.dolphin.module.rbac.controller.vo.RegionVO; + /** * 针对表【sys_rbac_region(区划项)】的数据库操作Service */ public interface RegionService { + PageResponse paginate(PageRequest pageRequest); } diff --git a/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/service/impl/RegionServiceImpl.java b/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/service/impl/RegionServiceImpl.java index 8a04f8d..44c674f 100644 --- a/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/service/impl/RegionServiceImpl.java +++ b/dolphin-modules/dolphin-module-rbac/src/main/java/day/gitlab/dolphin/module/rbac/service/impl/RegionServiceImpl.java @@ -1,14 +1,80 @@ package day.gitlab.dolphin.module.rbac.service.impl; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import day.gitlab.dolphin.common.core.util.Strings; +import day.gitlab.dolphin.common.mybatis.util.Pages; +import day.gitlab.dolphin.common.web.entity.PageRequest; +import day.gitlab.dolphin.common.web.entity.PageResponse; +import day.gitlab.dolphin.module.rbac.controller.dto.RegionDTO; +import day.gitlab.dolphin.module.rbac.controller.vo.RegionVO; +import day.gitlab.dolphin.module.rbac.entity.Region; +import day.gitlab.dolphin.module.rbac.mapper.RegionMapper; import day.gitlab.dolphin.module.rbac.service.RegionService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** * 针对表【sys_rbac_region(区划项)】的数据库操作Service实现 */ @Service +@RequiredArgsConstructor public class RegionServiceImpl implements RegionService { + private final RegionMapper regionMapper; + + @Override + public PageResponse paginate(PageRequest pageRequest) { + Page paginate = Pages.paginate(pageRequest, regionMapper, (dto, wrapper) -> { + if (Strings.isNotBlank(dto.getName())) { + wrapper.like("name", dto.getName()); + } + if (Strings.isNotBlank(dto.getCode())) { + wrapper.eq("code", dto.getCode()); + } + + return wrapper; + }); + + return Pages.toPageResponse(paginate, (record) -> { + RegionVO dictionaryVO = new RegionVO(); + BeanUtils.copyProperties(record, dictionaryVO); + return dictionaryVO; + }); + } + + private List list2tree(List records) { + List root = records.stream() + .filter(rec -> Strings.isBlank(rec.getParentId())) + .map(rec -> { + RegionVO vo = new RegionVO(); + BeanUtils.copyProperties(rec, vo); + return vo; + }) + .toList(); + for (RegionVO parent : root) { + list2tree(parent, records); + } + return root; + } + + private void list2tree(RegionVO parent, List records) { + List children = records.stream() + .filter(rec -> parent.getId().equals(rec.getParentId())) + .map(rec -> { + RegionVO vo = new RegionVO(); + BeanUtils.copyProperties(rec, vo); + return vo; + }) + .toList(); + parent.setChildren(children); + + for (RegionVO child : children) { + list2tree(child, records); + } + } }