|
|
|
@ -42,17 +42,7 @@ public class TsKvNativeSQL { |
|
|
|
if (protoList.isEmpty()) { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
// List<DataProto> list = new LinkedHashSet<>(protoList).stream().toList(); |
|
|
|
List<DataProto> list = protoList.stream() |
|
|
|
.collect(Collectors.toMap(d -> List.of( |
|
|
|
d.getTskvProto().getThingCode(), |
|
|
|
d.getTskvProto().getTs(), |
|
|
|
d.getTskvProto().getKey() |
|
|
|
), Function.identity(), BinaryOperator.maxBy(Comparator.comparing(d -> d.getTskvProto().getVal())))) |
|
|
|
.values() |
|
|
|
.stream() |
|
|
|
.toList(); |
|
|
|
String sql = sqlSaveProtoTsKv(list, dataType); |
|
|
|
String sql = sqlSaveProtoTsKv(protoList, dataType); |
|
|
|
try { |
|
|
|
if(StringUtils.isNotEmpty(sql)){ |
|
|
|
Db.insertBySql(sql); |
|
|
|
@ -61,7 +51,7 @@ public class TsKvNativeSQL { |
|
|
|
log.error("--TsKv----{}-数据存储失败------>{}=======SQL====>{}", dataType, exception.getMessage(), sql); |
|
|
|
throw new RuntimeException(exception); |
|
|
|
} |
|
|
|
return list.size(); |
|
|
|
return protoList.size(); |
|
|
|
} |
|
|
|
|
|
|
|
public static Integer saveDTOTsKv(List<TsKvDTO> kvDTOList, DatabaseType dataType,String tableSuffix) { |
|
|
|
@ -131,10 +121,6 @@ public class TsKvNativeSQL { |
|
|
|
} |
|
|
|
|
|
|
|
public static String sqlSaveProtoTsKv(List<DataProto> protoList, DatabaseType dataType) { |
|
|
|
List<DataProto> distinctStudentFile = protoList.stream() |
|
|
|
.collect(Collectors.collectingAndThen( |
|
|
|
Collectors.toCollection(() -> |
|
|
|
new TreeSet<>(Comparator.comparing(o -> o.getTskvProto().getThingCode() + ";" + o.getTskvProto().getKey()+ ";" + Double.valueOf(o.getTskvProto().getVal())+ ";" + o.getTskvProto().getTs()))), ArrayList::new)); |
|
|
|
StringBuilder sql = new StringBuilder(" INSERT INTO ") |
|
|
|
.append(TS_KV).append(" (") |
|
|
|
.append(THING_CODE) |
|
|
|
@ -151,25 +137,24 @@ public class TsKvNativeSQL { |
|
|
|
sql.append(",").append(PARTITION); |
|
|
|
} |
|
|
|
sql.append(") VALUES "); |
|
|
|
IntStream.range(0, distinctStudentFile.size()).forEach(i -> { |
|
|
|
|
|
|
|
long ts = distinctStudentFile.get(i).getTskvProto().getTs(); |
|
|
|
IntStream.range(0, protoList.size()).forEach(i -> { |
|
|
|
long ts = protoList.get(i).getTskvProto().getTs(); |
|
|
|
DateTime dateTime = new DateTime(ts); |
|
|
|
sql.append("('"); |
|
|
|
sql.append(distinctStudentFile.get(i).getTskvProto().getThingCode()).append("',"); |
|
|
|
sql.append("'").append(distinctStudentFile.get(i).getTskvProto().getKey()).append("',"); |
|
|
|
sql.append(protoList.get(i).getTskvProto().getThingCode()).append("',"); |
|
|
|
sql.append("'").append(protoList.get(i).getTskvProto().getKey()).append("',"); |
|
|
|
sql.append(ts).append(","); |
|
|
|
sql.append(dateTime.getYear()).append(","); |
|
|
|
sql.append(dateTime.getMonthOfYear()).append(","); |
|
|
|
sql.append(dateTime.getDayOfMonth()).append(","); |
|
|
|
sql.append(dateTime.getHourOfDay()).append(","); |
|
|
|
sql.append(dateTime.getMinuteOfHour()).append(","); |
|
|
|
sql.append("'").append(distinctStudentFile.get(i).getTskvProto().getVal()).append("'"); |
|
|
|
sql.append("'").append(protoList.get(i).getTskvProto().getVal()).append("'"); |
|
|
|
if (DatabaseType.CK.equals(dataType)) { |
|
|
|
String partition = new DateTime(ts).toString("yyyy-MM-dd"); |
|
|
|
sql.append(",'").append(partition).append("'"); |
|
|
|
} |
|
|
|
if (i == distinctStudentFile.size() - 1) { |
|
|
|
if (i == protoList.size() - 1) { |
|
|
|
sql.append(")"); |
|
|
|
} else { |
|
|
|
sql.append("),"); |
|
|
|
|