From 19792073aeb0462088208334b4bd4241571630d4 Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Tue, 27 Apr 2021 09:13:43 +0800
Subject: [PATCH] screen-manage                 菜单删除和添加功能

---
 screen-manage/src/main/java/com/moral/api/entity/Menu.java                   |    6 
 screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuDeleteForm.java |   24 ++
 screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuDeleteVO.java     |   24 ++
 screen-manage/src/main/java/com/moral/api/service/impl/MenuServiceImpl.java  |  182 ++++++++++++++++++
 screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuInsertForm.java |   42 ++++
 screen-manage/src/main/java/com/moral/api/controller/MenuController.java     |  134 ++++++++++++
 screen-manage/src/main/java/com/moral/api/pojo/dto/menu/MenuQueryDTO.java    |    2 
 screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuQueryVO.java      |   67 ++++++
 screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuVO.java           |    7 
 screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuInsertVO.java     |   26 ++
 screen-manage/src/main/java/com/moral/api/service/MenuService.java           |   29 ++
 11 files changed, 529 insertions(+), 14 deletions(-)

diff --git a/screen-manage/src/main/java/com/moral/api/controller/MenuController.java b/screen-manage/src/main/java/com/moral/api/controller/MenuController.java
index e12f46d..a3e3447 100644
--- a/screen-manage/src/main/java/com/moral/api/controller/MenuController.java
+++ b/screen-manage/src/main/java/com/moral/api/controller/MenuController.java
@@ -1,14 +1,24 @@
 package com.moral.api.controller;
 
+import com.moral.api.entity.Menu;
+import com.moral.api.pojo.dto.menu.MenuDTO;
+import com.moral.api.pojo.dto.menu.MenuQueryDTO;
+import com.moral.api.pojo.form.menu.MenuDeleteForm;
+import com.moral.api.pojo.form.menu.MenuInsertForm;
+import com.moral.api.pojo.vo.menu.MenuDeleteVO;
+import com.moral.api.pojo.vo.menu.MenuInsertVO;
 import com.moral.api.pojo.vo.menu.MenuQueryVO;
-import com.moral.api.pojo.vo.menu.MenuVO;
+import com.moral.api.service.MenuService;
+import com.moral.constant.ResponseCodeEnum;
 import com.moral.constant.ResultMessage;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * @ClassName MenuController
@@ -23,9 +33,117 @@
 @RestController
 @RequestMapping("/menu")
 public class MenuController {
-    @GetMapping("queryMock")
-    public ResultMessage queryMock(){
+    @Autowired
+    MenuService menuService;
 
-        return null;
+    @GetMapping("queryMock")
+    public ResultMessage queryMock() {
+        MenuQueryDTO dto = new MenuQueryDTO();
+        Menu menu1 = new Menu();
+        Menu menu11 = new Menu();
+        Menu menu111 = new Menu();
+        Menu menu12 = new Menu();
+        Menu menu121 = new Menu();
+        Menu menu13 = new Menu();
+
+        Menu menu2 = new Menu();
+        Menu menu21 = new Menu();
+        Menu menu211 = new Menu();
+        Menu menu22 = new Menu();
+        Menu menu23 = new Menu();
+        Menu menu24 = new Menu();
+        Menu menu241 = new Menu();
+        Menu menu2411 = new Menu();
+        menu1.setName("menu 1");
+        menu1.setId(1);
+        menu11.setName("menu 1-1");
+        menu11.setId(2);
+        menu111.setName("menu 1-1-1");
+        menu111.setId(3);
+        menu12.setName("menu 1-2");
+        menu12.setId(4);
+        menu121.setName("menu 1-2-1");
+        menu121.setId(5);
+        menu13.setName("menu 1-3");
+        menu13.setId(6);
+        menu2.setName("menu 2");
+        menu2.setId(7);
+        menu21.setName("menu 2-1");
+        menu21.setId(8);
+        menu211.setName("menu 2-1-1");
+        menu211.setId(9);
+        menu22.setName("menu 2-2");
+        menu22.setId(10);
+        menu23.setName("menu 2-3");
+        menu23.setId(11);
+        menu24.setName("menu 2-4");
+        menu24.setId(12);
+        menu241.setName("menu 2-4-1");
+        menu241.setId(13);
+        menu2411.setName("menu 2-4-1-1");
+        menu2411.setId(14);
+        menu12.setChildren(Arrays.asList(menu121));
+        menu11.setChildren(Arrays.asList(menu111));
+        menu1.setChildren(Arrays.asList(menu11, menu12, menu13));
+        menu241.setChildren(Arrays.asList(menu2411));
+        menu24.setChildren(Arrays.asList(menu241));
+        menu21.setChildren(Arrays.asList(menu211));
+        menu2.setChildren(Arrays.asList(menu21, menu22, menu23, menu24));
+
+        MenuDTO dto1 = new MenuDTO();
+        MenuDTO dto2 = new MenuDTO();
+        dto1.setMenu(menu1);
+        dto2.setMenu(menu2);
+
+        dto.setDtos(Arrays.asList(dto1, dto2));
+        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
+        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
+
+        MenuQueryVO vo = MenuQueryVO.convert(dto);
+        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
     }
+
+    @GetMapping("query")
+    public ResultMessage query() {
+        //������������������
+        MenuQueryDTO dto = menuService.queryAllMenu();
+
+        //���������������������������
+        MenuQueryVO vo = MenuQueryVO.convert(dto);
+
+        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
+    }
+
+    @PostMapping("insert")
+    public ResultMessage insert(@RequestBody MenuInsertForm form) {
+        //������������������������
+        if (!form.valid())
+            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
+                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+
+        //������������������
+        MenuDTO dto = menuService.insertMenu(form);
+
+        //������������������������
+        MenuInsertVO vo = MenuInsertVO.convert(dto);
+
+        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
+    }
+
+    @PostMapping("delete")
+    public ResultMessage delete(@RequestBody MenuDeleteForm form){
+        //������������������������
+        if (!form.valid())
+            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
+                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+
+        //������������������
+        MenuDTO dto = menuService.deleteMenu(form);
+
+        //������������������������
+        MenuInsertVO vo = MenuDeleteVO.convert(dto);
+
+        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
+    }
+
 }
diff --git a/screen-manage/src/main/java/com/moral/api/entity/Menu.java b/screen-manage/src/main/java/com/moral/api/entity/Menu.java
index 5c90fda..9d6164f 100644
--- a/screen-manage/src/main/java/com/moral/api/entity/Menu.java
+++ b/screen-manage/src/main/java/com/moral/api/entity/Menu.java
@@ -1,11 +1,13 @@
 package com.moral.api.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -53,6 +55,7 @@
     /**
      * ���������������������������
      */
+    @TableField(value="`order`")
     private Integer order;
 
     /**
@@ -70,6 +73,9 @@
      */
     private String isDelete;
 
+    @TableField(exist = false)
+    private List<Menu> children;
+
 
     @Override
     protected Serializable pkVal() {
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/dto/menu/MenuQueryDto.java b/screen-manage/src/main/java/com/moral/api/pojo/dto/menu/MenuQueryDTO.java
similarity index 91%
rename from screen-manage/src/main/java/com/moral/api/pojo/dto/menu/MenuQueryDto.java
rename to screen-manage/src/main/java/com/moral/api/pojo/dto/menu/MenuQueryDTO.java
index fbc0ba7..0546d18 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/dto/menu/MenuQueryDto.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/dto/menu/MenuQueryDTO.java
@@ -12,7 +12,7 @@
  * @Version TODO
  **/
 @Data
-public class MenuQueryDto {
+public class MenuQueryDTO {
 
     private Integer code;
 
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuDeleteForm.java b/screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuDeleteForm.java
new file mode 100644
index 0000000..0f1b513
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuDeleteForm.java
@@ -0,0 +1,24 @@
+package com.moral.api.pojo.form.menu;
+
+import lombok.Data;
+import org.aspectj.lang.annotation.DeclareAnnotation;
+
+/**
+ * @ClassName MenuDeleteForm
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/4/26 14:36
+ * @Version TODO
+ **/
+@Data
+public class MenuDeleteForm {
+
+    private Integer id;
+
+    public boolean valid(){
+        if(id==null||id==0){
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuInsertForm.java b/screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuInsertForm.java
new file mode 100644
index 0000000..f7dc779
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuInsertForm.java
@@ -0,0 +1,42 @@
+package com.moral.api.pojo.form.menu;
+
+import com.moral.api.entity.Menu;
+import lombok.Data;
+import org.springframework.util.ObjectUtils;
+
+/**
+ * @ClassName MenuInsertForm
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/4/26 11:02
+ * @Version TODO
+ **/
+@Data
+public class MenuInsertForm {
+
+    private String name;
+
+    private String url;
+
+    private Integer parentId;
+
+    private Integer order;
+
+    public boolean valid(){
+        if(
+                ObjectUtils.isEmpty(name)||
+                        ObjectUtils.isEmpty(order)
+                )
+            return false;
+        return true;
+    }
+
+    public Menu formConvertEntity(){
+        Menu menu = new Menu();
+        menu.setName(name);
+        menu.setParentId(parentId);
+        menu.setUrl(url);
+        menu.setOrder(order);
+        return menu;
+    }
+}
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuDeleteVO.java b/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuDeleteVO.java
new file mode 100644
index 0000000..dc3d111
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuDeleteVO.java
@@ -0,0 +1,24 @@
+package com.moral.api.pojo.vo.menu;
+
+import com.moral.api.entity.Menu;
+import com.moral.api.pojo.dto.menu.MenuDTO;
+import com.moral.constant.ResponseCodeEnum;
+
+/**
+ * @ClassName MenuDeleteVO
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/4/26 15:09
+ * @Version TODO
+ **/
+public class MenuDeleteVO extends MenuVO {
+    public static MenuInsertVO convert(MenuDTO dto) {
+        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
+            return null;
+        MenuInsertVO vo = new MenuInsertVO();
+        Menu menu = dto.getMenu();
+        vo.setId(menu.getId());
+        vo.setName(menu.getName());
+        return vo;
+    }
+}
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuInsertVO.java b/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuInsertVO.java
new file mode 100644
index 0000000..5949b11
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuInsertVO.java
@@ -0,0 +1,26 @@
+package com.moral.api.pojo.vo.menu;
+
+import com.moral.api.entity.Menu;
+import com.moral.api.pojo.dto.menu.MenuDTO;
+import com.moral.constant.ResponseCodeEnum;
+
+/**
+ * @ClassName MenuInsertVO
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/4/26 11:40
+ * @Version TODO
+ **/
+public class MenuInsertVO extends MenuVO {
+
+    public static MenuInsertVO convert(MenuDTO dto) {
+        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
+            return null;
+        MenuInsertVO vo = new MenuInsertVO();
+        Menu menu = dto.getMenu();
+        vo.setId(menu.getId());
+        vo.setParentId(menu.getParentId());
+        vo.setName(menu.getName());
+        return vo;
+    }
+}
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuQueryVO.java b/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuQueryVO.java
index 5613bca..6c0a1f0 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuQueryVO.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuQueryVO.java
@@ -1,8 +1,16 @@
 package com.moral.api.pojo.vo.menu;
 
-import com.moral.api.pojo.dto.menu.MenuQueryDto;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.moral.api.entity.Menu;
+import com.moral.api.pojo.dto.menu.MenuDTO;
+import com.moral.api.pojo.dto.menu.MenuQueryDTO;
+import com.moral.constant.ResponseCodeEnum;
 import lombok.Data;
+import org.springframework.util.ObjectUtils;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 /**
@@ -13,11 +21,64 @@
  * @Version TODO
  **/
 @Data
+@JsonInclude(JsonInclude.Include.NON_EMPTY)
 public class MenuQueryVO {
 
     List<MenuVO> vos;
 
-    public static MenuQueryVO convert(MenuQueryDto dto){
-        return null;
+    public static MenuQueryVO convert(MenuQueryDTO dto) {
+        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
+            return null;
+        MenuQueryVO vo = new MenuQueryVO();
+        List<MenuDTO> dtos = dto.getDtos();
+        List<MenuVO> vos = new ArrayList<>();
+        for (MenuDTO menuDTO : dtos) {
+            MenuVO menuVO = convertToQueryPage(menuDTO);
+            vos.add(menuVO);
+        }
+        //������������������������
+        Collections.sort(vos, new Comparator<MenuVO>() {
+            @Override
+            public int compare(MenuVO o1, MenuVO o2) {
+                return o1.getOrder() - o2.getOrder();
+            }
+        });
+        vo.setVos(vos);
+        return vo;
     }
+
+    private static MenuVO convertToQueryPage(MenuDTO dto) {
+        Menu menu = dto.getMenu();
+        MenuVO menuVO = convertToQueryPage(menu);
+        return menuVO;
+    }
+
+    private static MenuVO convertToQueryPage(Menu menu) {
+        MenuVO vo = new MenuVO();
+        vo.setId(menu.getId());
+        vo.setParentId(menu.getParentId());
+        vo.setUrl(menu.getUrl());
+        vo.setIcon(menu.getIcon());
+        vo.setName(menu.getName());
+        vo.setOrder(menu.getOrder());
+        List<MenuVO> vos = new ArrayList<>();
+        List<Menu> children = menu.getChildren();
+        if (!ObjectUtils.isEmpty(children)) {
+            //���children���������������������order������
+            Collections.sort(children, new Comparator<Menu>() {
+                @Override
+                public int compare(Menu o1, Menu o2) {
+                    return o1.getOrder() - o2.getOrder();
+                }
+            });
+            for (Menu child : children) {
+                MenuVO menuVO = convertToQueryPage(child);
+                vos.add(menuVO);
+            }
+            vo.setChildren(vos);
+        }
+        return vo;
+    }
+
 }
+
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuVO.java b/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuVO.java
index 6523e61..6a83cf9 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuVO.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuVO.java
@@ -1,5 +1,8 @@
 package com.moral.api.pojo.vo.menu;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+
 import java.util.List;
 
 /**
@@ -9,6 +12,8 @@
  * @Date 2021/4/25 10:04
  * @Version TODO
  **/
+@Data
+@JsonInclude(JsonInclude.Include.NON_EMPTY)
 public class MenuVO {
 
     private Integer id;
@@ -22,8 +27,6 @@
     private String icon;
 
     private Integer order;
-
-    private Integer level;
 
     private List<MenuVO> children;
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/MenuService.java b/screen-manage/src/main/java/com/moral/api/service/MenuService.java
index 43e1ffe..e9b4e8a 100644
--- a/screen-manage/src/main/java/com/moral/api/service/MenuService.java
+++ b/screen-manage/src/main/java/com/moral/api/service/MenuService.java
@@ -2,6 +2,10 @@
 
 import com.moral.api.entity.Menu;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.pojo.dto.menu.MenuDTO;
+import com.moral.api.pojo.dto.menu.MenuQueryDTO;
+import com.moral.api.pojo.form.menu.MenuDeleteForm;
+import com.moral.api.pojo.form.menu.MenuInsertForm;
 
 /**
  * <p>
@@ -12,5 +16,30 @@
  * @since 2021-03-09
  */
 public interface MenuService extends IService<Menu> {
+    /**
+    * @Description: ������������������
+            * @Param: []
+            * @return: com.moral.api.pojo.dto.menu.MenuQueryDTO
+            * @Author: ���������
+            * @Date: 2021/4/25
+            */
+    MenuQueryDTO queryAllMenu();
 
+    /**
+    * @Description: ������������
+            * @Param: [form]
+            * @return: com.moral.api.pojo.dto.menu.MenuDTO
+            * @Author: ���������
+            * @Date: 2021/4/26
+            */
+    MenuDTO insertMenu(MenuInsertForm form);
+
+    /**
+    * @Description: ������������
+            * @Param: [form]
+            * @return: com.moral.api.pojo.dto.menu.MenuDTO
+            * @Author: ���������
+            * @Date: 2021/4/26
+            */
+    MenuDTO deleteMenu(MenuDeleteForm form);
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/MenuServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/MenuServiceImpl.java
index 5047a8c..efcaec9 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/MenuServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/MenuServiceImpl.java
@@ -1,10 +1,28 @@
 package com.moral.api.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.moral.api.entity.ManageMenu;
 import com.moral.api.entity.Menu;
 import com.moral.api.mapper.MenuMapper;
+import com.moral.api.pojo.dto.menu.MenuDTO;
+import com.moral.api.pojo.dto.menu.MenuQueryDTO;
+import com.moral.api.pojo.form.menu.MenuDeleteForm;
+import com.moral.api.pojo.form.menu.MenuInsertForm;
 import com.moral.api.service.MenuService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.constant.Constants;
+import com.moral.constant.ResponseCodeEnum;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Predicate;
 
 /**
  * <p>
@@ -17,4 +35,168 @@
 @Service
 public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
 
+    @Autowired
+    MenuMapper menuMapper;
+
+    @Override
+    public MenuQueryDTO queryAllMenu() {
+        //������������������
+        MenuQueryDTO dto = new MenuQueryDTO();
+        //������������������
+        List<Menu> menus = menuMapper.selectList(null);
+        //������menu������������
+        Map<Integer, Menu> menuMap = new HashMap<>();
+        for (Menu menu : menus) {
+            menuMap.put(menu.getId(), menu);
+            menu.setChildren(new ArrayList<>());//���������������
+        }
+        for (Menu menu : menus) {
+            combinationParentChildrenMenus(menuMap, menu);
+        }
+        //������������������
+        menus.removeIf(new Predicate<Menu>() {
+            @Override
+            public boolean test(Menu menu) {
+                if (menu.getParentId().equals(0))
+                    return false;
+                return true;
+            }
+        });
+        //���������������DTO
+        List<MenuDTO> dtos = new ArrayList<>();
+        for (Menu menu : menus) {
+            MenuDTO menuDTO = new MenuDTO();
+            menuDTO.setMenu(menu);
+            dtos.add(menuDTO);
+        }
+        dto.setDtos(dtos);
+        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
+        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
+        return dto;
+    }
+
+    @Override
+    @Transactional
+    public MenuDTO insertMenu(MenuInsertForm form) {
+        //������������������
+        MenuDTO dto = new MenuDTO();
+        //������
+        Menu menu = form.formConvertEntity();
+        //������������������������
+        Menu existMenu = new Menu();
+        existMenu.setName(menu.getName());
+        existMenu.setIsDelete(Constants.NOT_DELETE);
+        QueryWrapper existWrapper = new QueryWrapper();
+        existWrapper.setEntity(existMenu);
+        Menu existMenuResult = menuMapper.selectOne(existWrapper);
+        if (!ObjectUtils.isEmpty(existMenuResult)) {
+            dto.setCode(ResponseCodeEnum.MENU_IS_EXIST.getCode());
+            dto.setMsg(ResponseCodeEnum.MENU_IS_EXIST.getMsg());
+            return dto;
+        }
+        //������������������
+        menuMapper.insert(menu);
+        //������������������
+        dto.setMenu(menu);
+        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
+        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
+        return dto;
+    }
+
+    @Override
+    public MenuDTO deleteMenu(MenuDeleteForm form) {
+        //������������������
+        MenuDTO dto = new MenuDTO();
+        //������
+        Integer id = form.getId();
+        //������������������������
+        Menu existMenu = menuMapper.selectById(id);
+        if (ObjectUtils.isEmpty(existMenu)) {
+            dto.setCode(ResponseCodeEnum.MENU_IS_NULL.getCode());
+            dto.setMsg(ResponseCodeEnum.MENU_IS_NULL.getMsg());
+            return dto;
+        }
+        //������������������
+        existMenu.setIsDelete(Constants.DELETE);
+        menuMapper.updateById(existMenu);
+        //���������������������
+        List<Integer> childrenIds = getChildrenIdsByParentId(id);
+        UpdateWrapper wrapper = new UpdateWrapper();
+        wrapper.in("id",childrenIds);
+        wrapper.set("is_delete",Constants.DELETE);
+        menuMapper.update(null,wrapper);
+        //������������������
+        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
+        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
+        dto.setMenu(existMenu);
+        return dto;
+    }
+
+    private void combinationParentChildrenMenus(Map<Integer, Menu> menuMap, Menu menu) {
+        Integer parentId = menu.getParentId();
+        Menu parentMenu = menuMap.get(parentId);
+        if (!ObjectUtils.isEmpty(parentMenu)) {
+            parentMenu.getChildren().add(menu);
+        }
+    }
+
+    /**
+    * @Description: ���������������id���������������children���menu������
+            * @Param: [id]
+            * @return: com.moral.api.entity.Menu
+            * @Author: ���������
+            * @Date: 2021/4/26
+            */
+    private Menu getMenuAndChildrenById(Integer id){
+        //������������������
+        List<Menu> menus = menuMapper.selectList(null);
+        //������menu������������
+        Map<Integer, Menu> menuMap = new HashMap<>();
+        for (Menu menu : menus) {
+            menuMap.put(menu.getId(), menu);
+            menu.setChildren(new ArrayList<>());//���������������
+        }
+        for (Menu menu : menus) {
+            combinationParentChildrenMenus(menuMap, menu);
+        }
+        Menu menu = menuMap.get(id);
+        return menu;
+    }
+
+    /**
+    * @Description: ������������������������������������id������
+            * @Param: [id]
+            * @return: java.util.List<java.lang.Integer>
+            * @Author: ���������
+            * @Date: 2021/4/26
+            */
+    private List<Integer> getChildrenIdsByParentId(Integer id){
+        Menu parentMenu = getMenuAndChildrenById(id);
+        List<Menu> children = parentMenu.getChildren();
+        List<Integer> childrenIds = new ArrayList<>();
+        for (Menu child : children) {
+            recursiveAccess(child,childrenIds);
+        }
+        return childrenIds;
+    }
+
+
+    /**
+    * @Description: ���������������������id���������������
+            * @Param: [menu, ids]
+            * @return: void
+            * @Author: ���������
+            * @Date: 2021/4/26
+            */
+    private void recursiveAccess(Menu menu,List<Integer> ids){
+        ids.add(menu.getId());
+        List<Menu> children = menu.getChildren();
+        if(!ObjectUtils.isEmpty(children)){
+            for (Menu child : children) {
+                recursiveAccess(child,ids);
+            }
+        }
+    }
+
 }
+

--
Gitblit v1.8.0