JAVA阈值告警字符串解析

数据库字段

alarm_threshold 阈值

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

@Data
public 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 = "小于等于";
                            }
                            //得到key
                            String 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"
        },
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值