@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