Browse Source

小数位数

master
review512jwy@163.com 3 days ago
parent
commit
c446496609
  1. 3
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/DeviceInfoMapperExt.xml
  2. 3
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/data/BaseData.java
  3. 25
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java
  4. 7
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java
  5. 7
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java
  6. 47
      dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/CommonUtil.java

3
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/DeviceInfoMapperExt.xml

@ -20,7 +20,8 @@
device_info.gateway_info_id,
data_provider_gateway_info.name as gatewayInfoName,
device_info.unit,
device_info.data_mapping
device_info.data_mapping,
device_info.dashboard_decimal_places
</sql>
<sql id="deviceDataFromAndJoin">

3
dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/data/BaseData.java

@ -56,4 +56,7 @@ public class BaseData {
@Schema(description = "data mapping", example = "{\"default\":{\"1\":\"漏水\",\"2\":\"漏电\",\"3\":\"起火\"}")
private String dataMapping;
@Schema(description = "数据小数位数", example = "2")
private Integer dashboardDecimalPlaces;
}

25
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java

@ -266,6 +266,10 @@ public class CommonOpt {
public List<LineData> getLineData(Long companyId, LineDataSearchParams lineDataSearchParams, int deviceType) {
List<LineData> lineDataList = new ArrayList<>();
for (String attrCode : lineDataSearchParams.getAttrCodeList()){
DeviceInfo deviceInfo = getDeviceInfoByDeviceId(lineDataSearchParams.getDeviceId());
if (null == deviceInfo){
continue;
}
LineData lineData = new LineData();
lineData.setAttrCode(attrCode);
try {
@ -328,9 +332,9 @@ public class CommonOpt {
try (ResultSet result = preparedStatement.executeQuery()) {
if (result.next()) {
if (deviceType == 2) {
processResult(result, lineData, lastDayValue);
processResult(result, lineData, deviceInfo, lastDayValue);
} else if (deviceType == 3) {
processResult(result, lineData);
processResult(result, lineData, deviceInfo);
}
}
}
@ -349,6 +353,15 @@ public class CommonOpt {
return lineDataList;
}
private DeviceInfo getDeviceInfoByDeviceId(String deviceId) {
DeviceInfoExample example = new DeviceInfoExample();
example.createCriteria()
.andDeviceIdEqualTo(deviceId)
.andFlagEqualTo(0);
List<DeviceInfo> list = deviceInfoMapperExt.selectByExample(example);
return list.isEmpty() ? null : list.get(0);
}
private Double getLastDayValue(Connection conn, String date, String deviceId) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy_MM_dd");
// 解析日期字符串为 LocalDate 对象
@ -386,7 +399,7 @@ public class CommonOpt {
return null;
}
private void processResult(ResultSet result, LineData lineData) {
private void processResult(ResultSet result, LineData lineData, DeviceInfo deviceInfo) {
try {
// 用于存储 xData 和 yData
List<Object> xDataList = new ArrayList<>();
@ -417,7 +430,7 @@ public class CommonOpt {
// 将 rawData解析 添加到 yData
// String value = extractFirstValue(mapper, rawData);
yDataList.add(StringUtils.isBlank(value) ? "0" : value);
yDataList.add(CommonUtil.formatDecimal(StringUtils.isBlank(value) ? "0" : value, deviceInfo.getDashboardDecimalPlaces()));
} while (result.next());
@ -429,7 +442,7 @@ public class CommonOpt {
}
}
private void processResult(ResultSet result, LineData lineData, Double lastDayValue) {
private void processResult(ResultSet result, LineData lineData, DeviceInfo deviceInfo, Double lastDayValue) {
try {
// 用于存储 xData 和 yData
List<Object> xDataList = new ArrayList<>();
@ -477,7 +490,7 @@ public class CommonOpt {
//只取每小时的最后一条数据
for (Map.Entry<String, Double> entry : lastHourData.entrySet()) {
xDataList.add(entry.getKey()); // 添加每小时的时间
yDataList.add(entry.getValue()); // 添加每小时最后一条数据的值
yDataList.add(CommonUtil.formatDecimal(entry.getValue(), deviceInfo.getDashboardDecimalPlaces())); // 添加每小时最后一条数据的值
}
// 将处理后的数据加入到 lineData 中

7
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java

@ -24,6 +24,7 @@ import com.dongjian.dashboard.back.model.DeviceRawdataRealtime;
import com.dongjian.dashboard.back.model.DeviceRawdataRealtimeExample;
import com.dongjian.dashboard.back.service.DeviceDataAccumulateService;
import com.dongjian.dashboard.back.service.common.CommonOpt;
import com.dongjian.dashboard.back.util.CommonUtil;
import com.dongjian.dashboard.back.util.DateUtil;
import com.dongjian.dashboard.back.vo.data.DeviceAccumulateData;
import com.dongjian.dashboard.back.vo.device.DeviceIncrement;
@ -131,9 +132,9 @@ public class DeviceDataAccumulateServiceImpl implements DeviceDataAccumulateServ
String deviceId = data.getDeviceId().toLowerCase();
// 填充今天/昨天/去年值
data.setCumulativeValue(getIncrement(todayMap.get(deviceId), DeviceIncrement::getTodayIncrement));
data.setYesterdayValue(getIncrement(yesterdayMap.get(deviceId), DeviceIncrement::getYesterdayIncrement));
data.setLastYearValue(getIncrement(lastYearMap.get(deviceId), DeviceIncrement::getLastYearIncrement));
data.setCumulativeValue(CommonUtil.formatDecimal(getIncrement(todayMap.get(deviceId), DeviceIncrement::getTodayIncrement), data.getDashboardDecimalPlaces()));
data.setYesterdayValue(CommonUtil.formatDecimal(getIncrement(yesterdayMap.get(deviceId), DeviceIncrement::getYesterdayIncrement), data.getDashboardDecimalPlaces()));
data.setLastYearValue(CommonUtil.formatDecimal(getIncrement(lastYearMap.get(deviceId), DeviceIncrement::getLastYearIncrement), data.getDashboardDecimalPlaces()));
//处理111状态映射
// data.setStatus111(commonOpt.buildStatus111(deviceId, deviceId85To111Map, deviceInfo111Map, realtime111Map, objectMapper));

7
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java

@ -18,6 +18,7 @@ import com.dongjian.dashboard.back.model.DeviceRawdataRealtimeExample;
import com.dongjian.dashboard.back.service.DeviceDataMeasureService;
import com.dongjian.dashboard.back.service.common.CommonOpt;
import com.dongjian.dashboard.back.service.common.LineDataHourAggregator;
import com.dongjian.dashboard.back.util.CommonUtil;
import com.dongjian.dashboard.back.vo.data.DeviceMeasureData;
import com.dongjian.dashboard.back.vo.device.LineData;
import com.fasterxml.jackson.databind.JsonNode;
@ -173,9 +174,9 @@ public class DeviceDataMeasureServiceImpl implements DeviceDataMeasureService {
.collect(Collectors.joining(","));
// 设置 data 中的属性
data.setMeasurementValue(measurementValues);
data.setMaxValue(maxValues);
data.setMinValue(minValues);
data.setMeasurementValue(CommonUtil.formatDecimal(measurementValues, data.getDashboardDecimalPlaces()));
data.setMaxValue(CommonUtil.formatDecimal(maxValues, data.getDashboardDecimalPlaces()));
data.setMinValue(CommonUtil.formatDecimal(minValues, data.getDashboardDecimalPlaces()));
}
//处理111状态映射

47
dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/CommonUtil.java

@ -1,6 +1,8 @@
package com.dongjian.dashboard.back.util;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@ -10,6 +12,8 @@ import java.util.stream.Collectors;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
@ -20,6 +24,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
public class CommonUtil {
private static final Logger logger = LoggerFactory.getLogger(CommonUtil.class);
private static final String decimalsRegex = "[.](.*)";
private static final String hexStringRegex = "^[A-Fa-f0-9]+$";
@ -761,4 +767,45 @@ public class CommonUtil {
return multiValueMap;
}
/**
* 控制字符串数字的小数位数四舍五入
*
* @param number 数字 "12.3456"
* @param scale 保留的小数位数 2
* @return 处理后的字符串 "12.35"
*/
public static String formatDecimal(Object number, Integer scale) {
if (number == null) {
return null;
}
if (null == scale){
scale = 2;
}
try {
BigDecimal bd;
if (number instanceof BigDecimal) {
bd = (BigDecimal) number;
} else if (number instanceof Number) {
// 包含 Double / Integer / Long / double 等
bd = BigDecimal.valueOf(((Number) number).doubleValue());
} else if (number instanceof String) {
String str = ((String) number).trim();
if (str.isEmpty()) {
return str;
}
bd = new BigDecimal(str);
} else {
// 非法类型,直接返回原值
return number.toString();
}
return bd.setScale(scale, RoundingMode.HALF_UP).toPlainString();
} catch (Exception e) {
logger.error("非法数字格式: {}", number, e);
return number.toString();
}
}
}

Loading…
Cancel
Save