Browse Source

调整累积设备前日值、前年值获取

master
review512jwy@163.com 1 month ago
parent
commit
c6e642b4fb
  1. 7
      dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/aurora/DashboardRecordAccumulateMapperExt.java
  2. 19
      dongjian-dashboard-back-dao/src/main/resources/mappers/aurora/DashboardRecordAccumulateMapperExt.xml
  3. 14
      dongjian-dashboard-back-model/src/main/java/com/dongjian/dashboard/back/vo/record/RecordAccumulateDto.java
  4. 43
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java
  5. 17
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java

7
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<RecordAccumulateDto> selectByDay(
@Param("deviceIds") List<String> deviceIds,
@Param("year") int year,
@Param("month") int month,
@Param("day") int day
);
}

19
dongjian-dashboard-back-dao/src/main/resources/mappers/aurora/DashboardRecordAccumulateMapperExt.xml

@ -77,4 +77,23 @@
</select>
<select id="selectByDay" resultType="com.dongjian.dashboard.back.vo.record.RecordAccumulateDto">
SELECT
device_id,
increment_today,
date_hour,
date_minute,
date_second
FROM
dashboard_record_accumulate
WHERE device_id IN
<foreach collection="deviceIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
AND date_year = #{year}
AND date_month = #{month}
AND date_day = #{day}
</select>
</mapper>

14
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;
}

43
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<String, DeviceIncrement> toDeviceIncrementMap(
List<RecordAccumulateDto> records,
int targetSeconds,
String field
) {
Map<String, DeviceIncrement> result = new HashMap<>();
Map<String, Integer> 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;
}
}

17
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<String, DeviceIncrement> todayMap = dashboardRecordAccumulateMapperExt.selectTodayIncrement(todayDeviceIds, today.getYear(), today.getMonthValue(), today.getDayOfMonth())
.stream().collect(Collectors.toMap(di -> di.getDeviceId().toLowerCase(), Function.identity()));
Map<String, DeviceIncrement> yesterdayMap = dashboardRecordAccumulateMapperExt.selectYesterdayIncrement(deviceIds, yesterday.getYear(), yesterday.getMonthValue(), yesterday.getDayOfMonth(), targetSeconds)
.stream().collect(Collectors.toMap(di -> di.getDeviceId().toLowerCase(), Function.identity()));
Map<String, DeviceIncrement> lastYearMap = dashboardRecordAccumulateMapperExt.selectLastYearIncrement(deviceIds, lastYear.getYear(), lastYear.getMonthValue(), lastYear.getDayOfMonth(), targetSeconds)
.stream().collect(Collectors.toMap(di -> di.getDeviceId().toLowerCase(), Function.identity()));
// Map<String, DeviceIncrement> yesterdayMap = dashboardRecordAccumulateMapperExt.selectYesterdayIncrement(deviceIds, yesterday.getYear(), yesterday.getMonthValue(), yesterday.getDayOfMonth(), targetSeconds)
// .stream().collect(Collectors.toMap(di -> di.getDeviceId().toLowerCase(), Function.identity()));
List<RecordAccumulateDto> yesterdayRecords = dashboardRecordAccumulateMapperExt.selectByDay(deviceIds, yesterday.getYear(), yesterday.getMonthValue(), yesterday.getDayOfMonth());
Map<String, DeviceIncrement> yesterdayMap = commonOpt.toDeviceIncrementMap(yesterdayRecords, targetSeconds, "yesterday");
// Map<String, DeviceIncrement> lastYearMap = dashboardRecordAccumulateMapperExt.selectLastYearIncrement(deviceIds, lastYear.getYear(), lastYear.getMonthValue(), lastYear.getDayOfMonth(), targetSeconds)
// .stream().collect(Collectors.toMap(di -> di.getDeviceId().toLowerCase(), Function.identity()));
List<RecordAccumulateDto> lastYearRecords = dashboardRecordAccumulateMapperExt.selectByDay(deviceIds, lastYear.getYear(), lastYear.getMonthValue(), lastYear.getDayOfMonth());
Map<String, DeviceIncrement> lastYearMap = commonOpt.toDeviceIncrementMap(lastYearRecords, targetSeconds, "lastYear");
resultList.forEach(data -> {
String deviceId = data.getDeviceId().toLowerCase();

Loading…
Cancel
Save