第一次提交
This commit is contained in:
9
src/work/README.md
Normal file
9
src/work/README.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: 工作
|
||||
index: false
|
||||
icon: mdi:briefcase
|
||||
category:
|
||||
- 工作
|
||||
---
|
||||
|
||||
<Catalog />
|
||||
BIN
src/work/assets/image-20240513143908211.png
Normal file
BIN
src/work/assets/image-20240513143908211.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 102 KiB |
BIN
src/work/assets/image-20240716164500637.png
Normal file
BIN
src/work/assets/image-20240716164500637.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
124
src/work/log/2025-06.md
Normal file
124
src/work/log/2025-06.md
Normal 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
78
src/work/log/2025-07.md
Normal 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
461
src/work/常用.md
Normal 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
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### 权限图
|
||||
|
||||

|
||||
|
||||
### 问题截图
|
||||
|
||||

|
||||
|
||||
## 脚本:杀死所有 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user