From 202888ca14ffd6594af053ec5fd82821d32921f3 Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Tue, 26 May 2026 16:09:26 +0800 Subject: [PATCH] =?UTF-8?q?refactor(data):=20=E4=BE=BF=E6=90=BA=E5=BC=8F?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=95=B0=E6=8D=AE=E8=A1=A5=E5=8F=AC=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除接口中的方法注释以简化代码结构 - 替换Spring事务注解为动态数据源事务注解 - 删除未使用的导入包和注释掉的代码行 - 简化数据拆分服务实现类中的复杂逻辑 - 添加时间间隔处理逻辑用于不同数据表的定时入库 - 优化数据映射过程中的null值处理机制 - 重构字段值设置方法以提高类型安全性和错误处理能力 --- .../service/IPqdDataSplitService.java | 8 - .../impl/PortableOfflLogServiceImpl.java | 52 +- .../service/impl/PqdDataSplitServiceImpl.java | 587 ++++++++++-------- 3 files changed, 353 insertions(+), 294 deletions(-) diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/IPqdDataSplitService.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/IPqdDataSplitService.java index fee0208..f004cbd 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/IPqdDataSplitService.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/IPqdDataSplitService.java @@ -13,13 +13,5 @@ import java.util.Map; */ public interface IPqdDataSplitService { - /** - * 将PqdData数据拆分到不同的表中 - * - * @param pqdDataList 原始PqdData数据列表 - * @return 包含两部分数据: - * - "splitData": 已拆分到各表的数据 Map<表名, 数据列表> - * - "remainingPqdData": 未匹配的PqdData数据(仍需插入InfluxDB) - */ Map splitPqdData(List pqdDataList); } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PortableOfflLogServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PortableOfflLogServiceImpl.java index 1a5d1d5..e9d15db 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PortableOfflLogServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PortableOfflLogServiceImpl.java @@ -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 sublistAsOriginalListType = new ArrayList<>(sliceList); Map map = pqdDataSplitService.splitPqdData(sublistAsOriginalListType); insertData(map); -// pqdDataMapper.insertBatch(sublistAsOriginalListType); } //min结果集解析入库后就不需要在解析了 minFlag = false; @@ -703,8 +701,7 @@ public class PortableOfflLogServiceImpl extends ServiceImpl map) { //13张表 - Map> splitData = (Map>) map.get("splitData"); - splitData.forEach((key, value) -> { + map.forEach((key, value) -> { switch (key) { case "data_v": dataVMapper.insertBatch((List) value); @@ -713,10 +710,26 @@ public class PortableOfflLogServiceImpl extends ServiceImpl) value); break; case "data_flicker": - dataFlicker.insertBatch((List) value); + //10分钟入一组 + List list = (List) 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) value); + //10分钟入一组 + List list2 = (List) 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) value); @@ -743,18 +756,29 @@ public class PortableOfflLogServiceImpl extends ServiceImpl) value); break; case "data_plt": - dataPlt.insertBatch((List) value); + //2小时入一组 + List list3 = (List) 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) value); break; default: log.warn("不支持的目标表: {}", key); break; } }); + } - //其余数据 - List remainingPqdData = (List) 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); } } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PqdDataSplitServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PqdDataSplitServiceImpl.java index aca6403..13d3322 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PqdDataSplitServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/PqdDataSplitServiceImpl.java @@ -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 splitPqdData(List pqdDataList) { - Map 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> splitDataMap = new HashMap<>(); - List remainingPqdData = new ArrayList<>(); - //获取表映射关系 Map map1 = new Gson().fromJson(String.valueOf(redisUtil.getObjectByKey(AppRedisKey.ELE_EPD_PQD)), Map.class); //获取字段映射关系 @@ -68,7 +53,6 @@ public class PqdDataSplitServiceImpl implements IPqdDataSplitService { List resultList = epdList.stream() .flatMap(item -> { if (item.getHarmStart() != null && item.getHarmEnd() != null) { - // 生成从 harmStart 到 harmEnd 的新对象 List 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> map2 = resultList.stream().collect(Collectors.groupingBy(EleEpdPqd::getName,LinkedHashMap::new,Collectors.toList())); + Map map3 = new HashMap<>(); + List list1 = new ArrayList<>(); + List list2 = new ArrayList<>(); + List list3 = new ArrayList<>(); + List list4 = new ArrayList<>(); + List list5 = new ArrayList<>(); + List list6 = new ArrayList<>(); + List list7 = new ArrayList<>(); + List list8 = new ArrayList<>(); + List list9 = new ArrayList<>(); + List list10 = new ArrayList<>(); + List list11 = new ArrayList<>(); + List list12 = new ArrayList<>(); + List list13 = new ArrayList<>(); + List list14 = new ArrayList<>(); - try { - for (PqdData pqdData : pqdDataList) { - boolean hasMatchedField = false; - Map fieldValues = extractFieldValues(pqdData); - for (Map.Entry entry : fieldValues.entrySet()) { - String sourceFieldName = StringUtils.capitalize(entry.getKey()); - Object value = entry.getValue(); + for (PqdData item : pqdDataList) { + Map map = extractFieldValues(item); - if (value == null || isCommonField(sourceFieldName)) { - continue; - } - String tableName = map1.get(sourceFieldName); - String otherName = sourceFieldName; - List 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) 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"); + + 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"); + + + 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 entry : map.entrySet()) { + String fieldName = entry.getKey(); + Object value = entry.getValue(); + String capitalizedFieldName = StringUtils.capitalize(fieldName); + + // 跳过公共字段和 null 值 + if (isCommonField(fieldName) || value == null) { + continue; } - if (!hasMatchedField) { - pqdData.setQualityFlag("0"); - remainingPqdData.add(pqdData); + String table = map1.get(capitalizedFieldName); + if (StrUtil.isBlank(table)) { + continue; + } + + List 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 extractFieldValues(PqdData pqdData) { Map 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 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 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;