Browse Source

在redis里存状态设备上一天最后一条状态

ppt-20260120
review512jwy@163.com 20 hours ago
parent
commit
0df1fd0702
  1. 2
      dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/Constants.java
  2. 9
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/bo/LatestValueBO.java
  3. 37
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java
  4. 10
      dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/DateUtil.java

2
dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/Constants.java

@ -31,6 +31,8 @@ public class Constants {
public static final String WINDOW_ALERT_IGNORED = "alert_window_notice:ignore:%d"; public static final String WINDOW_ALERT_IGNORED = "alert_window_notice:ignore:%d";
public static final String REDIS_BA_STATUS_LATEST_VALUE = "ba_status_latest_value_";
public static final int AURORA_IN_BATCH_SIZE = 1000; public static final int AURORA_IN_BATCH_SIZE = 1000;
// 定义大类常量 // 定义大类常量

9
dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/bo/LatestValueBO.java

@ -0,0 +1,9 @@
package com.dongjian.dashboard.back.bo;
import lombok.Data;
@Data
public class LatestValueBO {
private Long updateTs;
private Integer value;
}

37
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java

@ -1,5 +1,6 @@
package com.dongjian.dashboard.back.service.impl; package com.dongjian.dashboard.back.service.impl;
import com.dongjian.dashboard.back.bo.LatestValueBO;
import com.dongjian.dashboard.back.common.Constants; import com.dongjian.dashboard.back.common.Constants;
import com.dongjian.dashboard.back.common.language.msg.MsgLanguageChange; import com.dongjian.dashboard.back.common.language.msg.MsgLanguageChange;
import com.dongjian.dashboard.back.common.response.PageInfo; import com.dongjian.dashboard.back.common.response.PageInfo;
@ -14,10 +15,13 @@ import com.dongjian.dashboard.back.easyexcel.SecondsToHMSConverter;
import com.dongjian.dashboard.back.model.*; import com.dongjian.dashboard.back.model.*;
import com.dongjian.dashboard.back.service.DeviceDataBaStatusService; import com.dongjian.dashboard.back.service.DeviceDataBaStatusService;
import com.dongjian.dashboard.back.service.common.CommonOpt; import com.dongjian.dashboard.back.service.common.CommonOpt;
import com.dongjian.dashboard.back.util.DateUtil;
import com.dongjian.dashboard.back.util.redis.RedisUtil;
import com.dongjian.dashboard.back.vo.data.DeviceAccumulateData; import com.dongjian.dashboard.back.vo.data.DeviceAccumulateData;
import com.dongjian.dashboard.back.vo.data.DeviceBaStatusData; import com.dongjian.dashboard.back.vo.data.DeviceBaStatusData;
import com.dongjian.dashboard.back.vo.data.DeviceMeasureData; import com.dongjian.dashboard.back.vo.data.DeviceMeasureData;
import com.dongjian.dashboard.back.vo.device.LineData; import com.dongjian.dashboard.back.vo.device.LineData;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
@ -59,6 +63,8 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService
private MsgLanguageChange msgLanguageChange; private MsgLanguageChange msgLanguageChange;
@Autowired @Autowired
private CommonOpt commonOpt; private CommonOpt commonOpt;
@Autowired
private RedisUtil redisUtil;
@ -183,6 +189,27 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService
public SimpleDataResponse<List<LineData>> getLineData(Integer searchType, LineDataSearchParams lineDataSearchParams, Long companyId, Long userId, Integer languageType) { public SimpleDataResponse<List<LineData>> getLineData(Integer searchType, LineDataSearchParams lineDataSearchParams, Long companyId, Long userId, Integer languageType) {
List<LineData> lineDataList = new ArrayList<>(); List<LineData> lineDataList = new ArrayList<>();
LineData lineData = new LineData();
lineData.setAttrCode(lineDataSearchParams.getAttrCodeList()[0]);
List<Object> yCommon = new ArrayList<>();
//** 获取昨日最新数据 **//
String redisKey = Constants.REDIS_BA_STATUS_LATEST_VALUE + DateUtil.getYesterdayInJapan();
Object cacheLastValue = redisUtil.HGet(redisKey, lineDataSearchParams.getDeviceId().toLowerCase());
if (null != cacheLastValue) {
try {
LatestValueBO latestValueBO = objectMapper.readValue(cacheLastValue.toString(), LatestValueBO.class);
String dateFormatted = Instant.ofEpochMilli(latestValueBO.getUpdateTs())
.atZone(Constants.ZONE_TOKYO)
.format(Constants.FORMATTER_YMDHMS);
lineData.getXData().add(dateFormatted);
yCommon.add(latestValueBO.getValue());
} catch (JsonProcessingException e) {
logger.error("LatestValueBO error", e);
}
}
DeviceInfoExample devExample = new DeviceInfoExample(); DeviceInfoExample devExample = new DeviceInfoExample();
devExample.createCriteria() devExample.createCriteria()
.andCompanyIdEqualTo(companyId) .andCompanyIdEqualTo(companyId)
@ -208,8 +235,6 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService
List<BaStatusHistory> result = baStatusHistoryMapperExt.selectByExample(bshExample); List<BaStatusHistory> result = baStatusHistoryMapperExt.selectByExample(bshExample);
if (CollectionUtils.isNotEmpty(result)) { if (CollectionUtils.isNotEmpty(result)) {
LineData lineData = new LineData();
List<Object> yCommon = new ArrayList<>();
for (BaStatusHistory item : result) { for (BaStatusHistory item : result) {
String tsStr = item.getUpdateTs(); String tsStr = item.getUpdateTs();
if (tsStr == null || tsStr.isEmpty()) { if (tsStr == null || tsStr.isEmpty()) {
@ -232,13 +257,11 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService
lineData.getXData().add(formatted); lineData.getXData().add(formatted);
yCommon.add(item.getIsRunning()); yCommon.add(item.getIsRunning());
} }
lineData.setAttrCode(lineDataSearchParams.getAttrCodeList()[0]);
lineData.getYData().put("common", yCommon);
lineDataList.add(lineData);
} }
lineData.getYData().put("common", yCommon);
lineDataList.add(lineData);
return SimpleDataResponse.success(lineDataList); return SimpleDataResponse.success(lineDataList);
} }

10
dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/DateUtil.java

@ -17,6 +17,8 @@ public class DateUtil {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_DATE; private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_DATE;
private static final ZoneId JAPAN_ZONE = ZoneId.of("Asia/Tokyo");
public static void main(String[] args) { public static void main(String[] args) {
// 指定的日期时间字符串 // 指定的日期时间字符串
String dateString = "2023-12-31 23:59:59"; String dateString = "2023-12-31 23:59:59";
@ -85,4 +87,12 @@ public class DateUtil {
LocalDate lastYearDate = getLastYearSameIsoWeekDay(date); LocalDate lastYearDate = getLastYearSameIsoWeekDay(date);
return lastYearDate.format(FORMATTER); return lastYearDate.format(FORMATTER);
} }
public static String getYesterdayInJapan() {
DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy_MM_dd");
LocalDate japanYesterday = LocalDate
.now(JAPAN_ZONE)
.minusDays(1);
return japanYesterday.format(FORMATTER);
}
} }

Loading…
Cancel
Save