feature(权限点):增加保存 删除 变更接口
This commit is contained in:
parent
182c815d9d
commit
794e0dc515
@ -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);
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user