BizObjMetricsServiceImpl.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  1. package com.jjt.biz.service.impl;
  2. import com.alibaba.fastjson2.JSONArray;
  3. import com.alibaba.fastjson2.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  6. import com.jjt.biz.domain.*;
  7. import com.jjt.biz.mapper.BizObjMetricsMapper;
  8. import com.jjt.biz.service.*;
  9. import com.jjt.common.utils.DateUtils;
  10. import com.jjt.common.utils.IntervalUtil;
  11. import com.jjt.common.utils.StringUtils;
  12. import org.apache.ibatis.session.ExecutorType;
  13. import org.apache.ibatis.session.SqlSession;
  14. import org.apache.ibatis.session.SqlSessionFactory;
  15. import org.springframework.stereotype.Service;
  16. import javax.annotation.Resource;
  17. import java.math.BigDecimal;
  18. import java.time.LocalDateTime;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.Set;
  23. import java.util.function.Function;
  24. import java.util.stream.Collectors;
  25. /**
  26. * 业务对象指标Service业务层处理
  27. *
  28. * @author jjt
  29. * @date 2024-08-09
  30. */
  31. @Service
  32. public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
  33. @Resource
  34. private BizObjMetricsMapper bizObjMetricsMapper;
  35. @Resource
  36. private IMetricsTplDetailService detailService;
  37. @Resource
  38. private IBizObjPpService ppService;
  39. @Resource
  40. private IBizObjService objService;
  41. @Resource
  42. private IBizObjAppService appService;
  43. @Resource
  44. private IPinpointService pinpointService;
  45. @Resource
  46. private IPrometheusService prometheusService;
  47. @Resource
  48. private IBizObjTplService objTplService;
  49. @Resource
  50. private SqlSessionFactory factory;
  51. @Resource
  52. private IAlarmRecordService alarmRecordService;
  53. /**
  54. * 查询业务对象指标
  55. *
  56. * @param objMetricsId 业务对象指标主键
  57. * @return 业务对象指标
  58. */
  59. @Override
  60. public BizObjMetrics selectBizObjMetricsByObjMetricsId(Long objMetricsId) {
  61. return bizObjMetricsMapper.selectBizObjMetricsByObjMetricsId(objMetricsId);
  62. }
  63. /**
  64. * 查询业务对象指标列表
  65. *
  66. * @param bizObjMetrics 业务对象指标
  67. * @return 业务对象指标
  68. */
  69. @Override
  70. public List<BizObjMetrics> selectBizObjMetricsList(BizObjMetrics bizObjMetrics) {
  71. return bizObjMetricsMapper.selectBizObjMetricsList(bizObjMetrics);
  72. }
  73. /**
  74. * 新增业务对象指标
  75. *
  76. * @param bizObjMetrics 业务对象指标
  77. * @return 结果
  78. */
  79. @Override
  80. public int insertBizObjMetrics(BizObjMetrics bizObjMetrics) {
  81. bizObjMetrics.setCreateTime(DateUtils.getNowDate());
  82. return bizObjMetricsMapper.insertBizObjMetrics(bizObjMetrics);
  83. }
  84. /**
  85. * 修改业务对象指标
  86. *
  87. * @param bizObjMetrics 业务对象指标
  88. * @return 结果
  89. */
  90. @Override
  91. public int updateBizObjMetrics(BizObjMetrics bizObjMetrics) {
  92. //插入数据记录表
  93. bizObjMetrics.setUpdateTime(DateUtils.getNowDate());
  94. return bizObjMetricsMapper.updateBizObjMetrics(bizObjMetrics);
  95. }
  96. /**
  97. * 批量删除业务对象指标
  98. *
  99. * @param objMetricsIds 需要删除的业务对象指标主键
  100. * @return 结果
  101. */
  102. @Override
  103. public int deleteBizObjMetricsByObjMetricsIds(Long[] objMetricsIds) {
  104. return bizObjMetricsMapper.deleteBizObjMetricsByObjMetricsIds(objMetricsIds);
  105. }
  106. /**
  107. * 删除业务对象指标信息
  108. *
  109. * @param objMetricsId 业务对象指标主键
  110. * @return 结果
  111. */
  112. @Override
  113. public int deleteBizObjMetricsByObjMetricsId(Long objMetricsId) {
  114. return bizObjMetricsMapper.deleteBizObjMetricsByObjMetricsId(objMetricsId);
  115. }
  116. /**
  117. * 选择指标,除去当前对象已选择的
  118. *
  119. * @param objId 对象ID
  120. * @return 结果
  121. */
  122. @Override
  123. public List<MetricsDef> selectMetricsDefList(Long objId) {
  124. return bizObjMetricsMapper.selectMetricsDefList(objId);
  125. }
  126. /**
  127. * 添加指标
  128. *
  129. * @param objId 对象ID
  130. * @param metricsIds 指标IDS
  131. * @return 结果
  132. */
  133. @Override
  134. public int insertMetricsDetails(Long objId, Long[] metricsIds) {
  135. BizObj obj = objService.selectBizObjByObjId(objId);
  136. String suffix = "/" + obj.getObjAddr() + ":" + obj.getObjPort();
  137. return bizObjMetricsMapper.insertMetricsDetails(objId, suffix, metricsIds);
  138. }
  139. /**
  140. * 通过objId查询列表
  141. *
  142. * @param objId 对象ID
  143. * @return 结果
  144. */
  145. @Override
  146. public List<BizObjMetrics> selectBizObjMetricsListByObjId(Long objId) {
  147. BizObjMetrics obj = new BizObjMetrics();
  148. obj.setObjId(objId);
  149. return selectBizObjMetricsList(obj);
  150. }
  151. /**
  152. * 通过对象和模板ID删除指标
  153. *
  154. * @param objId 对象ID
  155. * @param tplId 模板ID
  156. */
  157. @Override
  158. public void delete(Long objId, Long tplId) {
  159. QueryWrapper<BizObjMetrics> wrapper = new QueryWrapper<>();
  160. wrapper.eq("obj_id", objId);
  161. wrapper.eq("tpl_id", tplId);
  162. bizObjMetricsMapper.delete(wrapper);
  163. }
  164. /**
  165. * 通过模板ID批量插入指标
  166. * * @param objId 对象ID
  167. *
  168. * @param tplId 模板ID
  169. */
  170. @Override
  171. public void insertBatch(Long objId, Long tplId) {
  172. BizObj obj = objService.selectBizObjByObjId(objId);
  173. MetricsTplDetail query = new MetricsTplDetail();
  174. query.setTplId(tplId);
  175. List<MetricsTplDetail> list = detailService.selectMetricsTplDetailList(query);
  176. List<BizObjMetrics> objMetrics = new ArrayList<>();
  177. list.forEach(d -> {
  178. if ("1".equals(d.getMetricsDef().getMetricsType()) && !d.getMetricsDef().getMetricsCode().startsWith("pp.jvm.")) {
  179. //如果是pinpoint,并且不是jvm参数
  180. // 1.获取对象pinpoint组成
  181. List<BizObjPp> pps = ppService.selectBizObjPpListByObjId(objId);
  182. for (BizObjPp pp : pps) {
  183. BizObjMetrics ms = new BizObjMetrics();
  184. ms.setObjId(objId);
  185. ms.setTplId(tplId);
  186. ms.setMetricsId(d.getMetricsId());
  187. ms.setMetricsName(pp.getPpName() + "/" + d.getMetricsDef().getMetricsName());
  188. ms.setMetricsCode(pp.getPpName() + "/" + d.getMetricsCode());
  189. ms.setAlarmLow(d.getAlarmLow());
  190. ms.setAlarmMid(d.getAlarmMid());
  191. ms.setAlarmHigh(d.getAlarmHigh());
  192. objMetrics.add(ms);
  193. }
  194. } else {
  195. BizObjMetrics ms = new BizObjMetrics();
  196. ms.setObjId(objId);
  197. ms.setTplId(tplId);
  198. ms.setMetricsId(d.getMetricsId());
  199. ms.setMetricsName(d.getMetricsDef().getMetricsName() + "/" + obj.getObjAddr() + ":" + obj.getObjPort());
  200. ms.setMetricsCode(d.getMetricsCode());
  201. ms.setAlarmLow(d.getAlarmLow());
  202. ms.setAlarmMid(d.getAlarmMid());
  203. ms.setAlarmHigh(d.getAlarmHigh());
  204. objMetrics.add(ms);
  205. }
  206. });
  207. try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
  208. BizObjMetricsMapper mapper = sqlSession.getMapper(BizObjMetricsMapper.class);
  209. objMetrics.forEach(mapper::insertBizObjMetrics);
  210. sqlSession.commit();
  211. }
  212. }
  213. /**
  214. * 根据模板指标修改
  215. *
  216. * @param detail 模板指标
  217. */
  218. @Override
  219. public void update(MetricsTplDetail detail) {
  220. BizObjMetrics om = new BizObjMetrics();
  221. om.setMetricsId(detail.getMetricsId());
  222. om.setTplId(detail.getTplId());
  223. List list = selectBizObjMetricsList(om);
  224. if (list.size() > 0) {
  225. //如果有则更新,没有则插入
  226. UpdateWrapper<BizObjMetrics> updateWrapper = new UpdateWrapper<>();
  227. updateWrapper.set("alarm_low", detail.getAlarmLow());
  228. updateWrapper.set("alarm_mid", detail.getAlarmMid());
  229. updateWrapper.set("alarm_high", detail.getAlarmHigh());
  230. bizObjMetricsMapper.update(om, updateWrapper);
  231. } else {
  232. om.setAlarmLow(detail.getAlarmLow());
  233. om.setAlarmMid(detail.getAlarmMid());
  234. om.setAlarmHigh(detail.getAlarmHigh());
  235. insertBizObjMetrics(om);
  236. }
  237. }
  238. /**
  239. * 根据模板指标删除
  240. *
  241. * @param detail 模板指标
  242. */
  243. @Override
  244. public void del(MetricsTplDetail detail) {
  245. QueryWrapper<BizObjMetrics> wrapper = new QueryWrapper<>();
  246. wrapper.eq("metrics_id", detail.getMetricsId());
  247. wrapper.eq("tpl_id", detail.getTplId());
  248. bizObjMetricsMapper.delete(wrapper);
  249. }
  250. /**
  251. * 根据objId获取指标值
  252. *
  253. * @param objId 对象ID
  254. */
  255. @Override
  256. public void pinpointMetricsValue(Long objId) {
  257. BizObj bizObj = objService.selectBizObjByObjId(objId);
  258. if ("1".equals(bizObj.getObjType())) {
  259. // 获取应用程序的code
  260. BizObjApp app = appService.selectBizObjAppByAppId(bizObj.getAppId());
  261. String appName = app.getAppCode();
  262. LocalDateTime endTime = LocalDateTime.now();
  263. LocalDateTime startTime = endTime.minusDays(2);
  264. //TODO 暂时取2天的值,不然难得搞
  265. Map<String, String> appMap = pinpointService.getApps();
  266. String appType = appMap.get(appName);
  267. // 获取监控数据
  268. Float tps = pinpointService.tps(appName, startTime, endTime);
  269. int openFiles = pinpointService.openFile(appName, startTime, endTime);
  270. Map<String, Object> jvmInfo = pinpointService.jvmMemory(appName, startTime, endTime);
  271. float heapUsage = (float) jvmInfo.get("usage");
  272. int gcCount = (int) jvmInfo.get("gc");
  273. JSONObject linkData = pinpointService.link(appName, appType, startTime, endTime);
  274. JSONArray nodeDataArray = linkData.getJSONObject("applicationMapData").getJSONArray("nodeDataArray");
  275. List<PinpointVO> pinpointVOList = new ArrayList<>();
  276. for (int i = 0; i < nodeDataArray.size(); i++) {
  277. JSONObject obj = nodeDataArray.getJSONObject(i);
  278. PinpointVO vo = new PinpointVO(obj);
  279. if (vo.getApplicationName().equals(appName)) {
  280. bizObj.setAccessTimes(vo.getTot());
  281. objService.updateBizObj(bizObj);
  282. } else {
  283. pinpointVOList.add(vo);
  284. }
  285. }
  286. // 1.更新 BIZ_OBJ_PP 表
  287. updateBizObjPpTable(objId, pinpointVOList);
  288. // 2.更新业务对象指标表
  289. updateBizObjMetrics(objId, tps, openFiles, heapUsage, gcCount, pinpointVOList);
  290. }
  291. }
  292. /**
  293. * 根据objId获取prometheus指标值
  294. *
  295. * @param objId 对象ID
  296. */
  297. @Override
  298. public void prometheusMetricsValue(Long objId) {
  299. List<BizObjMetrics> mList = getAllMetricsForObjIdList(objId);
  300. List<BizObjMetrics> metricsToUpdate = new ArrayList<>();
  301. mList.stream().filter(om -> !"1".equals(om.getMetricsDef().getMetricsType())).forEach(om -> {
  302. //非pinpoint
  303. Float value = prometheusService.query(om.getDataExp());
  304. String alarmLevel = getAlarmLevel(value, om);
  305. if (alarmLevel != null) {
  306. insertAlarm(om, alarmLevel);
  307. }
  308. om.setDValue(BigDecimal.valueOf(value));
  309. metricsToUpdate.add(om);
  310. });
  311. // 更新所有需要更新的BizObjMetrics对象
  312. metricsToUpdate.forEach(this::updateBizObjMetrics);
  313. }
  314. /**
  315. * 获取告警等级
  316. *
  317. * @param value 值
  318. * @param bizObjMetrics 指标对象
  319. * @return
  320. */
  321. private String getAlarmLevel(Float value, BizObjMetrics bizObjMetrics) {
  322. if (StringUtils.isNotEmpty(bizObjMetrics.getAlarmLow()) && IntervalUtil.inNumRange(value, bizObjMetrics.getAlarmLow())) {
  323. return "low";
  324. } else if (StringUtils.isNotEmpty(bizObjMetrics.getAlarmMid()) && IntervalUtil.inNumRange(value, bizObjMetrics.getAlarmMid())) {
  325. return "mid";
  326. } else if (StringUtils.isNotEmpty(bizObjMetrics.getAlarmHigh()) && IntervalUtil.inNumRange(value, bizObjMetrics.getAlarmHigh())) {
  327. return "high";
  328. }
  329. return null;
  330. }
  331. /**
  332. * 添加告警记录
  333. *
  334. * @param om 指标对象
  335. * @param alarmLevel 告警等级
  336. */
  337. private void insertAlarm(BizObjMetrics om, String alarmLevel) {
  338. AlarmRecord record = new AlarmRecord();
  339. record.setObjId(om.getObjId());
  340. record.setObjMetricsId(om.getObjMetricsId());
  341. record.setAlarmLevel(alarmLevel);
  342. alarmRecordService.insertAlarmRecord(record);
  343. }
  344. /**
  345. * 更新BIZ_OBJ_PP
  346. *
  347. * @param objId 对象ID
  348. * @param pinpointVOList PP组成
  349. */
  350. private void updateBizObjPpTable(Long objId, List<PinpointVO> pinpointVOList) {
  351. List<BizObjPp> existingPpList = ppService.selectBizObjPpListByObjId(objId);
  352. Set<String> existingNames = existingPpList.stream()
  353. .map(BizObjPp::getPpName)
  354. .collect(Collectors.toSet());
  355. pinpointVOList.stream()
  356. .filter(vo -> !existingNames.contains(vo.getApplicationName()))
  357. .forEach(vo -> {
  358. BizObjPp pp = new BizObjPp();
  359. pp.setObjId(objId);
  360. pp.setPpKey(vo.getKey());
  361. pp.setPpName(vo.getApplicationName());
  362. pp.setPpType(vo.getCategory());
  363. ppService.insertBizObjPp(pp);
  364. // 根据模板更新业务对象指标表
  365. updateBizObjMetricsFromTemplate(objId, pp);
  366. existingPpList.add(pp);
  367. });
  368. }
  369. /**
  370. * 根据模板更新业务对象指标表
  371. *
  372. * @param objId 对象ID
  373. * @param pp pp对象
  374. */
  375. private void updateBizObjMetricsFromTemplate(Long objId, BizObjPp pp) {
  376. List<BizObjTpl> templateList = objTplService.selectTplList4objId(objId);
  377. templateList.forEach(template -> insertOrUpdateMetricsFromTemplate(objId, template.getTplId(), pp));
  378. }
  379. /**
  380. * 更新模板中的pinpoint指标到业务对象指标
  381. *
  382. * @param objId 对象ID
  383. * @param tplId 模板ID
  384. * @param pp pinpoint组成
  385. */
  386. private void insertOrUpdateMetricsFromTemplate(Long objId, Long tplId, BizObjPp pp) {
  387. MetricsTplDetail query = new MetricsTplDetail();
  388. query.setTplId(tplId);
  389. List<MetricsTplDetail> list = detailService.selectMetricsTplDetailList(query);
  390. List<BizObjMetrics> objMetrics = new ArrayList<>();
  391. list.forEach(d -> {
  392. if ("1".equals(d.getMetricsDef().getMetricsType()) && !d.getMetricsDef().getMetricsCode().startsWith("pp.jvm.")) {
  393. //如果是pinpoint,需要
  394. // 1.获取对象pinpoint组成
  395. BizObjMetrics ms = new BizObjMetrics();
  396. ms.setObjId(objId);
  397. ms.setTplId(tplId);
  398. ms.setMetricsId(d.getMetricsId());
  399. ms.setMetricsName(pp.getPpName() + "/" + d.getMetricsDef().getMetricsName());
  400. ms.setMetricsCode(pp.getPpName() + "/" + d.getMetricsCode());
  401. if (pp.getPpType().equals("REDIS")) {
  402. //redis需要将1s换成100ms 3s换成300ms 5s换成500ms
  403. if (d.getMetricsCode().endsWith("1s")) {
  404. ms.setMetricsName(ms.getMetricsName().replace("1s", "100ms"));
  405. ms.setMetricsCode(ms.getMetricsCode().replace("1s", "100ms"));
  406. }
  407. if (d.getMetricsCode().endsWith("3s")) {
  408. ms.setMetricsName(ms.getMetricsName().replace("3s", "300ms"));
  409. ms.setMetricsCode(ms.getMetricsCode().replace("3s", "300ms"));
  410. }
  411. if (d.getMetricsCode().endsWith("5s")) {
  412. ms.setMetricsName(ms.getMetricsName().replace("5s", "500ms"));
  413. ms.setMetricsCode(ms.getMetricsCode().replace("5s", "500ms"));
  414. }
  415. }
  416. ms.setAlarmLow(d.getAlarmLow());
  417. ms.setAlarmMid(d.getAlarmMid());
  418. ms.setAlarmHigh(d.getAlarmHigh());
  419. objMetrics.add(ms);
  420. }
  421. });
  422. bizObjMetricsMapper.batchInsert(objMetrics);
  423. }
  424. /**
  425. * 更新指标
  426. *
  427. * @param objId 对象ID
  428. * @param tps 系统压力
  429. * @param openFiles 打开文件数量
  430. * @param heapUsage 堆内存使用率
  431. * @param gcCount gc次数
  432. * @param pinpointVOList 链路列表数据
  433. */
  434. private void updateBizObjMetrics(Long objId, Float tps, int openFiles, float heapUsage, int gcCount, List<PinpointVO> pinpointVOList) {
  435. updateJvmMetrics(objId, tps, heapUsage, openFiles, gcCount);
  436. updateLinkMetrics(objId, pinpointVOList);
  437. }
  438. /**
  439. * 更新jvm指标
  440. *
  441. * @param objId 对象ID
  442. * @param tps 系统压力
  443. * @param openFiles 打开文件数量
  444. * @param heapUsage 堆内存使用率
  445. * @param gcCount gc次数
  446. */
  447. private void updateJvmMetrics(Long objId, Float tps, float heapUsage, int openFiles, int gcCount) {
  448. BizObjMetrics jvmMetrics = new BizObjMetrics();
  449. jvmMetrics.setObjId(objId);
  450. jvmMetrics.setMetricsCode("pp.jvm.");
  451. List<BizObjMetrics> omList = selectBizObjMetricsList(jvmMetrics);
  452. updateMetricsValues(omList, "tps", BigDecimal.valueOf(tps));
  453. updateMetricsValues(omList, "heap.usage", BigDecimal.valueOf(heapUsage));
  454. updateMetricsValues(omList, "open", BigDecimal.valueOf(openFiles));
  455. updateMetricsValues(omList, "gc", BigDecimal.valueOf(gcCount));
  456. }
  457. /**
  458. * jvg指标更新
  459. *
  460. * @param omList jvm指标列表
  461. * @param metricSuffix 指标后缀
  462. * @param value 值
  463. */
  464. private void updateMetricsValues(List<BizObjMetrics> omList, String metricSuffix, BigDecimal value) {
  465. omList.stream()
  466. .filter(om -> om.getMetricsCode().endsWith(metricSuffix))
  467. .forEach(om -> {
  468. String alarmLevel = getAlarmLevel(value.floatValue(), om);
  469. if (alarmLevel != null) {
  470. insertAlarm(om, alarmLevel);
  471. }
  472. om.setDValue(value);
  473. updateBizObjMetrics(om);
  474. });
  475. }
  476. /**
  477. * 更新链路指标
  478. *
  479. * @param objId 对象ID
  480. * @param pinpointVOList 链路列表
  481. */
  482. private void updateLinkMetrics(Long objId, List<PinpointVO> pinpointVOList) {
  483. Map<String, BizObjMetrics> metricsMap = getAllMetricsForObjId(objId);
  484. pinpointVOList.forEach(vo -> updateMetricsValues(metricsMap, vo));
  485. }
  486. /**
  487. * 更新指标
  488. *
  489. * @param metricsMap 指标map
  490. * @param vo pp链路对象
  491. */
  492. private void updateMetricsValues(Map<String, BizObjMetrics> metricsMap, PinpointVO vo) {
  493. metricsMap.values().stream()
  494. .filter(om -> om.getMetricsCode().startsWith(vo.getApplicationName() + "/"))
  495. .forEach(om -> {
  496. updateMetric(om, "pp.1s", vo.getTime1s());
  497. updateMetric(om, "pp.3s", vo.getTime3s());
  498. updateMetric(om, "pp.5s", vo.getTime5s());
  499. updateMetric(om, "pp.100ms", vo.getTime100ms());
  500. updateMetric(om, "pp.300ms", vo.getTime300ms());
  501. updateMetric(om, "pp.500ms", vo.getTime500ms());
  502. updateMetric(om, "pp.tot", vo.getTot());
  503. updateMetric(om, "pp.sum", vo.getSum());
  504. updateMetric(om, "pp.max", vo.getMax());
  505. updateMetric(om, "pp.avg", vo.getAvg());
  506. updateMetric(om, "pp.slow", vo.getSlow());
  507. updateMetric(om, "pp.error", vo.getError());
  508. });
  509. }
  510. /**
  511. * 调用更新方法
  512. *
  513. * @param om 对象
  514. * @param suffix 前缘
  515. * @param value 值
  516. */
  517. private void updateMetric(BizObjMetrics om, String suffix, Number value) {
  518. if (om.getMetricsCode().endsWith(suffix) && value != null) {
  519. om.setDValue(BigDecimal.valueOf(value.doubleValue()));
  520. updateBizObjMetrics(om);
  521. }
  522. }
  523. /**
  524. * 获取所有指标对象,并以code转换成map
  525. *
  526. * @param objId 对象ID
  527. * @return map
  528. */
  529. private Map<String, BizObjMetrics> getAllMetricsForObjId(Long objId) {
  530. return getAllMetricsForObjIdList(objId).stream()
  531. .collect(Collectors.toMap(BizObjMetrics::getMetricsCode, Function.identity()));
  532. }
  533. /**
  534. * 根据对象ID获取所有指标
  535. *
  536. * @param objId 对象ID
  537. * @return
  538. */
  539. private List<BizObjMetrics> getAllMetricsForObjIdList(Long objId) {
  540. BizObjMetrics search = new BizObjMetrics();
  541. search.setObjId(objId);
  542. return selectBizObjMetricsList(search);
  543. }
  544. }