package com.moral.api.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.moral.api.entity.ManageMenu; import com.moral.api.entity.ManageRole; import com.moral.api.mapper.ManageMenuMapper; import com.moral.api.mapper.ManageRoleMenuMapper; import com.moral.api.service.ManageMenuService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.util.LogUtils; 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 org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Predicate; /** *

* 后台菜单 服务实现类 *

* * @author moral * @since 2021-03-09 */ @Service public class ManageMenuServiceImpl extends ServiceImpl implements ManageMenuService { @Autowired(required = false) private ManageMenuMapper manageMenuMapper; @Autowired(required = false) private ManageRoleMenuMapper manageRoleMenuMapper; @Override @Transactional public Map insertManageMenu(ManageMenu manageMenu) { Map resultMap = new HashMap<>(); if (manageMenu.getName() == null) { resultMap.put("code", ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode()); resultMap.put("msg", ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); return resultMap; } if (manageMenuMapper.getManageMenuByName(manageMenu.getName()) != null) { resultMap.put("code", ResponseCodeEnum.MENU_IS_EXIST.getCode()); resultMap.put("msg", ResponseCodeEnum.MENU_IS_EXIST.getMsg()); return resultMap; } QueryWrapper wrapper_url = new QueryWrapper(); wrapper_url.eq("url",manageMenu.getUrl()); wrapper_url.eq("is_delete",Constants.NOT_DELETE); if (manageMenuMapper.selectCount(wrapper_url) != 0) { resultMap.put("code", ResponseCodeEnum.URL_IS_EXIST.getCode()); resultMap.put("msg", ResponseCodeEnum.URL_IS_EXIST.getMsg()); return resultMap; } manageMenuMapper.insertOne(manageMenu); //操作插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String content = "添加菜单:"+manageMenu.getName()+";"; LogUtils.saveOperationForManage(request,content,Constants.INSERT_OPERATE_TYPE); resultMap.put("code", ResponseCodeEnum.SUCCESS.getCode()); resultMap.put("msg", ResponseCodeEnum.SUCCESS.getMsg()); return resultMap; } @Override @Transactional public Map updateManageMenu(Map map) { Map resultMap = new HashMap<>(); if (!map.containsKey("id")) { resultMap.put("code", ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode()); resultMap.put("msg", ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); return resultMap; } if (manageMenuMapper.getManageMenuById(Integer.parseInt(map.get("id").toString())) == null) { resultMap.put("code", ResponseCodeEnum.MENU_IS_NULL.getCode()); resultMap.put("msg", ResponseCodeEnum.MENU_IS_NULL.getMsg()); return resultMap; } if (map.get("name")!=null && manageMenuMapper.getManageMenuByName(map.get("name").toString()) != null) { resultMap.put("code", ResponseCodeEnum.MENU_IS_EXIST.getCode()); resultMap.put("msg", ResponseCodeEnum.MENU_IS_EXIST.getMsg()); return resultMap; } QueryWrapper wrapper_url = new QueryWrapper(); wrapper_url.eq("url",map.get("url")); wrapper_url.eq("is_delete",Constants.NOT_DELETE); if (manageMenuMapper.selectCount(wrapper_url) != 0) { resultMap.put("code", ResponseCodeEnum.URL_IS_EXIST.getCode()); resultMap.put("msg", ResponseCodeEnum.URL_IS_EXIST.getMsg()); return resultMap; } //更新之前获取原来的菜单信息 ManageMenu manageMenuOld = manageMenuMapper.getManageMenuById(Integer.parseInt(map.get("id").toString())); manageMenuMapper.updateManageMenuById(map); //操作插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String content = "修改了菜单:"+manageMenuOld.getName()+";"; for (Object key:map.keySet()) { if (key.toString().equals("name")&&map.get(key)!=null){ content = content+"菜单名:"+manageMenuOld.getName()+"->"+map.get(key)+";"; } if (key.toString().equals("url")&&map.get(key)!=null){ content = content+"url地址:"+manageMenuOld.getUrl()+"->"+map.get(key)+";"; } if (key.toString().equals("icon")&&map.get(key)!=null){ content = content+"图标地址:"+manageMenuOld.getIcon()+"->"+map.get(key)+";"; } if (key.toString().equals("parent_id")&&map.get(key)!=null){ if (map.get(key).toString().equals("0")){ content = content+"父菜单:"+manageMenuMapper.getManageMenuById(manageMenuOld.getId()).getName()+"->0"+";"; }else if (manageMenuOld.getId().toString().equals("0")){ content = content+"父菜单:"+"0->"+manageMenuMapper.getManageMenuById(Integer.parseInt(map.get(key).toString())).getName()+";"; }else { content = content+"父菜单:"+manageMenuMapper.getManageMenuById(manageMenuOld.getId()).getName()+"->"+manageMenuMapper.getManageMenuById(Integer.parseInt(map.get(key).toString())).getName()+";"; } } if (key.toString().equals("order")&&map.get(key)!=null){ content = content+"同一级别菜单顺序:"+manageMenuOld.getOrder()+"->"+map.get(key)+";"; } if (key.toString().equals("desc")&&map.get(key)!=null){ content = content+"描述:"+manageMenuOld.getDesc()+"->"+map.get(key)+";"; } } LogUtils.saveOperationForManage(request,content,Constants.UPDATE_OPERATE_TYPE); resultMap.put("code", ResponseCodeEnum.SUCCESS.getCode()); resultMap.put("msg", ResponseCodeEnum.SUCCESS.getMsg()); return resultMap; } @Override @Transactional public Map deleteManageMenu(Map map) { Map resultMap = new HashMap<>(); if (!map.containsKey("id")) { resultMap.put("code", ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode()); resultMap.put("msg", ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); return resultMap; } if (manageMenuMapper.getManageMenuById(Integer.parseInt(map.get("id").toString())) == null) { resultMap.put("code", ResponseCodeEnum.MENU_IS_NULL.getCode()); resultMap.put("msg", ResponseCodeEnum.MENU_IS_NULL.getMsg()); } else { //删除之前获取数据信息 ManageMenu manageMenuDelete = manageMenuMapper.getManageMenuById(Integer.parseInt(map.get("id").toString())); Map deleteMap = new HashMap(); int id = Integer.parseInt(map.get("id").toString()); deleteMap.put("id", id); deleteMap.put("is_delete", 1); manageMenuMapper.updateManageMenuById(deleteMap); Map role_menuDeleteMap = new HashMap(); role_menuDeleteMap.put("menu_id", id); manageRoleMenuMapper.updateDeleteStateByMenu_id(role_menuDeleteMap); //操作插入日志 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String content = "删除菜单:"+manageMenuDelete.getName()+";"; LogUtils.saveOperationForManage(request,content,Constants.DELETE_OPERATE_TYPE); resultMap.put("code", ResponseCodeEnum.SUCCESS.getCode()); resultMap.put("msg", ResponseCodeEnum.SUCCESS.getMsg()); } return resultMap; } @Override public List> getAllWithPagingQuery(Map map) { Map limitMap = new HashMap(); limitMap.put("start", (Integer.parseInt(map.get("current").toString()) - 1) * Integer.parseInt(map.get("size").toString())); limitMap.put("number", Integer.parseInt(map.get("size").toString())); List manageMenus = manageMenuMapper.getDataWithPage(limitMap); SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List> resultList = new ArrayList<>(); for (ManageMenu manageMenu:manageMenus) { Map manegeMenuMap = JSON.parseObject(JSON.toJSONString(manageMenu)); if (manageMenu.getParentId().equals(0)){ manegeMenuMap.put("parent_name",""); }else { ManageMenu parentMenu = manageMenuMapper.getManageMenuById(manageMenu.getParentId()); if (ObjectUtils.isEmpty(parentMenu)){ manegeMenuMap.put("parent_name",""); }else { String parent_name = parentMenu.getName(); manegeMenuMap.put("parent_name",parent_name); } } String createTime = SDF.format(manageMenu.getCreateTime()); String updateTime = SDF.format(manageMenu.getUpdateTime()); manegeMenuMap.put("createTime",createTime); manegeMenuMap.put("updateTime",updateTime); resultList.add(manegeMenuMap); } return resultList; } @Override public List getAllMenus() { List allMenus = manageMenuMapper.getAll(); if(ObjectUtils.isEmpty(allMenus)) return null; Map menusMap = new HashMap<>(); for (ManageMenu menu : allMenus) { menu.setChildren(new ArrayList<>());//初始化 menusMap.put(menu.getId(), menu); } for (ManageMenu menu : allMenus) { combinationParentChildrenMenus(menusMap, menu); } //已经封装好父子菜单,去除parentId不是0的菜单,去除重复 allMenus.removeIf(new Predicate() { @Override public boolean test(ManageMenu manageMenu) { if(manageMenu.getParentId().equals(0)) return false; return true; } }); return allMenus; } @Override public List getManageMenuByRoleId(int roleId) { List manageMenus = manageMenuMapper.getManageMenuByRoleId(roleId); List menuIdList = new ArrayList(); for (ManageMenu manageMenu:manageMenus) { menuIdList.add(manageMenu.getId()); } return menuIdList; } @Override public List getManageChildMenuByRoleId(int roleId) { List manageMenus = manageMenuMapper.getManageMenuByRoleId(roleId); List menuIdList = new ArrayList(); Map limitMap = new HashMap(); limitMap.put("start", 1); limitMap.put("number", 1); for (ManageMenu manageMenu:manageMenus) { limitMap.put("parent_id", manageMenu.getId()); List result = manageMenuMapper.getManageMenuByCondition(limitMap); if (result.size()==0){ menuIdList.add(manageMenu.getId()); } } return menuIdList; } @Override public List> getManageMenuByNameFuzzy(Map map) { Map limitMap = new HashMap(); if(!ObjectUtils.isEmpty(map.get("name"))){ limitMap.put("name", map.get("name")); } if(!ObjectUtils.isEmpty(map.get("parent_id"))){ limitMap.put("parent_id", map.get("parent_id")); } limitMap.put("start", (Integer.parseInt(map.get("current").toString()) - 1) * Integer.parseInt(map.get("size").toString())); limitMap.put("number", Integer.parseInt(map.get("size").toString())); List manageMenus = manageMenuMapper.getManageMenuByNameFuzzy(limitMap); SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List> resultList = new ArrayList<>(); for (ManageMenu manageMenu:manageMenus) { Map manegeMenuMap = JSON.parseObject(JSON.toJSONString(manageMenu)); if (manageMenu.getParentId().equals(0)){ manegeMenuMap.put("parent_name",""); }else { ManageMenu parentMenu = manageMenuMapper.getManageMenuById(manageMenu.getParentId()); if (ObjectUtils.isEmpty(parentMenu)){ manegeMenuMap.put("parent_name",""); }else { String parent_name = parentMenu.getName(); manegeMenuMap.put("parent_name",parent_name); } } String createTime = SDF.format(manageMenu.getCreateTime()); String updateTime = SDF.format(manageMenu.getUpdateTime()); manegeMenuMap.put("createTime",createTime); manegeMenuMap.put("updateTime",updateTime); resultList.add(manegeMenuMap); } return resultList; } @Override public Map getManageMenuByCondition(Map map) { Map resultMap = new HashMap<>(); int current = Integer.parseInt(map.get("current").toString()); int size = Integer.parseInt(map.get("size").toString()); Page page = new Page<>(current,size); QueryWrapper wrapper = new QueryWrapper(); wrapper.eq("is_delete",Constants.NOT_DELETE); if(!ObjectUtils.isEmpty(map.get("name"))){ wrapper.like("name", map.get("name")); } if(!ObjectUtils.isEmpty(map.get("parent_id"))){ wrapper.eq("parent_id", map.get("parent_id")); } Page resultpage = manageMenuMapper.selectPage(page,wrapper); List manageMenus = resultpage.getRecords(); SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List> manageMenuList = new ArrayList<>(); for (ManageMenu manageMenu:manageMenus) { Map manegeMenuMap = JSON.parseObject(JSON.toJSONString(manageMenu)); if (manageMenu.getParentId().equals(0)){ manegeMenuMap.put("parent_name",""); }else { ManageMenu parentMenu = manageMenuMapper.getManageMenuById(manageMenu.getParentId()); if (ObjectUtils.isEmpty(parentMenu)){ manegeMenuMap.put("parent_name",""); }else { String parent_name = parentMenu.getName(); manegeMenuMap.put("parent_name",parent_name); } } String createTime = SDF.format(manageMenu.getCreateTime()); String updateTime = SDF.format(manageMenu.getUpdateTime()); manegeMenuMap.put("createTime",createTime); manegeMenuMap.put("updateTime",updateTime); manageMenuList.add(manegeMenuMap); } resultMap.put("manageMenus",manageMenuList); int totalNumber = manageMenuMapper.selectCount(wrapper); resultMap.put("totalNumber",totalNumber); resultMap.put("current",current); resultMap.put("size",size); int totalPageNumber = totalNumber/size; if(totalNumber%size != 0){ totalPageNumber += 1; } resultMap.put("totalPageNumber",totalPageNumber); return resultMap; } @Override public Map getManageParentMenu(Map map) { Map resultMap = new HashMap(); QueryWrapper wrapper = new QueryWrapper(); wrapper.eq("is_delete",Constants.NOT_DELETE); wrapper.eq("parent_id",0); List manageMenus = manageMenuMapper.selectList(wrapper); resultMap.put("manageMenus",manageMenus); return resultMap; } @Override public List> getManageMenuByParentId(Map map) { Map limitMap = new HashMap(); limitMap.put("parent_id", map.get("parent_id")); limitMap.put("start", (Integer.parseInt(map.get("current").toString()) - 1) * Integer.parseInt(map.get("size").toString())); limitMap.put("number", Integer.parseInt(map.get("size").toString())); List manageMenus = manageMenuMapper.getManageMenuByCondition(limitMap); SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List> resultList = new ArrayList<>(); for (ManageMenu manageMenu:manageMenus) { Map manegeMenuMap = JSON.parseObject(JSON.toJSONString(manageMenu)); if (manageMenu.getParentId().equals(0)){ manegeMenuMap.put("parent_name",""); }else { ManageMenu parentMenu = manageMenuMapper.getManageMenuById(manageMenu.getParentId()); if (ObjectUtils.isEmpty(parentMenu)){ manegeMenuMap.put("parent_name",""); }else { String parent_name = parentMenu.getName(); manegeMenuMap.put("parent_name",parent_name); } } String createTime = SDF.format(manageMenu.getCreateTime()); String updateTime = SDF.format(manageMenu.getUpdateTime()); manegeMenuMap.put("createTime",createTime); manegeMenuMap.put("updateTime",updateTime); resultList.add(manegeMenuMap); } return resultList; } @Override public List getParentChildrenMenusByRoles(List roles) { List allMenus = manageMenuMapper.getAllMenusByRoles(roles); if(ObjectUtils.isEmpty(allMenus)) return null; Map menusMap = new HashMap<>(); for (ManageMenu menu : allMenus) { menu.setChildren(new ArrayList<>());//初始化 menusMap.put(menu.getId(), menu); } for (ManageMenu menu : allMenus) { combinationParentChildrenMenus(menusMap, menu); } //已经封装好父子菜单,去除parentId不是0的菜单,去除重复 allMenus.removeIf(new Predicate() { @Override public boolean test(ManageMenu manageMenu) { if(manageMenu.getParentId().equals(0)) return false; return true; } }); return allMenus; } /** * @Description: 组合多级菜单 * @Param: [menuMap, menu]menuMap:key为menuid,value为menu * @return: void * @Author: 陈凯裕 * @Date: 2021/4/7 */ private void combinationParentChildrenMenus(Map menuMap, ManageMenu menu) { Integer parentId = menu.getParentId(); ManageMenu parentMenu = menuMap.get(parentId); if (!ObjectUtils.isEmpty(parentMenu)) { parentMenu.getChildren().add(menu); } } }