From: 刘洪青 Date: Tue, 3 Sep 2019 01:14:55 +0000 (+0800) Subject: feat: 实现树形数据接口 X-Git-Tag: v0.0.1^2~66 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=b2ca8ddb31cf87a44ea3628f213e4fd5b195f51a;p=institute%2Fsw-backend.git feat: 实现树形数据接口 --- diff --git a/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminMenuController.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminMenuController.java index 4d03563..4bc4cb8 100644 --- a/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminMenuController.java +++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/v1/admin/AdminMenuController.java @@ -34,6 +34,7 @@ import com.supwisdom.institute.backend.system.api.vo.response.PermissionRemoveRe import com.supwisdom.institute.backend.system.api.vo.response.PermissionTreeResponseData; import com.supwisdom.institute.backend.system.api.vo.response.PermissionUpdateResponseData; import com.supwisdom.institute.backend.system.domain.entity.Permission; +import com.supwisdom.institute.backend.system.domain.model.PermissionTreeNode; import com.supwisdom.institute.backend.system.domain.service.PermissionService; @Api(value = "SystemAdminMenu", tags = { "SystemAdminMenu" }, description = "菜单的操作接口") @@ -172,9 +173,9 @@ public class AdminMenuController { Map mapBean = new HashMap(); mapBean.put("type", Permission.TYPE_MENU); - List permissions = permissionService.selectPermissionTree(mapBean); + PermissionTreeNode tree = permissionService.selectPermissionTree(mapBean); - PermissionTreeResponseData data = PermissionTreeResponseData.of(permissions); + PermissionTreeResponseData data = PermissionTreeResponseData.of(tree); return new DefaultApiResponse(data); } diff --git a/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/PermissionTreeResponseData.java b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/PermissionTreeResponseData.java index 1f885fc..f4724e1 100644 --- a/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/PermissionTreeResponseData.java +++ b/system/api/src/main/java/com/supwisdom/institute/backend/system/api/vo/response/PermissionTreeResponseData.java @@ -1,9 +1,11 @@ package com.supwisdom.institute.backend.system.api.vo.response; -import java.util.List; + +import lombok.Getter; +import lombok.Setter; import com.supwisdom.institute.backend.common.framework.vo.response.data.IApiResponseData; -import com.supwisdom.institute.backend.system.domain.entity.Permission; +import com.supwisdom.institute.backend.system.domain.model.PermissionTreeNode; public class PermissionTreeResponseData implements IApiResponseData { @@ -11,10 +13,19 @@ public class PermissionTreeResponseData implements IApiResponseData { * */ private static final long serialVersionUID = -6659447453323545811L; + + public PermissionTreeResponseData(PermissionTreeNode tree) { + this.tree = tree; + } + + @Getter + @Setter + private PermissionTreeNode tree; - public static PermissionTreeResponseData of(List permissions) { - // TODO Auto-generated method stub - return null; + public static PermissionTreeResponseData of(PermissionTreeNode tree) { + PermissionTreeResponseData data = new PermissionTreeResponseData(tree); + + return data; } } diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/entity/Permission.java b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/entity/Permission.java index 72e2184..449123b 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/entity/Permission.java +++ b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/entity/Permission.java @@ -14,6 +14,8 @@ public class Permission extends ABaseEntity { * */ private static final long serialVersionUID = -8834200833972243635L; + + public static final String ROOT_PARENT_ID = "0"; public static final String TYPE_MENU = "2"; public static final String TYPE_OPERATION = "3"; @@ -156,19 +158,19 @@ public class Permission extends ABaseEntity { this.level = level; } - public int getLft() { + public Integer getLft() { return lft; } - public void setLft(int lft) { + public void setLft(Integer lft) { this.lft = lft; } - public int getRgt() { + public Integer getRgt() { return rgt; } - public void setRgt(int rgt) { + public void setRgt(Integer rgt) { this.rgt = rgt; } diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/model/PermissionTreeNode.java b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/model/PermissionTreeNode.java new file mode 100644 index 0000000..0f93a47 --- /dev/null +++ b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/model/PermissionTreeNode.java @@ -0,0 +1,24 @@ +package com.supwisdom.institute.backend.system.domain.model; + +import java.util.List; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import com.supwisdom.institute.backend.common.framework.model.IModel; +import com.supwisdom.institute.backend.system.domain.entity.Permission; + +@ToString +public class PermissionTreeNode extends Permission implements IModel { + + /** + * + */ + private static final long serialVersionUID = 6984458902464386215L; + + @Getter + @Setter + List children; + +} diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/repo/PermissionRepository.java b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/repo/PermissionRepository.java index 42b70c8..0768adb 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/repo/PermissionRepository.java +++ b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/repo/PermissionRepository.java @@ -5,16 +5,23 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; import javax.transaction.Transactional; import org.springframework.data.domain.Example; import org.springframework.data.domain.ExampleMatcher; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import org.springframework.util.StringUtils; import com.supwisdom.institute.backend.common.framework.repo.BaseJpaRepository; import com.supwisdom.institute.backend.common.util.MapBeanUtils; @@ -23,7 +30,87 @@ import com.supwisdom.institute.backend.system.domain.entity.Permission; @Repository @Transactional public interface PermissionRepository extends BaseJpaRepository { + + + @Override + public default Specification convertToSpec(Map mapBean) { + + Specification spec = new Specification() { + + /** + * + */ + private static final long serialVersionUID = 9071470982419099273L; + + @Override + public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { + List predicates = new ArrayList<>(); + + if (mapBean != null) { + + if (MapBeanUtils.getBoolean(mapBean, "deleted") != null) { + predicates.add(criteriaBuilder.equal(root.get("deleted"), MapBeanUtils.getBoolean(mapBean, "deleted"))); + } + + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "code"))) { + predicates.add(criteriaBuilder.like(root.get("code"), "%" + MapBeanUtils.getString(mapBean, "code") + "%")); + } + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "name"))) { + predicates.add(criteriaBuilder.like(root.get("name"), "%" + MapBeanUtils.getString(mapBean, "name") + "%")); + } + + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "status"))) { + predicates.add(criteriaBuilder.equal(root.get("status"), MapBeanUtils.getString(mapBean, "status"))); + } + + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "type"))) { + predicates.add(criteriaBuilder.equal(root.get("type"), MapBeanUtils.getString(mapBean, "type"))); + } + + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "url"))) { + predicates.add(criteriaBuilder.like(root.get("url"), "%" + MapBeanUtils.getString(mapBean, "url") + "%")); + } + + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "parentId"))) { + predicates.add(criteriaBuilder.equal(root.get("parentId"), MapBeanUtils.getString(mapBean, "parentId"))); + } +// if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "grantTimeBegin"))) { +// String grantTimeBegin = MapBeanUtils.getString(mapBean, "grantTimeBegin"); +// Date d = DateUtil.parseDate(grantTimeBegin+" 00:00:00", "yyyy-MM-dd HH:mm:ss"); +// +// if (d != null) { +// predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("grantTime"), d)); +// } +// } +// +// if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "grantTimeEnd"))) { +// String grantTimeEnd = MapBeanUtils.getString(mapBean, "grantTimeEnd"); +// Date d = DateUtil.parseDate(grantTimeEnd+" 23:59:59", "yyyy-MM-dd HH:mm:ss"); +// +// if (d != null) { +// predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get("grantTime"), d)); +// } +// } + + List predicatesKeyword = new ArrayList<>(); + if (!StringUtils.isEmpty(MapBeanUtils.getString(mapBean, "keyword"))) { + predicatesKeyword.add(criteriaBuilder.like(root.get("username"), "%" + MapBeanUtils.getString(mapBean, "keyword") + "%")); + predicatesKeyword.add(criteriaBuilder.like(root.get("name"), "%" + MapBeanUtils.getString(mapBean, "keyword") + "%")); + predicatesKeyword.add(criteriaBuilder.like(root.get("memo"), "%" + MapBeanUtils.getString(mapBean, "keyword") + "%")); + + predicates.add(criteriaBuilder.or(predicatesKeyword.toArray(new Predicate[predicatesKeyword.size()]))); + } + } + + return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])); + } + + }; + + return spec; + } + @Override public default Page selectPageList(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) { if (loadAll) { @@ -297,4 +384,26 @@ public interface PermissionRepository extends BaseJpaRepository { return permissions; } + + + + public default List selectList(boolean loadAll, int pageIndex, int pageSize, Map mapBean, Map orderBy) { + + Specification spec = convertToSpec(mapBean); + + if (loadAll) { + pageIndex = 0; + pageSize = Integer.MAX_VALUE; + } + + Sort sort = convertToSort(orderBy); + + if (sort == null) { + return this.findAll(spec); + } else { + return this.findAll(spec, sort); + } + } + + } diff --git a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/service/PermissionService.java b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/service/PermissionService.java index b00011c..d7ebd1e 100644 --- a/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/service/PermissionService.java +++ b/system/domain/src/main/java/com/supwisdom/institute/backend/system/domain/service/PermissionService.java @@ -1,15 +1,23 @@ package com.supwisdom.institute.backend.system.domain.service; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import lombok.extern.slf4j.Slf4j; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import com.supwisdom.institute.backend.common.framework.entity.EntityUtils; import com.supwisdom.institute.backend.common.framework.service.ABaseService; import com.supwisdom.institute.backend.system.domain.entity.Permission; +import com.supwisdom.institute.backend.system.domain.model.PermissionTreeNode; import com.supwisdom.institute.backend.system.domain.repo.PermissionRepository; +@Slf4j @Service public class PermissionService extends ABaseService { @@ -21,10 +29,36 @@ public class PermissionService extends ABaseService selectPermissionTree(Map mapBean) { + public PermissionTreeNode selectPermissionTree(Map mapBean) { + + List permissions = permissionRepository.selectList(true, -1, -1, mapBean, null); + + Map parentTreeNode = new LinkedHashMap(); + + PermissionTreeNode rootTreeNode = new PermissionTreeNode(); + rootTreeNode.setId(Permission.ROOT_PARENT_ID); + rootTreeNode.setCode("ROOT"); + rootTreeNode.setName("顶级菜单"); + rootTreeNode.setChildren(new ArrayList()); + + parentTreeNode.put(rootTreeNode.getId(), rootTreeNode); + + for (Permission permission : permissions) { + PermissionTreeNode treeNode = EntityUtils.copy(permission, new PermissionTreeNode()); + treeNode.setChildren(new ArrayList()); + + parentTreeNode.put(treeNode.getId(), treeNode); + } + for (PermissionTreeNode treeNode : parentTreeNode.values()) { + if (!parentTreeNode.containsKey(treeNode.getParentId())) { + continue; + } + + parentTreeNode.get(treeNode.getParentId()).getChildren().add(treeNode); + } - return null; + return rootTreeNode; } }