| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- package org.ts.ddcs.itemdatatemplate;
- import lombok.Data;
- import org.ts.ddcs.common.metadata.ElementDataMetadataEnum;
- import org.ts.ddcs.common.util.BytesHelp;
- import org.ts.ddcs.common.util.ValueLen;
- import java.io.UnsupportedEncodingException;
- import java.math.BigDecimal;
- import java.util.*;
- @Data
- public abstract class DataItemTemplate {
- protected String feture;
- protected String name;
- protected String desc;
- protected String unit;
- protected boolean macth = false;
- protected String varcharValue;
- protected byte[] valueBuff = new byte[0];
- protected List<BigDecimal> bigDecimalValues = new ArrayList<>();
- protected List<Integer> intValues = new ArrayList<>();
- protected Map<String, Object> datas = new HashMap<>();
- protected List<Map<String, Object>> dataList = new ArrayList<>();
- protected boolean outlierData = false;
- protected ValueLen valueLen;
- protected List<Map<String, Object>> valueList = new ArrayList<>();
- public void clear() {
- this.varcharValue = "";
- this.valueBuff = new byte[0];
- this.bigDecimalValues = new ArrayList<>();
- this.intValues = new ArrayList<>();
- this.datas.clear();
- }
- public abstract int stream(byte[] data, int index) throws UnsupportedEncodingException;
- public abstract int stream(byte[] data, int index, int batchSize);
- public abstract String getStringValue();
- public abstract void saveValue(Map<String, List<Map<String, Object>>> keyStore);
- public String toStringValue() {
- StringBuilder builder = new StringBuilder();
- for (Map<String, Object> item : this.valueList) {
- if (builder.length() > 0) {
- builder.append(",");
- }
- builder.append(item.get(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName()));
- }
- return builder.toString();
- }
- private boolean isErrorData(byte[] bytes) {
- boolean isError = true;
- for (int i = 0; i < bytes.length; i++) {
- byte[] byteBuff = BytesHelp.subBytes(bytes, i, 1);
- String hexStr = BytesHelp.byte2HexStr(byteBuff);
- if (!"FF".equals(hexStr)) {
- isError = false;
- }
- }
- return isError;
- }
- protected BigDecimal readBigDecimalValue(byte[] data, int pos, ValueLen len) {
- byte[] buff = BytesHelp.subBytes(data, pos, len.getByteLen());
- if (!isErrorData(buff)) {
- String hexStr = BytesHelp.byte2HexStr(buff);
- BigDecimal value = BytesHelp.toDecimal(hexStr, len.getDecimalLen());
- this.bigDecimalValues.add(value);
- return value;
- }
- return null;
- }
- protected BigDecimal readBigDecimalValue(byte[] data, int pos, int byteLen, int decimalLen) {
- byte[] buff = BytesHelp.subBytes(data, pos, byteLen);
- if (!isErrorData(buff)) {
- String hexStr = BytesHelp.byte2HexStr(buff);
- BigDecimal value = BytesHelp.toDecimal(hexStr, decimalLen);
- this.bigDecimalValues.add(value);
- }
- return null;
- }
- protected void readIntValue(byte[] data, int pos, ValueLen len) {
- byte[] buff = BytesHelp.subBytes(data, pos, len.getByteLen());
- if (!isErrorData(buff)) {
- String hexStr = BytesHelp.byte2HexStr(buff);
- this.intValues.add(BytesHelp.toInt(hexStr));
- }
- }
- protected void readVarcharValue(byte[] data, int pos, ValueLen len) {
- byte[] buff = BytesHelp.subBytes(data, pos, len.getByteLen());
- this.varcharValue = BytesHelp.byte2HexStr(buff);
- }
- protected void saveBigDecimalValues(Map<String, List<Map<String, Object>>> keyStore, int scale) {
- if (keyStore.containsKey(this.feture)) {
- List<Map<String, Object>> values = keyStore.get(this.feture);
- for (BigDecimal decimal : this.bigDecimalValues) {
- Map<String, Object> value = new HashMap<>();
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), decimal.setScale(scale, BigDecimal.ROUND_DOWN).toPlainString());
- values.add(value);
- }
- } else {
- List<Map<String, Object>> values = new LinkedList<>();
- for (BigDecimal decimal : this.bigDecimalValues) {
- Map<String, Object> value = new HashMap<>();
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), decimal.setScale(scale, BigDecimal.ROUND_DOWN).toPlainString());
- values.add(value);
- }
- keyStore.put(this.feture, values);
- }
- }
- protected void saveIntValues(Map<String, List<Map<String, Object>>> keyStore) {
- if (keyStore.containsKey(this.feture)) {
- List<Map<String, Object>> values = keyStore.get(this.feture);
- for (Integer v : this.intValues) {
- Map<String, Object> value = new HashMap<>();
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), v.toString());
- values.add(value);
- }
- } else {
- List<Map<String, Object>> values = new LinkedList<>();
- for (Integer v : this.intValues) {
- Map<String, Object> value = new HashMap<>();
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), v.toString());
- values.add(value);
- }
- keyStore.put(this.feture, values);
- }
- }
- protected void saveVarcharValues(Map<String, List<Map<String, Object>>> keyStore) {
- if (keyStore.containsKey(this.feture)) {
- List<Map<String, Object>> values = keyStore.get(this.feture);
- Map<String, Object> value = new HashMap<>();
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
- if (null != this.varcharValue) {
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), this.varcharValue);
- }
- values.add(value);
- } else {
- List<Map<String, Object>> values = new LinkedList<>();
- Map<String, Object> value = new HashMap<>();
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_CODE.getName(), this.feture);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_NAME.getName(), this.name);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_UNIT.getName(), this.unit);
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_DESC.getName(), this.desc);
- if (null != this.varcharValue) {
- value.put(ElementDataMetadataEnum.ELEMENT_METADATA_VALUE.getName(), this.varcharValue);
- }
- values.add(value);
- keyStore.put(this.feture, values);
- }
- }
- }
|