package com.moral.api.service.impl;
|
|
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.entity.ManageRoleMenu;
|
import com.moral.api.mapper.ManageMenuMapper;
|
import com.moral.api.mapper.ManageRoleMapper;
|
import com.moral.api.mapper.ManageRoleMenuMapper;
|
import com.moral.api.service.ManageRoleMenuService;
|
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 com.moral.util.TokenUtils;
|
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.servlet.http.HttpServletRequest;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 后台菜单角色关系表 服务实现类
|
* </p>
|
*
|
* @author moral
|
* @since 2021-03-09
|
*/
|
@Service
|
public class ManageRoleMenuServiceImpl extends ServiceImpl<ManageRoleMenuMapper, ManageRoleMenu> implements ManageRoleMenuService {
|
|
@Autowired(required = false)
|
private ManageRoleMenuMapper manageRoleMenuMapper;
|
|
@Autowired(required = false)
|
private ManageMenuMapper manageMenuMapper;
|
|
@Autowired(required = false)
|
private ManageRoleMapper manageRoleMapper;
|
|
@Autowired
|
LogUtils logUtils;
|
|
@Override
|
@Transactional
|
public Map<String, Object> updateRoleMenu(List menuList, int id) {
|
//补充父菜单
|
List supplementList = new ArrayList();
|
supplementList.addAll(menuList);
|
for (int i=0;i<supplementList.size();i++) {
|
supplementList.addAll(supplementParentMenus(Integer.parseInt(supplementList.get(i).toString())));
|
}
|
LinkedHashSet<Object> hashSet = new LinkedHashSet<>(supplementList);
|
ArrayList<Object> list = new ArrayList<>(hashSet);
|
//return null;
|
Map<String,Object> resultMap = new HashMap<>();
|
List<ManageMenu> manageMenusOld = manageMenuMapper.getManageMenuByRoleId(id);
|
QueryWrapper<ManageRoleMenu> wrapper = new QueryWrapper();
|
wrapper.eq("role_id",id);
|
wrapper.eq("is_delete",0);
|
List<Map> result = new ArrayList<>();
|
if (list.size()==0){
|
result = result;
|
}else {
|
result = manageRoleMenuMapper.getDataByMenuIds(list,id);
|
}
|
List<Map> result1 = manageRoleMenuMapper.getDataByRoleId(id);
|
if ((manageRoleMenuMapper.selectCount(wrapper)==0 || result.size()==0)&&list.size()!=0){
|
List<Map> insertList = new ArrayList<>();
|
for (Object temp:list) {
|
Map<String,Object> map = new HashMap<>();
|
map.put("role_id",id);
|
map.put("menu_id",Integer.parseInt(temp.toString()));
|
insertList.add(map);
|
}
|
if (insertList.size()!=0){
|
manageRoleMenuMapper.insertBatch(insertList);
|
}
|
}else {
|
List updateList = new ArrayList();
|
for (Map manageRoleMenu:result1) {
|
int have = 1;
|
for (Object temp:list){
|
if (manageRoleMenu.get("menu_id").equals(Integer.parseInt(temp.toString()))){
|
have = 2;
|
continue;
|
}
|
}
|
if (have == 2){
|
continue;
|
}
|
updateList.add(manageRoleMenu.get("menu_id"));
|
}
|
List insertList = new ArrayList();
|
for (Object temp:list) {
|
int have = 1;
|
for (Map manageRoleMenu:result1){
|
if (manageRoleMenu.get("menu_id").equals(Integer.parseInt(temp.toString()))){
|
have = 2;
|
continue;
|
}
|
}
|
if (have == 2){
|
continue;
|
}
|
insertList.add(temp);
|
}
|
if (updateList.size()>0){
|
manageRoleMenuMapper.updateDeleteStateByRoleIdMenuIds(updateList,id);
|
}
|
if (insertList.size()>0){
|
List mapList = new ArrayList();
|
for (Object temp:insertList) {
|
Map<String,Integer> insertMap = new HashMap<>();
|
insertMap.put("role_id",id);
|
insertMap.put("menu_id",Integer.parseInt(temp.toString()));
|
mapList.add(insertMap);
|
}
|
manageRoleMenuMapper.insertBatch(mapList);
|
}
|
}
|
//注销token
|
TokenUtils.destoryToken(id);
|
List<ManageMenu> manageMenusNew = manageMenuMapper.getManageMenuByRoleId(id);
|
List manageMenuOldList = new ArrayList();
|
List manageMenuNewList = new ArrayList();
|
for (ManageMenu manageMenu:manageMenusOld) {
|
manageMenuOldList.add(manageMenu.getName());
|
}
|
for (ManageMenu manageMenu:manageMenusNew) {
|
manageMenuNewList.add(manageMenu.getName());
|
}
|
//获取角色信息
|
ManageRole manageRole = manageRoleMapper.selectById(id);
|
//操作插入日志
|
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
|
String content = "修改了角色:"+manageRole.getName()+";";
|
if (manageMenuOldList.size()==0){
|
manageMenuOldList.add("空");
|
}
|
if (manageMenuNewList.size()==0){
|
manageMenuNewList.add("空");
|
}
|
content = content+"菜单:"+manageMenuOldList+"->"+manageMenuNewList+";";
|
logUtils.saveOperationForManage(request,content,Constants.UPDATE_OPERATE_TYPE);
|
resultMap.put("code",ResponseCodeEnum.SUCCESS.getCode());
|
resultMap.put("msg",ResponseCodeEnum.SUCCESS.getMsg());
|
return resultMap;
|
}
|
|
/**
|
* @Description: 补充父菜单
|
* @Param: [list, menuId]list:menuId集合
|
* @return: void
|
* @Author: 李子杰
|
* @Date: 2021/4/7
|
*/
|
private List supplementParentMenus(int menuId) {
|
List list = new ArrayList();
|
ManageMenu manageMenu = manageMenuMapper.getManageMenuById(menuId);
|
if (manageMenu.getParentId()!=0){
|
list.add(manageMenu.getParentId());
|
list.addAll(supplementParentMenus(manageMenu.getParentId()));
|
}
|
return list;
|
}
|
}
|