diff --git a/riis-system/src/main/java/com/yfd/platform/config/MessageConfig.java b/riis-system/src/main/java/com/yfd/platform/config/MessageConfig.java index 46b5fc2..16de0fe 100644 --- a/riis-system/src/main/java/com/yfd/platform/config/MessageConfig.java +++ b/riis-system/src/main/java/com/yfd/platform/config/MessageConfig.java @@ -40,6 +40,5 @@ public class MessageConfig { messageService.save(message); long count = messageService.count(new LambdaQueryWrapper().eq(Message::getStatus, "1")); - ServerSendEventServer.sendMessage(count + ""); } } diff --git a/riis-system/src/main/java/com/yfd/platform/modules/auxcontrol/controller/DeviceWorkDataController.java b/riis-system/src/main/java/com/yfd/platform/modules/auxcontrol/controller/DeviceWorkDataController.java index 314457d..36f2ace 100644 --- a/riis-system/src/main/java/com/yfd/platform/modules/auxcontrol/controller/DeviceWorkDataController.java +++ b/riis-system/src/main/java/com/yfd/platform/modules/auxcontrol/controller/DeviceWorkDataController.java @@ -1,10 +1,12 @@ package com.yfd.platform.modules.auxcontrol.controller; import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.config.ResponseResult; import com.yfd.platform.modules.auxcontrol.domain.DeviceSignal; import com.yfd.platform.modules.auxcontrol.domain.DeviceWorkData; +import com.yfd.platform.modules.auxcontrol.domain.TimeConfig; import com.yfd.platform.modules.auxcontrol.service.IDeviceSignalService; import com.yfd.platform.modules.auxcontrol.service.IDeviceWorkDataService; import io.swagger.annotations.Api; @@ -50,7 +52,6 @@ public class DeviceWorkDataController { return ResponseResult.successData(deviceWorkDataPage); } - @GetMapping("/getDeviceWorkData") @ApiOperation("查询变电站设备运行数据") public ResponseResult getDeviceWorkData(String stationId) { @@ -58,61 +59,157 @@ public class DeviceWorkDataController { return ResponseResult.successData(map); } + // public Map processDeviceData(List deviceWorkDataList, String signalId) { + // // 生成过去60分钟的分钟时间槽 + // LocalDateTime now = LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES); + // LocalDateTime startTime = now.minusMinutes(59); + // List minuteSlots = new ArrayList<>(); + // for (int i = 0; i < 60; i++) { + // minuteSlots.add(startTime.plusMinutes(i)); + // } + // + // // 按分钟分组数据 + // Map minuteDataMap = new HashMap<>(); + // for (DeviceWorkData data : deviceWorkDataList) { + // LocalDateTime minuteKey = data.getStartTime().truncatedTo(ChronoUnit.MINUTES); + // minuteDataMap.put(minuteKey, data.getValue()); + // } + // + // // 构建xAxis和series数据 + // List xAxisData = new ArrayList<>(); + // List seriesData = new ArrayList<>(); + // DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH时mm分"); + // for (LocalDateTime slot : minuteSlots) { + // xAxisData.add(slot.format(formatter)); + // String value = minuteDataMap.getOrDefault(slot, "0"); + // if (!NumberUtil.isNumber(value)) { + // value="0"; + // } + // seriesData.add(NumberUtil.parseDouble(value)); + // } + // + // // 构建ECharts数据结构 + // Map result = new HashMap<>(); + // + // Map xAxis = new HashMap<>(); + // xAxis.put("type", "category"); + // xAxis.put("data", xAxisData); + // result.put("xAxis", xAxis); + // + // Map yAxis = new HashMap<>(); + // yAxis.put("type", "value"); + // result.put("yAxis", yAxis); + // DeviceSignal deviceSignal = deviceSignalService.getById(signalId); + // String name = deviceSignal == null ? "" : deviceSignal.getSignalName(); + // List> seriesList = new ArrayList<>(); + // Map series = new HashMap<>(); + // series.put("name", name); + // series.put("type", "line"); + // series.put("step", "start"); + // series.put("data", seriesData); + // seriesList.add(series); + // + // // 如果需要多个系列,可以继续添加 + // // 例如复制series并修改name和step + // + // result.put("series", seriesList); + // + // return result; + // } + public Map processDeviceData(List deviceWorkDataList, String signalId, + String type) { + // 根据类型生成时间槽和配置参数 + TimeConfig config = generateTimeConfig(type); - public Map processDeviceData(List deviceWorkDataList, String signalId) { - // 生成过去60分钟的分钟时间槽 - LocalDateTime now = LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES); - LocalDateTime startTime = now.minusMinutes(59); - List minuteSlots = new ArrayList<>(); - for (int i = 0; i < 60; i++) { - minuteSlots.add(startTime.plusMinutes(i)); - } - - // 按分钟分组数据 - Map minuteDataMap = new HashMap<>(); - for (DeviceWorkData data : deviceWorkDataList) { - LocalDateTime minuteKey = data.getStartTime().truncatedTo(ChronoUnit.MINUTES); - minuteDataMap.put(minuteKey, data.getValue()); - } + // 按时间单位分组数据 + Map timeDataMap = groupDataByTimeUnit(deviceWorkDataList, config.getTruncateUnit()); // 构建xAxis和series数据 List xAxisData = new ArrayList<>(); List seriesData = new ArrayList<>(); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH时mm分"); - for (LocalDateTime slot : minuteSlots) { - xAxisData.add(slot.format(formatter)); - String value = minuteDataMap.getOrDefault(slot, "0"); - if (!NumberUtil.isNumber(value)) { - value="0"; - } - seriesData.add(NumberUtil.parseDouble(value)); + for (LocalDateTime slot : config.getTimeSlots()) { + xAxisData.add(slot.format(config.getFormatter())); + String value = timeDataMap.getOrDefault(slot, "0"); + seriesData.add(NumberUtil.parseDouble(NumberUtil.isNumber(value) ? value : "0")); } // 构建ECharts数据结构 + return buildEChartsResult(xAxisData, seriesData, signalId); + } + + /** + * 生成时间配置 + */ + private TimeConfig generateTimeConfig(String type) { + List timeSlots = new ArrayList<>(); + DateTimeFormatter formatter; + ChronoUnit truncateUnit; + + if ("2".equals(type)) { + // 类型2:过去24小时(每小时一个点) + LocalDateTime now = LocalDateTime.now().truncatedTo(ChronoUnit.HOURS); + LocalDateTime startTime = now.minusHours(23); + for (int i = 0; i < 24; i++) { + timeSlots.add(startTime.plusHours(i)); + } + formatter = DateTimeFormatter.ofPattern("HH时"); + truncateUnit = ChronoUnit.HOURS; + } else { + // 默认类型1:过去60分钟(每分钟一个点) + LocalDateTime now = LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES); + LocalDateTime startTime = now.minusMinutes(59); + for (int i = 0; i < 60; i++) { + timeSlots.add(startTime.plusMinutes(i)); + } + formatter = DateTimeFormatter.ofPattern("HH时mm分"); + truncateUnit = ChronoUnit.MINUTES; + } + + return new TimeConfig(timeSlots, formatter, truncateUnit); + } + + /** + * 按时间单位分组数据 + */ + private Map groupDataByTimeUnit(List dataList, ChronoUnit unit) { + Map map = new HashMap<>(); + for (DeviceWorkData data : dataList) { + LocalDateTime key = data.getStartTime().truncatedTo(unit); + map.put(key, data.getValue()); + } + return map; + } + + /** + * 构建ECharts结果 + */ + private Map buildEChartsResult(List xAxisData, List seriesData, String signalId) { Map result = new HashMap<>(); + // xAxis配置 Map xAxis = new HashMap<>(); xAxis.put("type", "category"); xAxis.put("data", xAxisData); result.put("xAxis", xAxis); + // yAxis配置 Map yAxis = new HashMap<>(); yAxis.put("type", "value"); result.put("yAxis", yAxis); + + // 系列数据配置 DeviceSignal deviceSignal = deviceSignalService.getById(signalId); - String name = deviceSignal == null ? "" : deviceSignal.getSignalName(); + String seriesName = deviceSignal != null ? deviceSignal.getSignalName() : ""; + List> seriesList = new ArrayList<>(); Map series = new HashMap<>(); - series.put("name", name); + series.put("name", seriesName); series.put("type", "line"); series.put("step", "start"); series.put("data", seriesData); seriesList.add(series); - // 如果需要多个系列,可以继续添加 - // 例如复制series并修改name和step - result.put("series", seriesList); return result; @@ -122,7 +219,8 @@ public class DeviceWorkDataController { @ApiOperation("查询历史曲线") public ResponseResult getHistoricalCurve(String signalId, String type) { List deviceWorkDataList = deviceWorkDataService.getHistoricalCurve(signalId); - Map map = processDeviceData(deviceWorkDataList, signalId); + type = StrUtil.isBlank(type) ? "1" : type; + Map map = processDeviceData(deviceWorkDataList, signalId, type); return ResponseResult.successData(map); } diff --git a/riis-system/src/main/java/com/yfd/platform/modules/auxcontrol/domain/TimeConfig.java b/riis-system/src/main/java/com/yfd/platform/modules/auxcontrol/domain/TimeConfig.java new file mode 100644 index 0000000..1531034 --- /dev/null +++ b/riis-system/src/main/java/com/yfd/platform/modules/auxcontrol/domain/TimeConfig.java @@ -0,0 +1,46 @@ +package com.yfd.platform.modules.auxcontrol.domain; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.List; + +/** + * 时间配置类(内部类) + */ +public class TimeConfig { + + private List timeSlots; + private DateTimeFormatter formatter; + private ChronoUnit truncateUnit; + + public TimeConfig(List timeSlots, DateTimeFormatter formatter, ChronoUnit truncateUnit) { + this.timeSlots = timeSlots; + this.formatter = formatter; + this.truncateUnit = truncateUnit; + } + + public void setFormatter(DateTimeFormatter formatter) { + this.formatter = formatter; + } + + public ChronoUnit getTruncateUnit() { + return truncateUnit; + } + + public void setTimeSlots(List timeSlots) { + this.timeSlots = timeSlots; + } + + public DateTimeFormatter getFormatter() { + return formatter; + } + + public List getTimeSlots() { + return timeSlots; + } + + public void setTruncateUnit(ChronoUnit truncateUnit) { + this.truncateUnit = truncateUnit; + } +} diff --git a/riis-system/src/main/java/com/yfd/platform/utils/StringUtils.java b/riis-system/src/main/java/com/yfd/platform/utils/StringUtils.java index 09b4ba8..57e11ff 100644 --- a/riis-system/src/main/java/com/yfd/platform/utils/StringUtils.java +++ b/riis-system/src/main/java/com/yfd/platform/utils/StringUtils.java @@ -16,11 +16,12 @@ package com.yfd.platform.utils; import cn.hutool.http.HttpUtil; +import cn.hutool.http.useragent.Browser; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.yfd.platform.constant.Constant; -import eu.bitwalker.useragentutils.Browser; -import eu.bitwalker.useragentutils.UserAgent; import lombok.SneakyThrows; import org.lionsoul.ip2region.DataBlock; import org.lionsoul.ip2region.DbConfig; @@ -262,7 +263,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { } public static String getBrowser(HttpServletRequest request) { - UserAgent userAgent = UserAgent.parseUserAgentString(request.getHeader("User-Agent")); + UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent")); Browser browser = userAgent.getBrowser(); return browser.getName(); } diff --git a/riis-system/src/main/java/com/yfd/platform/utils/TestFileDir.java b/riis-system/src/main/java/com/yfd/platform/utils/TestFileDir.java index efe4525..ab62eea 100644 --- a/riis-system/src/main/java/com/yfd/platform/utils/TestFileDir.java +++ b/riis-system/src/main/java/com/yfd/platform/utils/TestFileDir.java @@ -1,12 +1,11 @@ package com.yfd.platform.utils; -import cn.hutool.core.util.NumberUtil; - public class TestFileDir { public static void main(String[] args) throws Exception { - if (NumberUtil.isNumber("23")) { - System.out.println("是数字"); - } + double resultvalue = 50; + double baseValue = 100; + double abs = Math.abs((resultvalue - baseValue) / baseValue * 100); + System.out.println(abs); } } diff --git a/riis-system/src/main/resources/mapper/auxcontrol/DeviceWorkDataMapper.xml b/riis-system/src/main/resources/mapper/auxcontrol/DeviceWorkDataMapper.xml index 49059ab..23928f2 100644 --- a/riis-system/src/main/resources/mapper/auxcontrol/DeviceWorkDataMapper.xml +++ b/riis-system/src/main/resources/mapper/auxcontrol/DeviceWorkDataMapper.xml @@ -42,23 +42,57 @@ ORDER BY start_time DESC + + + + + + + + + + + + + + + + + + +