模拟发送任务修改 #124

Merged
p95fco63j merged 1 commits from junmao_branch into develop 2 weeks ago

@ -17,7 +17,7 @@ import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannel
import org.springframework.integration.mqtt.support.MqttHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Service;
import com.campus.water.service.AlertTriggerService;
import jakarta.annotation.PostConstruct;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@ -1,50 +1,54 @@
package com.campus.water.task;
import com.campus.water.entity.Device;
import com.campus.water.mapper.DeviceRepository;
import com.campus.water.service.MqttSensorSender;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Component
@RequiredArgsConstructor
@Slf4j
public class SensorSimulationTask {
private final MqttSensorSender mqttSensorSender;
// 模拟已部署的设备列表(实际项目可从数据库查询)
private final List<String> waterMakerDevices = new ArrayList<>() {{
add("WM001"); // 制水机1
add("WM002"); // 制水机2
add("WM003"); // 制水机3
add("WM004"); // 制水机4
}};
private final List<String> waterSupplyDevices = new ArrayList<>() {{
add("WS001"); // 供水机1
add("WS002"); // 供水机2
add("WS003"); // 供水机3
}};
private final DeviceRepository deviceRepository;
/**
* 30
* fixedRate
*/
@Scheduled(fixedRate = 30000)
public void sendRegularStateData() {
log.info("=== 开始发送设备正常状态数据 ===");
// 1. 发送所有制水机状态
for (String deviceId : waterMakerDevices) {
mqttSensorSender.sendWaterMakerState(deviceId);
// 1. 从数据库查询「制水机」water_maker类型设备传入枚举类型
List<String> waterMakerDevices = deviceRepository.findByDeviceType(Device.DeviceType.water_maker)
.stream()
.map(Device::getDeviceId)
.collect(Collectors.toList());
// 2. 从数据库查询「供水机」water_supply类型设备传入枚举类型
List<String> waterSupplyDevices = deviceRepository.findByDeviceType(Device.DeviceType.water_supply)
.stream()
.map(Device::getDeviceId)
.collect(Collectors.toList());
// 发送制水机状态
if (!waterMakerDevices.isEmpty()) {
waterMakerDevices.forEach(deviceId -> mqttSensorSender.sendWaterMakerState(deviceId));
} else {
log.warn("⚠️ device表中无「water_maker」类型设备");
}
// 2. 发送所有供水机状态
for (String deviceId : waterSupplyDevices) {
mqttSensorSender.sendWaterSupplyData(deviceId);
// 发送供水机状态
if (!waterSupplyDevices.isEmpty()) {
waterSupplyDevices.forEach(deviceId -> mqttSensorSender.sendWaterSupplyData(deviceId));
} else {
log.warn("⚠️ device表中无「water_supply」类型设备");
}
log.info("=== 设备正常状态数据发送完成 ===");
@ -52,13 +56,23 @@ public class SensorSimulationTask {
/**
* 5
* fixedRate
*/
@Scheduled(fixedRate = 300000)
public void sendRandomWarningData() {
log.info("=== 开始发送随机告警数据 ===");
// 随机选择1台制水机发送告警模拟设备故障
// 从数据库查询制水机列表(传入枚举类型)
List<String> waterMakerDevices = deviceRepository.findByDeviceType(Device.DeviceType.water_maker)
.stream()
.map(Device::getDeviceId)
.collect(Collectors.toList());
if (waterMakerDevices.isEmpty()) {
log.warn("⚠️ device表中无「water_maker」类型设备跳过告警发送");
return;
}
// 随机选择1台制水机发送告警
int randomIndex = (int) (Math.random() * waterMakerDevices.size());
String targetDevice = waterMakerDevices.get(randomIndex);
mqttSensorSender.sendWaterMakerWarning(targetDevice);

Loading…
Cancel
Save