示例代码

    @Override
    @Transactional(readOnly = true)
    public List<QualityFourQuotaVo> findQuotaUserOfGroup(String qualityId, String userId, Integer groupType) {
        //根据权限类型查询所有四级指标并且带权限班级ids字符串
        List<QualityFourQuotaVo> fourVoList = qualityFourQuotaDao.findQuotaUserOfGroup(qualityId, userId, groupType);

        //找出所有班级并分组
        List<QualityBaseClass> classAllList = qualityBaseClassDao.findByQualityIdAndClassType(qualityId,null);
        //不用Guava的Function创建map的方法,是因为要把行政班拿出来,所以直接一次循环
        Map<String, QualityBaseClass> classMap = new HashMap<>();

        //拥有全部权限的时候用这个list
        List<String> xzClassIds = new ArrayList<>();

        for(QualityBaseClass cla : classAllList){
            classMap.put(cla.getId(),cla );
            if(QualityBaseClass.CLASS_TYPE_XZ.equals(cla.getClassType())){
                xzClassIds.add(cla.getId());
            }
        }

        //根据返回的四级指标所带的classIds找出指标对应的班级权限(与工作组有关)-----start

        //当前登录人四级指标对应的权限班级id 当对应班级id集合不为空但长度为0时(即 xzClassIds),表示拥有所以行政班的权限
        Map<String, List<String>> fourClassIdsMap = new HashMap<>();

        for (QualityFourQuotaVo fourVo : fourVoList){
            //当前登录人,此四级指标权限为全部学生,则不需要做任何操作
            List<String> fourClassIds = fourClassIdsMap.get(fourVo.getId());
            if(null != fourClassIds && fourClassIds.equals(xzClassIds)){
                continue;
            }

            //将班级id添加到记录指标id和classIdList 对应关系的map中
            String classIds = fourVo.getClassIds();
            String[] classIdArray = classIds.split(",");

            if(classIdArray.length > 0){
                if(null == fourClassIds){
                    fourClassIds = new ArrayList<>();
                }
                for(String claId : classIdArray){
                    if (!fourClassIds.contains(claId)){
                        fourClassIds.add(claId);
                    }
                }

            }else {
                fourClassIdsMap.put(fourVo.getId(),xzClassIds );
            }

        }

        //根据处理好的fourClassIdsMap 指标和班级权限关系set四级指标中的班级信息
        for(QualityFourQuotaVo fourVo : fourVoList){
            List<String> claIdList = fourClassIdsMap.get(fourVo.getId());
            if(CollectionUtils.isEmpty(claIdList)){
                claIdList = xzClassIds;
            }
            List<QualityBaseClass> classList = new ArrayList<>();

            for(String claId : claIdList){
                QualityBaseClass cla = classMap.get(claId);
                if(null != cla){
                    classList.add(cla);
                }
            }
            fourVo.setClassList(classList);
        }
        return fourVoList;
    }

转载于:https://my.oschina.net/u/3357720/blog/2874814

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值