|
@@ -1,6 +1,7 @@
|
|
package cn.com.qmth.stmms.ms.marking.service;
|
|
package cn.com.qmth.stmms.ms.marking.service;
|
|
|
|
|
|
import java.util.Comparator;
|
|
import java.util.Comparator;
|
|
|
|
+import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.Optional;
|
|
import java.util.Optional;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -69,8 +70,19 @@ public class DetermineLevelService {
|
|
values[i] = level.getWeight()*markerWeight;
|
|
values[i] = level.getWeight()*markerWeight;
|
|
}
|
|
}
|
|
int avg = (int)Math.round(DoubleStream.of(values).average().orElse(0));
|
|
int avg = (int)Math.round(DoubleStream.of(values).average().orElse(0));
|
|
- Optional<Level> levelOptional = levelRepo.findByWorkId(workId).stream().filter(o -> o.getMaxScore() >= avg && o.getMinScore() <= avg).findFirst();
|
|
|
|
- Level level = levelOptional.orElseThrow(null);
|
|
|
|
|
|
+ List<Level> levels = levelRepo.findByWorkId(workId);
|
|
|
|
+ Optional<Level> levelOptional = levels.stream().filter(o -> o.getMaxScore() >= avg && o.getMinScore() <= avg).findFirst();
|
|
|
|
+ Level level = levelOptional.orElse(null);
|
|
|
|
+ if(level == null){
|
|
|
|
+ levels = levels.stream().sorted(Comparator.comparing(Level::getMaxScore).reversed()).collect(Collectors.toList());
|
|
|
|
+ if(avg>levels.get(0).getMaxScore()){
|
|
|
|
+ level = levels.get(0);
|
|
|
|
+ }
|
|
|
|
+ levels = levels.stream().sorted(Comparator.comparing(Level::getMinScore)).collect(Collectors.toList());
|
|
|
|
+ if(avg<levels.get(0).getMinScore()){
|
|
|
|
+ level = levels.get(0);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return new DeterResult(level.getCode(),DeterType.WEIGHT);
|
|
return new DeterResult(level.getCode(),DeterType.WEIGHT);
|
|
}
|
|
}
|
|
}
|
|
}
|