示例代碼

@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;
    }
相關文章
相關標籤/搜索