refactor(data): 便携式设备数据补召功能重构
- 移除接口中的方法注释以简化代码结构 - 替换Spring事务注解为动态数据源事务注解 - 删除未使用的导入包和注释掉的代码行 - 简化数据拆分服务实现类中的复杂逻辑 - 添加时间间隔处理逻辑用于不同数据表的定时入库 - 优化数据映射过程中的null值处理机制 - 重构字段值设置方法以提高类型安全性和错误处理能力
This commit is contained in:
@@ -13,13 +13,5 @@ import java.util.Map;
|
||||
*/
|
||||
public interface IPqdDataSplitService {
|
||||
|
||||
/**
|
||||
* 将PqdData数据拆分到不同的表中
|
||||
*
|
||||
* @param pqdDataList 原始PqdData数据列表
|
||||
* @return 包含两部分数据:
|
||||
* - "splitData": 已拆分到各表的数据 Map<表名, 数据列表>
|
||||
* - "remainingPqdData": 未匹配的PqdData数据(仍需插入InfluxDB)
|
||||
*/
|
||||
Map<String, Object> splitPqdData(List<PqdData> pqdDataList);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.njcn.csdevice.service.impl;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.alibaba.nacos.shaded.com.google.gson.Gson;
|
||||
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -54,7 +55,6 @@ import org.apache.commons.collections4.ListUtils;
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@@ -188,7 +188,7 @@ public class PortableOfflLogServiceImpl extends ServiceImpl<PortableOfflLogMappe
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = {Exception.class})
|
||||
@DSTransactional
|
||||
public void importEquipment(UploadDataParam uploadDataParam){
|
||||
String lineId = uploadDataParam.getLineId();
|
||||
//获取监测点信息
|
||||
@@ -348,7 +348,6 @@ public class PortableOfflLogServiceImpl extends ServiceImpl<PortableOfflLogMappe
|
||||
.eq(WlRecord::getEndTime,wlRecord.getEndTime()).update();
|
||||
wlRecordService.save(wlRecord);
|
||||
|
||||
|
||||
//如果明确返回了state 那么当前文件解析出错
|
||||
if(response.getState() != null){
|
||||
portableOfflLog.setState(response.getState());
|
||||
@@ -366,7 +365,6 @@ public class PortableOfflLogServiceImpl extends ServiceImpl<PortableOfflLogMappe
|
||||
List<PqdData> sublistAsOriginalListType = new ArrayList<>(sliceList);
|
||||
Map<String, Object> map = pqdDataSplitService.splitPqdData(sublistAsOriginalListType);
|
||||
insertData(map);
|
||||
// pqdDataMapper.insertBatch(sublistAsOriginalListType);
|
||||
}
|
||||
//min结果集解析入库后就不需要在解析了
|
||||
minFlag = false;
|
||||
@@ -703,8 +701,7 @@ public class PortableOfflLogServiceImpl extends ServiceImpl<PortableOfflLogMappe
|
||||
|
||||
public void insertData(Map<String, Object> map) {
|
||||
//13张表
|
||||
Map<String, List<?>> splitData = (Map<String, List<?>>) map.get("splitData");
|
||||
splitData.forEach((key, value) -> {
|
||||
map.forEach((key, value) -> {
|
||||
switch (key) {
|
||||
case "data_v":
|
||||
dataVMapper.insertBatch((List<DataV>) value);
|
||||
@@ -713,10 +710,26 @@ public class PortableOfflLogServiceImpl extends ServiceImpl<PortableOfflLogMappe
|
||||
dataIMapper.insertBatch((List<DataI>) value);
|
||||
break;
|
||||
case "data_flicker":
|
||||
dataFlicker.insertBatch((List<DataFlicker>) value);
|
||||
//10分钟入一组
|
||||
List<DataFlicker> list = (List<DataFlicker>) value;
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
list.forEach(item->{
|
||||
Instant time = getTime(item.getTime(),600);
|
||||
item.setTime(time);
|
||||
});
|
||||
dataFlicker.insertBatch(list);
|
||||
}
|
||||
break;
|
||||
case "data_fluc":
|
||||
dataFluc.insertBatch((List<DataFluc>) value);
|
||||
//10分钟入一组
|
||||
List<DataFluc> list2 = (List<DataFluc>) value;
|
||||
if (!CollectionUtils.isEmpty(list2)) {
|
||||
list2.forEach(item->{
|
||||
Instant time = getTime(item.getTime(),600);
|
||||
item.setTime(time);
|
||||
});
|
||||
dataFluc.insertBatch(list2);
|
||||
}
|
||||
break;
|
||||
case "data_harmphasic_i":
|
||||
dataHarmPhasicI.insertBatch((List<DataHarmPhasicI>) value);
|
||||
@@ -743,18 +756,29 @@ public class PortableOfflLogServiceImpl extends ServiceImpl<PortableOfflLogMappe
|
||||
dataInHarmV.insertBatch((List<DataInHarmV>) value);
|
||||
break;
|
||||
case "data_plt":
|
||||
dataPlt.insertBatch((List<DataPlt>) value);
|
||||
//2小时入一组
|
||||
List<DataPlt> list3 = (List<DataPlt>) value;
|
||||
if (!CollectionUtils.isEmpty(list3)) {
|
||||
list3.forEach(item->{
|
||||
Instant time = getTime(item.getTime(),7200);
|
||||
item.setTime(time);
|
||||
});
|
||||
dataPlt.insertBatch(list3);
|
||||
}
|
||||
break;
|
||||
case "pqd_data":
|
||||
pqdDataMapper.insertBatch((List<PqdData>) value);
|
||||
break;
|
||||
default:
|
||||
log.warn("不支持的目标表: {}", key);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//其余数据
|
||||
List<PqdData> remainingPqdData = (List<PqdData>) map.get("remainingPqdData");
|
||||
if (!CollectionUtils.isEmpty(remainingPqdData)) {
|
||||
pqdDataMapper.insertBatch(remainingPqdData);
|
||||
}
|
||||
public Instant getTime(Instant time, Integer interval) {
|
||||
long originalTimeSec = time.getEpochSecond();
|
||||
long newTimeSec = (originalTimeSec / interval) * interval;
|
||||
return Instant.ofEpochSecond(newTimeSec);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,26 +35,11 @@ import java.util.stream.Stream;
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class PqdDataSplitServiceImpl implements IPqdDataSplitService {
|
||||
|
||||
private final RedisUtil redisUtil;
|
||||
private final EpdFeignClient epdFeignClient;
|
||||
private final DicDataFeignClient dicDataFeignClient;
|
||||
|
||||
@Override
|
||||
public Map<String, Object> splitPqdData(List<PqdData> pqdDataList) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
if (CollectionUtils.isEmpty(pqdDataList)) {
|
||||
result.put("splitData", Collections.emptyMap());
|
||||
result.put("remainingPqdData", Collections.emptyList());
|
||||
return result;
|
||||
}
|
||||
|
||||
log.info("开始拆分PqdData数据,共{}条记录", pqdDataList.size());
|
||||
|
||||
Map<String, List<?>> splitDataMap = new HashMap<>();
|
||||
List<PqdData> remainingPqdData = new ArrayList<>();
|
||||
|
||||
//获取表映射关系
|
||||
Map<String,String> map1 = new Gson().fromJson(String.valueOf(redisUtil.getObjectByKey(AppRedisKey.ELE_EPD_PQD)), Map.class);
|
||||
//获取字段映射关系
|
||||
@@ -68,7 +53,6 @@ public class PqdDataSplitServiceImpl implements IPqdDataSplitService {
|
||||
List<EleEpdPqd> resultList = epdList.stream()
|
||||
.flatMap(item -> {
|
||||
if (item.getHarmStart() != null && item.getHarmEnd() != null) {
|
||||
// 生成从 harmStart 到 harmEnd 的新对象
|
||||
List<EleEpdPqd> expandedList = new ArrayList<>();
|
||||
for (int i = item.getHarmStart(); i <= item.getHarmEnd(); i++) {
|
||||
EleEpdPqd newItem = copyEleEpdPqd(item);
|
||||
@@ -78,66 +62,319 @@ public class PqdDataSplitServiceImpl implements IPqdDataSplitService {
|
||||
}
|
||||
return expandedList.stream();
|
||||
} else {
|
||||
// 保持原对象
|
||||
return Stream.of(item);
|
||||
}
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
Map<String,List<EleEpdPqd>> map2 = resultList.stream().collect(Collectors.groupingBy(EleEpdPqd::getName,LinkedHashMap::new,Collectors.toList()));
|
||||
Map<String,Object> map3 = new HashMap<>();
|
||||
List<Object> list1 = new ArrayList<>();
|
||||
List<Object> list2 = new ArrayList<>();
|
||||
List<Object> list3 = new ArrayList<>();
|
||||
List<Object> list4 = new ArrayList<>();
|
||||
List<Object> list5 = new ArrayList<>();
|
||||
List<Object> list6 = new ArrayList<>();
|
||||
List<Object> list7 = new ArrayList<>();
|
||||
List<Object> list8 = new ArrayList<>();
|
||||
List<Object> list9 = new ArrayList<>();
|
||||
List<Object> list10 = new ArrayList<>();
|
||||
List<Object> list11 = new ArrayList<>();
|
||||
List<Object> list12 = new ArrayList<>();
|
||||
List<Object> list13 = new ArrayList<>();
|
||||
List<Object> list14 = new ArrayList<>();
|
||||
|
||||
try {
|
||||
for (PqdData pqdData : pqdDataList) {
|
||||
boolean hasMatchedField = false;
|
||||
|
||||
Map<String, Object> fieldValues = extractFieldValues(pqdData);
|
||||
|
||||
for (Map.Entry<String, Object> entry : fieldValues.entrySet()) {
|
||||
String sourceFieldName = StringUtils.capitalize(entry.getKey());
|
||||
Object value = entry.getValue();
|
||||
for (PqdData item : pqdDataList) {
|
||||
Map<String, Object> map = extractFieldValues(item);
|
||||
|
||||
if (value == null || isCommonField(sourceFieldName)) {
|
||||
continue;
|
||||
}
|
||||
String tableName = map1.get(sourceFieldName);
|
||||
String otherName = sourceFieldName;
|
||||
List<EleEpdPqd> v = map2.get(sourceFieldName);
|
||||
if (!CollectionUtils.isEmpty(v)) {
|
||||
otherName = toCamelCase(v.get(0).getOtherName());
|
||||
}
|
||||
DataV dataV = new DataV();
|
||||
dataV.setTime(item.getTime());
|
||||
dataV.setLineId(item.getLineId());
|
||||
dataV.setPhaseType(item.getPhaseType());
|
||||
dataV.setValueType(item.getValueType());
|
||||
dataV.setClDid(item.getClDid());
|
||||
dataV.setProcess(item.getProcess());
|
||||
dataV.setQualityFlag("0");
|
||||
|
||||
if (StrUtil.isBlank(tableName) || StrUtil.isBlank(otherName)) {
|
||||
continue;
|
||||
}
|
||||
DataI dataI = new DataI();
|
||||
dataI.setTime(item.getTime());
|
||||
dataI.setLineId(item.getLineId());
|
||||
dataI.setPhaseType(item.getPhaseType());
|
||||
dataI.setValueType(item.getValueType());
|
||||
dataI.setClDid(item.getClDid());
|
||||
dataI.setProcess(item.getProcess());
|
||||
dataI.setQualityFlag("0");
|
||||
|
||||
hasMatchedField = true;
|
||||
DataFlicker dataFlicker = new DataFlicker();
|
||||
dataFlicker.setTime(item.getTime());
|
||||
dataFlicker.setLineId(item.getLineId());
|
||||
dataFlicker.setPhaseType(item.getPhaseType());
|
||||
dataFlicker.setValueType(item.getValueType());
|
||||
dataFlicker.setClDid(item.getClDid());
|
||||
dataFlicker.setProcess(item.getProcess());
|
||||
dataFlicker.setQualityFlag("0");
|
||||
|
||||
if (!splitDataMap.containsKey(tableName)) {
|
||||
splitDataMap.put(tableName, new ArrayList<>());
|
||||
}
|
||||
DataFluc dataFluc = new DataFluc();
|
||||
dataFluc.setTime(item.getTime());
|
||||
dataFluc.setLineId(item.getLineId());
|
||||
dataFluc.setPhaseType(item.getPhaseType());
|
||||
dataFluc.setValueType(item.getValueType());
|
||||
dataFluc.setClDid(item.getClDid());
|
||||
dataFluc.setProcess(item.getProcess());
|
||||
dataFluc.setQualityFlag("0");
|
||||
|
||||
createAndAddTargetData((List<Object>) splitDataMap.get(tableName), tableName, pqdData, otherName, value);
|
||||
}
|
||||
DataHarmPhasicI dataHarmPhasicI = new DataHarmPhasicI();
|
||||
dataHarmPhasicI.setTime(item.getTime());
|
||||
dataHarmPhasicI.setLineId(item.getLineId());
|
||||
dataHarmPhasicI.setPhaseType(item.getPhaseType());
|
||||
dataHarmPhasicI.setValueType(item.getValueType());
|
||||
dataHarmPhasicI.setClDid(item.getClDid());
|
||||
dataHarmPhasicI.setProcess(item.getProcess());
|
||||
dataHarmPhasicI.setQualityFlag("0");
|
||||
|
||||
if (!hasMatchedField) {
|
||||
DataHarmPhasicV dataHarmPhasicV = new DataHarmPhasicV();
|
||||
dataHarmPhasicV.setTime(item.getTime());
|
||||
dataHarmPhasicV.setLineId(item.getLineId());
|
||||
dataHarmPhasicV.setPhaseType(item.getPhaseType());
|
||||
dataHarmPhasicV.setValueType(item.getValueType());
|
||||
dataHarmPhasicV.setClDid(item.getClDid());
|
||||
dataHarmPhasicV.setProcess(item.getProcess());
|
||||
dataHarmPhasicV.setQualityFlag("0");
|
||||
|
||||
DataHarmPowerP dataHarmPowerP = new DataHarmPowerP();
|
||||
dataHarmPowerP.setTime(item.getTime());
|
||||
dataHarmPowerP.setLineId(item.getLineId());
|
||||
dataHarmPowerP.setPhaseType(item.getPhaseType());
|
||||
dataHarmPowerP.setValueType(item.getValueType());
|
||||
dataHarmPowerP.setClDid(item.getClDid());
|
||||
dataHarmPowerP.setProcess(item.getProcess());
|
||||
dataHarmPowerP.setQualityFlag("0");
|
||||
|
||||
DataHarmPowerQ dataHarmPowerQ = new DataHarmPowerQ();
|
||||
dataHarmPowerQ.setTime(item.getTime());
|
||||
dataHarmPowerQ.setLineId(item.getLineId());
|
||||
dataHarmPowerQ.setPhaseType(item.getPhaseType());
|
||||
dataHarmPowerQ.setValueType(item.getValueType());
|
||||
dataHarmPowerQ.setClDid(item.getClDid());
|
||||
dataHarmPowerQ.setProcess(item.getProcess());
|
||||
dataHarmPowerQ.setQualityFlag("0");
|
||||
|
||||
DataHarmPowerS dataHarmPowerS = new DataHarmPowerS();
|
||||
dataHarmPowerS.setTime(item.getTime());
|
||||
dataHarmPowerS.setLineId(item.getLineId());
|
||||
dataHarmPowerS.setPhaseType(item.getPhaseType());
|
||||
dataHarmPowerS.setValueType(item.getValueType());
|
||||
dataHarmPowerS.setClDid(item.getClDid());
|
||||
dataHarmPowerS.setProcess(item.getProcess());
|
||||
dataHarmPowerS.setQualityFlag("0");
|
||||
|
||||
DataHarmRateV dataHarmRateV = new DataHarmRateV();
|
||||
dataHarmRateV.setTime(item.getTime());
|
||||
dataHarmRateV.setLineId(item.getLineId());
|
||||
dataHarmRateV.setPhaseType(item.getPhaseType());
|
||||
dataHarmRateV.setValueType(item.getValueType());
|
||||
dataHarmRateV.setClDid(item.getClDid());
|
||||
dataHarmRateV.setProcess(item.getProcess());
|
||||
dataHarmRateV.setQualityFlag("0");
|
||||
|
||||
DataHarmRateI dataHarmRateI = new DataHarmRateI();
|
||||
dataHarmRateI.setTime(item.getTime());
|
||||
dataHarmRateI.setLineId(item.getLineId());
|
||||
dataHarmRateI.setPhaseType(item.getPhaseType());
|
||||
dataHarmRateI.setValueType(item.getValueType());
|
||||
dataHarmRateI.setClDid(item.getClDid());
|
||||
dataHarmRateI.setProcess(item.getProcess());
|
||||
dataHarmRateI.setQualityFlag("0");
|
||||
|
||||
DataInHarmV dataInHarmV = new DataInHarmV();
|
||||
dataInHarmV.setTime(item.getTime());
|
||||
dataInHarmV.setLineId(item.getLineId());
|
||||
dataInHarmV.setPhaseType(item.getPhaseType());
|
||||
dataInHarmV.setValueType(item.getValueType());
|
||||
dataInHarmV.setClDid(item.getClDid());
|
||||
dataInHarmV.setProcess(item.getProcess());
|
||||
dataInHarmV.setQualityFlag("0");
|
||||
|
||||
DataPlt dataPlt = new DataPlt();
|
||||
dataPlt.setTime(item.getTime());
|
||||
dataPlt.setLineId(item.getLineId());
|
||||
dataPlt.setPhaseType(item.getPhaseType());
|
||||
dataPlt.setValueType(item.getValueType());
|
||||
dataPlt.setClDid(item.getClDid());
|
||||
dataPlt.setProcess(item.getProcess());
|
||||
dataPlt.setQualityFlag("0");
|
||||
|
||||
PqdData pqdData = new PqdData();
|
||||
pqdData.setTime(item.getTime());
|
||||
pqdData.setLineId(item.getLineId());
|
||||
pqdData.setPhaseType(item.getPhaseType());
|
||||
pqdData.setValueType(item.getValueType());
|
||||
pqdData.setClDid(item.getClDid());
|
||||
pqdData.setProcess(item.getProcess());
|
||||
pqdData.setQualityFlag("0");
|
||||
remainingPqdData.add(pqdData);
|
||||
|
||||
|
||||
boolean hasDataV = false;
|
||||
boolean hasDataI = false;
|
||||
boolean hasData1 = false;
|
||||
boolean hasData2 = false;
|
||||
boolean hasData3 = false;
|
||||
boolean hasData4 = false;
|
||||
boolean hasData5 = false;
|
||||
boolean hasData6 = false;
|
||||
boolean hasData7 = false;
|
||||
boolean hasData8 = false;
|
||||
boolean hasData9 = false;
|
||||
boolean hasData10 = false;
|
||||
boolean hasData11 = false;
|
||||
boolean hasData12 = false;
|
||||
|
||||
for (Map.Entry<String, Object> entry : map.entrySet()) {
|
||||
String fieldName = entry.getKey();
|
||||
Object value = entry.getValue();
|
||||
String capitalizedFieldName = StringUtils.capitalize(fieldName);
|
||||
|
||||
// 跳过公共字段和 null 值
|
||||
if (isCommonField(fieldName) || value == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String table = map1.get(capitalizedFieldName);
|
||||
if (StrUtil.isBlank(table)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
List<EleEpdPqd> epdPqdList = map2.get(capitalizedFieldName);
|
||||
if (CollectionUtils.isEmpty(epdPqdList)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String influxdbName2 = epdPqdList.get(0).getOtherName();
|
||||
if (StrUtil.isBlank(influxdbName2) || influxdbName2.equals(capitalizedFieldName)) {
|
||||
influxdbName2 = capitalizedFieldName;
|
||||
}
|
||||
|
||||
if (Objects.equals(table, "data_v")) {
|
||||
setFieldValue(dataV, influxdbName2, value, true);
|
||||
hasDataV = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_i")) {
|
||||
setFieldValue(dataI, influxdbName2, value, true);
|
||||
hasDataI = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_flicker")) {
|
||||
setFieldValue(dataFlicker, influxdbName2, value, true);
|
||||
hasData1 = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_fluc")) {
|
||||
setFieldValue(dataFluc, influxdbName2, value, true);
|
||||
hasData2 = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_harmphasic_i")) {
|
||||
setFieldValue(dataHarmPhasicI, influxdbName2, value, true);
|
||||
hasData3 = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_harmphasic_v")) {
|
||||
setFieldValue(dataHarmPhasicV, influxdbName2, value, true);
|
||||
hasData4 = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_harmpower_p")) {
|
||||
setFieldValue(dataHarmPowerP, influxdbName2, value, true);
|
||||
hasData5 = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_harmpower_q")) {
|
||||
setFieldValue(dataHarmPowerQ, influxdbName2, value, true);
|
||||
hasData6 = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_harmpower_s")) {
|
||||
setFieldValue(dataHarmPowerS, influxdbName2, value, true);
|
||||
hasData7 = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_harmrate_v")) {
|
||||
setFieldValue(dataHarmRateV, influxdbName2, value, true);
|
||||
hasData8 = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_harmrate_i")) {
|
||||
setFieldValue(dataHarmRateI, influxdbName2, value, true);
|
||||
hasData9 = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_inharm_v")) {
|
||||
setFieldValue(dataInHarmV, influxdbName2, value, true);
|
||||
hasData10 = true;
|
||||
}
|
||||
if (Objects.equals(table, "data_plt")) {
|
||||
setFieldValue(dataPlt, influxdbName2, value, true);
|
||||
hasData11 = true;
|
||||
}
|
||||
if (Objects.equals(table, "pqd_data")) {
|
||||
setFieldValue(pqdData, StringUtils.uncapitalize(influxdbName2), value, false);
|
||||
hasData12 = true;
|
||||
}
|
||||
}
|
||||
|
||||
result.put("splitData", splitDataMap);
|
||||
result.put("remainingPqdData", remainingPqdData);
|
||||
|
||||
log.info("PqdData数据拆分完成,拆分为{}个表,剩余{}条未匹配数据需插入InfluxDB",
|
||||
splitDataMap.size(), remainingPqdData.size());
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("PqdData数据拆分失败", e);
|
||||
throw new RuntimeException("PqdData数据拆分失败", e);
|
||||
if (hasDataV) {
|
||||
list1.add(dataV);
|
||||
}
|
||||
if (hasDataI) {
|
||||
list2.add(dataI);
|
||||
}
|
||||
if (hasData1) {
|
||||
list3.add(dataFlicker);
|
||||
}
|
||||
if (hasData2) {
|
||||
list4.add(dataFluc);
|
||||
}
|
||||
if (hasData3) {
|
||||
list5.add(dataHarmPhasicI);
|
||||
}
|
||||
if (hasData4) {
|
||||
list6.add(dataHarmPhasicV);
|
||||
}
|
||||
if (hasData5) {
|
||||
list7.add(dataHarmPowerP);
|
||||
}
|
||||
if (hasData6) {
|
||||
list8.add(dataHarmPowerQ);
|
||||
}
|
||||
if (hasData7) {
|
||||
list9.add(dataHarmPowerS);
|
||||
}
|
||||
if (hasData8) {
|
||||
list10.add(dataHarmRateV);
|
||||
}
|
||||
if (hasData9) {
|
||||
list11.add(dataHarmRateI);
|
||||
}
|
||||
if (hasData10) {
|
||||
list12.add(dataInHarmV);
|
||||
}
|
||||
if (hasData11) {
|
||||
list13.add(dataPlt);
|
||||
}
|
||||
if (hasData12) {
|
||||
list14.add(pqdData);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
map3.put("data_v", list1);
|
||||
map3.put("data_i", list2);
|
||||
map3.put("data_flicker", list3);
|
||||
map3.put("data_fluc", list4);
|
||||
map3.put("data_harmphasic_i", list5);
|
||||
map3.put("data_harmphasic_v", list6);
|
||||
map3.put("data_harmpower_p", list7);
|
||||
map3.put("data_harmpower_q", list8);
|
||||
map3.put("data_harmpower_s", list9);
|
||||
map3.put("data_harmrate_v", list10);
|
||||
map3.put("data_harmrate_i", list11);
|
||||
map3.put("data_inharm_v", list12);
|
||||
map3.put("data_plt", list13);
|
||||
map3.put("pqd_data", list14);
|
||||
return map3;
|
||||
}
|
||||
|
||||
|
||||
private Map<String, Object> extractFieldValues(PqdData pqdData) {
|
||||
Map<String, Object> fieldValues = new HashMap<>();
|
||||
Field[] fields = PqdData.class.getDeclaredFields();
|
||||
@@ -148,15 +385,17 @@ public class PqdDataSplitServiceImpl implements IPqdDataSplitService {
|
||||
Object value = field.get(pqdData);
|
||||
if (value != null) {
|
||||
fieldValues.put(field.getName(), value);
|
||||
} else {
|
||||
fieldValues.put(field.getName(), 0.0d);
|
||||
}
|
||||
} catch (IllegalAccessException e) {
|
||||
log.warn("获取字段 {} 的值失败", field.getName(), e);
|
||||
}
|
||||
}
|
||||
|
||||
return fieldValues;
|
||||
}
|
||||
|
||||
|
||||
private boolean isCommonField(String fieldName) {
|
||||
Set<String> commonFields = new HashSet<>(Arrays.asList(
|
||||
"time", "lineId", "phasicType", "valueType", "clDid",
|
||||
@@ -165,231 +404,35 @@ public class PqdDataSplitServiceImpl implements IPqdDataSplitService {
|
||||
return commonFields.contains(fieldName);
|
||||
}
|
||||
|
||||
private void createAndAddTargetData(List<Object> dataList, String tableName,
|
||||
PqdData pqdData, String targetField, Object value) {
|
||||
switch (tableName.toLowerCase()) {
|
||||
case "data_v":
|
||||
dataList.add(createRStatDataVD(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_i":
|
||||
dataList.add(createRStatDataID(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_flicker":
|
||||
dataList.add(createRStatDataFlicker(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_fluc":
|
||||
dataList.add(createRStatDataFluc(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_harmphasic_i":
|
||||
dataList.add(createRStatDataHarmphasicI(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_harmphasic_v":
|
||||
dataList.add(createRStatDataHarmphasicV(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_harmpower_p":
|
||||
dataList.add(createRStatDataHarmpowerP(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_harmpower_q":
|
||||
dataList.add(createRStatDataHarmpowerQ(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_harmpower_s":
|
||||
dataList.add(createRStatDataHarmpowerS(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_harmrate_v":
|
||||
dataList.add(createRStatDataHarmrateV(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_harmrate_i":
|
||||
dataList.add(createRStatDataHarmrateI(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_inharm_v":
|
||||
dataList.add(createRStatDataInharmV(pqdData, targetField, value));
|
||||
break;
|
||||
case "data_plt":
|
||||
dataList.add(createRStatDataPlt(pqdData, targetField, value));
|
||||
break;
|
||||
default:
|
||||
log.warn("不支持的目标表: {}", tableName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private Object createRStatDataVD(PqdData pqdData, String targetField, Object value) {
|
||||
DataV data = new DataV();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataID(PqdData pqdData, String targetField, Object value) {
|
||||
DataI data = new DataI();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setValueType(pqdData.getPhaseType());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataFlicker(PqdData pqdData, String targetField, Object value) {
|
||||
DataFlicker data = new DataFlicker();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataFluc(PqdData pqdData, String targetField, Object value) {
|
||||
DataFluc data = new DataFluc();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataHarmphasicI(PqdData pqdData, String targetField, Object value) {
|
||||
DataHarmPhasicI data = new DataHarmPhasicI();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataHarmphasicV(PqdData pqdData, String targetField, Object value) {
|
||||
DataHarmPhasicV data = new DataHarmPhasicV();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataHarmpowerP(PqdData pqdData, String targetField, Object value) {
|
||||
DataHarmPowerP data = new DataHarmPowerP();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataHarmpowerQ(PqdData pqdData, String targetField, Object value) {
|
||||
DataHarmPowerQ data = new DataHarmPowerQ();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataHarmpowerS(PqdData pqdData, String targetField, Object value) {
|
||||
DataHarmPowerS data = new DataHarmPowerS();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataHarmrateV(PqdData pqdData, String targetField, Object value) {
|
||||
DataHarmRateV data = new DataHarmRateV();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataHarmrateI(PqdData pqdData, String targetField, Object value) {
|
||||
DataHarmRateI data = new DataHarmRateI();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataInharmV(PqdData pqdData, String targetField, Object value) {
|
||||
DataInHarmV data = new DataInHarmV();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private Object createRStatDataPlt(PqdData pqdData, String targetField, Object value) {
|
||||
DataPlt data = new DataPlt();
|
||||
data.setTime(pqdData.getTime());
|
||||
data.setLineId(pqdData.getLineId());
|
||||
data.setPhaseType(pqdData.getPhaseType());
|
||||
data.setValueType(pqdData.getValueType());
|
||||
data.setClDid(pqdData.getClDid());
|
||||
data.setProcess(pqdData.getProcess());
|
||||
data.setQualityFlag("0");
|
||||
setFieldValue(data, targetField, value);
|
||||
return data;
|
||||
}
|
||||
|
||||
private void setFieldValue(Object obj, String fieldName, Object value) {
|
||||
private void setFieldValue(Object obj, String fieldName, Object value, boolean isCamelCase) {
|
||||
try {
|
||||
String camelCaseFieldName = toCamelCase(fieldName);
|
||||
String camelCaseFieldName = fieldName;
|
||||
if (isCamelCase) {
|
||||
camelCaseFieldName = toCamelCase(fieldName);
|
||||
}
|
||||
Field field = obj.getClass().getDeclaredField(camelCaseFieldName);
|
||||
field.setAccessible(true);
|
||||
if (value == null) {
|
||||
Class<?> fieldType = field.getType();
|
||||
if (fieldType == Double.class || fieldType == double.class) {
|
||||
value = 0.0D;
|
||||
} else if (fieldType == Integer.class || fieldType == int.class) {
|
||||
value = 0;
|
||||
} else if (fieldType == Float.class || fieldType == float.class) {
|
||||
value = 0.0F;
|
||||
} else if (fieldType == Long.class || fieldType == long.class) {
|
||||
value = 0L;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
field.set(obj, value);
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
} catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {
|
||||
log.warn("设置字段 {} 的值失败", fieldName, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static String toCamelCase(String input) {
|
||||
if (input == null || input.isEmpty()) {
|
||||
return input;
|
||||
|
||||
Reference in New Issue
Block a user