From c6e642b4fbd87d4ca8a7f4423e7b2cdc804ffddc Mon Sep 17 00:00:00 2001 From: "review512jwy@163.com" <“review512jwy@163.com”> Date: Fri, 23 Jan 2026 19:01:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=B4=AF=E7=A7=AF=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=89=8D=E6=97=A5=E5=80=BC=E3=80=81=E5=89=8D=E5=B9=B4?= =?UTF-8?q?=E5=80=BC=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DashboardRecordAccumulateMapperExt.java | 7 +++ .../DashboardRecordAccumulateMapperExt.xml | 19 ++++++++ .../back/vo/record/RecordAccumulateDto.java | 14 ++++++ .../back/service/common/CommonOpt.java | 43 +++++++++++++++++++ .../impl/DeviceDataAccumulateServiceImpl.java | 17 ++++++-- 5 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/record/RecordAccumulateDto.java diff --git a/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/aurora/DashboardRecordAccumulateMapperExt.java b/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/aurora/DashboardRecordAccumulateMapperExt.java index 87c5eec..c165ce9 100644 --- a/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/aurora/DashboardRecordAccumulateMapperExt.java +++ b/dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/aurora/DashboardRecordAccumulateMapperExt.java @@ -2,6 +2,7 @@ package com.dongjian.dashboard.back.dao.aurora; import com.dongjian.dashboard.back.dao.auto.DashboardRecordAccumulateMapper; import com.dongjian.dashboard.back.vo.device.DeviceIncrement; +import com.dongjian.dashboard.back.vo.record.RecordAccumulateDto; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -33,4 +34,10 @@ public interface DashboardRecordAccumulateMapperExt extends DashboardRecordAccum @Param("targetSeconds") int targetSeconds ); + List selectByDay( + @Param("deviceIds") List deviceIds, + @Param("year") int year, + @Param("month") int month, + @Param("day") int day + ); } diff --git a/dongjian-dashboard-back-dao/src/main/resources/mappers/aurora/DashboardRecordAccumulateMapperExt.xml b/dongjian-dashboard-back-dao/src/main/resources/mappers/aurora/DashboardRecordAccumulateMapperExt.xml index b045c80..a62381b 100644 --- a/dongjian-dashboard-back-dao/src/main/resources/mappers/aurora/DashboardRecordAccumulateMapperExt.xml +++ b/dongjian-dashboard-back-dao/src/main/resources/mappers/aurora/DashboardRecordAccumulateMapperExt.xml @@ -77,4 +77,23 @@ + + + \ No newline at end of file diff --git a/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/record/RecordAccumulateDto.java b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/record/RecordAccumulateDto.java new file mode 100644 index 0000000..6195939 --- /dev/null +++ b/dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/record/RecordAccumulateDto.java @@ -0,0 +1,14 @@ +package com.dongjian.dashboard.back.vo.record; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class RecordAccumulateDto { + private String deviceId; + private Double incrementToday; + private Integer dateHour; + private Integer dateMinute; + private Integer dateSecond; +} diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java index d07d65a..0931806 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java @@ -24,7 +24,9 @@ import com.dongjian.dashboard.back.util.DESUtil; import com.dongjian.dashboard.back.util.DurationData; import com.dongjian.dashboard.back.vo.building.BindedBuildingVO; import com.dongjian.dashboard.back.vo.company.AuroraInfo; +import com.dongjian.dashboard.back.vo.device.DeviceIncrement; import com.dongjian.dashboard.back.vo.device.LineData; +import com.dongjian.dashboard.back.vo.record.RecordAccumulateDto; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.collections.CollectionUtils; @@ -665,4 +667,45 @@ public class CommonOpt { durationData.getHours(), durationData.getMinutes()); } + + public Map toDeviceIncrementMap( + List records, + int targetSeconds, + String field + ) { + Map result = new HashMap<>(); + Map diffMap = new HashMap<>(); + + for (RecordAccumulateDto r : records) { + String deviceIdLower = r.getDeviceId().toLowerCase(); + int secondsOfDay = r.getDateHour() * 3600 + r.getDateMinute() * 60 + r.getDateSecond(); + int diff = Math.abs(secondsOfDay - targetSeconds); + + if (diff > 600) { + continue; + } + + Integer bestDiff = diffMap.get(deviceIdLower); + if (bestDiff == null || diff < bestDiff) { + diffMap.put(deviceIdLower, diff); + + DeviceIncrement di = result.get(deviceIdLower); + if (di == null) { + di = new DeviceIncrement(); + di.setDeviceId(deviceIdLower); + } + + if ("yesterday".equals(field)) { + di.setYesterdayIncrement(r.getIncrementToday()); + } else { + di.setLastYearIncrement(r.getIncrementToday()); + } + + result.put(deviceIdLower, di); + } + } + + return result; + } + } diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java index 0070ae5..0a2e501 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java @@ -1,5 +1,6 @@ package com.dongjian.dashboard.back.service.impl; +import java.math.BigDecimal; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.time.LocalDate; @@ -28,6 +29,7 @@ import com.dongjian.dashboard.back.util.DateUtil; import com.dongjian.dashboard.back.vo.data.DeviceAccumulateData; import com.dongjian.dashboard.back.vo.device.DeviceIncrement; import com.dongjian.dashboard.back.vo.device.LineData; +import com.dongjian.dashboard.back.vo.record.RecordAccumulateDto; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; import org.apache.commons.collections.CollectionUtils; @@ -146,10 +148,17 @@ public class DeviceDataAccumulateServiceImpl implements DeviceDataAccumulateServ // 批量查询增量数据并构建 Map Map todayMap = dashboardRecordAccumulateMapperExt.selectTodayIncrement(todayDeviceIds, today.getYear(), today.getMonthValue(), today.getDayOfMonth()) .stream().collect(Collectors.toMap(di -> di.getDeviceId().toLowerCase(), Function.identity())); - Map yesterdayMap = dashboardRecordAccumulateMapperExt.selectYesterdayIncrement(deviceIds, yesterday.getYear(), yesterday.getMonthValue(), yesterday.getDayOfMonth(), targetSeconds) - .stream().collect(Collectors.toMap(di -> di.getDeviceId().toLowerCase(), Function.identity())); - Map lastYearMap = dashboardRecordAccumulateMapperExt.selectLastYearIncrement(deviceIds, lastYear.getYear(), lastYear.getMonthValue(), lastYear.getDayOfMonth(), targetSeconds) - .stream().collect(Collectors.toMap(di -> di.getDeviceId().toLowerCase(), Function.identity())); + +// Map yesterdayMap = dashboardRecordAccumulateMapperExt.selectYesterdayIncrement(deviceIds, yesterday.getYear(), yesterday.getMonthValue(), yesterday.getDayOfMonth(), targetSeconds) +// .stream().collect(Collectors.toMap(di -> di.getDeviceId().toLowerCase(), Function.identity())); + List yesterdayRecords = dashboardRecordAccumulateMapperExt.selectByDay(deviceIds, yesterday.getYear(), yesterday.getMonthValue(), yesterday.getDayOfMonth()); + Map yesterdayMap = commonOpt.toDeviceIncrementMap(yesterdayRecords, targetSeconds, "yesterday"); + +// Map lastYearMap = dashboardRecordAccumulateMapperExt.selectLastYearIncrement(deviceIds, lastYear.getYear(), lastYear.getMonthValue(), lastYear.getDayOfMonth(), targetSeconds) +// .stream().collect(Collectors.toMap(di -> di.getDeviceId().toLowerCase(), Function.identity())); + List lastYearRecords = dashboardRecordAccumulateMapperExt.selectByDay(deviceIds, lastYear.getYear(), lastYear.getMonthValue(), lastYear.getDayOfMonth()); + Map lastYearMap = commonOpt.toDeviceIncrementMap(lastYearRecords, targetSeconds, "lastYear"); + resultList.forEach(data -> { String deviceId = data.getDeviceId().toLowerCase();