From abf3bd7c0ac30854031fd83ead092e35cea2d026 Mon Sep 17 00:00:00 2001 From: zhansihu Date: Tue, 19 Sep 2023 10:55:58 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B1=82=E7=BA=A7=E6=A0=A1=E9=AA=8C=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=9B=E5=A2=9E=E5=8A=A0=E5=88=A0=E9=99=A4=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=85=B3=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SaasProductModuleFeatureRelationDao.java | 11 +++++ .../impl/PermissionPointServiceImpl.java | 46 +++++++++++++++++-- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasProductModuleFeatureRelationDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasProductModuleFeatureRelationDao.java index 8f7bba44..ce3317c3 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasProductModuleFeatureRelationDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasProductModuleFeatureRelationDao.java @@ -2,9 +2,13 @@ package cn.axzo.tyr.server.repository.dao; import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; import cn.axzo.tyr.server.repository.mapper.SaasProductModuleFeatureRelationMapper; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Repository; +import java.util.List; + /** * 产品-菜单关联关系(SaasProductModuleFeatureRelation)表服务实现类 * @@ -14,5 +18,12 @@ import org.springframework.stereotype.Repository; @Repository public class SaasProductModuleFeatureRelationDao extends ServiceImpl { + public void removeByPermissionPointIds(List permissionPointIds) { + if (CollectionUtil.isEmpty(permissionPointIds)) { + return; + } + this.remove(new LambdaQueryWrapper() + .in(SaasProductModuleFeatureRelation::getFeatureId, permissionPointIds)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 18c69d8d..44b3d133 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -18,6 +18,8 @@ import cn.axzo.tyr.client.model.permission.PermissionPointMoveRequest; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; +import cn.axzo.tyr.server.common.util.Throws; +import cn.axzo.tyr.server.repository.dao.SaasProductModuleFeatureRelationDao; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao; @@ -36,6 +38,8 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import static cn.axzo.tyr.client.model.enums.FeatureType.BUTTON; +import static cn.axzo.tyr.client.model.enums.FeatureType.MODULE; import static cn.axzo.tyr.server.common.constants.PermissionConstant.*; /** @@ -53,6 +57,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { private final SaasFeatureDao saasFeatureDao; private final SaasBasicDictService saasBasicDictService; private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; + private final SaasProductModuleFeatureRelationDao saasProductModuleFeatureRelationDao; @Override public List listTreeNodes(PermissionPointTreeQueryReq request) { @@ -330,7 +335,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class); saasFeature.setFitOuTypeBit(dto.mergeFitOuTypeBit()); saasFeature.setFitOuNodeTypeBit(dto.mergeFitOuNodeTypeBit()); - SaasFeature parent; + SaasFeature parent = null; if (dto.getParentId() == null || dto.getParentId() < 1) { saasFeature.setParentId(0L); saasFeature.setPath(FEATURE_TOP_PATH); @@ -340,6 +345,8 @@ public class PermissionPointServiceImpl implements PermissionPointService { saasFeature.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER); saasFeature.setParentBusinessNo(parent.getBusinessNo()); } + FeatureType featureType = FeatureType.apply(dto.getFeatureType()); + checkParentType(featureType, parent); //生成biz_no saasFeature.setBusinessNo(FEATURE_BIZ_NO_PREFIX + System.currentTimeMillis()); @@ -351,6 +358,34 @@ public class PermissionPointServiceImpl implements PermissionPointService { return dto; } + private void checkParentType(FeatureType featureType, SaasFeature parent) { + //检查父级元素类型 + switch (featureType) { + case MODULE: + if (parent != null) { + Throws.paramException(BaseCode.BAD_REQUEST, "菜单必须为顶级"); + } + break; + case MENU: + //MENU PAGE相同逻辑 + case PAGE: + if (parent == null + || FeatureType.apply(parent.getFeatureType()) == BUTTON) { + Throws.paramException(BaseCode.BAD_REQUEST, "页面层级错误"); + } + break; + case BUTTON: + if (parent == null + || FeatureType.apply(parent.getFeatureType()) == MODULE + || FeatureType.apply(parent.getFeatureType()) == BUTTON) { + Throws.paramException(BaseCode.BAD_REQUEST, "按钮层级错误"); + } + break; + default: + Throws.paramException(BaseCode.BAD_REQUEST, "不支持的元素类型"); + } + } + @Transactional(rollbackFor = Throwable.class) @Override public List delete(Long permissionPointId) { @@ -360,7 +395,7 @@ public class PermissionPointServiceImpl implements PermissionPointService { //删除自己 this.saasFeatureDao.removeById(permissionPointId); delIds.add(feature.getId()); - if (feature.getFeatureType().equals(FeatureType.BUTTON.getCode())) { + if (feature.getFeatureType().equals(BUTTON.getCode())) { //bizNo返回用于删除路由 bizNoList.add(feature.getBusinessNo()); } @@ -371,12 +406,14 @@ public class PermissionPointServiceImpl implements PermissionPointService { this.saasFeatureDao.removeByIds(childrenIds); delIds.addAll(childrenIds); List buttonBizNoList = children.stream() - .filter(x -> x.getFeatureType().equals(FeatureType.BUTTON.getCode())) + .filter(x -> x.getFeatureType().equals(BUTTON.getCode())) .map(SaasFeature::getBusinessNo) .collect(Collectors.toList()); bizNoList.addAll(buttonBizNoList); } + //删除关联数据 this.saasPgroupPermissionRelationDao.removeByPermissionPointIds(delIds); + this.saasProductModuleFeatureRelationDao.removeByPermissionPointIds(delIds); return bizNoList; } @@ -458,6 +495,9 @@ public class PermissionPointServiceImpl implements PermissionPointService { throw new BizException(BaseCode.BAD_REQUEST, "不允许移到子级"); } } + //检查元素类型层级 + FeatureType featureType = FeatureType.apply(feature.getFeatureType()); + checkParentType(featureType, parent); //当前节点更新 SaasFeature entity = new SaasFeature();