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; 
 | 
  
 | 
  
 | 
    @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; 
 | 
    } 
 | 
} 
 |