环境数据展示

This commit is contained in:
weitang 2025-05-09 17:27:09 +08:00
parent ed03583917
commit b961a45d4c
8 changed files with 83 additions and 53 deletions

View File

@ -46,6 +46,13 @@ public class DeviceWorkDataController {
return ResponseResult.successData(deviceWorkDataPage);
}
@GetMapping("/getDeviceWorkData")
@ApiOperation("查询变电站设备运行数据")
public ResponseResult getDeviceWorkData(String stationId) {
List<Map<String, Object>> map = deviceWorkDataService.getDeviceWorkData(stationId);
return ResponseResult.successData(map);
}
public Map<String, Object> processDeviceData(List<DeviceWorkData> deviceWorkDataList, String signalId) {
// 生成过去60分钟的分钟时间槽
LocalDateTime now = LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES);
@ -109,4 +116,11 @@ public class DeviceWorkDataController {
return ResponseResult.successData(map);
}
@GetMapping("/insertData")
@ApiOperation("生成遥测数据")
public ResponseResult insertData(String from, String type, String slaveIp, String address, String value) {
deviceWorkDataService.insertData(from, type, slaveIp, address, value);
return ResponseResult.success();
}
}

View File

@ -5,6 +5,7 @@ import com.yfd.platform.modules.auxcontrol.domain.DeviceWorkData;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
import java.util.Map;
/**
* <p>
@ -35,4 +36,5 @@ public interface DeviceWorkDataMapper extends BaseMapper<DeviceWorkData> {
***********************************/
List<DeviceWorkData> getHistoricalCurve(String signalId);
List<Map<String, Object>> getDeviceWorkData(String stationId);
}

View File

@ -5,6 +5,7 @@ import com.yfd.platform.modules.auxcontrol.domain.DeviceWorkData;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
* <p>
@ -45,4 +46,6 @@ public interface IDeviceWorkDataService extends IService<DeviceWorkData> {
***********************************/
List<DeviceWorkData> getHistoricalCurve(String signalId);
List<Map<String, Object>> getDeviceWorkData(String stationId);
}

View File

@ -94,4 +94,9 @@ public class DeviceWorkDataServiceImpl extends ServiceImpl<DeviceWorkDataMapper,
return deviceWorkDataMapper.getHistoricalCurve(signalId);
}
@Override
public List<Map<String, Object>> getDeviceWorkData(String stationId) {
return deviceWorkDataMapper.getDeviceWorkData(stationId);
}
}

View File

@ -3,6 +3,7 @@ package com.yfd.platform.modules.basedata.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.modules.auxcontrol.mapper.DeviceWorkDataMapper;
import com.yfd.platform.modules.basedata.domain.WeatherLog;
import com.yfd.platform.modules.basedata.mapper.WeatherLogMapper;
import com.yfd.platform.modules.basedata.service.IWeatherLogService;
@ -27,7 +28,7 @@ import java.util.stream.Collectors;
public class WeatherLogServiceImpl extends ServiceImpl<WeatherLogMapper, WeatherLog> implements IWeatherLogService {
@Resource
private ISysDictionaryItemsService sysDictionaryItemsService;
private DeviceWorkDataMapper deviceWorkDataMapper;
/**********************************
* 用途说明: 查询环境信息
@ -36,34 +37,11 @@ public class WeatherLogServiceImpl extends ServiceImpl<WeatherLogMapper, Weather
***********************************/
@Override
public Map<String, Object> getWeatherLogList(String stationId) {
LambdaQueryWrapper<WeatherLog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(WeatherLog::getStationId, stationId).eq(WeatherLog::getDatastatus, "1").orderByDesc(WeatherLog::getTime);
List<WeatherLog> list = this.list(queryWrapper);
Map<String, List<WeatherLog>> collect =
list.stream().filter(s -> StrUtil.isNotBlank(s.getType())).collect(Collectors.groupingBy(WeatherLog::getType));
List<Map<String, Object>> environmentType = sysDictionaryItemsService.getDeviceByType("EnvironmentType");
Map<String, Object> weatherDevice = new HashMap<>();
for (Map<String, Object> map : environmentType) {
String itemcode = map.get("itemcode").toString();
String value = "";
for (String type : collect.keySet()) {
List<WeatherLog> weatherLogs = collect.get(type);
if (type.equals(itemcode)) {
WeatherLog weatherLog = weatherLogs.get(0);
String value1 = weatherLog.getValue();
if (StrUtil.isNotBlank(value1)) {
value = value1;
List<Map<String, Object>> deviceWorkData = deviceWorkDataMapper.getDeviceWorkData(stationId);
Map<String, Object> map = new HashMap<>();
for (Map<String, Object> deviceWorkDatum : deviceWorkData) {
map.put(deviceWorkDatum.get("itemcode").toString(), deviceWorkDatum.get("value"));
}
break;
}
}
String custom2 = map.get("custom2").toString();
weatherDevice.put(custom2, value);
}
String environment = "气温" + weatherDevice.get("temperature") + "°C气压" + weatherDevice.get("pressure") + "Kpa" +
",风速" + weatherDevice.get("windSpeed") + "m/s";
weatherDevice.put("environment", environment);
return weatherDevice;
return map;
}
}

View File

@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.component.WebSocketServer;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.modules.auxcontrol.service.IDeviceWorkDataService;
import com.yfd.platform.modules.basedata.domain.DeviceChannel;
import com.yfd.platform.modules.basedata.domain.SubstationDevice;
import com.yfd.platform.modules.basedata.service.IDeviceChannelService;
@ -54,6 +55,9 @@ public class AlarmLogController {
@Resource
private ISubstationDeviceService substationDeviceService;
@Resource
private IDeviceWorkDataService deviceWorkDataService;
@GetMapping("/getAlarmLogList")
@ApiOperation("查询报警信息")
public ResponseResult getAlarmLogList(String stationId) {
@ -288,10 +292,13 @@ public class AlarmLogController {
@GetMapping("/createAlarmData")
@ApiOperation("生成报警")
public ResponseResult createAlarmData(String from,String type,String slaveIp,String address,String value) {
deviceWorkDataService.insertData(from, type, slaveIp, address, value);
alarmLogService.doAlaramRecord(from, type, slaveIp, address, value);
// alarmLogService.doAlaramRecord("IEC61850", "yx", "192.168.1.1", "10", "2");
return ResponseResult.success();
}
}

View File

@ -2204,19 +2204,12 @@ public class AlarmLogServiceImpl extends ServiceImpl<AlarmLogMapper, AlarmLog> i
if ("1".equals(value)) {
//填充告警记录信息接口
AlarmLog alarmLog = FillingDeviceAlarmRecord(type, null, map, value);
//首先判断 在不在时间范围之内 判断时间在不在时间范围之内接口
Map<String, Object> timeInterval = getTimeInterval(7);
//查询表中是否存在该报警记录
List<AlarmLog> alarmRecords = queryDeviceAlarmRecord(alarmLog, timeInterval);
//如果没有有报警记录 新增记录
if (alarmRecords.size() == 0) {
doAlarmAction(alarmLog);
} else if (alarmRecords.size() > 1) {
this.removeById(alarmRecords.get(0).getId());
WebSocketServer.sendInfo(alarmLog.getStationId(), JSONUtil.parseObj(alarmLog).toString());
}
}
}
} else if ("yc".equals(type)) {
if ("yc".equals(type)) {
//1.通过设备id 和信号id 查询告警参数设置表告警规则
LambdaQueryWrapper<DeviceAlarmParameter> querywrapperdap = new LambdaQueryWrapper<>();
if (StrUtil.isNotEmpty(map.get("meterDeviceId").toString())) {
@ -2232,28 +2225,20 @@ public class AlarmLogServiceImpl extends ServiceImpl<AlarmLogMapper, AlarmLog> i
if (deviceAlarmParameter.getAlarmCondition() != null) {
//根据告警规则 判断是否触发告警
boolean alarmTrigger = TriggerAlarm(deviceAlarmParameter, value);
//2.通过告警触发条件 value比较 满足条件 触发告警
if (alarmTrigger) {
AlarmLog alarmLog = FillingDeviceAlarmRecord(type, deviceAlarmParameter
, map, value);
//首先判断 在不在时间范围之内 判断时间在不在时间范围之内接口
Map<String, Object> timeInterval = getTimeInterval(7);
//如果在时间范围内
//查询表中是否存在该报警记录
List<AlarmLog> alarmRecords = queryDeviceAlarmRecord(alarmLog,
timeInterval);
//如果没有有报警记录 新增记录
if (alarmRecords.size() == 0) {
// 新增
alarmLogMapper.insert(alarmLog);
//TODO 邮件推送暂时删除了
WebSocketServer.sendInfo(alarmLog.getStationId(), JSONUtil.parseObj(alarmLog).toString());
}
}
}
}
}
}
log.info("-----------------------------告警创建完毕------------------------------------");
}

View File

@ -38,4 +38,40 @@
ORDER BY
start_time DESC
</select>
<select id="getDeviceWorkData" resultType="java.util.Map">
SELECT
di.*,-- 保留第一个子查询的所有字段
COALESCE ( sub.yc_value, '无' ) AS value
,-- 将 NULL 转为 "无"
di.unit,
sub.signalId AS sub_signalId,-- 可选:重命名避免字段冲突
sub.ip AS sub_ip
FROM
(
SELECT
*,
JSON_UNQUOTE(
JSON_EXTRACT( custom1, '$.signalId' )) AS signalId,
JSON_UNQUOTE(
JSON_EXTRACT( custom1, '$.unit' )) AS unit,
JSON_UNQUOTE(
JSON_EXTRACT( custom1, '$.ip' )) AS ip -- 确保提取的是 ip 字段
FROM
sys_dictionary_items
WHERE
dictid = 'ca593d0a2a60f7ef37c89e615b97024b'
) di
LEFT JOIN (-- 使用 LEFT JOIN 保留 di 的所有记录
SELECT
b.yc_value,
b.signal_id AS signalId,
c.ip_addr AS ip
FROM
fk_meter_device a
INNER JOIN fk_device_signal b ON a.device_id = b.meter_device_id
INNER JOIN fk_gateway_device c ON a.netdevice_ip = c.ip_addr
) sub ON di.signalId = sub.signalId
AND di.ip = sub.ip ORDER BY orderno;
</select>
</mapper>