package com.doumee.service.system.impl; import com.doumee.dao.system.SystemMenuMapper; import com.doumee.dao.system.model.SystemMenu; import com.doumee.dao.system.vo.SystemMenuListVO; import com.doumee.service.system.SystemMenuService; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.Arrays; import java.util.List; import java.util.stream.Collectors; /** * 系统菜单Service实现 * @author Eva.Caesar Liu * @since 2025/03/31 16:44 */ @Service public class SystemMenuServiceImpl implements SystemMenuService { @Autowired private SystemMenuMapper systemMenuMapper; @Override public Integer create(SystemMenu systemMenu) { systemMenuMapper.insert(systemMenu); return systemMenu.getId(); } @Override public void deleteById(Integer id) { SystemMenu systemMenu = new SystemMenu(); systemMenu.setId(id); systemMenu.setDeleted(Boolean.TRUE); this.updateById(systemMenu); } @Override @Transactional public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) return; for (Integer id : ids) { this.deleteById(id); } } @Override public void updateById(SystemMenu systemMenu) { systemMenuMapper.updateById(systemMenu); } @Override @Transactional public void updateByIdInBatch(List systemMenus) { if (CollectionUtils.isEmpty(systemMenus)) return; for (SystemMenu systemMenu: systemMenus) { this.updateById(systemMenu); } } @Override public SystemMenu findById(Integer id) { return systemMenuMapper.selectById(id); } @Override public SystemMenu findOne(SystemMenu systemMenu) { Wrapper wrapper = new QueryWrapper<>(systemMenu); return systemMenuMapper.selectOne(wrapper); } @Override public List findList(SystemMenu systemMenu) { QueryWrapper wrapper = new QueryWrapper<>(systemMenu); wrapper.lambda().orderByAsc(SystemMenu::getSort); return systemMenuMapper.selectList(wrapper); } @Override public List findList() { return systemMenuMapper.selectManageList(); } @Override public List findRootList() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda() .isNull(SystemMenu::getParentId) .eq(SystemMenu::getDeleted, Boolean.FALSE) .orderByAsc(SystemMenu::getSort); return systemMenuMapper.selectList(queryWrapper); } @Override public List findByUserId(Integer userId) { return systemMenuMapper.selectByUserId(userId); } @Override public List findByRoleId(Integer roleId) { return systemMenuMapper.selectByRoleId(roleId); } @Override public long count(SystemMenu systemMenu) { Wrapper wrapper = new QueryWrapper<>(systemMenu); return systemMenuMapper.selectCount(wrapper); } @Override public List findChildren(Integer menuId) { List pool = new ArrayList<>(); this.fillChildren(pool, Arrays.asList(menuId)); return pool; } /** * 获取子部门ID * @author Eva.Caesar Liu * @date 2025/03/31 16:44 */ private void fillChildren(List pool, List parentIds) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda() .eq(SystemMenu::getDeleted, Boolean.FALSE) .in(SystemMenu::getParentId, parentIds); List departments = systemMenuMapper.selectList(queryWrapper); List ids = departments.stream().map(SystemMenu::getId).collect(Collectors.toList()); if (ids.size() > 0) { pool.addAll(ids); this.fillChildren(pool, ids); } } }