|
@@ -366,15 +366,97 @@ public class HlScoreServiceImpl implements IHlScoreService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
- * 模拟扣分判断
|
|
|
+ * 日健康度评分
|
|
|
*
|
|
|
- * @return
|
|
|
+ * @param date 时间
|
|
|
+ * @param modelId 模型Id
|
|
|
*/
|
|
|
- private boolean flag() {
|
|
|
- Random r = new Random();
|
|
|
- int x = r.nextInt(8889) + 1;
|
|
|
- return x % 2 == 1;
|
|
|
+ @Override
|
|
|
+ public void day(Date date, Long modelId) {
|
|
|
+ HlScore score = new HlScore();
|
|
|
+ score.setModelId(modelId);
|
|
|
+ score.setHlDate(date);
|
|
|
+ score.setHlType("2");
|
|
|
+ insertHlScore(score);
|
|
|
+ BigDecimal totalScore = BigDecimal.ZERO;
|
|
|
+ //所有扣分的指标
|
|
|
+ Map<Long, List<HlMetricsVO>> lostMetricsMap = hlMetricsService.hlMetricsDayList(modelId, date);
|
|
|
+ //查找健康度分类
|
|
|
+ List<HlClass> classList = modelService.selectHlClassList4modelId(modelId);
|
|
|
+ List<HlMetricsScoreDetail> details = new ArrayList<>();
|
|
|
+ for (HlClass hlClass : classList) {
|
|
|
+ HlClassScore hlClassScore = new HlClassScore();
|
|
|
+ BeanUtils.copyBeanProp(hlClassScore, hlClass);
|
|
|
+ hlClassScore.setHlScoreId(score.getHlScoreId());
|
|
|
+ hlClassScoreService.insertHlClassScore(hlClassScore);
|
|
|
+ HlMetrics hm = new HlMetrics();
|
|
|
+ hm.setHlClassId(hlClass.getHlClassId());
|
|
|
+ List<HlMetrics> hlMetricsList = hlMetricsService.selectHlMetricsList(hm);
|
|
|
+ //当前分类下所有指标
|
|
|
+ Map<Long, List<HlMetricsVO>> metricsMap = hlMetricsService.hlMetricsList(hlClass.getHlClassId());
|
|
|
+ BigDecimal lostClass = BigDecimal.ZERO;
|
|
|
+ for (HlMetrics hlMetrics : hlMetricsList) {
|
|
|
+ if ("1".equals(hlClass.getScoreType())) {
|
|
|
+ //1.均分 2.细项分
|
|
|
+ //如果是均分,需要计算,如果是细项分,直接用
|
|
|
+ BigDecimal metricsScore = hlClass.getHlScore().divide(BigDecimal.valueOf(hlMetricsList.size()), RoundingMode.HALF_UP);
|
|
|
+ hlMetrics.setHlScore(metricsScore);
|
|
|
+ }
|
|
|
+
|
|
|
+ //总的指标数量
|
|
|
+ List<HlMetricsVO> vos1 = metricsMap.get(hlMetrics.getMetricsId());
|
|
|
+ int total = vos1 != null ? vos1.size() : 0;
|
|
|
+ //扣分指标数量
|
|
|
+ List<HlMetricsVO> vos = lostMetricsMap.get(hlMetrics.getMetricsId());
|
|
|
+ int lostNum = vos != null ? vos.size() : 0;
|
|
|
+ //扣分
|
|
|
+ BigDecimal lost = BigDecimal.ZERO;
|
|
|
+
|
|
|
+ //(告警组件数量/总数量 )*细项分
|
|
|
+ if (lostNum > 0) {
|
|
|
+ lost = BigDecimal.valueOf(lostNum).divide(BigDecimal.valueOf(total), RoundingMode.HALF_UP).multiply(hlMetrics.getHlScore());
|
|
|
+ }
|
|
|
+ //最终得分 = 分数-扣分
|
|
|
+ BigDecimal score2 = BigDecimal.ZERO;
|
|
|
+ if (hlMetrics.getHlScore().compareTo(lost) >= 0) {
|
|
|
+ score2 = hlMetrics.getHlScore().subtract(lost);
|
|
|
+ }
|
|
|
+ HlMetricsScore metricsScore = new HlMetricsScore();
|
|
|
+ BeanUtils.copyBeanProp(metricsScore, hlMetrics);
|
|
|
+ metricsScore.setLoseScore(lost);
|
|
|
+ metricsScore.setScore(score2);
|
|
|
+ metricsScore.setScoreClassId(hlClassScore.getScoreClassId());
|
|
|
+ hlMetricsScoreService.insertHlMetricsScore(metricsScore);
|
|
|
+ if (vos != null) {
|
|
|
+ for (HlMetricsVO vo : vos) {
|
|
|
+ HlMetricsScoreDetail detail = new HlMetricsScoreDetail();
|
|
|
+ detail.setScoreMetricsId(metricsScore.getScoreMetricsId());
|
|
|
+ detail.setEventId(vo.getEventId());
|
|
|
+ details.add(detail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ lostClass = lostClass.add(lost);
|
|
|
+ }
|
|
|
+ hlClassScore.setLoseScore(lostClass);
|
|
|
+ BigDecimal df = BigDecimal.ZERO;
|
|
|
+ if (hlClassScore.getHlScore().compareTo(lostClass) >= 0) {
|
|
|
+ df = hlClassScore.getHlScore().subtract(lostClass);
|
|
|
+ }
|
|
|
+ hlClassScore.setScore(df);
|
|
|
+ totalScore = totalScore.add(df);
|
|
|
+ hlClassScoreService.updateHlClassScore(hlClassScore);
|
|
|
+ }
|
|
|
+ if (details.size() > 0) {
|
|
|
+ try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
|
|
|
+ HlMetricsScoreDetailMapper mapper = sqlSession.getMapper(HlMetricsScoreDetailMapper.class);
|
|
|
+ details.forEach(mapper::insertHlMetricsScoreDetail);
|
|
|
+ sqlSession.commit();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ score.setHlScore(totalScore);
|
|
|
+ updateHlScore(score);
|
|
|
}
|
|
|
|
|
|
|