package com.yuanchu.limslaboratory.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yuanchu.limslaboratory.mapper.MenuMapper; import com.yuanchu.limslaboratory.mapper.RoleManageMapper; import com.yuanchu.limslaboratory.pojo.Menu; import com.yuanchu.limslaboratory.pojo.RoleInfo; import com.yuanchu.limslaboratory.pojo.RoleMenu; import com.yuanchu.limslaboratory.pojo.dto.GetAllRoleAndMenuByConditionPageDto; import com.yuanchu.limslaboratory.pojo.dto.RoleAndMenuDto; import com.yuanchu.limslaboratory.pojo.dto.RoleInfoDto; import com.yuanchu.limslaboratory.pojo.dto.UpdateRoleMenuDto; import com.yuanchu.limslaboratory.service.RoleManagerService; import com.yuanchu.limslaboratory.utils.JsonUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; /** * @Author 张宾 * @Date 2023/8/23 */ @Service public class RoleManagerServiceImpl implements RoleManagerService { @Resource private MenuMapper menuMapper; @Resource private RoleManageMapper roleManageMapper; @Override public Object getMenusTree() { List menus = menuMapper.getMenuList(); return menus.stream() .filter(t -> t.getParentId() == 0) .peek((menu) -> menu.setChildren(this.getEnumChildren(menu, menus))) .collect(Collectors.toList()); } @Override @Transactional(rollbackFor = Exception.class) public boolean addRoleInfo(RoleInfoDto dto) { //新增角色 //System.out.println(dto); LocalDateTime createTime = DateUtil.toLocalDateTime(DateUtil.date()); RoleInfo role=new RoleInfo(); long nextId = IdUtil.getSnowflake().nextId(); role.setId(nextId); role.setName(dto.getRoleName()); role.setCreateTime(createTime); int insert = roleManageMapper.insertRole(role); List>addBranch=new ArrayList<>(); reverseTree(dto.getMenuData(),addBranch); List roleMenuList =new ArrayList<>(); addBranch.forEach(item->{ roleMenuList.add(new RoleMenu(null,nextId, Long.valueOf(String.valueOf(item.get("id"))) ,Boolean.valueOf(String.valueOf(item.get("selected"))) ,Boolean.valueOf(String.valueOf(item.get("added"))) ,Boolean.valueOf(String.valueOf(item.get("deleted"))) ,Boolean.valueOf(String.valueOf(item.get("updated"))) ,createTime )); }); //roleMenuAddList.forEach(System.out::println); int i = roleManageMapper.insertBatchRoleMenu(roleMenuList); return insert>0&&i>0; } @Override public boolean assertRepeat(String roleName) { List assertName = roleManageMapper.getAssertName(roleName); return assertName.size()<1; } @Override public Map getAllRoleAndMenuInfo(GetAllRoleAndMenuByConditionPageDto dto) { dto.setCurrentPage((dto.getCurrentPage()-1)*dto.getCurrentPage()); List roleAndMenuDtos = roleManageMapper.selectAllRoleAndMenu(dto); roleAndMenuDtos.forEach(r->{ ListroleMenuList=r.getRoleMenuList(); //System.out.println(roleMenuList); List collect = roleMenuList.stream() .filter(t -> t.getParentId() == 0) .peek((menu) -> menu.setChildren(this.getRoleMenuChildren(menu, roleMenuList))) .collect(Collectors.toList()); r.setRoleMenuList(collect); }); roleAndMenuDtos.forEach(r->{ r.getRoleMenuList().forEach(System.out::println); }); Mapresult=new HashMap<>(3); result.put("list",roleAndMenuDtos); int size = roleManageMapper.getRoleInfoByName(dto.getName()).size(); result.put("total",size); return result; } @Override public boolean deleteRole(Long id) { return roleManageMapper.updateRoleState(id)>0; } @Override @Transactional(rollbackFor = Exception.class) public boolean updateRoleMenu(UpdateRoleMenuDto dto) { //修改role表信息 UpdateWrapperupdateWrapper=new UpdateWrapper<>(); updateWrapper.lambda() .set(RoleInfo::getName,dto.getRoleName()) .set(RoleInfo::getUpdateTime,DateUtil.toLocalDateTime(DateUtil.date())) .eq(RoleInfo::getId,dto.getRoleId()); int update = roleManageMapper.update(null, updateWrapper); //删除role_menu信息 int deleteRoleMenuByRoleId = roleManageMapper.deleteRoleMenuByRoleId(dto.getRoleId()); //添加最新选择、 dto.getMenuData().forEach(l->{ l.setRoleId(dto.getRoleId()); l.setCreateTime(DateUtil.toLocalDateTime(DateUtil.date())); l.setUpdateTime(DateUtil.toLocalDateTime(DateUtil.date())); }); int insertBatchRoleMenu = roleManageMapper.insertBatchRoleMenu(dto.getMenuData()); return update>0&&deleteRoleMenuByRoleId>0&&insertBatchRoleMenu>0; } @Override public RoleAndMenuDto getRoleAndMenuByRole(Long roleId) { return roleManageMapper.selectAllRoleAndMenuByRoleId(roleId); } private List getEnumChildren(Menu root, List all) { return all.stream() .filter(t -> Objects.equals(t.getParentId(), root.getId())) .peek(g -> { //找子菜单 g.setChildren(getEnumChildren(g, all)); }) .collect(Collectors.toList()); } private List getRoleMenuChildren(RoleMenu root, List all) { return all.stream() .filter(t -> Objects.equals(t.getParentId(), root.getMenuId())) .peek(g -> { //找子菜单 g.setChildren(getRoleMenuChildren(g, all)); }) .collect(Collectors.toList()); } private void reverseTree(List>tree, List>addBranch){ tree.forEach(t->{ addBranch.add(t); if(t.get("children")!=null){ List> children = JsonUtil.jsonToPojo( JsonUtil.jsonToString(t.get("children")), List.class); addBranch.addAll(children); } }); } }