优化逻辑
This commit is contained in:
parent
72267a9c9b
commit
2ba0005426
@ -15,11 +15,9 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.Comparator;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.LongStream;
|
import java.util.stream.LongStream;
|
||||||
|
|
||||||
@ -40,55 +38,74 @@ public class DeviceWorkDataController {
|
|||||||
private IDeviceWorkDataService deviceWorkDataService;
|
private IDeviceWorkDataService deviceWorkDataService;
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@ApiOperation("分页查询变电站辅控设备告警记录")
|
@ApiOperation("分页查询变电站设备运行记录")
|
||||||
public ResponseResult getDeviceWorkDataPage(Page<DeviceWorkData> page, String stationId, String startDate,
|
public ResponseResult getDeviceWorkDataPage(Page<DeviceWorkData> page, String signalId, String startDate,
|
||||||
String endDate) {
|
String endDate) {
|
||||||
Page<DeviceWorkData> deviceWorkDataPage = deviceWorkDataService.getDeviceWorkDataPage(page, stationId,
|
Page<DeviceWorkData> deviceWorkDataPage = deviceWorkDataService.getDeviceWorkDataPage(page, signalId,
|
||||||
startDate, endDate);
|
startDate, endDate);
|
||||||
return ResponseResult.successData(deviceWorkDataPage);
|
return ResponseResult.successData(deviceWorkDataPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DeviceWorkData> processMinuteDataOptimized(List<DeviceWorkData> deviceWorkDataList) {
|
public Map<String, Object> processDeviceData(List<DeviceWorkData> deviceWorkDataList) {
|
||||||
return null;
|
// 生成过去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, BigDecimal> 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));
|
||||||
|
BigDecimal value = minuteDataMap.getOrDefault(slot, BigDecimal.ZERO);
|
||||||
|
seriesData.add(value.doubleValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建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);
|
||||||
|
|
||||||
|
List<Map<String, Object>> seriesList = new ArrayList<>();
|
||||||
|
Map<String, Object> series = new HashMap<>();
|
||||||
|
series.put("name", "Step Start");
|
||||||
|
series.put("type", "line");
|
||||||
|
series.put("step", "start");
|
||||||
|
series.put("data", seriesData);
|
||||||
|
seriesList.add(series);
|
||||||
|
|
||||||
|
// 如果需要多个系列,可以继续添加
|
||||||
|
// 例如复制series并修改name和step
|
||||||
|
|
||||||
|
result.put("series", seriesList);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/getHistoricalCurve")
|
@GetMapping("/getHistoricalCurve")
|
||||||
@ApiOperation("查询历史曲线")
|
@ApiOperation("查询历史曲线")
|
||||||
public ResponseResult getHistoricalCurve(String stationId, String type) {
|
public ResponseResult getHistoricalCurve(String signalId, String type) {
|
||||||
List<DeviceWorkData> deviceWorkDataList = deviceWorkDataService.getHistoricalCurve(stationId);
|
List<DeviceWorkData> deviceWorkDataList = deviceWorkDataService.getHistoricalCurve(signalId);
|
||||||
|
Map<String, Object> map = processDeviceData(deviceWorkDataList);
|
||||||
Map<String, Object> historicalCurve = new HashMap<>();
|
return ResponseResult.successData(map);
|
||||||
historicalCurve.put("xAxis", JSONUtil.parseObj("{\n" +
|
|
||||||
" type: 'category',\n" +
|
|
||||||
" data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\n" +
|
|
||||||
" }"));
|
|
||||||
|
|
||||||
historicalCurve.put("yAxis", JSONUtil.parseObj("{\n" +
|
|
||||||
" type: 'value'\n" +
|
|
||||||
" }"));
|
|
||||||
|
|
||||||
historicalCurve.put("series", JSONUtil.parseArray("[\n" +
|
|
||||||
" {\n" +
|
|
||||||
" name: 'Step Start',\n" +
|
|
||||||
" type: 'line',\n" +
|
|
||||||
" step: 'start',\n" +
|
|
||||||
" data: [120, 132, 101, 134, 90, 230, 210]\n" +
|
|
||||||
" },\n" +
|
|
||||||
" {\n" +
|
|
||||||
" name: 'Step Middle',\n" +
|
|
||||||
" type: 'line',\n" +
|
|
||||||
" step: 'middle',\n" +
|
|
||||||
" data: [220, 282, 201, 234, 290, 430, 410]\n" +
|
|
||||||
" },\n" +
|
|
||||||
" {\n" +
|
|
||||||
" name: 'Step End',\n" +
|
|
||||||
" type: 'line',\n" +
|
|
||||||
" step: 'end',\n" +
|
|
||||||
" data: [450, 432, 401, 454, 590, 530, 510]\n" +
|
|
||||||
" }\n" +
|
|
||||||
" ]"));
|
|
||||||
|
|
||||||
return ResponseResult.successData(historicalCurve);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@ -40,6 +42,7 @@ public class DeviceAlarmRecord implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 告警时间
|
* 告警时间
|
||||||
*/
|
*/
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
private LocalDateTime alarmTime;
|
private LocalDateTime alarmTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -135,6 +138,7 @@ public class DeviceAlarmRecord implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 故障消除时间
|
* 故障消除时间
|
||||||
*/
|
*/
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
private LocalDateTime fixTime;
|
private LocalDateTime fixTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -155,6 +159,7 @@ public class DeviceAlarmRecord implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 操作时间
|
* 操作时间
|
||||||
*/
|
*/
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
private LocalDateTime operationTime;
|
private LocalDateTime operationTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4,6 +4,8 @@ import java.math.BigDecimal;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
@ -60,6 +62,7 @@ public class DeviceWorkData implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 采集时间
|
* 采集时间
|
||||||
*/
|
*/
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
private LocalDateTime startTime;
|
private LocalDateTime startTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -16,9 +16,9 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public interface DeviceWorkDataMapper extends BaseMapper<DeviceWorkData> {
|
public interface DeviceWorkDataMapper extends BaseMapper<DeviceWorkData> {
|
||||||
|
|
||||||
Page<DeviceWorkData> getDeviceWorkDataPage(Page<DeviceWorkData> page,String stationId, String startDate, String endDate);
|
Page<DeviceWorkData> getDeviceWorkDataPage(Page<DeviceWorkData> page,String signalId, String startDate, String endDate);
|
||||||
|
|
||||||
List<DeviceWorkData> getHistoricalCurve(String stationId);
|
List<DeviceWorkData> getHistoricalCurve(String signalId);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -28,8 +28,8 @@ public interface IDeviceWorkDataService extends IService<DeviceWorkData> {
|
|||||||
***********************************/
|
***********************************/
|
||||||
void insertData(String from, String slave_ip, String address, String value, String dateTimeString);
|
void insertData(String from, String slave_ip, String address, String value, String dateTimeString);
|
||||||
|
|
||||||
Page<DeviceWorkData> getDeviceWorkDataPage(Page<DeviceWorkData> page,String stationId, String startDate, String endDate);
|
Page<DeviceWorkData> getDeviceWorkDataPage(Page<DeviceWorkData> page,String signalId, String startDate, String endDate);
|
||||||
|
|
||||||
List<DeviceWorkData> getHistoricalCurve(String stationId);
|
List<DeviceWorkData> getHistoricalCurve(String signalId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -72,13 +72,13 @@ public class DeviceWorkDataServiceImpl extends ServiceImpl<DeviceWorkDataMapper,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<DeviceWorkData> getDeviceWorkDataPage(Page<DeviceWorkData> page,String stationId, String startDate, String endDate) {
|
public Page<DeviceWorkData> getDeviceWorkDataPage(Page<DeviceWorkData> page,String signalId, String startDate, String endDate) {
|
||||||
return deviceWorkDataMapper.getDeviceWorkDataPage(page,stationId,startDate,endDate);
|
return deviceWorkDataMapper.getDeviceWorkDataPage(page,signalId,startDate,endDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DeviceWorkData> getHistoricalCurve(String stationId) {
|
public List<DeviceWorkData> getHistoricalCurve(String signalId) {
|
||||||
return deviceWorkDataMapper.getHistoricalCurve(stationId);
|
return deviceWorkDataMapper.getHistoricalCurve(signalId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -106,6 +106,7 @@
|
|||||||
fgd.ip_addr,
|
fgd.ip_addr,
|
||||||
fgd.Protocol,
|
fgd.Protocol,
|
||||||
fgd.frequency,
|
fgd.frequency,
|
||||||
|
fgd.device_name,
|
||||||
fgd.device_type
|
fgd.device_type
|
||||||
FROM
|
FROM
|
||||||
fk_device_signal fds
|
fk_device_signal fds
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
FROM
|
FROM
|
||||||
fk_device_work_data
|
fk_device_work_data
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
AND station_id=#{stationId}
|
AND signal_id=#{signalId}
|
||||||
<if test="startDate != null and startDate != ''">
|
<if test="startDate != null and startDate != ''">
|
||||||
AND start_time >= #{startDate}
|
AND start_time >= #{startDate}
|
||||||
</if>
|
</if>
|
||||||
@ -33,7 +33,7 @@
|
|||||||
FROM
|
FROM
|
||||||
fk_device_work_data
|
fk_device_work_data
|
||||||
WHERE
|
WHERE
|
||||||
station_id=#{stationId}
|
signal_id=#{signalId}
|
||||||
AND start_time >= NOW() - INTERVAL 1 HOUR
|
AND start_time >= NOW() - INTERVAL 1 HOUR
|
||||||
ORDER BY
|
ORDER BY
|
||||||
start_time DESC
|
start_time DESC
|
||||||
|
Loading…
Reference in New Issue
Block a user