ludc
2023-12-29 63d93f64e7643624a4d078c0ac3ec3d465897b11
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java
@@ -4,6 +4,7 @@
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.code.feign.ICodeClassifyClient;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.system.entity.ClassifyAuth;
import com.vci.ubcs.system.entity.Menu;
@@ -37,6 +38,8 @@
   private final IMenuService menuService;
   private final ICodeClassifyClient codeClassifyClient;
   /**
    * 分类授权保存接口
    * @param classifyAuthList
@@ -48,6 +51,17 @@
      if(classifyAuthList.isEmpty()){
         R.fail("授权列表不能为空!");
      }
      // 判重,查看是否存在同一个classid下配置了相同的角色
      Map<String, Long> roleidCounts = classifyAuthList.stream()
         .collect(Collectors.groupingBy(ClassifyAuth::getRoleId, Collectors.counting()));
      // 检查是否有roleid出现次数大于1的情况
      boolean hasDuplicateRoleid = roleidCounts.values().stream()
         .anyMatch(count -> count > 1);
      if(hasDuplicateRoleid){
         R.fail("角色和分类已经存在,请重新配置!");
      }
      // 如果传过来的集合中该分类id下删除了部分角色的授权,就需要将该库中classifyId下不存在的数据删掉
      List<String> roleIds = classifyAuthList.stream().map(ClassifyAuth::getRoleId).collect(Collectors.toList());
      // 删除
@@ -75,10 +89,10 @@
      LambdaQueryWrapper<ClassifyAuth> wrapper = Wrappers.<ClassifyAuth>query()
         .lambda().eq(ClassifyAuth::getClassifyId,classifyAuthVO.getClassifyId());
      List<ClassifyAuth> classifyAuths = this.classifyAuthMapper.selectList(wrapper);
      if(!classifyAuths.isEmpty()){
         return ClassifyAuthWrapper.build().listVO(classifyAuths);
      if(classifyAuths.isEmpty()){
         return new ArrayList<ClassifyAuthVO>();
      }
      return new ArrayList<ClassifyAuthVO>();
      return ClassifyAuthWrapper.build().listVO(classifyAuths);
   }
   /**
@@ -87,12 +101,37 @@
    * @return
    */
   public Map<String,Boolean> getAuthButtonList(String classifyId){
      if(Func.isBlank(classifyId)){
         return new HashMap<>();
      }
      //查询分类节点的所有父级节点
      R<List<String>> listR = codeClassifyClient.selectAllParentOid(classifyId);
      if (!listR.isSuccess() && !listR.getData().isEmpty()) {
         throw new ServiceException("获取分类信息失败!");
      }
      // 返回的分类oid是当前节点为第一个,后面依次是他的上层节点
      List<String> classifyOidList = listR.getData();
      final String roleIds = AuthUtil.getUser().getRoleId();
      // 先查询按钮id列表
      LambdaQueryWrapper<ClassifyAuth> wrapper = Wrappers.<ClassifyAuth>query()
         .lambda().eq(ClassifyAuth::getClassifyId, classifyId)
         .in(ClassifyAuth::getRoleId, roleIds);
      List<ClassifyAuth> classifyAuths = this.classifyAuthMapper.selectList(wrapper);
      //如果当前分类没有找到授权配置,就依次从当前节点往上层节点找授权配置,找到了就停止,没找到就一直找到最后
      if(classifyAuths.isEmpty()){
         // 下标从1开始因为当前节点0已经查询过
         for (int i = 1; i < classifyOidList.size(); i++) {
            classifyAuths = this.classifyAuthMapper.selectList(
               Wrappers.<ClassifyAuth>query()
                  .lambda().eq(ClassifyAuth::getClassifyId, classifyOidList.get(i))
                  .in(ClassifyAuth::getRoleId, roleIds)
            );
            if(!classifyAuths.isEmpty()){
               break;
            }
         }
      }
      //出现了错误数据,同一个角色和同一个分类id存在多条授权记录
      if(classifyAuths.size()>1){
         throw new ServiceException("角色和分类配置存在多条记录,请联系管理人员清理错误配置!");
      }
@@ -116,4 +155,17 @@
      return buttonMaps;
   }
   /**
    * 根据角色id查看有哪些分类具备查看权限
    * @param roleIds
    * @return
    */
   @Override
   public List<String> getViewClassByRoleIds(List<String> roleIds) {
      if(roleIds.isEmpty()){
         return new ArrayList<>();
      }
      return this.classifyAuthMapper.getViewClassByRoleIds(roleIds);
   }
}