第一次提交

This commit is contained in:
2025-12-15 23:16:59 +08:00
commit 3e0da32c18
93 changed files with 14105 additions and 0 deletions

9
src/work/README.md Normal file
View File

@@ -0,0 +1,9 @@
---
title: 工作
index: false
icon: mdi:briefcase
category:
- 工作
---
<Catalog />

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

124
src/work/log/2025-06.md Normal file
View File

@@ -0,0 +1,124 @@
---
icon: mdi:note-text
date: 2025-06-01
category:
- 日志
tag:
- 个人日志
title: 202506日志
---
202506日志
<!-- more -->
# 上周
PR7050:
1. 根据ue提供的模型文件重构了导入功能
2. 新增构建状态管理及关联相关功能
3. 图元服务适配了除了主设备-辅设备外的巡视设备相关图元信息查询接口
4. 新增了动态路由的功能(根据辅设备自动生成菜单)
巡视系统
1. 智能巡视系统新增四遥信号和点位关联的业务逻辑及巡视任务c++未开始)
2. 新增巡视点位在线状态统计和最新巡视任务信息获取100%
# 本周
## PR7050
1. 调整属性存储方式(100%)
2. 图元控制相关功能联调遥控和遥设80% 未测试)
3. 三维告警初始化及告警推送相关功能100%
4. 业务上的图片存储地址调整80% 测试流程存在问题 c++目前无法抓图 还需要调整excel导入导出图片位置
5. PR7050系统依赖变更需重新适配打包加密环境0% 未开始)
6. 三维页面联动相关功能开发。查询构件台账 查询构件告警 70% 待联调)
7. 完善三维启动程序(问题三维提供的linux版本启动需要在linx80需要ue去适配)
8. 问题分析主机如何重ftp取文件(分析主机默认获取数据是根据FTP)(已解决)
巡视系统
1. 智能巡视系统新增四遥信号和点位关联的业务逻辑及巡视任务(可以正常跑通 100%
## 主站
1. 功能测试(测试了自定义模板并修复了异常)
2. 处理了子系统上报数据异常问题
# PR7050
1. 完善了告警推送相关功能100%
2. 新增四遥信号值变化消息发布功能(100%)
3. 测试业务中调整为FTP文件处理的逻辑50%,优先级最低。暂停中)
4. 参考重庆三维实现了多用户多个模型的业务逻辑(100%)
5. 图元服务新增 100巡视设备类型(100%)
6. 模型需要根据meta过滤数据已完成
7. 调整新版菜单结构80%
8. 图元相关服务调整70%
### 问题:
1. 测试流程存在问题, c++目前无法抓图 还需要调整excel导入导出图片位置
2. 抓图、手动录像接口。如果原数据没有在/temp目录下需要删除
3. 本地录像失败
4. 手动下载录像失败
## 巡视
1. 现场主站新增是否上送告警文件字段 (已完成)
2. 处理现场点位在线状态统计信息(新增机器人 无人机 声纹装置是否在线状态检测)(已完成)
3. 现场问题一些配置问题处理(已完成)
4. excel点位导入导出新增四遥信号
5. 首页地图新增json格式已完成
6. 适配多ip统计信息未开始 优先级 1先查询双ip 作为新的类型双光谱云台(枪击,球机)。再查询其它类型(已完成)
7. 导入多个算法消失的问题(已完成)
8. YUFAN人脸门禁操作优化待定
9. 适配机器人直接上送分析结果的业务(已完成)
## 主站
1. 巡视主机上报至主站需要新增任务模型(已完成)
2. 适配上报分析主机数据业务处理 (已完成)
3. 需要排除变电站为主站那个变电站只显示子站ips默认变电站为-1待适配 优先级 2已完成
4. 变电站新增公司字段信息(已完成)
5. 主站首页变电站状态调整,右下角告警等级及确认信息统计(已完成)
6. 适配主站的联动业务逻辑(已完成)
7. 适配主站超期逻辑(已完成)
8. 适配主站缺陷类型描述(已完成)
9. 主站新增变电站图标字段(已完成)
## 区域主机
1. 下发任务时如果任务正在执行。计划不能删除

78
src/work/log/2025-07.md Normal file
View File

@@ -0,0 +1,78 @@
---
icon: mdi:note-text
date: 2025-07-01
category:
- 日志
tag:
- 个人日志
title: 202507日志
---
202507日志
<!-- more -->
## TODO
1. 判断ue文件是否存在调整目录
1. 改掉平台代码redis *的匹配
1. rtdbBasicService的keys方法删除
## 2025-06-30 至 2025-07-06
### **PRS-7950 巡视系统**
1. **巡视任务调度与执行逻辑优化**:重构了巡视任务的调度、执行和清理机制。通过优化调度策略、调整任务优先级和引入异步清理僵尸任务,提升了系统执行效率和稳定性。新增了唯一时间戳以确保计划的精确执行,并在执行数据中加入了时间记录,便于追踪与分析。
2. **数据处理与查询逻辑重构**:优化了多个核心模块的数据查询和处理逻辑。在巡视设备查询中,统一使用 `patrolDeviceId` 作为关键索引。重构了机器人视频位置(`videopos`)的解析逻辑,以兼容字符串格式并增强了代码的健壮性。同时,优化了设备点位导出和视频设备状态数据的处理,提高了数据处理的准确性和效率。
3. **功能新增与业务适配**:为适应机器人上送带有分析数据的业务场景,增加了新的设备查询方式和分析结果处理逻辑,并统一了结果发送格式。新增了巡视任务点位识别类型的枚举,为不同设备(主站、机器人)提供了差异化的分析类型支持。
4. **修复与健壮性提升**修复了多个关键问题包括巡视报告无图导出失败、FTPS 根目录字段名错误以及日志输出错误等。在代码层面,通过增加空值检查、优化异常捕获和引入重试机制,显著提升了系统的稳定性和容错能力。
5. **代码与配置同步**:为保持不同部署环境下的代码一致性,对部分主站特定的逻辑代码(如采集失败信息上报)进行了注释处理,并统一了非区域主机模式下的进度计算方式。
### **PRS-7050 场站智慧管控**
1. **信号处理与操作控制模块发布**:新增 `cygbusiness-control` 模块,全面实现信号操作控制功能。支持对模拟量和状态量信号进行加解锁、延长有效期、人工置数/取反、告警抑制与恢复等精细化操作。该功能集成了审计日志,确保所有操作可追溯。
2. **权限验证与安全强化**:为信号操作控制功能增加了严格的权限验证机制,实现了操作员与监护员的双重权限校验逻辑。同时,对用户权限菜单的获取逻辑进行了重构,简化了代码,提升了后端服务效率。权限跳过功能(`@EnableSkipAuth`)经历了临时开启用于测试和最终禁用的过程,以强化系统的安全配置。
3. **构建、依赖及部署优化**:对 Maven 项目结构进行了系列重构,调整了模块的 `artifactId` 并更新了相关依赖引用。通过移除冗余依赖和插件、排除特定依赖冲突(`tomcat-embed-websocket`),优化了项目整体结构。同时,将静态资源路径和日志文件路径修改为相对路径,显著提高了项目的可移植性和部署灵活性。
4. **后端服务与日志系统完善**:优化了 Actor 子节点的处理逻辑,通过增加过滤条件提高了数据处理的准确性。为多个模块(如 `platform`, `sunri-service-report-starter`)添加了详细的 `logback-config.xml` 配置文件,实现了日志的彩色输出、分级管理和按日期滚动,提升了系统的可维护性。
5. **数字孪生Twins功能优化**:对三维模型的导入功能进行了持续优化,提升了模型处理的效率和稳定性。
## 2025-07-07至2025-07-13
### **PRS-7950 巡视系统**
1. 新增多光谱局方测温功能,实现了从数据采集、告警生成到消息推送的全流程。
2. 开发了联动立即抓图功能,并优化了高优先级任务的调度与执行逻辑。
3. 增强了分析结果处理能力,能正确解析机器人返回的中文值和逗号分隔数字。
4. 重构了巡视任务代码的获取方式,并强化了文件复制操作的权限检查与日志记录,提升了系统稳定性。
### **PRS-7050 场站智慧管控**
1. 对报告和巡视等核心服务接口进行了重命名与重构,优化了厂站名称的获取逻辑,使代码结构更清晰。
2. 优化了三维UE应用的WebSocket连接管理取消客户端断开时自动关闭进程的逻辑增强了稳定性。
3. 修复了巡视设备名称显示异常的问题,并为部分模块补充了日志记录与统一的编译配置。
4. 在代码层面统一了注解使用规范,并为多个模块添加了更精细的日志配置。
## 2025-07-14至2025-07-20
### **PRS-7950 巡视系统 (2025-07-14至2025-07-20)**
1. 为巡视历史任务、首页通知、数据分析等模块新增了任务类型、点位状态、电站ID等关键字段丰富了数据维度。
2. 新增了联动信号去重功能通过同步控制和逻辑优化避免5秒内重复任务的产生。
3. 重构并优化了联动任务的执行逻辑与摄像头巡检数据的更新流程,提升了代码的可读性与执行效率。
4. 修复了巡检数据解析时因数组索引错误导致的异常,并解决了红外测温规则更新不生效的问题。
5. 优化了分析结果的描述逻辑,当存在多个检测结果时,能更准确地合并和展示描述信息。
### **PRS-7050 场站智慧管控 (2025-07-14至2025-07-20)**
1. 本周进行了大规模代码同步全面集成了主站业务逻辑、告警与工业集控同步、四遥信号支持、国际化等新功能并包含了对任务调度、数据处理、设备在线率计算、XML解析及大量B接口联调问题的深度优化与修复。

461
src/work/常用.md Normal file
View File

@@ -0,0 +1,461 @@
---
icon: mdi:star-circle
date: 2025-07-10
category:
- 常用
tag:
- 工作常用
title: 工作常用
---
工作常用
<!-- more -->
# 工作常用记录
## 文件传输命令 (SCP)
```bash
# 传输 Java 相关文件
scp -r -P 10022 sunri@10.6.221.209:/home/sunri/V1.00_2024/binary/java/jar/x64/dist /home/sunri/PRS7950/binary/java/jar/x64
scp -r -P 10022 sunri@10.6.220.209:/home/sunri/V1.00_2024/resource/conf/dbmanager /home/sunri/PRS7950/resource/conf/
scp -r -P 10022 sunri@10.6.220.223:/home/sunri/docker/mavenRepository/com/sunri /home/sunri/.m2/repository/com
scp -r -P 10022 sunri@10.6.221.38:/home/sunri/V1.00_2024/packagemake/PRS-7950-IPS-V2.00-Beta-NewStart6-241212.tar.gz /home/sunri/Desktop/
scp -r -P 10022 sunri@10.6.221.120:/home/sunri/PRS-7950/V1.00_2024/packagemake/PRS-7950-IPS-V2.00-Beta-NewStart6-241212.tar.gz /home/sunri/Desktop/
scp -r -P 10022 sunri@10.6.213.128:/home/sunri/Desktop/sh/cygstart.xml /home/sunri/PRS7950/resource/conf
scp -r -P 10022 sunri@10.6.220.107:/home/sunri/docker/mavenRepository/com/sunri /root/.m2/repository/com/
```
## SVN 合并命令
### 2024 合并到 V1.00_2024
```bash
svn merge -c 239816 http://10.6.220.216:8080/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V1.00_2024/src_java/platapp
svn merge -c 239600 http://10.6.220.216:8080/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V1.00_2024/resource/conf/dbmanager
svn merge -c 241108 https://10.1.0.101/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V1.00_2024/src_java/platapp
```
### V2.00 合并到 V1.00_2024
```bash
svn merge -c 240928 http://10.6.220.216:8080/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V2.00/src_java/platapp
svn merge -c 238665 https://10.1.0.101/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V2.00/src_java/platapp
svn merge -c 237503 http://10.6.220.216:8080/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V2.00/src_java/platform
```
## SVN 仓库地址
### PRS-7950 在线巡视
- V1.00_2024
- http://10.6.220.216:8080/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V1.00_2024/src_java
- https://10.1.0.101/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V1.00_2024/src_java
- https://10.1.0.101/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V1.00
- https://10.1.0.101/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V1.00_2024/src_java/platapp
- V2.00
- http://10.6.220.236:8080/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V2.00/src_java/tool
- https://10.1.0.101/svn/houtai/001_后台软件/PRS-7950在线巡视/01_开发库/V2.00/src_java/tool
### PRS-7050 场站智慧管控
- V1.00
- http://10.6.220.216:8080/svn/houtai/001_后台软件/PRS-7050场站智慧管控/01_开发库/V1.00
- http://10.6.220.216:8080/svn/houtai/001_后台软件/PRS-7050场站智慧管控/01_开发库/V1.00/binary/java
- http://10.6.220.216:8080/svn/houtai/001_后台软件/PRS-7050场站智慧管控/01_开发库/V1.00/src_java/platapp
- http://10.6.220.216:8080/svn/houtai/001_后台软件/PRS-7050场站智慧管控/01_开发库/V1.00/src_web/prw
- https://10.1.0.101/svn/houtai/001_后台软件/PRS-7050场站智慧管控/01_开发库/V1.00
- https://10.1.0.101/svn/houtai/001_后台软件/PRS-7050场站智慧管控/01_开发库/V1.00/src_java/platapp
- https://10.1.0.101/svn/houtai/001_后台软件/PRS-7050场站智慧管控/01_开发库/V1.00/src_web/prw
## Docker 命令
```bash
docker exec -it -e TERM=xterm jenkins-stand /bin/bash
```
## 常用命令与配置
```bash
# 禁用 IntelliJ IDEA 依赖跟踪
-Djps.track.ap.dependencies=false
# 启动 IntelliJ IDEA
nohup /home/sunri/.jdks/idea/bin/idea.sh &
nohup /home/sunri/.jdks/java/idea/bin/idea.sh &
nohup /home/sunri/.mydata/idea/bin/idea.sh & # 10.6.221.46
nohup /home/sunri/Desktop/idea/bin/idea.sh & # 10.6.213.128
# 运行算法仿真并输出日志
nohup ./AlgoSimulation > output.log 2>&1 &
# 查看特定进程(避免 grep 自身出现在结果中)
pgrep -fl tcptester
# 杀死 Java 进程
pkill -15 -f java
pgrep java | grep -v -E '1001|2002' | xargs kill -15 # 排除指定 PID
pkill -9 -f java
# 杀死所有 ExternalJavacProcess 进程
jps -l | grep ExternalJavacProcess | awk '{print $1}' | xargs kill -9
# C++ 编译
cd src_cxx
CLEAN
qmake-qt4 CONFIG+=release
make -j8
cd /home/sunri/CygLog/logspatrolcenter
# 运行 JAR 文件
./xjar java -jar -Dplainload.dir.path=../../lib/common cyggridb.jar
```
## 认证信息
### 登录凭据
- **10.6.220.50**
- 用户名: administrator@vsphere.local
- 密码: Prs7950.sunri
- **10.6.223.50**
- 用户名: liujing2@vsphere.local
- 密码: Aaaa@1234
- **其他凭据**
- 用户名: tgy
- 密码: Prs7950.sunri
- 用户名: prs7000.sunri
- 密码: Yzzx@220901
- 用户名: liujing2
- 密码: sunri@20230620*#& / sunri2015.. / sunri@2021*#&
### 配置文件
```ini
[auth]
password-stores =
store-plaintext-passwords = yes
```
### 环境变量
```bash
export CYGWEBMODE=DEV
export file:/home/sunri/PRS7950/binary/java/jar/x64/dist/
```
## 网络配置
- **NVR**: 10.6.220.5
- **主站**: 10.6.221.179
- **子站**: 10.6.221.211
- **Win10 SSH 异常修复**:
```bash
ssh -o MACs=hmac-sha1 -p 10022 sunri@10.6.221.106
```
## 日志与监控
```plaintext
161550,OnlineMonitor#/udprecv/10.6.220.46/test.jpg,1;
161739,OnlineMonitor#/udprecv/10.6.220.46/test.jpg,2;
161950,OnlineMonitor#/udprecv/10.6.220.46/test.jpg,2
```
## 问题记录
### 主机名与 IP 检查
检查 cygrunset 的主机名和 IP或修改 jkcfghostnode 的主机名和 IP 保持一致。
```latex
\documentclass{article}
\begin{document}
检查 cygrunset 的主机名和 IP或修改 jkcfghostnode 的主机名和 IP 保持一致。
\end{document}
```
## 杀死win10进程
```powershell
Stop-Process -Id 5668 -Force
```
### 权限图
![权限图](./assets/image-20240513143908211.png)
### 问题截图
![问题截图](./assets/image-20240716164500637.png)
## 脚本:杀死所有 Java 进程(排除 Main
```bash
#!/bin/bash
# 获取当前用户的所有 Java 进程的 PID同时排除名为 Main 的进程
pids=$(ps -u $USER -o pid,cmd | grep java | grep -v 'Main' | awk '{print $1}')
# 检查是否获取到 PID
if [ -z "$pids" ]; then
echo "没有找到需要杀掉的 Java 进程。"
exit 0
fi
# 杀掉所有非 Main 的 Java 进程
for pid in $pids; do
kill -9 $pid
echo "杀掉进程 $pid"
done
echo "所有非 Main 的 Java 进程已被杀掉。"
```
多光谱测试代码:
```java
//测试用
@Override
public void run(String... args) throws Exception {
//查询数据
List<PatrolCameraDevice> cameraDeviceList = cameraDeviceMapper.queryByCameraUsage(3);
List<Integer> belongDeviceIDList = cameraDeviceList.stream().map(PatrolCameraDevice::getBelongDeviceId).distinct().collect(Collectors.toList());
List<PatrolCameraDevice> collect = cameraDeviceList
.stream()
.filter(item -> DeviceProtocol.VideoProtocol.VIDEO_PROTOCOL_MOLE_WEI_WEI_SHI.equals(item.getDeviceProtocol())).collect(Collectors.toList());
List<AlarmDto> alarmDtoList = Collections.emptyList();
if (!collect.isEmpty()) {
alarmDtoList = collect.stream().map(item -> {
AlarmDto alarmDto = new AlarmDto();
alarmDto.setBelongDeviceID(item.getBelongDeviceId());
alarmDto.setDeviceID(item.getId());
alarmDto.setDeviceName(item.getDeviceName());
return alarmDto;
}).collect(Collectors.toList());
}
scheduler = Executors.newScheduledThreadPool(1);
deviceIDList = belongDeviceIDList;
alarmDto = alarmDtoList;
startScheduledTask();
}
private ScheduledExecutorService scheduler;
private List<Integer> deviceIDList;
private List<AlarmDto> alarmDto;
/**
* 启动定时任务
*/
public void startScheduledTask() {
System.out.println("定时任务已启动每5秒随机执行一个方法...");
scheduler.scheduleAtFixedRate(() -> {
try {
// 随机选择执行哪个方法 (0或1)
int randomChoice = (int) (Math.random() * 2);
if (randomChoice == 0) {
// 执行 generateRandomDeviceData
String deviceData = generateRandomDeviceData(deviceIDList);
System.out.println(" 结果: " + JSONUtil.toJsonStr(deviceData));
mqBusService.sendCygCommonMessage(
JSONUtil.toJsonStr(deviceData),
StateTopicEnum.RUN.getIndex(),
"/patrolsys/webfront/notify",
MqBusClientInitConfig.appName,
"multispectral");
} else {
// 执行 generateRandomAlarm
AlarmDto alarm = AlarmGenerator.generateRandomAlarm(alarmDto);
System.out.println(" 结果: " + JSONUtil.toJsonStr(alarm));
mqBusService.sendCygCommonMessage(
JSONUtil.toJsonStr(alarm),
StateTopicEnum.RUN.getIndex(),
"/patrolsys/webfront/notify",
MqBusClientInitConfig.appName,
"multispectral");
}
System.out.println("----------------------------------------");
} catch (Exception e) {
System.err.println("定时任务执行出错: " + e.getMessage());
}
}, 0, 5, TimeUnit.SECONDS); // 立即开始每5秒执行一次
}
/**
* 从设备ID列表中随机选择一个设备ID并生成随机曲线数据
*
* @param belongDeviceIDList 设备ID列表
* @return JSON格式的设备数据对象
*/
public static String generateRandomDeviceData(List<Integer> belongDeviceIDList) {
if (belongDeviceIDList == null || belongDeviceIDList.isEmpty()) {
throw new IllegalArgumentException("设备ID列表不能为空");
}
// 使用Math.random()随机选择一个设备ID
int randomIndex = (int) (Math.random() * belongDeviceIDList.size());
int belongDeviceID = belongDeviceIDList.get(randomIndex);
// 生成1-1000范围内的随机曲线数据
int curveData = (int) (Math.random() * 1000) + 1;
// 使用JSONUtil生成更安全的JSON自动处理特殊字符
JSONObject json = new JSONObject();
json.set("belongDeviceID", belongDeviceID);
json.set("curveData", curveData);
json.set("msgType", "real-time-curve");
return json.toString();
}
// 使用示例
public static void main(String[] args) {
List<Integer> deviceIds = Arrays.asList(101, 102, 103, 104, 105);
String result = generateRandomDeviceData(deviceIds);
System.out.println(result);
// 输出示例: {"belongDeviceID":103,"curveData":756}
}
/**
* 告警数据传输对象
*/
@Data
static class AlarmDto {
private int belongDeviceID; // 所属设备id
private int deviceID; // 紫外设备id
private String deviceName; // 紫外设备名称
private int alarmTimestamp; // 告警时间戳s
private String alarmMessage; // 告警信息
private String msgType;
// 构造函数
public AlarmDto() {
}
public AlarmDto(int belongDeviceID, int deviceID, String deviceName) {
this.belongDeviceID = belongDeviceID;
this.deviceID = deviceID;
this.deviceName = deviceName;
}
public AlarmDto(int belongDeviceID, int deviceID, String deviceName,
int alarmTimestamp, String alarmMessage) {
this.belongDeviceID = belongDeviceID;
this.deviceID = deviceID;
this.deviceName = deviceName;
this.alarmTimestamp = alarmTimestamp;
this.alarmMessage = alarmMessage;
}
@Override
public String toString() {
return String.format("AlarmDto{belongDeviceID=%d, deviceID=%d, deviceName='%s', " +
"alarmTimestamp=%d, alarmMessage='%s'}",
belongDeviceID, deviceID, deviceName, alarmTimestamp, alarmMessage);
}
}
/**
* 告警数据生成器
*/
static class AlarmGenerator {
// 预定义的中文告警信息
private static final String[] ALARM_MESSAGES = {
"设备温度过高,请检查散热系统",
"紫外灯管老化,建议更换",
"设备电压异常,请检查供电线路",
"传感器读数异常,需要校准",
"设备运行时间过长,建议停机检修",
"紫外强度不足,检查灯管状态",
"设备过载保护触发",
"通信连接中断,请检查网络",
"设备内部湿度过高",
"风扇转速异常,请检查风扇",
"电流过大,触发保护机制",
"设备门未关闭,请检查安全门",
"滤网堵塞,需要清洁维护",
"设备震动异常,请检查固定",
"控制板故障,需要技术支持"
};
/**
* 从AlarmDto列表中随机选择一个设置当前时间戳和随机告警信息
*
* @param alarmDtoList 包含基础信息的AlarmDto列表
* @return 完整的AlarmDto对象
*/
public static AlarmDto generateRandomAlarm(List<AlarmDto> alarmDtoList) {
if (alarmDtoList == null || alarmDtoList.isEmpty()) {
throw new IllegalArgumentException("AlarmDto列表不能为空");
}
// 随机选择一个AlarmDto
int randomIndex = (int) (Math.random() * alarmDtoList.size());
AlarmDto selectedAlarm = alarmDtoList.get(randomIndex);
// 创建新的AlarmDto对象复制基础信息
AlarmDto result = new AlarmDto(
selectedAlarm.getBelongDeviceID(),
selectedAlarm.getDeviceID(),
selectedAlarm.getDeviceName()
);
result.setMsgType("alarm-message");
// 设置当前时间戳(秒)
result.setAlarmTimestamp((int) (System.currentTimeMillis() / 1000));
// 随机选择告警信息
int messageIndex = (int) (Math.random() * ALARM_MESSAGES.length);
result.setAlarmMessage(ALARM_MESSAGES[messageIndex]);
return result;
}
// 使用示例
public static void main(String[] args) {
// 创建测试数据
List<AlarmDto> alarmList = Arrays.asList(
new AlarmDto(1001, 2001, "紫外消毒设备A"),
new AlarmDto(1002, 2002, "紫外消毒设备B"),
new AlarmDto(1003, 2003, "紫外消毒设备C"),
new AlarmDto(1004, 2004, "紫外消毒设备D")
);
// 生成随机告警
AlarmDto randomAlarm = generateRandomAlarm(alarmList);
System.out.println("生成的随机告警:");
System.out.println(randomAlarm);
// 多次生成示例
System.out.println("\n连续生成3个随机告警:");
for (int i = 0; i < 3; i++) {
AlarmDto alarm = generateRandomAlarm(alarmList);
System.out.println((i + 1) + ". " + alarm);
}
}
}
```