| | |
| | | package com.doumee.service.system.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.doumee.dao.system.dto.DeleteSystemPermissionDTO; |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.doumee.core.model.PageData; |
| | | import com.doumee.core.model.PageWrap; |
| | | import com.doumee.service.business.third.model.PageData; |
| | | import com.doumee.service.business.third.model.PageWrap; |
| | | import com.doumee.dao.system.SystemPermissionMapper; |
| | | import com.doumee.dao.system.dto.QuerySystemPermissionDTO; |
| | | import com.doumee.dao.system.model.SystemPermission; |
| | |
| | | import com.doumee.service.system.SystemPermissionService; |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import org.apache.commons.lang3.RandomStringUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Service |
| | | public class SystemPermissionServiceImpl implements SystemPermissionService { |
| | | |
| | | |
| | | @Autowired |
| | | private SystemPermissionMapper systemPermissionMapper; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void delete(DeleteSystemPermissionDTO dto) { |
| | | UpdateWrapper<SystemPermission> deleteWrapper = new UpdateWrapper<>(); |
| | | deleteWrapper.lambda() |
| | | .set(SystemPermission::getDeleted, Boolean.TRUE) |
| | | .eq(dto.getId() != null, SystemPermission::getId, dto.getId()) |
| | | .likeLeft(dto.getModulePrefix() != null, SystemPermission::getModule, dto.getModulePrefix()); |
| | | systemPermissionMapper.update(null, deleteWrapper); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteInBatch(List<DeleteSystemPermissionDTO> dtos) { |
| | | if (CollectionUtils.isEmpty(dtos)) { |
| | | return; |
| | | } |
| | | for (DeleteSystemPermissionDTO dto : dtos) { |
| | | this.delete(dto); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void updateById(SystemPermission systemPermission) { |
| | | systemPermissionMapper.updateById(systemPermission); |
| | | } |
| | |
| | | @Transactional |
| | | public void updateByIdInBatch(List<SystemPermission> systemPermissions) { |
| | | if (CollectionUtils.isEmpty(systemPermissions)) return; |
| | | for (SystemPermission systemPermission: systemPermissions) { |
| | | for (SystemPermission systemPermission : systemPermissions) { |
| | | this.updateById(systemPermission); |
| | | } |
| | | } |
| | |
| | | |
| | | @Override |
| | | public SystemPermission findOne(SystemPermission systemPermission) { |
| | | Wrapper<SystemPermission> wrapper = new QueryWrapper<>(systemPermission); |
| | | QueryWrapper<SystemPermission> wrapper = new QueryWrapper<>(systemPermission); |
| | | wrapper.lambda().last("limit 1"); |
| | | return systemPermissionMapper.selectOne(wrapper); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public PageData<SystemPermissionListVO> findPage(PageWrap<QuerySystemPermissionDTO> pageWrap) { |
| | | PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | return PageData.from(new PageInfo<>(systemPermissionMapper.selectManageList(pageWrap.getModel(), pageWrap.getOrderByClause()))); |
| | | public List<SystemPermissionListVO> findTree() { |
| | | List<SystemPermissionListVO> permissionList = systemPermissionMapper.selectManageList(); |
| | | List<SystemPermissionListVO> tree = new ArrayList<>(); |
| | | for (SystemPermissionListVO permission : permissionList) { |
| | | // 没有模块的权限默认归属为"其它"模块 |
| | | if (StringUtils.isBlank(permission.getModule())) { |
| | | permission.setModule("其它"); |
| | | } |
| | | // 分解模块 |
| | | String[] modulePaths = permission.getModule().split("/"); |
| | | SystemPermissionListVO target = null; |
| | | SystemPermissionListVO parent = null; |
| | | List<String> paths = new ArrayList<>(); |
| | | for (String path : modulePaths) { |
| | | paths.add(path); |
| | | // 查找模块 |
| | | target = this.getTargetNode(tree, paths); |
| | | // 如果模块不存在,则添加一个子模块 |
| | | if (target == null) { |
| | | target = new SystemPermissionListVO(); |
| | | target.setId(Integer.valueOf(RandomStringUtils.randomNumeric(6)) * -1); |
| | | target.setLevel(paths.size() - 1); |
| | | target.setType("module"); |
| | | target.setName(path); |
| | | target.setModulePath(StringUtils.join(paths, "/")); |
| | | target.setChildren(new ArrayList<>()); |
| | | if (parent != null) { |
| | | parent.getChildren().add(target); |
| | | } else { |
| | | tree.add(target); |
| | | } |
| | | } |
| | | parent = target; |
| | | } |
| | | // 将权限添加进模块中 |
| | | if (target != null) { |
| | | target.getChildren().add(permission); |
| | | } |
| | | } |
| | | return tree; |
| | | } |
| | | |
| | | @Override |
| | |
| | | Wrapper<SystemPermission> wrapper = new QueryWrapper<>(systemPermission); |
| | | return systemPermissionMapper.selectCount(wrapper); |
| | | } |
| | | |
| | | /** |
| | | * 查找目标节点 |
| | | * @param tree 节点树 |
| | | * @param paths 模块路径 |
| | | * @return |
| | | */ |
| | | private SystemPermissionListVO getTargetNode(List<SystemPermissionListVO> tree, List<String> paths) { |
| | | List<SystemPermissionListVO> list = tree; |
| | | List<SystemPermissionListVO> nodeStack = new ArrayList<>(); |
| | | for (String path : paths) { |
| | | if (list == null) { |
| | | break; |
| | | } |
| | | for (SystemPermissionListVO permission : list) { |
| | | if (path.equals(permission.getName()) && "module".equals(permission.getType())) { |
| | | nodeStack.add(permission); |
| | | list = permission.getChildren(); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | return nodeStack.size() == paths.size() ? nodeStack.get(nodeStack.size() - 1) : null; |
| | | } |
| | | } |