@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; }