public WorkFaceAnalysisResponse getWorkFaceAnalyse(LocalDate startDate, LocalDate endDate) {
Integer accessWorkFaceCount = kpiConfigDao.getAccessWorkFaceCount();
Integer recentlyAccessWorkFaceCount = kpiConfigDao.getRecentlyAccessWorkFaceCount(startDate, endDate);
List<GradeData> workFaceGradeList = gradeDataDao.getWorkFaceGrade(startDate, endDate);
Map<String, List<GradeData>> workAndListMap = workFaceGradeList.stream().collect(
Collectors.groupingBy(GradeData::getWorkFaceCode));
List<WorkFaceGradeDto> workFaceGradeDtoList = new ArrayList<>();
for (Map.Entry<String, List<GradeData>> entry : workAndListMap.entrySet()) {
WorkFaceGradeDto workFaceGradeDto = new WorkFaceGradeDto();
workFaceGradeDto.setWorkFaceCode(entry.getKey());
workFaceGradeDto.setWorkFaceName(entry.getValue().get(0).getWorkFaceName());
BigDecimal averageGrade = new BigDecimal("0");
for (GradeData gradeData : entry.getValue()) {
averageGrade = averageGrade.add(gradeData.getWorkFaceGrade());
}
//scale表示小数点后的位数,ROUND_HALF_UP代表以四舍五入的方式进行舍取
workFaceGradeDto.setWorkFaceGrade(averageGrade
.divide(new BigDecimal(String.valueOf(entry.getValue().size())), 2, BigDecimal.ROUND_HALF_UP));
workFaceGradeDtoList.add(workFaceGradeDto);
}
workFaceGradeDtoList.sort(Comparator.comparing(WorkFaceGradeDto::getWorkFaceGrade).reversed());
List<WorkFaceGradeDto> unusualList = workFaceGradeDtoList.stream().filter(
item -> item.getWorkFaceGrade().compareTo(BigDecimal.ZERO) == 0).collect(Collectors.toList());
List<WorkFaceGradeDto> normalList = workFaceGradeDtoList.stream().filter(
item -> item.getWorkFaceGrade().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
List<GradeLevelConfig> gradeLevelConfigList = gradeLevelConfigDao.getGradeLevelConfigList();
//切记这里List<WorkFaceGradeDto>不用赋值,因为groupingBy已经自动赋值
Map<Integer, List<WorkFaceGradeDto>> levelAndWorkFaceCountMap = workFaceGradeDtoList.stream().collect(
Collectors.groupingBy(item -> {
Integer level = 100;
for (GradeLevelConfig gradeLevelConfig : gradeLevelConfigList) {
int grade = item.getWorkFaceGrade().intValue();
if (Range.closed(gradeLevelConfig.getLevelLowerGrade(), gradeLevelConfig.getLevelHeightGrade())
.contains(grade)) {
level = gradeLevelConfig.getLevel();
break;
}
}
return level;
}));
return this.convert(accessWorkFaceCount, recentlyAccessWorkFaceCount, unusualList, normalList,
workFaceGradeDtoList, gradeLevelConfigList, levelAndWorkFaceCountMap);
}
BigDecimal的用法
//赋予初始值为0
BigDecimal averageGrade = new BigDecimal("0");
//将全部值相加
for (GradeData gradeData : entry.getValue()) {
averageGrade = averageGrade.add(gradeData.getWorkFaceGrade());
}
//scale表示小数点后的位数,ROUND_HALF_UP代表以四舍五入的方式进行舍取
workFaceGradeDto.setWorkFaceGrade(averageGrade
.divide(new BigDecimal(String.valueOf(entry.getValue().size())), 2, BigDecimal.ROUND_HALF_UP));
//将总值比上长度,小数点后保留两位并且四舍五入
averageGrade
.divide(new BigDecimal(String.valueOf(entry.getValue().size())), 2, BigDecimal.ROUND_HALF_UP)