| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- package com.ctsi.SysMenu.service.impl;
- import cn.hutool.core.util.StrUtil;
- import com.ctsi.SysMenu.entity.SysMenuSearchPO;
- import com.ctsi.SysOrg.entity.SysOrgSearchPO;
- import com.github.yulichang.wrapper.MPJLambdaWrapper;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
- import com.ctsi.SysMenu.entity.SysMenu;
- import com.ctsi.SysMenu.mapper.SysMenuMapper;
- import com.ctsi.SysMenu.service.SysMenuService;
- import java.util.*;
- /**
- * 菜单;(sys_menu)表服务实现类
- * @author : machaoyi
- * @date : 2024-1-10
- */
- @Service
- public class SysMenuServiceImpl implements SysMenuService{
- @Autowired
- private SysMenuMapper sysMenuMapper;
- /**
- * 通过ID查询单条数据
- *
- * @param id 主键
- * @return 实例对象
- */
- public SysMenu queryById(Long id){
- return sysMenuMapper.selectById(id);
- }
- /**
- * 分页查询
- *
- * @param sysMenu 筛选条件
- * @param current 当前页码
- * @param size 每页大小
- * @return
- */
- public Page<SysMenuSearchPO> paginQuery(SysMenu sysMenu, long current, long size){
- //1. 构建动态查询条件
- MPJLambdaWrapper<SysMenu> queryWrapper = new MPJLambdaWrapper<>();
- if(StrUtil.isNotBlank(sysMenu.getMenuTitle())){
- queryWrapper.eq(SysMenu::getMenuTitle, sysMenu.getMenuTitle());
- }
- if(StrUtil.isNotBlank(sysMenu.getMenuCode())){
- queryWrapper.eq(SysMenu::getMenuCode, sysMenu.getMenuCode());
- }
- if(StrUtil.isNotBlank(sysMenu.getMenuName())){
- queryWrapper.eq(SysMenu::getMenuName, sysMenu.getMenuName());
- }
- if(StrUtil.isNotBlank(sysMenu.getMenuIcon())){
- queryWrapper.eq(SysMenu::getMenuIcon, sysMenu.getMenuIcon());
- }
- queryWrapper.orderByAsc("ORDER_BY");
- //2. 执行分页查询
- Page<SysMenuSearchPO> pagin = new Page<>(current , size , true);
- IPage<SysMenuSearchPO> selectResult = sysMenuMapper.selectJoinPage(pagin , SysMenuSearchPO.class, queryWrapper);
- selectResult.setRecords(buildTree(selectResult.getRecords()));
- pagin.setPages(selectResult.getPages());
- pagin.setTotal(selectResult.getTotal());
- pagin.setRecords(selectResult.getRecords());
- //3. 返回结果
- return pagin;
- }
- /**
- * 新增数据
- *
- * @param sysMenu 实例对象
- * @return 实例对象
- */
- public SysMenu insert(SysMenu sysMenu){
- sysMenuMapper.insert(sysMenu);
- return sysMenu;
- }
- /**
- * 更新数据
- *
- * @param sysMenu 实例对象
- * @return 实例对象
- */
- public SysMenu update(SysMenu sysMenu){
- //1. 根据条件动态更新
- LambdaUpdateChainWrapper<SysMenu> chainWrapper = new LambdaUpdateChainWrapper<SysMenu>(sysMenuMapper);
- if(StrUtil.isNotBlank(sysMenu.getMenuTitle())){
- chainWrapper.set(SysMenu::getMenuTitle, sysMenu.getMenuTitle());
- }
- if(StrUtil.isNotBlank(sysMenu.getMenuCode())){
- chainWrapper.set(SysMenu::getMenuCode, sysMenu.getMenuCode());
- }
- if(StrUtil.isNotBlank(sysMenu.getMenuName())){
- chainWrapper.set(SysMenu::getMenuName, sysMenu.getMenuName());
- }
- if(StrUtil.isNotBlank(sysMenu.getMenuIcon())){
- chainWrapper.set(SysMenu::getMenuIcon, sysMenu.getMenuIcon());
- }
- //2. 设置主键,并更新
- chainWrapper.eq(SysMenu::getId, sysMenu.getId());
- boolean ret = chainWrapper.update();
- //3. 更新成功了,查询最最对象返回
- if(ret){
- return queryById(sysMenu.getId());
- }else{
- return sysMenu;
- }
- }
- /**
- * 通过主键删除数据
- *
- * @param id 主键
- * @return 是否成功
- */
- public boolean deleteById(Long id){
- int total = sysMenuMapper.deleteById(id);
- return total > 0;
- }
- public static List<SysMenuSearchPO> buildTree(List<SysMenuSearchPO> nodeList) {
- Map<Long, SysMenuSearchPO> nodeMap = new LinkedHashMap<>();
- // 将节点放入 Map 中,方便通过 id 查找
- for (SysMenuSearchPO node : nodeList) {
- nodeMap.put(node.getId(), node);
- }
- List<SysMenuSearchPO> tree = new ArrayList<>();
- // 逐个节点构建树
- for (SysMenuSearchPO node : nodeList) {
- if (node.getParentId() == 0) {
- // 根节点
- tree.add(buildTreeRecursively(node, nodeMap, node.getId()));
- }
- }
- return tree;
- }
- private static SysMenuSearchPO buildTreeRecursively(SysMenuSearchPO parentNode, Map<Long, SysMenuSearchPO> nodeMap, Long parentId) {
- List<SysMenuSearchPO> children = new ArrayList<>();
- // 查找当前节点的子节点
- nodeMap.forEach((id, node) -> {
- if (Objects.equals(node.getParentId(), parentId)) {
- children.add(buildTreeRecursively(node, nodeMap, node.getId()));
- }
- });
- // 将子节点设置到父节点
- parentNode.setChildren(children);
- return parentNode;
- }
- }
|