优化逻辑
This commit is contained in:
parent
acee04de35
commit
778e365e18
@ -40,6 +40,5 @@ public class MessageConfig {
|
||||
messageService.save(message);
|
||||
long count =
|
||||
messageService.count(new LambdaQueryWrapper<Message>().eq(Message::getStatus, "1"));
|
||||
ServerSendEventServer.sendMessage(count + "");
|
||||
}
|
||||
}
|
||||
|
@ -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<String, Object> processDeviceData(List<DeviceWorkData> deviceWorkDataList, String signalId) {
|
||||
// // 生成过去60分钟的分钟时间槽
|
||||
// LocalDateTime now = LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES);
|
||||
// LocalDateTime startTime = now.minusMinutes(59);
|
||||
// List<LocalDateTime> minuteSlots = new ArrayList<>();
|
||||
// for (int i = 0; i < 60; i++) {
|
||||
// minuteSlots.add(startTime.plusMinutes(i));
|
||||
// }
|
||||
//
|
||||
// // 按分钟分组数据
|
||||
// Map<LocalDateTime, String> minuteDataMap = new HashMap<>();
|
||||
// for (DeviceWorkData data : deviceWorkDataList) {
|
||||
// LocalDateTime minuteKey = data.getStartTime().truncatedTo(ChronoUnit.MINUTES);
|
||||
// minuteDataMap.put(minuteKey, data.getValue());
|
||||
// }
|
||||
//
|
||||
// // 构建xAxis和series数据
|
||||
// List<String> xAxisData = new ArrayList<>();
|
||||
// List<Double> 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<String, Object> result = new HashMap<>();
|
||||
//
|
||||
// Map<String, Object> xAxis = new HashMap<>();
|
||||
// xAxis.put("type", "category");
|
||||
// xAxis.put("data", xAxisData);
|
||||
// result.put("xAxis", xAxis);
|
||||
//
|
||||
// Map<String, Object> yAxis = new HashMap<>();
|
||||
// yAxis.put("type", "value");
|
||||
// result.put("yAxis", yAxis);
|
||||
// DeviceSignal deviceSignal = deviceSignalService.getById(signalId);
|
||||
// String name = deviceSignal == null ? "" : deviceSignal.getSignalName();
|
||||
// List<Map<String, Object>> seriesList = new ArrayList<>();
|
||||
// Map<String, Object> 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<String, Object> processDeviceData(List<DeviceWorkData> deviceWorkDataList, String signalId,
|
||||
String type) {
|
||||
// 根据类型生成时间槽和配置参数
|
||||
TimeConfig config = generateTimeConfig(type);
|
||||
|
||||
public Map<String, Object> processDeviceData(List<DeviceWorkData> deviceWorkDataList, String signalId) {
|
||||
// 生成过去60分钟的分钟时间槽
|
||||
LocalDateTime now = LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES);
|
||||
LocalDateTime startTime = now.minusMinutes(59);
|
||||
List<LocalDateTime> minuteSlots = new ArrayList<>();
|
||||
for (int i = 0; i < 60; i++) {
|
||||
minuteSlots.add(startTime.plusMinutes(i));
|
||||
}
|
||||
|
||||
// 按分钟分组数据
|
||||
Map<LocalDateTime, String> minuteDataMap = new HashMap<>();
|
||||
for (DeviceWorkData data : deviceWorkDataList) {
|
||||
LocalDateTime minuteKey = data.getStartTime().truncatedTo(ChronoUnit.MINUTES);
|
||||
minuteDataMap.put(minuteKey, data.getValue());
|
||||
}
|
||||
// 按时间单位分组数据
|
||||
Map<LocalDateTime, String> timeDataMap = groupDataByTimeUnit(deviceWorkDataList, config.getTruncateUnit());
|
||||
|
||||
// 构建xAxis和series数据
|
||||
List<String> xAxisData = new ArrayList<>();
|
||||
List<Double> 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<LocalDateTime> 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<LocalDateTime, String> groupDataByTimeUnit(List<DeviceWorkData> dataList, ChronoUnit unit) {
|
||||
Map<LocalDateTime, String> map = new HashMap<>();
|
||||
for (DeviceWorkData data : dataList) {
|
||||
LocalDateTime key = data.getStartTime().truncatedTo(unit);
|
||||
map.put(key, data.getValue());
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建ECharts结果
|
||||
*/
|
||||
private Map<String, Object> buildEChartsResult(List<String> xAxisData, List<Double> seriesData, String signalId) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
|
||||
// xAxis配置
|
||||
Map<String, Object> xAxis = new HashMap<>();
|
||||
xAxis.put("type", "category");
|
||||
xAxis.put("data", xAxisData);
|
||||
result.put("xAxis", xAxis);
|
||||
|
||||
// yAxis配置
|
||||
Map<String, Object> 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<Map<String, Object>> seriesList = new ArrayList<>();
|
||||
Map<String, Object> 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<DeviceWorkData> deviceWorkDataList = deviceWorkDataService.getHistoricalCurve(signalId);
|
||||
Map<String, Object> map = processDeviceData(deviceWorkDataList, signalId);
|
||||
type = StrUtil.isBlank(type) ? "1" : type;
|
||||
Map<String, Object> map = processDeviceData(deviceWorkDataList, signalId, type);
|
||||
return ResponseResult.successData(map);
|
||||
}
|
||||
|
||||
|
@ -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<LocalDateTime> timeSlots;
|
||||
private DateTimeFormatter formatter;
|
||||
private ChronoUnit truncateUnit;
|
||||
|
||||
public TimeConfig(List<LocalDateTime> 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<LocalDateTime> timeSlots) {
|
||||
this.timeSlots = timeSlots;
|
||||
}
|
||||
|
||||
public DateTimeFormatter getFormatter() {
|
||||
return formatter;
|
||||
}
|
||||
|
||||
public List<LocalDateTime> getTimeSlots() {
|
||||
return timeSlots;
|
||||
}
|
||||
|
||||
public void setTruncateUnit(ChronoUnit truncateUnit) {
|
||||
this.truncateUnit = truncateUnit;
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -42,12 +42,42 @@
|
||||
ORDER BY
|
||||
start_time DESC
|
||||
</select>
|
||||
<!-- <select id="getDeviceWorkData" resultType="java.util.Map">-->
|
||||
<!-- SELECT-->
|
||||
<!-- ds.signal_id,-->
|
||||
<!-- ds.signal_code itemcode,-->
|
||||
<!-- ds.signal_name dictname,-->
|
||||
<!-- COALESCE ( ds.yc_value, '无' ) AS value,-->
|
||||
<!-- ds.signal_unit unit-->
|
||||
<!-- FROM-->
|
||||
<!-- fk_device_signal ds-->
|
||||
<!-- INNER JOIN iis_substation_component sc ON ds.main_component_id = sc.component_id-->
|
||||
<!-- INNER JOIN iis_substation ss ON ss.station_code = sc.station_code-->
|
||||
<!-- WHERE-->
|
||||
<!-- sc.component_name = '微气象设备部件'-->
|
||||
<!-- <if test="stationId != null and stationId != ''">-->
|
||||
<!-- AND ss.station_id=#{stationId}-->
|
||||
<!-- </if>-->
|
||||
<!-- ORDER BY orderno-->
|
||||
<!-- </select>-->
|
||||
|
||||
<select id="getDeviceWorkData" resultType="java.util.Map">
|
||||
SELECT
|
||||
di.itemcode,
|
||||
di.dictname,
|
||||
a.signal_id,
|
||||
COALESCE ( a.yc_value, '无' )
|
||||
VALUE
|
||||
,
|
||||
a.unit
|
||||
FROM
|
||||
sys_dictionary_items di
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
ds.signal_id,
|
||||
ds.signal_code itemcode,
|
||||
ds.signal_name dictname,
|
||||
COALESCE ( ds.yc_value, '无' ) AS value,
|
||||
ds.yc_value,
|
||||
ds.signal_unit unit
|
||||
FROM
|
||||
fk_device_signal ds
|
||||
@ -58,7 +88,11 @@
|
||||
<if test="stationId != null and stationId != ''">
|
||||
AND ss.station_id=#{stationId}
|
||||
</if>
|
||||
ORDER BY orderno
|
||||
) a ON di.itemcode = a.itemcode
|
||||
WHERE
|
||||
di.parentcode = 'environment'
|
||||
ORDER BY
|
||||
di.custom3
|
||||
</select>
|
||||
<select id="getHistoricalCurveList" resultType="com.yfd.platform.modules.auxcontrol.domain.DeviceWorkData">
|
||||
SELECT
|
||||
|
Loading…
Reference in New Issue
Block a user