diff --git a/dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/Constants.java b/dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/Constants.java index ae31bc6..a6d422b 100644 --- a/dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/Constants.java +++ b/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 REDIS_BA_STATUS_LATEST_VALUE = "ba_status_latest_value_"; + public static final int AURORA_IN_BATCH_SIZE = 1000; // 定义大类常量 diff --git a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/bo/LatestValueBO.java b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/bo/LatestValueBO.java new file mode 100644 index 0000000..530164f --- /dev/null +++ b/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; +} diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java index d27cc77..5f27a6a 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java +++ b/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; +import com.dongjian.dashboard.back.bo.LatestValueBO; import com.dongjian.dashboard.back.common.Constants; import com.dongjian.dashboard.back.common.language.msg.MsgLanguageChange; 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.service.DeviceDataBaStatusService; 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.DeviceBaStatusData; import com.dongjian.dashboard.back.vo.data.DeviceMeasureData; 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.ObjectMapper; import com.github.pagehelper.PageHelper; @@ -59,6 +63,8 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService private MsgLanguageChange msgLanguageChange; @Autowired private CommonOpt commonOpt; + @Autowired + private RedisUtil redisUtil; @@ -183,6 +189,27 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService public SimpleDataResponse> getLineData(Integer searchType, LineDataSearchParams lineDataSearchParams, Long companyId, Long userId, Integer languageType) { List lineDataList = new ArrayList<>(); + LineData lineData = new LineData(); + lineData.setAttrCode(lineDataSearchParams.getAttrCodeList()[0]); + + List 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(); devExample.createCriteria() .andCompanyIdEqualTo(companyId) @@ -208,8 +235,6 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService List result = baStatusHistoryMapperExt.selectByExample(bshExample); if (CollectionUtils.isNotEmpty(result)) { - LineData lineData = new LineData(); - List yCommon = new ArrayList<>(); for (BaStatusHistory item : result) { String tsStr = item.getUpdateTs(); if (tsStr == null || tsStr.isEmpty()) { @@ -232,13 +257,11 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService lineData.getXData().add(formatted); 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); } diff --git a/dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/DateUtil.java b/dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/DateUtil.java index c28c127..0dd7157 100644 --- a/dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/DateUtil.java +++ b/dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/DateUtil.java @@ -16,6 +16,8 @@ import java.util.*; public class DateUtil { private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ISO_DATE; + + private static final ZoneId JAPAN_ZONE = ZoneId.of("Asia/Tokyo"); public static void main(String[] args) { // 指定的日期时间字符串 @@ -85,4 +87,12 @@ public class DateUtil { LocalDate lastYearDate = getLastYearSameIsoWeekDay(date); 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); + } }