package com.doumee.service.system.impl; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.doumee.dao.system.SystemPermissionMapper; import com.doumee.dao.system.dto.DeleteSystemPermissionDTO; import com.doumee.dao.system.model.SystemPermission; import com.doumee.dao.system.vo.SystemPermissionListVO; 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实现 * * @author Eva.Caesar Liu * @since 2025/03/31 16:44 */ @Service public class SystemPermissionServiceImpl implements SystemPermissionService { @Autowired private SystemPermissionMapper systemPermissionMapper; @Override public Integer create(SystemPermission systemPermission) { systemPermissionMapper.insert(systemPermission); return systemPermission.getId(); } @Override public void deleteById(Integer id) { SystemPermission systemPermission = new SystemPermission(); systemPermission.setId(id); systemPermission.setDeleted(Boolean.TRUE); this.updateById(systemPermission); } @Override @Transactional public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) return; for (Integer id : ids) { this.deleteById(id); } } @Override public void delete(DeleteSystemPermissionDTO dto) { UpdateWrapper 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 dtos) { if (CollectionUtils.isEmpty(dtos)) { return; } for (DeleteSystemPermissionDTO dto : dtos) { this.delete(dto); } } @Override public void updateById(SystemPermission systemPermission) { systemPermissionMapper.updateById(systemPermission); } @Override @Transactional public void updateByIdInBatch(List systemPermissions) { if (CollectionUtils.isEmpty(systemPermissions)) return; for (SystemPermission systemPermission : systemPermissions) { this.updateById(systemPermission); } } @Override public SystemPermission findById(Integer id) { return systemPermissionMapper.selectById(id); } @Override public List findByUserId(Integer userId) { return systemPermissionMapper.selectByUserId(userId); } @Override public List findByRoleId(Integer roleId) { return systemPermissionMapper.selectByRoleId(roleId); } @Override public SystemPermission findOne(SystemPermission systemPermission) { Wrapper wrapper = new QueryWrapper<>(systemPermission); return systemPermissionMapper.selectOne(wrapper); } @Override public List findList(SystemPermission systemPermission) { Wrapper wrapper = new QueryWrapper<>(systemPermission); return systemPermissionMapper.selectList(wrapper); } @Override public List findTree() { List permissionList = systemPermissionMapper.selectManageList(); List 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 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 public long count(SystemPermission systemPermission) { Wrapper wrapper = new QueryWrapper<>(systemPermission); return systemPermissionMapper.selectCount(wrapper); } /** * 查找目标节点 * @param tree 节点树 * @param paths 模块路径 * @return */ private SystemPermissionListVO getTargetNode(List tree, List paths) { List list = tree; List 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; } }