DataItemTemplate.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package org.ts.ddcs.itemdatatemplate;
  2. import lombok.Data;
  3. import org.ts.ddcs.common.metadata.ElementDataMetadataEnum;
  4. import org.ts.ddcs.common.util.BytesHelp;
  5. import org.ts.ddcs.common.util.ValueLen;
  6. import java.io.UnsupportedEncodingException;
  7. import java.math.BigDecimal;
  8. import java.util.*;
  9. @Data
  10. public abstract class DataItemTemplate {
  11. protected String feture;
  12. protected String name;
  13. protected String desc;
  14. protected String unit;
  15. protected boolean macth = false;
  16. protected String varcharValue;
  17. protected byte[] valueBuff = new byte[0];
  18. protected List<BigDecimal> bigDecimalValues = new ArrayList<>();
  19. protected List<Integer> intValues = new ArrayList<>();
  20. protected Map<String, Object> datas = new HashMap<>();
  21. protected List<Map<String, Object>> dataList = new ArrayList<>();
  22. protected boolean outlierData = false;
  23. protected ValueLen valueLen;
  24. protected List<Map<String, Object>> valueList = new ArrayList<>();
  25. public void clear() {
  26. this.varcharValue = "";
  27. this.valueBuff = new byte[0];
  28. this.bigDecimalValues = new ArrayList<>();
  29. this.intValues = new ArrayList<>();
  30. this.datas.clear();
  31. }
  32. public abstract int stream(byte[] data, int index) throws UnsupportedEncodingException;
  33. public abstract int stream(byte[] data, int index, int batchSize);
  34. public abstract String getStringValue();
  35. public abstract void saveValue(Map<String, List<Map<String, Object>>> keyStore);
  36. public String toStringValue() {
  37. StringBuilder builder = new StringBuilder();
  38. for (Map<String, Object> item : this.valueList) {
  39. if (builder.length() > 0) {
  40. builder.append(",");
  41. }
  42. builder.append(item.get(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName()));
  43. }
  44. return builder.toString();
  45. }
  46. private boolean isErrorData(byte[] bytes) {
  47. boolean isError = true;
  48. for (int i = 0; i < bytes.length; i++) {
  49. byte[] byteBuff = BytesHelp.subBytes(bytes, i, 1);
  50. String hexStr = BytesHelp.byte2HexStr(byteBuff);
  51. if (!"FF".equals(hexStr)) {
  52. isError = false;
  53. }
  54. }
  55. return isError;
  56. }
  57. protected BigDecimal readBigDecimalValue(byte[] data, int pos, ValueLen len) {
  58. byte[] buff = BytesHelp.subBytes(data, pos, len.getByteLen());
  59. if (!isErrorData(buff)) {
  60. String hexStr = BytesHelp.byte2HexStr(buff);
  61. BigDecimal value = BytesHelp.toDecimal(hexStr, len.getDecimalLen());
  62. this.bigDecimalValues.add(value);
  63. return value;
  64. }
  65. return null;
  66. }
  67. protected BigDecimal readBigDecimalValue(byte[] data, int pos, int byteLen, int decimalLen) {
  68. byte[] buff = BytesHelp.subBytes(data, pos, byteLen);
  69. if (!isErrorData(buff)) {
  70. String hexStr = BytesHelp.byte2HexStr(buff);
  71. BigDecimal value = BytesHelp.toDecimal(hexStr, decimalLen);
  72. this.bigDecimalValues.add(value);
  73. }
  74. return null;
  75. }
  76. protected void readIntValue(byte[] data, int pos, ValueLen len) {
  77. byte[] buff = BytesHelp.subBytes(data, pos, len.getByteLen());
  78. if (!isErrorData(buff)) {
  79. String hexStr = BytesHelp.byte2HexStr(buff);
  80. this.intValues.add(BytesHelp.toInt(hexStr));
  81. }
  82. }
  83. protected void readVarcharValue(byte[] data, int pos, ValueLen len) {
  84. byte[] buff = BytesHelp.subBytes(data, pos, len.getByteLen());
  85. this.varcharValue = BytesHelp.byte2HexStr(buff);
  86. }
  87. protected void saveBigDecimalValues(Map<String, List<Map<String, Object>>> keyStore, int scale) {
  88. if (keyStore.containsKey(this.feture)) {
  89. List<Map<String, Object>> values = keyStore.get(this.feture);
  90. for (BigDecimal decimal : this.bigDecimalValues) {
  91. Map<String, Object> value = new HashMap<>();
  92. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
  93. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
  94. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
  95. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
  96. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), decimal.setScale(scale, BigDecimal.ROUND_DOWN).toPlainString());
  97. values.add(value);
  98. }
  99. } else {
  100. List<Map<String, Object>> values = new LinkedList<>();
  101. for (BigDecimal decimal : this.bigDecimalValues) {
  102. Map<String, Object> value = new HashMap<>();
  103. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
  104. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
  105. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
  106. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
  107. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), decimal.setScale(scale, BigDecimal.ROUND_DOWN).toPlainString());
  108. values.add(value);
  109. }
  110. keyStore.put(this.feture, values);
  111. }
  112. }
  113. protected void saveIntValues(Map<String, List<Map<String, Object>>> keyStore) {
  114. if (keyStore.containsKey(this.feture)) {
  115. List<Map<String, Object>> values = keyStore.get(this.feture);
  116. for (Integer v : this.intValues) {
  117. Map<String, Object> value = new HashMap<>();
  118. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
  119. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
  120. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
  121. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
  122. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), v.toString());
  123. values.add(value);
  124. }
  125. } else {
  126. List<Map<String, Object>> values = new LinkedList<>();
  127. for (Integer v : this.intValues) {
  128. Map<String, Object> value = new HashMap<>();
  129. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
  130. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
  131. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
  132. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
  133. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), v.toString());
  134. values.add(value);
  135. }
  136. keyStore.put(this.feture, values);
  137. }
  138. }
  139. protected void saveVarcharValues(Map<String, List<Map<String, Object>>> keyStore) {
  140. if (keyStore.containsKey(this.feture)) {
  141. List<Map<String, Object>> values = keyStore.get(this.feture);
  142. Map<String, Object> value = new HashMap<>();
  143. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
  144. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
  145. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
  146. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
  147. if (null != this.varcharValue) {
  148. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), this.varcharValue);
  149. }
  150. values.add(value);
  151. } else {
  152. List<Map<String, Object>> values = new LinkedList<>();
  153. Map<String, Object> value = new HashMap<>();
  154. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
  155. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
  156. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
  157. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
  158. if (null != this.varcharValue) {
  159. value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), this.varcharValue);
  160. }
  161. values.add(value);
  162. keyStore.put(this.feture, values);
  163. }
  164. }
  165. }