数据库字段
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"
},