package com.vci.ubcs.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vci.ubcs.starter.web.util.VciBaseUtil; import com.vci.ubcs.system.entity.ClassifyAuth; import com.vci.ubcs.system.entity.Menu; import com.vci.ubcs.system.mapper.ClassifyAuthMapper; import com.vci.ubcs.system.service.IClassifyAuthService; import com.vci.ubcs.system.service.IMenuService; import com.vci.ubcs.system.vo.ClassifyAuthVO; import com.vci.ubcs.system.vo.MenuVO; import com.vci.ubcs.system.wrapper.ClassifyAuthWrapper; import lombok.AllArgsConstructor; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** * 分类授权 * @author ludc * @date 2023/12/25 15:35 */ @Service @AllArgsConstructor public class ClassifyAuthServiceImpl extends ServiceImpl implements IClassifyAuthService { private final ClassifyAuthMapper classifyAuthMapper; private final IMenuService menuService; /** * 分类授权保存接口 * @param classifyAuthList * @return */ @Override @Transactional(rollbackFor = Exception.class) public R submit(List classifyAuthList) { if(classifyAuthList.isEmpty()){ R.fail("授权列表不能为空!"); } // 如果传过来的集合中该分类id下删除了部分角色的授权,就需要将该库中classifyId下不存在的数据删掉 List roleIds = classifyAuthList.stream().map(ClassifyAuth::getRoleId).collect(Collectors.toList()); // 删除 LambdaUpdateWrapper updateWrapper = Wrappers.update() .lambda().eq(ClassifyAuth::getClassifyId, classifyAuthList.get(0).getClassifyId()) .notIn(ClassifyAuth::getRoleId, roleIds); try { this.classifyAuthMapper.delete(updateWrapper); }catch (Exception e){ throw new ServiceException("分类授权过程中出现错误,错误原因:"+e.getMessage()); } return R.status(saveOrUpdateBatch(classifyAuthList)); } /** * 获取分类授权集合 * @param classifyAuthVO * @return */ @Override public List getClassifyAuthList(ClassifyAuthVO classifyAuthVO) { if(Func.isBlank(classifyAuthVO.getClassifyId())){ throw new ServiceException("缺少必传参数分类id"); } LambdaQueryWrapper wrapper = Wrappers.query() .lambda().eq(ClassifyAuth::getClassifyId,classifyAuthVO.getClassifyId()); List classifyAuths = this.classifyAuthMapper.selectList(wrapper); if(!classifyAuths.isEmpty()){ return ClassifyAuthWrapper.build().listVO(classifyAuths); } return new ArrayList(); } /** * 查询该分类下,当前登录的角色有哪些按钮权限 * @param classifyId * @return */ public Map getAuthButtonList(String classifyId){ final String roleIds = AuthUtil.getUser().getRoleId(); // 先查询按钮id列表 LambdaQueryWrapper wrapper = Wrappers.query() .lambda().eq(ClassifyAuth::getClassifyId, classifyId) .in(ClassifyAuth::getRoleId, roleIds); List classifyAuths = this.classifyAuthMapper.selectList(wrapper); if(classifyAuths.size()>1){ throw new ServiceException("角色和分类配置存在多条记录,请联系管理人员清理错误配置!"); } // 是否为超管 Boolean isAdmin = VciBaseUtil.checkAdminTenant(); // 未配置按钮权限 if(!isAdmin && (classifyAuths.isEmpty() || Func.isBlank(classifyAuths.get(0).getButtonIds()))){ return new HashMap<>(); } List condition1 = new ArrayList<>(); // 如果不是超管用户 if(!isAdmin){ condition1.addAll(Arrays.asList(classifyAuths.get(0).getButtonIds().split(","))); } List menuList = menuService.getMenuListById(condition1,"1648879284590858241"); if(menuList.isEmpty()){ return new HashMap<>(); } Map buttonMaps = menuList.stream() .collect(Collectors.toMap(Menu::getCode, menu -> true)); return buttonMaps; } }