TsDataService.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package com.gyee.dataadapter.service;
  2. import com.gyee.dataadapter.dao.IHistoryDao;
  3. import com.gyee.dataadapter.dao.ILatestDao;
  4. import com.gyee.dataadapter.entity.PointData;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.stereotype.Service;
  7. import javax.annotation.Resource;
  8. import java.util.*;
  9. import java.util.concurrent.TimeUnit;
  10. import java.util.stream.Collectors;
  11. @Slf4j
  12. @Service
  13. public class TsDataService {
  14. @Resource
  15. private IAdapterService adapterService;
  16. @Resource
  17. private ILatestDao latestDao;
  18. @Resource
  19. private IHistoryDao historyDao;
  20. public Map<String, PointData> getLatest(String tagNames) {
  21. String[] split = tagNames.split(",");
  22. return getLatest(Arrays.asList(split));
  23. }
  24. public Map<String, PointData> getLatest(List<String> tagNames) {
  25. Map<Boolean, List<String>> nxFgs = tagNames.stream().collect(Collectors.groupingBy(tn -> tn.startsWith("NX_FGS_")));
  26. Map<String, PointData> latest = null;
  27. try {
  28. latest = historyDao.getLatest(nxFgs.get(true));
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. Map<String, PointData> data2 = adapterService.getLatestData2(nxFgs.get(false));
  33. latest.putAll(data2);
  34. return latest;
  35. }
  36. public List<PointData> getHistoryRaw(String tagName, Date startTime, Date endTime) {
  37. try {
  38. if (tagName.startsWith("NX_FGS_")) {
  39. return historyDao.getHistoryRaw(tagName, startTime, endTime);
  40. } else {
  41. return adapterService.getPointData(startTime, endTime, 1, null, tagName);
  42. }
  43. } catch (Exception e) {
  44. log.error("异常点:" + tagName);
  45. log.error(e.getMessage());
  46. return new ArrayList<>();
  47. }
  48. }
  49. public List<PointData> getHistoryRaw(String tagName, long startTs, long endTs) {
  50. return getHistoryRaw(tagName, new Date(startTs), new Date(endTs));
  51. }
  52. public List<PointData> getHistorySnap(String tagName, long startTs, long endTs, Integer interval) {
  53. return getHistorySnap(tagName, new Date(startTs), new Date(endTs), interval);
  54. }
  55. public List<PointData> getHistorySnap(String tagName, Date startTime, Date endTime, Integer interval) {
  56. if (interval == null || interval == 0) interval = 60;
  57. try {
  58. if (tagName.startsWith("NX_FGS_")) {
  59. return historyDao.getHistorySnap(tagName, startTime, endTime, interval);
  60. } else {
  61. return adapterService.getPointData(startTime, endTime, 0, interval, tagName);
  62. }
  63. } catch (Exception e) {
  64. log.error("异常点:" + tagName);
  65. log.error(e.getMessage());
  66. return new ArrayList<>();
  67. }
  68. }
  69. /**
  70. * @param startTime:开始时间。
  71. * @param endTime:结束时间。
  72. * @param type:采样类型。0瞬时值,1原始值,2最大值,3最小值,4平均值。
  73. * @param interval:采样频率,单位秒。
  74. * @param tagName:要查询的变量(数据、测点)名。
  75. */
  76. public List<PointData> getHistoryStat(String tagName, Date startTime, Date endTime, Integer interval, Integer type) {
  77. if (interval == null || interval == 0) interval = 60;
  78. if (type == null || type < 2 || type > 4) type = 4;
  79. try {
  80. if (tagName.startsWith("NX_FGS_")) {
  81. return historyDao.getHistoryStat(tagName, startTime, endTime, interval, type);
  82. } else {
  83. return adapterService.getPointData(startTime, endTime, type, interval, tagName);
  84. }
  85. } catch (Exception e) {
  86. log.error("异常点:" + tagName);
  87. log.error(e.getMessage());
  88. return new ArrayList<>();
  89. }
  90. }
  91. public PointData getHistoryStat0(String tagName, Date startTime, Date endTime, Integer type) {
  92. if (tagName.startsWith("NX_FGS_")) {
  93. try {
  94. return historyDao.getHistoryStat0(tagName, startTime, endTime, type);
  95. } catch (Exception e) {
  96. e.printStackTrace();
  97. }
  98. } else {
  99. int interval = (int) TimeUnit.MILLISECONDS.toMinutes(endTime.getTime() - startTime.getTime());
  100. List<PointData> pd = adapterService.getPointData(startTime, endTime, type, interval, tagName);
  101. return pd.get(0);
  102. }
  103. return new PointData();
  104. }
  105. public boolean writeLatest(List<PointData> dataList) {
  106. return latestDao.writeLatest(dataList);
  107. }
  108. public boolean writeLatest(PointData data) {
  109. return writeLatest(Collections.singletonList(data));
  110. }
  111. public Map<String, PointData> getHistorySection(long ts, String tagNames) {
  112. return getHistorySection(new Date(ts), tagNames);
  113. }
  114. public Map<String, PointData> getHistorySection(Date time, String tagNames) {
  115. Map<Boolean, List<String>> nxFgs = Arrays.stream(tagNames.split(",")).collect(
  116. Collectors.groupingBy(tn -> tn.startsWith("NX_FGS_")));
  117. Map<String, PointData> result = new HashMap<>();
  118. try {
  119. Map<String, PointData> latest = historyDao.getHistorySection(time, nxFgs.get(true));
  120. result.putAll(latest);
  121. if (nxFgs.get(false) == null) return result;
  122. for (String tagName : nxFgs.get(false)) {
  123. List<PointData> pdsMap = adapterService.getPointData(time, time, 1, null, tagName);
  124. result.put(tagName, pdsMap.get(0));
  125. }
  126. return result;
  127. } catch (Exception e) {
  128. log.error(e.getMessage());
  129. return new HashMap<>();
  130. }
  131. }
  132. }