SysMenuServiceImpl.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package com.ctsi.SysMenu.service.impl;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.ctsi.SysMenu.entity.SysMenuSearchPO;
  4. import com.ctsi.SysOrg.entity.SysOrgSearchPO;
  5. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. import com.baomidou.mybatisplus.core.metadata.IPage;
  9. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  10. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  11. import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
  12. import com.ctsi.SysMenu.entity.SysMenu;
  13. import com.ctsi.SysMenu.mapper.SysMenuMapper;
  14. import com.ctsi.SysMenu.service.SysMenuService;
  15. import java.util.*;
  16. /**
  17. * 菜单;(sys_menu)表服务实现类
  18. * @author : machaoyi
  19. * @date : 2024-1-10
  20. */
  21. @Service
  22. public class SysMenuServiceImpl implements SysMenuService{
  23. @Autowired
  24. private SysMenuMapper sysMenuMapper;
  25. /**
  26. * 通过ID查询单条数据
  27. *
  28. * @param id 主键
  29. * @return 实例对象
  30. */
  31. public SysMenu queryById(Long id){
  32. return sysMenuMapper.selectById(id);
  33. }
  34. /**
  35. * 分页查询
  36. *
  37. * @param sysMenu 筛选条件
  38. * @param current 当前页码
  39. * @param size 每页大小
  40. * @return
  41. */
  42. public Page<SysMenuSearchPO> paginQuery(SysMenu sysMenu, long current, long size){
  43. //1. 构建动态查询条件
  44. MPJLambdaWrapper<SysMenu> queryWrapper = new MPJLambdaWrapper<>();
  45. if(StrUtil.isNotBlank(sysMenu.getMenuTitle())){
  46. queryWrapper.eq(SysMenu::getMenuTitle, sysMenu.getMenuTitle());
  47. }
  48. if(StrUtil.isNotBlank(sysMenu.getMenuCode())){
  49. queryWrapper.eq(SysMenu::getMenuCode, sysMenu.getMenuCode());
  50. }
  51. if(StrUtil.isNotBlank(sysMenu.getMenuName())){
  52. queryWrapper.eq(SysMenu::getMenuName, sysMenu.getMenuName());
  53. }
  54. if(StrUtil.isNotBlank(sysMenu.getMenuIcon())){
  55. queryWrapper.eq(SysMenu::getMenuIcon, sysMenu.getMenuIcon());
  56. }
  57. queryWrapper.orderByAsc("ORDER_BY");
  58. //2. 执行分页查询
  59. Page<SysMenuSearchPO> pagin = new Page<>(current , size , true);
  60. IPage<SysMenuSearchPO> selectResult = sysMenuMapper.selectJoinPage(pagin , SysMenuSearchPO.class, queryWrapper);
  61. selectResult.setRecords(buildTree(selectResult.getRecords()));
  62. pagin.setPages(selectResult.getPages());
  63. pagin.setTotal(selectResult.getTotal());
  64. pagin.setRecords(selectResult.getRecords());
  65. //3. 返回结果
  66. return pagin;
  67. }
  68. /**
  69. * 新增数据
  70. *
  71. * @param sysMenu 实例对象
  72. * @return 实例对象
  73. */
  74. public SysMenu insert(SysMenu sysMenu){
  75. sysMenuMapper.insert(sysMenu);
  76. return sysMenu;
  77. }
  78. /**
  79. * 更新数据
  80. *
  81. * @param sysMenu 实例对象
  82. * @return 实例对象
  83. */
  84. public SysMenu update(SysMenu sysMenu){
  85. //1. 根据条件动态更新
  86. LambdaUpdateChainWrapper<SysMenu> chainWrapper = new LambdaUpdateChainWrapper<SysMenu>(sysMenuMapper);
  87. if(StrUtil.isNotBlank(sysMenu.getMenuTitle())){
  88. chainWrapper.set(SysMenu::getMenuTitle, sysMenu.getMenuTitle());
  89. }
  90. if(StrUtil.isNotBlank(sysMenu.getMenuCode())){
  91. chainWrapper.set(SysMenu::getMenuCode, sysMenu.getMenuCode());
  92. }
  93. if(StrUtil.isNotBlank(sysMenu.getMenuName())){
  94. chainWrapper.set(SysMenu::getMenuName, sysMenu.getMenuName());
  95. }
  96. if(StrUtil.isNotBlank(sysMenu.getMenuIcon())){
  97. chainWrapper.set(SysMenu::getMenuIcon, sysMenu.getMenuIcon());
  98. }
  99. //2. 设置主键,并更新
  100. chainWrapper.eq(SysMenu::getId, sysMenu.getId());
  101. boolean ret = chainWrapper.update();
  102. //3. 更新成功了,查询最最对象返回
  103. if(ret){
  104. return queryById(sysMenu.getId());
  105. }else{
  106. return sysMenu;
  107. }
  108. }
  109. /**
  110. * 通过主键删除数据
  111. *
  112. * @param id 主键
  113. * @return 是否成功
  114. */
  115. public boolean deleteById(Long id){
  116. int total = sysMenuMapper.deleteById(id);
  117. return total > 0;
  118. }
  119. public static List<SysMenuSearchPO> buildTree(List<SysMenuSearchPO> nodeList) {
  120. Map<Long, SysMenuSearchPO> nodeMap = new LinkedHashMap<>();
  121. // 将节点放入 Map 中,方便通过 id 查找
  122. for (SysMenuSearchPO node : nodeList) {
  123. nodeMap.put(node.getId(), node);
  124. }
  125. List<SysMenuSearchPO> tree = new ArrayList<>();
  126. // 逐个节点构建树
  127. for (SysMenuSearchPO node : nodeList) {
  128. if (node.getParentId() == 0) {
  129. // 根节点
  130. tree.add(buildTreeRecursively(node, nodeMap, node.getId()));
  131. }
  132. }
  133. return tree;
  134. }
  135. private static SysMenuSearchPO buildTreeRecursively(SysMenuSearchPO parentNode, Map<Long, SysMenuSearchPO> nodeMap, Long parentId) {
  136. List<SysMenuSearchPO> children = new ArrayList<>();
  137. // 查找当前节点的子节点
  138. nodeMap.forEach((id, node) -> {
  139. if (Objects.equals(node.getParentId(), parentId)) {
  140. children.add(buildTreeRecursively(node, nodeMap, node.getId()));
  141. }
  142. });
  143. // 将子节点设置到父节点
  144. parentNode.setChildren(children);
  145. return parentNode;
  146. }
  147. }