package com.imed.costaccount.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.imed.costaccount.mapper.RoleMenuMapper; import com.imed.costaccount.model.RoleMenu; import com.imed.costaccount.model.dto.RoleMenuDTO; import com.imed.costaccount.model.vo.CommonSelectVO; import com.imed.costaccount.model.vo.CommonVO; import com.imed.costaccount.service.RoleMenuService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Service("roleMenuService") public class RoleMenuServiceImpl extends ServiceImpl implements RoleMenuService { /** * 通过roleId 获取对应的菜单列表 * * @param roleId * @param hospId * @return */ @Override public List getMenuByRoleId(Long roleId, Long hospId) { return baseMapper.getMenuByRoleId(roleId, hospId); } /** * 绑定角色和菜单关系时选择列表可回显 * * @param roleId 角色id * @param hospId * @return CommonSelectVO */ @Override public List roleMenuList(Long roleId, Long hospId) { return baseMapper.getMenuByRoleId(roleId, hospId); // List list = menuService.list( // new LambdaQueryWrapper().eq(Menu::getHospId, hospId) // ); // if (CollUtil.isEmpty(list)) { // return Collections.emptyList(); // } // List all = list.stream().map(i -> { // CommonSelectVO commonSelectVO = new CommonSelectVO(); // commonSelectVO.setIsSelect(false); // commonSelectVO.setParentId(i.getParentId()); // commonSelectVO.setId(i.getMenuId()); // commonSelectVO.setName(i.getName()); // return commonSelectVO; // }).collect(Collectors.toList()); // // List roleMenus = this.list( // new LambdaQueryWrapper().eq(RoleMenu::getRoleId, roleId) // ); // for (CommonSelectVO commonSelectVO : all) { // for (RoleMenu roleMenu : roleMenus) { // if (roleMenu.getMenuId().equals(commonSelectVO.getId())) { // commonSelectVO.setIsSelect(true); // } // } // } // List roots = all.stream().filter(i -> i.getParentId() == 0).collect(Collectors.toList()); // List vos = new ArrayList<>(); // for (CommonSelectVO root : roots) { // vos.addAll(this.getMenuVO(root, all)); // } // return vos; } private List getMenuVO(CommonSelectVO root, List all) { List list = new ArrayList<>(); list.add(root); for (CommonSelectVO j : all) { if (j.getParentId().equals(root.getId())) { List children = root.getChildren(); if (CollUtil.isEmpty(children)) { children = new ArrayList<>(); } children.add(j); root.setChildren(children); this.getMenuVO(j, all); } } return list; } /** * 编辑角色和菜单关系 * * @param roleMenuDTO {@link RoleMenuDTO} * @param hospId 医院id */ @Override @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) public void saveRoleMenu(RoleMenuDTO roleMenuDTO, Long hospId) { Long roleId = roleMenuDTO.getRoleId(); this.remove(new LambdaQueryWrapper().eq(RoleMenu::getRoleId, roleId).eq(RoleMenu::getHospId, hospId)); List menuIds = roleMenuDTO.getMenuIds(); if (CollUtil.isNotEmpty(menuIds)) { List roleMenus = menuIds.stream().map(i -> { RoleMenu roleMenu = new RoleMenu(); roleMenu.setRoleId(roleId).setMenuId(i).setHospId(hospId); return roleMenu; }).collect(Collectors.toList()); this.saveBatch(roleMenus); } } }