From 657182c7989dc77b69bb3f9adaf6c75b6466ff95 Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Wed, 09 Jun 2021 10:31:35 +0800 Subject: [PATCH] screen-manage 编辑账号接口删除分配角色功能,分配角色功能变为单独接口 --- screen-manage/src/main/java/com/moral/api/service/impl/MenuServiceImpl.java | 367 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 367 insertions(+), 0 deletions(-) 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..7cb06d8 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,35 @@ 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.config.mybatis.wrapper.NullFilterWrapper; +import com.moral.api.entity.Group; import com.moral.api.entity.Menu; +import com.moral.api.mapper.GroupMenuMapper; 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.dto.menu.MenuQueryNamesDTO; +import com.moral.api.pojo.form.menu.MenuDeleteForm; +import com.moral.api.pojo.form.menu.MenuInsertForm; +import com.moral.api.pojo.form.menu.MenuQueryNamesForm; +import com.moral.api.pojo.form.menu.MenuUpdateForm; +import com.moral.api.service.GroupService; 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 com.sun.corba.se.spi.presentation.rmi.IDLNameTranslator; +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 +42,346 @@ @Service public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService { + @Autowired + MenuMapper menuMapper; + @Autowired + GroupService groupService; + @Autowired + GroupMenuMapper groupMenuMapper; + + + @Override + public MenuQueryDTO queryAllMenus() { + //������������������ + MenuQueryDTO dto = new MenuQueryDTO(); + //������������������ + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("is_delete", Constants.NOT_DELETE); + List<Menu> menus = menuMapper.selectList(wrapper); + //��������������������� + combinationParentChildrenMenus(menus); + //���������������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 + public MenuQueryDTO queryAdminGroupMenusByOrganizationId(Integer organizationId) { + //������������������ + MenuQueryDTO dto = new MenuQueryDTO(); + //������������admin������ + Group group = groupService.queryAdminGroupByOrganizationId(organizationId); + if (ObjectUtils.isEmpty(group)) {//������������������������������������������������ + dto.setCode(ResponseCodeEnum.ORGANIZATION_USER_NOT_EXIST.getCode()); + dto.setMsg(ResponseCodeEnum.ORGANIZATION_USER_NOT_EXIST.getMsg()); + return dto; + } + //��������������������������������������� + List<Menu> ownMenus = menuMapper.getMenusByGroupId(group.getId()); + + /*������������������������������������������������������������ + * ���������������������������������������������������������������������������������������������������������*/ + removeMenuWithChildren(ownMenus); + + //������������������ + List<MenuDTO> dtos = new ArrayList<>(); + for (Menu menu : ownMenus) { + 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 + @Transactional + 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; + } + //��������������������� + List<Integer> childrenIds = getChildrenIdsByParentId(id); + if (!ObjectUtils.isEmpty(childrenIds)) { + UpdateWrapper wrapper = new UpdateWrapper(); + wrapper.in("id", childrenIds); + wrapper.set("is_delete", Constants.DELETE); + menuMapper.update(null, wrapper); + } + //������������ + existMenu.setIsDelete(Constants.DELETE); + menuMapper.updateById(existMenu); + //��������������������������������������������� + UpdateWrapper deleteGroupMenuWrapper = new UpdateWrapper(); + List<Integer> allMenuIds = new ArrayList<>(); + allMenuIds.add(id); + if (!ObjectUtils.isEmpty(childrenIds)) { + allMenuIds.addAll(childrenIds); + } + deleteGroupMenuWrapper.in("menu_id", allMenuIds); + deleteGroupMenuWrapper.set("is_delete", Constants.DELETE); + groupMenuMapper.update(null, deleteGroupMenuWrapper); + //������������������ + dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); + dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); + dto.setMenu(existMenu); + return dto; + } + + @Override + public MenuDTO updateMenu(MenuUpdateForm form) { + //������������������ + MenuDTO dto = new MenuDTO(); + //������ + Menu menu = form.formConvertEntity(); + //������������������������������������������ + QueryWrapper<Menu> oldMenuWrapper = new QueryWrapper<>(); + Menu oldMenu = new Menu(); + oldMenu.setId(menu.getId()); + oldMenu.setIsDelete(Constants.NOT_DELETE); + oldMenuWrapper.setEntity(oldMenu); + oldMenu = menuMapper.selectOne(oldMenuWrapper); + if (ObjectUtils.isEmpty(oldMenu)) { + dto.setCode(ResponseCodeEnum.MENU_IS_NULL.getCode()); + dto.setMsg(ResponseCodeEnum.MENU_IS_NULL.getMsg()); + return dto; + } + //������ + menuMapper.updateById(menu); + //������������������������ + menu = menuMapper.selectById(menu.getId()); + //������������������ + dto.setMenu(menu); + dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); + dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); + return dto; + } + + @Override + public MenuQueryNamesDTO queryNames(MenuQueryNamesForm form) { + //������������������ + MenuQueryNamesDTO dto = new MenuQueryNamesDTO(); + //������ + Integer id = form.getId(); + String name = form.getName(); + //������������ + NullFilterWrapper<Menu> wrapper = new NullFilterWrapper<>(); + wrapper.eq("is_delete", Constants.NOT_DELETE); + wrapper.like("name", name); + List<Menu> menus = menuMapper.selectList(wrapper); + //���������id������������������������ + List<Integer> childrenIds = getChildrenIdsByParentId(id);//���������������������id������ + if (ObjectUtils.isEmpty(childrenIds)) { + menus.removeIf(new Predicate<Menu>() { + @Override + public boolean test(Menu m) { + if (m.getId().equals(id)) + return true; + return false; + } + }); + } else { + menus.removeIf(new Predicate<Menu>() { + @Override + public boolean test(Menu m) { + if (childrenIds.contains(m.getId()) || m.getId().equals(id)) + return true; + return false; + } + }); + } + + //������������������ + dto.setMenus(menus); + dto.setCode(ResponseCodeEnum.SUCCESS.getCode()); + dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg()); + return dto; + } + + + /** + * @Description: ������������������������������������������������������ + * @Param: [menus] + * @return: java.util.List<com.moral.api.entity.Menu> + * @Author: ��������� + * @Date: 2021/5/13 + */ + public void combinationParentChildrenMenus(List<Menu> menus) { + //������menu������������ + Map<Integer, Menu> menuMap = new HashMap<>(); + for (Menu menu : menus) { + menuMap.put(menu.getId(), menu); + menu.setChildren(new ArrayList<>());//��������������� + } + for (Menu menu : menus) { + putMenuToParentMenu(menuMap, menu); + } + //������������������ + menus.removeIf(new Predicate<Menu>() { + @Override + public boolean test(Menu menu) { + if (menu.getParentId().equals(0)) + return false; + return true; + } + }); + } + + /** + * @Description: ������������menu������menuMap��������������������� + * @Param: [menuMap, menu] + * @return: void + * @Author: ��������� + * @Date: 2021/5/6 + */ + private void putMenuToParentMenu(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) { + //������������������ + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("is_delete", Constants.NOT_DELETE); + List<Menu> menus = menuMapper.selectList(wrapper); + //������menu������������ + Map<Integer, Menu> menuMap = new HashMap<>(); + for (Menu menu : menus) { + menuMap.put(menu.getId(), menu); + menu.setChildren(new ArrayList<>());//��������������� + } + for (Menu menu : menus) { + putMenuToParentMenu(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<Integer> childrenIds = null; + if (!ObjectUtils.isEmpty(parentMenu.getChildren())) { + List<Menu> children = parentMenu.getChildren(); + childrenIds = new ArrayList<>(); + for (Menu child : children) { + recursiveAccess(child, childrenIds); + } + } + return childrenIds; + } + + + /** + * @Description: ������������������������children���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); + } + } + } + + /** + * @Description: ������������������������������ + * @Param: [menus] + * @return: java.util.List<com.moral.api.entity.Menu> + * @Author: ��������� + * @Date: 2021/5/28 + */ + private void removeMenuWithChildren(List<Menu> menus) { + //������������������ + QueryWrapper wrapper = new QueryWrapper(); + wrapper.eq("is_delete", Constants.NOT_DELETE); + List<Menu> allMenus = menuMapper.selectList(wrapper); + //������menu������������ + Map<Integer, Menu> menuMap = new HashMap<>(); + for (Menu menu : allMenus) { + menuMap.put(menu.getId(), menu); + menu.setChildren(new ArrayList<>());//��������������� + } + for (Menu menu : allMenus) { + putMenuToParentMenu(menuMap, menu); + } + //������������������������������ + menus.removeIf(new Predicate<Menu>() { + @Override + public boolean test(Menu menu) { + if (ObjectUtils.isEmpty(menuMap.get(menu.getId()).getChildren())) + return false; + return true; + } + }); + } + } -- Gitblit v1.8.0