package com.monkeylessey.sys.service.impl; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.monkeylessey.enums.general.MenuTypeEnum; import com.monkeylessey.sys.domain.entity.SysMenu; import com.monkeylessey.sys.domain.entity.SysOrg; import com.monkeylessey.sys.domain.form.SysMenuForm; import com.monkeylessey.sys.domain.query.SysMenuQuery; import com.monkeylessey.sys.domain.tree.SysMenuTree; import com.monkeylessey.sys.domain.tree.SysOrgTree; import com.monkeylessey.sys.domain.vo.SysMenuVO; import com.monkeylessey.exception.ServiceException; import com.monkeylessey.sys.mapper.SysMenuMapper; import com.monkeylessey.response.Result; import com.monkeylessey.sys.service.SysMenuService; import com.monkeylessey.framework.utils.SecurityUtil; import com.monkeylessey.utils.TreeUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author 向培 * @since 2022-05-14 */ @Service @RequiredArgsConstructor public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService { private final SysMenuMapper menuMapper; @Override public Result addMenu(SysMenuForm form) { form.checkNotBlank(); SysMenu menuEntity = SysMenuForm.getMenuEntity(null, form); String s = SecurityUtil.getCurrentUserName(); menuEntity.setCreateBy(s); if (Objects.isNull(menuEntity.getParentId())) { menuEntity.setParentId("0"); } if (StringUtils.isNotBlank(form.getMenuPath())) { // 校验路由唯一 List menus = new LambdaQueryChainWrapper<>(baseMapper) .eq(SysMenu::getMenuPath, form.getMenuPath()) .select(SysMenu::getMenuType) .list(); this.checkRepeat(menus, "菜单路径已存在"); } if (StringUtils.isNotBlank(form.getPermission())) { // 校验权限唯一 List menus = new LambdaQueryChainWrapper<>(baseMapper) .eq(SysMenu::getPermission, form.getPermission()) .select(SysMenu::getMenuType) .list(); this.checkRepeat(menus, "权限已存在"); } baseMapper.insert(menuEntity); return Result.ok("添加成功"); } @Override public Result editMenu(SysMenuForm form) { form.checkNotBlank(); if (StringUtils.isNotBlank(form.getMenuPath())) { // 校验路由唯一 List menus = new LambdaQueryChainWrapper<>(baseMapper) .eq(SysMenu::getMenuPath, form.getMenuPath()) .select(SysMenu::getMenuType, SysMenu::getMenuPath,SysMenu::getId) .ne(SysMenu::getId, form.getId()) .list(); // 校路由限唯一 this.checkRepeat(menus, "菜单路径已存在"); } if (StringUtils.isNotBlank(form.getPermission())) { // 校验权限唯一 List menus = new LambdaQueryChainWrapper<>(baseMapper) .eq(SysMenu::getPermission, form.getPermission()) .select(SysMenu::getMenuType, SysMenu::getMenuPath,SysMenu::getId) .ne(SysMenu::getId, form.getId()) .list(); // 校验权限唯一 this.checkRepeat(menus, "权限已存在"); } SysMenu menuEntity = SysMenuForm.getMenuEntity(null, form); String s = SecurityUtil.getCurrentUserName(); menuEntity.setUpdateBy(s); try { baseMapper.updateById(menuEntity); return Result.ok("修改成功"); } catch (Exception e) { e.printStackTrace(); return Result.error("修改失败"); } } private void checkRepeat(List menus, String errMsg) { if (! CollectionUtils.isEmpty(menus)) { throw new ServiceException(errMsg); } } @Override public Result deleteMenuById(String menuId) { try { baseMapper.deleteById(menuId); return Result.ok("删除成功"); } catch (Exception e) { e.printStackTrace(); return Result.error("删除失败"); } } @Override public Result selectMenuByPage(SysMenuQuery query) { List menuList = new LambdaQueryChainWrapper<>(baseMapper) .like(StringUtils.isNotBlank(query.getMenuName()), SysMenu::getMenuName, query.getMenuName()) .orderByAsc(SysMenu::getOrderNum) .list(); List vos = menuList.stream().map(menu -> { SysMenuTree vo = SysMenuTree.getVoByEntity(menu, null); return vo; }).collect(Collectors.toList()); List tree = TreeUtil.buildTree(vos); tree.sort(Comparator.comparing(SysMenuTree::getOrderNum)); return Result.ok().data(tree).total(tree.size()); } @Override public Result selectMenuTree(SysMenuQuery query) { List menuList = new LambdaQueryChainWrapper<>(baseMapper) .like(StringUtils.isNotBlank(query.getMenuName()), SysMenu::getMenuName, query.getMenuName()) .in(query.getExcludeBtn(), SysMenu::getMenuType, MenuTypeEnum.CATALOGUE, MenuTypeEnum.MENU) .orderByAsc(SysMenu::getOrderNum) .list(); List vos = menuList.stream().map(menu -> { SysMenuTree vo = SysMenuTree.getVoByEntity(menu, null); if (StringUtils.isNotBlank(query.getId()) && vo.getId().equals(query.getId())) { vo.setDisabled(Boolean.TRUE); } return vo; }).collect(Collectors.toList()); List tree = TreeUtil.buildTree(vos); tree.sort(Comparator.comparing(SysMenuTree::getOrderNum)); return Result.ok().data(tree).total(tree.size()); } @Override public Result selectMenuById(String menuId) { SysMenuVO sysMenuVO = menuMapper.selectMenuById(menuId); if ("0".equals(sysMenuVO.getParentId())) { sysMenuVO.setParentName("主目录"); } else { SysMenu one = new LambdaQueryChainWrapper<>(baseMapper) .select(SysMenu::getMenuName) .eq(Objects.nonNull(sysMenuVO.getParentId()), SysMenu::getId, sysMenuVO.getParentId()).one(); if (one != null) { sysMenuVO.setParentName(one.getMenuName()); } } return Result.ok("").data(sysMenuVO); } @Override @Transactional(rollbackFor = Exception.class) public Result deleteMenuByIds(List ids) { return Result.ok("操作成功").data(baseMapper.deleteBatchIds(ids)); } @Override public Result menuList() { List sysMenus = baseMapper.selectList(null); List vos = sysMenus.stream() .map(menu -> SysMenuVO.getVoByEntity(menu, null)) .collect(Collectors.toList()); return Result.ok().data(vos); } }