package com.zhitan.util;
|
|
import com.zhitan.model.entity.DeviceData;
|
import com.zhitan.model.entity.PowerEntity;
|
|
import java.util.List;
|
import java.util.stream.Collectors;
|
import java.util.stream.IntStream;
|
|
public class PowerDataMapper {
|
|
public static List<PowerEntity> mapToEntities(DeviceData deviceData) {
|
List<PowerEntity> meters = IntStream.rangeClosed(1, 8)
|
.mapToObj(i -> createBaseEntity(deviceData, i))
|
.collect(Collectors.toList());
|
|
for (DeviceData.RDataItem item : deviceData.getParams().getRData()) {
|
// 示例:将 "Ia1" 拆分为 "Ia" 和 "1"
|
String[] parts = item.getName().split("(?<=\\D)(?=\\d)");
|
if (parts.length != 2) continue;
|
|
String fieldCode = parts[0]; // 如 "Ia"
|
int meterIndex = Integer.parseInt(parts[1]) - 1; // 转数组下标
|
|
if (meterIndex >= 0 && meterIndex < 8) {
|
setMeterField(meters.get(meterIndex), fieldCode, item.getValue());
|
}
|
// Uab1 Ubc1 Uca1是8个电表共用的字段,如果item.getName是Uab1 Ubc1 Uca1则遍历所有电表并赋值
|
if ("Uab Ubc Uca Ua Ub Uc".contains(fieldCode)) {
|
for (int i = 0; i < 8; i++) {
|
setMeterField(meters.get(i), fieldCode, item.getValue());
|
}
|
}
|
}
|
return meters;
|
}
|
|
private static PowerEntity createBaseEntity(DeviceData data, int meterNumber) {
|
PowerEntity entity = new PowerEntity();
|
entity.setSn(data.getParams().getSysSn() + "_" + meterNumber);
|
entity.setImei(data.getParams().getSysImei());
|
entity.setTime(data.getParams().getSysTime());
|
return entity;
|
}
|
|
private static void setMeterField(PowerEntity entity, String fieldCode, String value) {
|
try {
|
switch (fieldCode.toUpperCase()) {
|
case "UAB":
|
entity.setUab(parseDouble(value));
|
break;
|
case "UBC":
|
entity.setUbc(parseDouble(value));
|
break;
|
case "UCA":
|
entity.setUca(parseDouble(value));
|
break;
|
case "UA":
|
entity.setUa(parseDouble(value));
|
break;
|
case "UB":
|
entity.setUb(parseDouble(value));
|
break;
|
case "UC":
|
entity.setUc(parseDouble(value));
|
break;
|
case "IA":
|
entity.setIa(parseDouble(value));
|
break;
|
case "IB":
|
entity.setIb(parseDouble(value));
|
break;
|
case "IC":
|
entity.setIc(parseDouble(value));
|
break;
|
case "IO":
|
entity.setIo(parseDouble(value));
|
break;
|
case "PF":
|
entity.setPf(parseDouble(value));
|
break;
|
case "PSUM":
|
entity.setPsum(parseDouble(value));
|
break;
|
case "EPS":
|
entity.setEps(parseDouble(value));
|
break;
|
case "EQS":
|
entity.setEqs(parseDouble(value));
|
break;
|
case "EPSP":
|
entity.setEpsp(parseDouble(value));
|
break;
|
case "EPSN":
|
entity.setEpsn(parseDouble(value));
|
break;
|
case "EQSP":
|
entity.setEqsp(parseDouble(value));
|
break;
|
case "EQSN":
|
entity.setEqsn(parseDouble(value));
|
break;
|
|
|
}
|
} catch (NumberFormatException e) {
|
// 处理数值转换异常
|
}
|
}
|
|
private static Double parseDouble(String s) {
|
return s != null ? Double.parseDouble(s) : null;
|
}
|
}
|