feature(权限点):增加保存 删除 变更接口

This commit is contained in:
zhansihu 2023-09-08 10:02:01 +08:00
parent 182c815d9d
commit 794e0dc515
8 changed files with 183 additions and 3 deletions

View File

@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@ -33,4 +34,21 @@ public interface PermissionPointApi {
/** 根据权限点ID批量查询节点信息 **/
@PostMapping(value = "/api/v1/permissionPoint/listTreeNodesByIds")
ApiResult<List<PermissionPointTreeNode>> listTreeNodesByIds(@RequestBody List<Long> permissionIds);
/** 保存权限点 - 新增或更新 **/
@PostMapping(value = "/api/v1/permissionPoint/save")
ApiResult<Void> savePermissionPoint(@RequestBody PermissionPointDTO dto);
/** 删除权限点 - 直接删除 **/
@PostMapping(value = "/api/v1/permissionPoint/delete/{permissionId}")
ApiResult<Void> deletePermissionPoint(@PathVariable Long permissionId);
/** 更新父级节点 - 直接更新不校验 **/
@PostMapping(value = "/api/v1/permissionPoint/change/{permissionId}")
ApiResult<Void> changeParent(@RequestParam Long updater, @PathVariable Long permissionId, @RequestParam Long newParentId);
/** 更改排序 **/
@PostMapping(value = "/api/v1/permissionPoint/sort/{permissionId}")
ApiResult<Void> updateSort(@RequestParam Long updater, @PathVariable Long permissionId, @RequestParam Integer direction);
}

View File

@ -8,6 +8,7 @@ import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq;
import cn.axzo.tyr.server.service.PermissionPointService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@ -42,4 +43,28 @@ public class PermissionPointController implements PermissionPointApi {
public ApiResult<List<PermissionPointTreeNode>> listTreeNodesByIds(List<Long> permissionIds) {
return ApiResult.ok(permissionPointService.listNodesByIds(permissionIds));
}
@Override
public ApiResult<Void> savePermissionPoint(PermissionPointDTO dto) {
permissionPointService.save(dto);
return ApiResult.ok();
}
@Override
public ApiResult<Void> deletePermissionPoint(Long permissionId) {
permissionPointService.delete(permissionId);
return ApiResult.ok();
}
@Override
public ApiResult<Void> changeParent(Long updater, Long permissionId, Long newParentId) {
permissionPointService.changeParent(updater, permissionId, newParentId);
return ApiResult.ok();
}
@Override
public ApiResult<Void> updateSort(Long updater, Long permissionId, Integer direction) {
permissionPointService.updateSort(updater, permissionId, direction);
return ApiResult.ok();
}
}

View File

@ -2,6 +2,7 @@ package cn.axzo.tyr.server.repository.mapper;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Update;
/**
* <p>
@ -13,4 +14,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface SaasFeatureMapper extends BaseMapper<SaasFeature> {
}
@Update("UPDATE saas_feature " +
"SET path = REPLACE(path,#{pathPrefix}, #{newPathPrefix}) , update_by = #{updater}" +
"WHERE path LIKE CONCAT(#{pathPrefix},'%') ")
void updateChildrenPath(Long updater, String pathPrefix, String newPathPrefix);
}

View File

@ -3,6 +3,8 @@ package cn.axzo.tyr.server.repository.service;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 服务类
@ -13,4 +15,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface SaasFeatureDao extends IService<SaasFeature> {
void updateChildrenPath(Long updater, String pathPrefix, String newPathPrefix);
List<SaasFeature> listByParentId(Long parentId);
void updateSort(Long permissionId, int switchIndex);
}

View File

@ -3,9 +3,12 @@ package cn.axzo.tyr.server.repository.service.impl;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import cn.axzo.tyr.server.repository.mapper.SaasFeatureMapper;
import cn.axzo.tyr.server.repository.service.SaasFeatureDao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务实现类
@ -17,4 +20,18 @@ import org.springframework.stereotype.Service;
@Service
public class SaasFeatureDaoImpl extends ServiceImpl<SaasFeatureMapper, SaasFeature> implements SaasFeatureDao {
@Override
public void updateChildrenPath(Long updater, String pathPrefix, String newPathPrefix) {
this.baseMapper.updateChildrenPath(updater, pathPrefix, newPathPrefix);
}
@Override
public List<SaasFeature> listByParentId(Long parentId) {
return this.baseMapper.selectList(new LambdaQueryWrapper<SaasFeature>().eq(SaasFeature::getParentId, parentId));
}
@Override
public void updateSort(Long permissionId, int switchIndex) {
}
}

View File

@ -29,4 +29,16 @@ public interface PermissionPointService {
* 根据权限点ID查询详情
* **/
PermissionPointDTO getDetail(Long permissionId);
/** 保存权限点 **/
void save(PermissionPointDTO dto);
/** 删除权限点 **/
void delete(Long permissionId);
/** 更新父级 **/
void changeParent(Long updater, Long permissionId,Long newParentId);
/** 移动排序 **/
void updateSort(Long updater, Long permissionId, Integer direction);
}

View File

@ -17,13 +17,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -153,7 +154,7 @@ public class PermissionPointServiceImpl implements PermissionPointService {
return dto;
}
//所有父级处理
List<String> split = StrUtil.split(dto.getPath(), FEATURE_PATH_DELIMITER);
List<String> split = StrUtil.split(dto.getPath(), FEATURE_PATH_DELIMITER, true, true);
List<Long> ids = split.stream()
.filter(x -> !StrUtil.equals(FEATURE_NO_PARENT, x))
.map(Long::valueOf)
@ -170,6 +171,85 @@ public class PermissionPointServiceImpl implements PermissionPointService {
return dto;
}
@Override
public void save(PermissionPointDTO dto) {
SaasFeature saasFeature = BeanMapper.copyBean(dto, SaasFeature.class);
if (dto.getId() == null) {
this.saasFeatureDao.save(saasFeature);
} else {
this.saasFeatureDao.updateById(saasFeature);
}
}
@Transactional(rollbackFor = Throwable.class)
@Override
public void delete(Long permissionId) {
this.saasFeatureDao.removeById(permissionId);
//TODO:@Zhan 删除关联数据 - 权限集合
}
@Transactional(rollbackFor = Throwable.class)
@Override
public void changeParent(Long updater, Long permissionId, Long newParentId) {
SaasFeature feature = this.saasFeatureDao.getById(permissionId);
if (Objects.equals(feature.getParentId(), newParentId)) {
//父级未变
return;
}
SaasFeature parent = this.saasFeatureDao.getById(newParentId);
if (StrUtil.equals(feature.getTerminal(), parent.getTerminal())) {
throw new BizException(BaseCode.BAD_REQUEST, "不允许跨工作台");
}
if (parent.getPath().contains(String.valueOf(permissionId))) {
throw new BizException(BaseCode.BAD_REQUEST, "不允许移到子级");
}
//当前节点
SaasFeature entity = new SaasFeature();
entity.setParentId(feature.getId());
entity.setParentId(newParentId);
entity.setPath(parent.getPath() + parent.getId() + FEATURE_PATH_DELIMITER);
entity.setUpdateBy(updater);
this.saasFeatureDao.updateById(entity);
//更新子级path
this.saasFeatureDao.updateChildrenPath(updater, feature.getPath() + feature.getId() + FEATURE_PATH_DELIMITER,
entity.getPath() + entity.getId() + FEATURE_PATH_DELIMITER);
}
@Override
public void updateSort(Long updater, Long permissionId, Integer direction) {
//查询当前节点和所有同级节点
SaasFeature feature = this.saasFeatureDao.getById(permissionId);
List<SaasFeature> children = this.saasFeatureDao.listByParentId(feature.getParentId());
List<SaasFeature> sortedChildren = children.stream()
.sorted(Comparator.comparing(SaasFeature::getSort))
.collect(Collectors.toList());
//确认当前节点index
Integer index = sortedChildren.stream()
.filter(x -> x.getId().equals(permissionId))
.map(sortedChildren::indexOf)
.findFirst().get();
int switchIndex = 0;
if (direction > 0) {
//向上
if (index == 0) {
//已经是第一个
return;
}
switchIndex = ++index;
} else {
//向下
if (index == sortedChildren.size() - 1) {
//已经最后一个
return;
}
switchIndex = --index;
}
//更新当前节点
this.saasFeatureDao.updateSort(permissionId, switchIndex);
//更新交换节点
this.saasFeatureDao.updateSort(sortedChildren.get(switchIndex).getId(), index);
}
private PermissionPointTreeNode feature2Node(SaasFeature feature) {
PermissionPointTreeNode node = new PermissionPointTreeNode();

View File

@ -1,6 +1,7 @@
package cn.axzo.tyr.server.permission;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.permission.PermissionPointDTO;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq;
import cn.axzo.tyr.server.controller.permission.PermissionPointController;
@ -44,4 +45,19 @@ public class PermissionPointTest {
System.out.println("---------------");
System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect));
}
@Test
public void testGetDetail() {
Long permissionId = 360L;
ApiResult<PermissionPointDTO> result = controller.getDetail(permissionId);
System.out.println(JSON.toJSONString(result));
}
@Test
public void testListByIds() {
List<Long> ids = Arrays.asList(354L, 360L);
ApiResult<List<PermissionPointTreeNode>> result = controller.listTreeNodesByIds(ids);
System.out.println(JSON.toJSONString(result));
}
}