JAVA阈值告警字符串解析
数据库字段
alarm_threshold 阈值
实体类:
解析json字符串中:data中根据这三个字段进行判断
@Datapublic class AlarmThresholdData { private String alarmLvId;//告警id private 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); //取到设备id String 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);//报警id deviceDto.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" },