|
@@ -1,5 +1,6 @@
|
|
package com.jjt.hl.service.impl;
|
|
package com.jjt.hl.service.impl;
|
|
|
|
|
|
|
|
+import com.googlecode.aviator.AviatorEvaluator;
|
|
import com.jjt.biz.domain.BizModel;
|
|
import com.jjt.biz.domain.BizModel;
|
|
import com.jjt.biz.service.IBizModelDetailService;
|
|
import com.jjt.biz.service.IBizModelDetailService;
|
|
import com.jjt.biz.service.IBizModelService;
|
|
import com.jjt.biz.service.IBizModelService;
|
|
@@ -8,13 +9,17 @@ import com.jjt.common.utils.bean.BeanUtils;
|
|
import com.jjt.hl.domain.*;
|
|
import com.jjt.hl.domain.*;
|
|
import com.jjt.hl.mapper.HlScoreMapper;
|
|
import com.jjt.hl.mapper.HlScoreMapper;
|
|
import com.jjt.hl.service.*;
|
|
import com.jjt.hl.service.*;
|
|
|
|
+import org.springframework.jdbc.core.JdbcTemplate;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
import java.util.Random;
|
|
import java.util.Random;
|
|
|
|
+import java.util.regex.Matcher;
|
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 健康度分数记录Service业务层处理
|
|
* 健康度分数记录Service业务层处理
|
|
@@ -42,6 +47,8 @@ public class HlScoreServiceImpl implements IHlScoreService {
|
|
private IHlMetricsScoreService hlMetricsScoreService;
|
|
private IHlMetricsScoreService hlMetricsScoreService;
|
|
@Resource
|
|
@Resource
|
|
private IHlMetricsScoreDetailService hlMetricsScoreDetailService;
|
|
private IHlMetricsScoreDetailService hlMetricsScoreDetailService;
|
|
|
|
+ @Resource
|
|
|
|
+ private JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -132,6 +139,7 @@ public class HlScoreServiceImpl implements IHlScoreService {
|
|
score.setHlDate(curr);
|
|
score.setHlDate(curr);
|
|
score.setHlType("1");
|
|
score.setHlType("1");
|
|
insertHlScore(score);
|
|
insertHlScore(score);
|
|
|
|
+ BigDecimal totalLose = BigDecimal.ZERO;
|
|
List<HlClass> classList = modelService.selectHlClassList4modelId(model.getModelId());
|
|
List<HlClass> classList = modelService.selectHlClassList4modelId(model.getModelId());
|
|
for (HlClass hlClass : classList) {
|
|
for (HlClass hlClass : classList) {
|
|
HlClassScore hlClassScore = new HlClassScore();
|
|
HlClassScore hlClassScore = new HlClassScore();
|
|
@@ -139,28 +147,44 @@ public class HlScoreServiceImpl implements IHlScoreService {
|
|
hlClassScore.setHlScoreId(score.getHlScoreId());
|
|
hlClassScore.setHlScoreId(score.getHlScoreId());
|
|
List<HlObj> hlObjList = hlObjService.selectHlObjListByClassId(hlClass.getHlClassId());
|
|
List<HlObj> hlObjList = hlObjService.selectHlObjListByClassId(hlClass.getHlClassId());
|
|
hlClassScoreService.insertHlClassScore(hlClassScore);
|
|
hlClassScoreService.insertHlClassScore(hlClassScore);
|
|
- List<HlMetrics> hlMetricsList = hlMetricsService.selectHlMetricsList4ModelId(hlClassScore.getModelId(), hlClass.getObjType());
|
|
|
|
|
|
+ HlMetrics hm = new HlMetrics();
|
|
|
|
+ hm.setHlClassId(hlClass.getHlClassId());
|
|
|
|
+ List<HlMetrics> hlMetricsList = hlMetricsService.selectHlMetricsList(hm);
|
|
BigDecimal loseScore = BigDecimal.ZERO;
|
|
BigDecimal loseScore = BigDecimal.ZERO;
|
|
//1.均分 2.细项分
|
|
//1.均分 2.细项分
|
|
- hlClass.getScoreType();
|
|
|
|
|
|
+// hlClass.getScoreType();
|
|
for (HlMetrics hlMetrics : hlMetricsList) {
|
|
for (HlMetrics hlMetrics : hlMetricsList) {
|
|
//TODO ..这里需要从对象指标表里面去找。
|
|
//TODO ..这里需要从对象指标表里面去找。
|
|
// BizObjMetrics
|
|
// BizObjMetrics
|
|
// BizObjMetricsData
|
|
// BizObjMetricsData
|
|
- BigDecimal lose = BigDecimal.ZERO;
|
|
|
|
|
|
+ BigDecimal ss = random(hlMetrics.getHlScore().intValue());
|
|
|
|
+ BigDecimal lose = hlMetrics.getHlScore().multiply(ss);
|
|
|
|
+ loseScore = loseScore.add(lose);
|
|
HlMetricsScore metricsScore = new HlMetricsScore();
|
|
HlMetricsScore metricsScore = new HlMetricsScore();
|
|
BeanUtils.copyBeanProp(metricsScore, hlMetrics);
|
|
BeanUtils.copyBeanProp(metricsScore, hlMetrics);
|
|
- if (flag()) {
|
|
|
|
- //TODO 模拟扣分判断
|
|
|
|
- if ("1".equals(hlClassScore.getScoreType())) {
|
|
|
|
- //均分
|
|
|
|
-// Random
|
|
|
|
- } else {
|
|
|
|
- //细项分
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ metricsScore.setLoseScore(lose);
|
|
|
|
+ metricsScore.setScore(ss);
|
|
|
|
+ metricsScore.setScoreClassId(hlClassScore.getScoreClassId());
|
|
|
|
+ hlMetricsScoreService.insertHlMetricsScore(metricsScore);
|
|
|
|
+// if (flag()) {
|
|
|
|
+// //TODO 模拟扣分判断
|
|
|
|
+// if ("1".equals(hlClassScore.getScoreType())) {
|
|
|
|
+// //均分
|
|
|
|
+//// Random
|
|
|
|
+// } else {
|
|
|
|
+// //细项分
|
|
|
|
+// }
|
|
|
|
+// }
|
|
}
|
|
}
|
|
|
|
+ hlClassScore.setLoseScore(loseScore);
|
|
|
|
+ totalLose = totalLose.add(loseScore);
|
|
|
|
+ BigDecimal df = hlClassScore.getHlScore().multiply(loseScore);
|
|
|
|
+ hlClassScore.setScore(df);
|
|
|
|
+ hlClassScoreService.updateHlClassScore(hlClassScore);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ score.setHlScore(BigDecimal.valueOf(100).multiply(totalLose));
|
|
|
|
+ updateHlScore(score);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -182,4 +206,234 @@ public class HlScoreServiceImpl implements IHlScoreService {
|
|
int x = r.nextInt(8889) + 1;
|
|
int x = r.nextInt(8889) + 1;
|
|
return x % 2 == 1;
|
|
return x % 2 == 1;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 根据模型ID删除健康度数据
|
|
|
|
+ *
|
|
|
|
+ * @param modelId 模型ID
|
|
|
|
+ */
|
|
|
|
+// @Override
|
|
|
|
+ public void deleteHlBase4ModelId(Long modelId) {
|
|
|
|
+ if (modelId == -1) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ // 开始事务
|
|
|
|
+ jdbcTemplate.execute("BEGIN");
|
|
|
|
+
|
|
|
|
+ // 执行删除语句
|
|
|
|
+ jdbcTemplate.update("DELETE FROM hl_detail WHERE HL_OBJ_ID IN (SELECT HL_OBJ_ID FROM hl_obj WHERE CLASS_ID IN (SELECT CLASS_ID FROM hl_class WHERE hl_base_id IN (SELECT hl_base_id FROM hl_base WHERE model_id = ?)))", modelId);
|
|
|
|
+ jdbcTemplate.update("DELETE FROM hl_obj WHERE CLASS_ID IN (SELECT CLASS_ID FROM hl_class WHERE hl_base_id IN (SELECT hl_base_id FROM hl_base WHERE model_id = ?))", modelId);
|
|
|
|
+ jdbcTemplate.update("DELETE FROM hl_class WHERE hl_base_id IN (SELECT hl_base_id FROM hl_base WHERE model_id = ?)", modelId);
|
|
|
|
+ jdbcTemplate.update("DELETE FROM hl_base WHERE model_id = ?", modelId);
|
|
|
|
+
|
|
|
|
+ // 提交事务
|
|
|
|
+ jdbcTemplate.execute("COMMIT");
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ // 回滚事务
|
|
|
|
+ jdbcTemplate.execute("ROLLBACK");
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+// /**
|
|
|
|
+// * 健康度评分
|
|
|
|
+// */
|
|
|
|
+// @Override
|
|
|
|
+// public void score() {
|
|
|
|
+// Map<String, String> expMap = relaService.selectHlMetricsRelaList(new HlMetricsRela()).stream()
|
|
|
|
+// .collect(Collectors.toMap(HlMetricsRela::getHlCode, HlMetricsRela::getExp));
|
|
|
|
+// Map<String, Long> defMap = defService.selectMetricsDefList(new MetricsDef()).stream().collect(Collectors.toMap(MetricsDef::getMetricsCode, MetricsDef::getMetricsId));
|
|
|
|
+//
|
|
|
|
+// List<HlBase> list = selectHlBaseList(new HlBase());
|
|
|
|
+// list.forEach(base -> {
|
|
|
|
+// if (base.getModelId() != -1) {
|
|
|
|
+// Map<Long, List<BizObjMetrics>> metricsGroup = modelService.selectBizModelMetricsList(base.getModelId()).stream().collect(Collectors.groupingBy(BizObjMetrics::getMetricsId));
|
|
|
|
+// HlScore score = new HlScore();
|
|
|
|
+// score.setModelId(base.getModelId());
|
|
|
|
+// scoreService.insertHlScore(score);
|
|
|
|
+// List<HlClass> classes = base.getHlClassList();
|
|
|
|
+// AtomicReference<BigDecimal> total = new AtomicReference<>(new BigDecimal(0));
|
|
|
|
+// classes.forEach(cs -> {
|
|
|
|
+// HlScoreDetail csDetail = new HlScoreDetail();
|
|
|
|
+// csDetail.setHlScoreId(score.getHlScoreId());
|
|
|
|
+// csDetail.setHlType("CLASS");
|
|
|
|
+// csDetail.setHlCode(cs.getClassCode());
|
|
|
|
+// List<HlObj> objs = cs.getHlObjList();
|
|
|
|
+// AtomicReference<BigDecimal> scc = new AtomicReference<>(new BigDecimal(0));
|
|
|
|
+// objs.forEach(ob -> {
|
|
|
|
+// List<HlDetail> details = ob.getHlDetailList();
|
|
|
|
+// HlScoreDetail obDetail = new HlScoreDetail();
|
|
|
|
+// obDetail.setHlScoreId(score.getHlScoreId());
|
|
|
|
+// obDetail.setHlType("OBJ");
|
|
|
|
+// obDetail.setHlCode(ob.getHlObjCode());
|
|
|
|
+// AtomicReference<BigDecimal> sc = new AtomicReference<>(new BigDecimal(0));
|
|
|
|
+// if ("LINK".equals(ob.getHlObjCode())) {
|
|
|
|
+// details.forEach(d -> {
|
|
|
|
+// HlScoreDetail scoreDetail = new HlScoreDetail();
|
|
|
|
+// scoreDetail.setHlScoreId(score.getHlScoreId());
|
|
|
|
+// scoreDetail.setHlType("DETAIL");
|
|
|
|
+// scoreDetail.setHlCode(d.getHlDetailCode());
|
|
|
|
+// String hlCode = d.getHlDetailCode();
|
|
|
|
+// String exp = expMap.get(hlCode);
|
|
|
|
+// BigDecimal standScore = new BigDecimal(d.getHlDetailScore());
|
|
|
|
+// switch (hlCode) {
|
|
|
|
+// case "C01":
|
|
|
|
+// case "C02":
|
|
|
|
+// case "C03":
|
|
|
|
+// if (StringUtils.isNotEmpty(exp)) {
|
|
|
|
+// Matcher matcher = match(exp);
|
|
|
|
+// Map<String, List<BizObjMetrics>> originalMap = new HashMap<>();
|
|
|
|
+// //先拿到一个code,好获取组件数量
|
|
|
|
+// String oneCode = "";
|
|
|
|
+// while (matcher.find()) {
|
|
|
|
+// String code = matcher.group(1);
|
|
|
|
+// String old = String.format("${%s}", code);
|
|
|
|
+// String newCode = code.replace(".", "");
|
|
|
|
+// oneCode = newCode;
|
|
|
|
+// exp = exp.replace(old, newCode);
|
|
|
|
+//
|
|
|
|
+// Long mid = defMap.get(code);
|
|
|
|
+// List<BizObjMetrics> omList = metricsGroup.get(mid);
|
|
|
|
+// originalMap.put(newCode, omList);
|
|
|
|
+// }
|
|
|
|
+// // 获取组件数量
|
|
|
|
+// int size = originalMap.get(oneCode).size();
|
|
|
|
+// int alarmSize = 0;
|
|
|
|
+// // 遍历列表并创建新的 Map
|
|
|
|
+// for (int i = 0; i < size; i++) {
|
|
|
|
+// Map<String, Object> singleEntryMap = new HashMap<>();
|
|
|
|
+// for (String s : originalMap.keySet()) {
|
|
|
|
+// singleEntryMap.put(s, originalMap.get(s).get(i).getDValue().floatValue());
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// boolean flag = evaluator(exp, singleEntryMap);
|
|
|
|
+// if (flag) {
|
|
|
|
+// alarmSize++;
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// //最终得分(告警组件数量/总数量 )*细项分
|
|
|
|
+// BigDecimal df = standScore.subtract(BigDecimal.valueOf(alarmSize).divide(BigDecimal.valueOf(size)).multiply(standScore));
|
|
|
|
+// scoreDetail.setHlScore(df);
|
|
|
|
+// scoreDetailService.insertHlScoreDetail(scoreDetail);
|
|
|
|
+// }
|
|
|
|
+// break;
|
|
|
|
+// default:
|
|
|
|
+// break;
|
|
|
|
+// }
|
|
|
|
+// });
|
|
|
|
+// } else {
|
|
|
|
+// sc.set(random(ob.getHlObjScore()));
|
|
|
|
+// }
|
|
|
|
+// obDetail.setHlScore(sc.get());
|
|
|
|
+// scoreDetailService.insertHlScoreDetail(obDetail);
|
|
|
|
+// scc.set(scc.get().add(obDetail.getHlScore()));
|
|
|
|
+// });
|
|
|
|
+// csDetail.setHlScore(scc.get());
|
|
|
|
+// scoreDetailService.insertHlScoreDetail(csDetail);
|
|
|
|
+// total.set(total.get().add(csDetail.getHlScore()));
|
|
|
|
+// });
|
|
|
|
+// score.setHlScore(total.get());
|
|
|
|
+// scoreService.updateHlScore(score);
|
|
|
|
+// }
|
|
|
|
+// });
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// /**
|
|
|
|
+// * 昨日健康度评分
|
|
|
|
+// */
|
|
|
|
+// @Override
|
|
|
|
+// public void yesterday() {
|
|
|
|
+// LocalDate localDate = LocalDate.now().minusDays(1);
|
|
|
|
+// List<HlBase> list = selectHlBaseList(new HlBase());
|
|
|
|
+//
|
|
|
|
+// list.forEach(base -> {
|
|
|
|
+// if (base.getModelId() != -1) {
|
|
|
|
+// HlDay hlDay = new HlDay();
|
|
|
|
+// hlDay.setModelId(base.getModelId());
|
|
|
|
+// hlDay.setHlDate(Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
|
|
|
|
+// dayService.insertHlDay(hlDay);
|
|
|
|
+// List<HlClass> classes = base.getHlClassList();
|
|
|
|
+// AtomicReference<BigDecimal> total = new AtomicReference<>(new BigDecimal(0));
|
|
|
|
+// classes.forEach(cs -> {
|
|
|
|
+// HlDayDetail csDetail = new HlDayDetail();
|
|
|
|
+// csDetail.setDayId(hlDay.getDayId());
|
|
|
|
+// csDetail.setHlType("CLASS");
|
|
|
|
+// csDetail.setHlCode(cs.getClassCode());
|
|
|
|
+// List<HlObj> objs = cs.getHlObjList();
|
|
|
|
+// AtomicReference<BigDecimal> scc = new AtomicReference<>(new BigDecimal(0));
|
|
|
|
+// objs.forEach(ob -> {
|
|
|
|
+// List<HlDetail> details = ob.getHlDetailList();
|
|
|
|
+// HlDayDetail obDetail = new HlDayDetail();
|
|
|
|
+// obDetail.setDayId(hlDay.getDayId());
|
|
|
|
+// obDetail.setHlType("OBJ");
|
|
|
|
+// obDetail.setHlCode(ob.getHlObjCode());
|
|
|
|
+// AtomicReference<BigDecimal> sc = new AtomicReference<>(new BigDecimal(0));
|
|
|
|
+// if ("LINK".equals(ob.getHlObjCode())) {
|
|
|
|
+// details.forEach(d -> {
|
|
|
|
+// HlDayDetail scoreDetail = new HlDayDetail();
|
|
|
|
+// scoreDetail.setDayId(hlDay.getDayId());
|
|
|
|
+// scoreDetail.setHlType("DETAIL");
|
|
|
|
+// scoreDetail.setHlCode(d.getHlDetailCode());
|
|
|
|
+// switch (d.getHlDetailCode()) {
|
|
|
|
+// case "C01":
|
|
|
|
+// case "C02":
|
|
|
|
+// case "C03":
|
|
|
|
+// BigDecimal dc = random(d.getHlDetailScore());
|
|
|
|
+// scoreDetail.setHlScore(dc);
|
|
|
|
+// sc.set(sc.get().add(dc));
|
|
|
|
+// dayDetailService.insertHlDayDetail(scoreDetail);
|
|
|
|
+// break;
|
|
|
|
+// default:
|
|
|
|
+// break;
|
|
|
|
+// }
|
|
|
|
+// });
|
|
|
|
+// } else {
|
|
|
|
+// sc.set(random(ob.getHlObjScore()));
|
|
|
|
+// }
|
|
|
|
+// obDetail.setHlScore(sc.get());
|
|
|
|
+// dayDetailService.insertHlDayDetail(obDetail);
|
|
|
|
+// scc.set(scc.get().add(obDetail.getHlScore()));
|
|
|
|
+// });
|
|
|
|
+// csDetail.setHlScore(scc.get());
|
|
|
|
+// dayDetailService.insertHlDayDetail(csDetail);
|
|
|
|
+// total.set(total.get().add(csDetail.getHlScore()));
|
|
|
|
+// });
|
|
|
|
+// hlDay.setHlScore(total.get());
|
|
|
|
+// dayService.updateHlDay(hlDay);
|
|
|
|
+// }
|
|
|
|
+// });
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+ private BigDecimal random(int s) {
|
|
|
|
+ Random random = new Random();
|
|
|
|
+ int randomNumber = random.nextInt(s);
|
|
|
|
+// // 生01到3的随机数
|
|
|
|
+// int v = s.intValue() - randomNumber;
|
|
|
|
+ return BigDecimal.valueOf(randomNumber);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 公式计算
|
|
|
|
+ *
|
|
|
|
+ * @param exp 表达式
|
|
|
|
+ * @param env 值
|
|
|
|
+ * @return 结果
|
|
|
|
+ */
|
|
|
|
+ private boolean evaluator(String exp, Map<String, Object> env) {
|
|
|
|
+ return (boolean) AviatorEvaluator.execute(exp, env);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 正则匹配
|
|
|
|
+ *
|
|
|
|
+ * @param exp 表达式
|
|
|
|
+ * @return 结果
|
|
|
|
+ */
|
|
|
|
+ private Matcher match(String exp) {
|
|
|
|
+ //正则表达式匹配变量
|
|
|
|
+ Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}");
|
|
|
|
+ return pattern.matcher(exp);
|
|
|
|
+ }
|
|
}
|
|
}
|