数据库字段

alarm_threshold 阈值

实体类:
解析json字符串中:data中根据这三个字段进行判断

@Data
public class AlarmThresholdData {private String alarmLvId;//告警idprivate String conditional;//阈值判断private String value;//数据值
}

具体方法json解析循环遍历取值:

 /*** 阈值告警*/@PostMapping("/alarmInfo")public CommonResult<List<DeviceDto>> alarmInfo(@RequestParam(required = false) String name,@RequestParam(required = false) String curpage,@RequestParam(required = false) String typeid) {List<DeviceDto> deviceDtoList = new ArrayList<>();Map<String, Object> param = new HashMap<>();param.put("name", name);param.put("curpage", "0");param.put("typeid", "");//服务之间远程调用取到数据String rs1 = HttpRequest.post(URL_PATH_1).form(param).send().charset("utf-8").bodyText().replace("/", "");//此处因为data  rs records循环嵌套三层所以逐层解析JSONObject jsonObj = JSONObject.parseObject(rs1);JSONObject data = JSONObject.parseObject(jsonObj.getString("data"));JSONObject rs = JSONObject.parseObject(data.getString("rs"));List<Device> records = JSONObject.parseObject(rs.getString("records"), List.class);//循环遍历records取每条的数据值  Devcie是设备实体类if (records.size() > 0) {for (int i = 0; i < records.size(); i++) {Device item = JSONObject.parseObject(JSONObject.toJSONString(records.get(i)), Device.class);//取到设备idString id = item.getId();//alarmThreshold 是告警字段 做判空处理JSONArray alarmThreshold = JSONArray.parseArray(item.getAlarmThreshold());if (alarmThreshold != null && alarmThreshold.size() > 0) {for (int h = 0; h < alarmThreshold.size(); h++) {//取到alarmThreshold 该字段的json数值String alarmThresholds = String.valueOf(JSONObject.parseObject(alarmThreshold.getString(h)).get("data"));//解析该字段List<AlarmThresholdData> alarmThresholdData = JSONObject.parseObject(alarmThresholds, ArrayList.class);//继续循环遍历解析该字段库里是多个json拼接。循环取出单个[{"data":[{"alarmLvId":"xxxx","conditional":"gt","value":"220"},{"alarmLvId":"xxxxx","conditional":"lt","value":"12"}],"key":"FDJ2_DCDY"},{"data":[{"alarmLvId":"1","conditional":"gt","value":"100"}],"key":"FDJ2_IB"}]for (int a = 0; a < alarmThresholdData.size(); a++) {AlarmThresholdData items = JSONObject.parseObject(JSONObject.toJSONString(alarmThresholdData.get(a)), AlarmThresholdData.class);//取出每个json单个数值String alarmLvId = items.getAlarmLvId();String value = items.getValue();String conditional = items.getConditional();if (conditional.equals("eq")) {conditional = "等于";}if (conditional.equals("neq")) {conditional = "不等于";}if (conditional.equals("gt")) {conditional = "大于";}if (conditional.equals("lt")) {conditional = "小于";}if (conditional.equals("get")) {conditional = "大于等于";}if (conditional.equals("lte")) {conditional = "小于等于";}//得到keyString key = String.valueOf(JSONObject.parseObject(alarmThreshold.getString(h)).get("key"));JSONArray deviceValues = JSONObject.parseArray(item.getDeviceValues());if (deviceValues != null && deviceValues.size() > 0) {for (int j = 0; j < deviceValues.size(); j++) {DeviceDto deviceDto = new DeviceDto();System.out.println(deviceDto);String times = String.valueOf(JSONObject.parseObject(deviceValues.getString(j)).get("time"));String values = String.valueOf(JSONObject.parseObject(deviceValues.getString(j)).get("value"));String names = String.valueOf(JSONObject.parseObject(deviceValues.getString(j)).get("name"));String alarms = "阈值告警";if (values != null) {deviceDto.setId(id);//报警iddeviceDto.setAlarm(alarms);deviceDto.setName(names);//报警名称deviceDto.setTime(times);//时间deviceDto.setAlarmLvId(alarmLvId);deviceDto.setKey(key);deviceDto.setConditional(conditional);deviceDto.setValue(value);deviceDtoList.add(deviceDto);}//插入到log表SysAlarmLog alarmLog = new SysAlarmLog();alarmLog.setDeviceId(item.getId());alarmLog.setAlertDisplayName(names);alarmLog.setFired("true触发告警");alarmLog.setReason(alarms + names + key + conditional + value);alarmLog.setResults("pass");alarmLog.setCreateUser("admin");alarmLog.setUpdateUser("admin");alarmLog.setStatus("Success");sysAlarmLogService.addData(alarmLog);}}}}}}}return new CommonResult<>(CommonResult.SUCCESS, CommonResult.MESSAGE_SUCCESS, deviceDtoList);}

打印数据

 "code": 200,"message": "SUCCESS","data": [{"id": "DVC202107130434290000304005638","name": "2#发电机电池电压","deviceValues": null,"time": "2021-07-16 11:13:00","alarm": "阈值告警","alarmLvId": "1","conditional": "大于","value": "220","key": "FDJ2_DCDY"},{"id": "DVC202107130434290000304005638","name": "2#发电机功率因素","deviceValues": null,"time": "2021-07-16 11:13:00","alarm": "阈值告警","alarmLvId": "1","conditional": "大于","value": "220","key": "FDJ2_DCDY"},{"id": "DVC202107130434290000304005638","name": "2#发电机IA","deviceValues": null,"time": "2021-07-16 11:13:00","alarm": "阈值告警","alarmLvId": "1","conditional": "大于","value": "220","key": "FDJ2_DCDY"},{"id": "DVC202107130434290000304005638","name": "2#发电机IB","deviceValues": null,"time": "2021-07-16 11:13:00","alarm": "阈值告警","alarmLvId": "1","conditional": "大于","value": "220","key": "FDJ2_DCDY"},{"id": "DVC202107130434290000304005638","name": "2#发电机IC","deviceValues": null,"time": "2021-07-16 11:13:00","alarm": "阈值告警","alarmLvId": "1","conditional": "大于","value": "220","key": "FDJ2_DCDY"},{"id": "DVC202107130434290000304005638","name": "2#发电机启动次数","deviceValues": null,"time": "2021-07-16 11:13:00","alarm": "阈值告警","alarmLvId": "1","conditional": "大于","value": "220","key": "FDJ2_DCDY"},{"id": "DVC202107130434290000304005638","name": "2#发电机燃油压力","deviceValues": null,"time": "2021-07-16 11:13:00","alarm": "阈值告警","alarmLvId": "1","conditional": "大于","value": "220","key": "FDJ2_DCDY"},{"id": "DVC202107130434290000304005638","name": "2#发电机转速","deviceValues": null,"time": "2021-07-16 11:13:00","alarm": "阈值告警","alarmLvId": "1","conditional": "大于","value": "220","key": "FDJ2_DCDY"},{"id": "DVC202107130434290000304005638","name": "2#发电机水温","deviceValues": null,"time": "2021-07-16 11:13:00","alarm": "阈值告警","alarmLvId": "1","conditional": "大于","value": "220","key": "FDJ2_DCDY"},{"id": "DVC202107130434290000304005638","name": "2#发电机UAB","deviceValues": null,"time": "2021-07-16 11:13:00","alarm": "阈值告警","alarmLvId": "1","conditional": "大于","value": "220","key": "FDJ2_DCDY"},{"id": "DVC202107130434290000304005638","name": "2#发电机UBC","deviceValues": null,"time": "2021-07-16 11:13:00","alarm": "阈值告警","alarmLvId": "1","conditional": "大于","value": "220","key": "FDJ2_DCDY"},

JAVA阈值告警字符串解析相关推荐

  1. java 阈值 告警_处理Java异常告警最佳实践

    1.整理出一份常见 Java 错误类型清单,与各项目组进行沟通调研后,根据线上应用系统日常使用的异常频次,对告警进行分类设计: 2.在设计告警发送内容时,重点考虑如何将告警核心或关键内容直接发送给后续 ...

  2. java 月份缩写_关于java:如何将日期字符串解析为Date?

    本问题已经有最佳答案,请猛点这里访问. 如何将下面的日期字符串解析为Date对象? String target ="Thu Sep 28 20:29:30 JST 2000"; D ...

  3. Java中[xxx:xxx,aaa:aaa]格式字符串解析

    Java中[xxx:xxx,aaa:aaa]格式字符串解析 String str = "[name:张三,age:18,phone:15888887777,email:15888887777 ...

  4. java 字符串解析

    StringTokenizer tokenizer = new StringTokenizer(number, ",");         boolean bool = true; ...

  5. 2020互联网Java后端面试必备解析—SpringCloud篇

    学习导图 这篇文章来分享一下面试必备的Spring Cloud问题解析! 用XMind画了一张导图记录 Spring Cloud 的学习笔记和一些面试解析 1.什么是微服务 微服务是一种架构⻛格,也是 ...

  6. java中将json字符串_Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  7. 检查Java中的字符串是空还是空[重复]

    本文翻译自:Checking if a string is empty or null in Java [duplicate] This question already has an answer ...

  8. 如何从Java中的字符串值获取枚举值?

    说我有一个枚举 public enum Blah {A, B, C, D } 我想找到一个字符串的枚举值,例如"A"就是Blah.A 怎么可能做到这一点? Enum.valueOf ...

  9. Java里的字符串, String类简单介绍.

    String类在java面试中也是1个常见的问题点. 所以也是写在这里方便以后查阅了. 大家都知道c语言里是没有String 字符串这个数据类型的. 只能用字符数组的1个特殊形式来表示一个字符串, 就 ...

最新文章

  1. UNIX高手应该保持的习惯
  2. ResultSet 结果集
  3. 源代码编译MYSQL5.6 环境下的MHA+KEEPALIVED的安装和维护
  4. Array.Resize(ref arry, size);
  5. Java密码体系结构简介:Java Cryptography Architecture (JCA) Reference Guide
  6. 单核工作法16:循序渐进(下)
  7. UA池和IP代理池使用
  8. Hough transform(霍夫变换)
  9. 产品研发过程管理专题——软件测试是提高软件产品质量的必要条件
  10. python和java的区别-python和java的区别,看了这个就会区分了!
  11. adf4351_Oracle ADF和Oracle Jet一起工作。 建筑模式
  12. Selenium无法定位的6种解决方案
  13. 计算机网络mac地址作用是什么,路由器中MAC地址克隆的用途是什么
  14. 29、NeRV: Neural Reflectance and Visibility Fields for Relighting and View Synthesis
  15. 最易被误读的十大职业排行榜
  16. 游戏中常用的设计模式
  17. ​​​​Convolutional Neural Networks on Graphswith Fast Localized Spectral Filtering
  18. 三星80亿美元收购Harmon真正意图是它?
  19. ☆苹果MAC OS X ★ 安装双系统☆
  20. 我们DevSkim、Jarvis和USG是这样子的

热门文章

  1. Google英文word2vec预训练模型 word2vec-GoogleNews-vectors
  2. js逆向案例-猿人学比赛题(中等及以下难度的)
  3. CVPR 2018 Social GAN、CVPR 2019 Sophie、NIPS 2019 Social-BiGAT、CVPR 2019 Social Ways | 基于GAN的行人轨迹预测
  4. 如何配置无线路由为交换机模式
  5. 使用showdoc快速生成在线文档
  6. 转业费计算器2019_现役涨工资,2018年度自主战友到底补多少?附最新补发计算器...
  7. python的webcamera
  8. -在c语言中什么含义
  9. 2022 年 4 月中国数据库排行榜:春风拂面春意暖,分数回升四月天
  10. 全球及中国防水卷材涂料市场十四五产能规模与需求容量调研报告2022版