130 lines
4.8 KiB
Java
130 lines
4.8 KiB
Java
package com.zhgd.xmgl.util;
|
||
|
||
import cn.hutool.core.util.StrUtil;
|
||
import cn.hutool.core.util.URLUtil;
|
||
import cn.hutool.http.HttpRequest;
|
||
import cn.hutool.http.HttpUtil;
|
||
import com.alibaba.fastjson.JSONArray;
|
||
import com.alibaba.fastjson.JSONObject;
|
||
import com.gexin.fastjson.JSON;
|
||
import com.zhgd.jeecg.common.execption.OpenAlertException;
|
||
import lombok.extern.slf4j.Slf4j;
|
||
|
||
import java.nio.charset.StandardCharsets;
|
||
import java.util.HashMap;
|
||
import java.util.Map;
|
||
import java.util.Objects;
|
||
|
||
@Slf4j
|
||
public class RenZhiUtil {
|
||
public static final String host = "http://www.0531yun.com";
|
||
|
||
/**
|
||
* 根据设备地址查询实时数据
|
||
*
|
||
* @param devSns
|
||
* @param jnrzckAccount
|
||
* @param jnrzckPw
|
||
* @return
|
||
*/
|
||
public static JSONArray getRealTimeDataByDeviceAddr(String devSns, String jnrzckAccount, String jnrzckPw) {
|
||
String token = getToken(jnrzckAccount, jnrzckPw);
|
||
String url = StrUtil.format("{}/api/data/getRealTimeDataByDeviceAddr?deviceAddrs={}", host, devSns);
|
||
log.info("根据设备地址查询实时数据url:{},authorization:{}", url, token);
|
||
String rsp = HttpRequest.get(url)
|
||
.header("authorization", token)
|
||
.timeout(5000)//超时,毫秒
|
||
.execute().body();
|
||
JSONObject rspJo = JSONObject.parseObject(rsp);
|
||
log.info("根据设备地址查询实时数据rs:{}", rspJo.toJSONString());
|
||
try {
|
||
return rspJo.getJSONArray("data");
|
||
} catch (Exception e) {
|
||
throw new RuntimeException("根据设备地址查询实时数据失败:", e);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取报警数据列表
|
||
*
|
||
* @param devSn
|
||
* @param nodeId
|
||
* @return
|
||
*/
|
||
public static JSONArray getAlarmRecordList(String devSn, String token, Integer nodeId, String startTime, String endTime) {
|
||
String url = StrUtil.format("{}/api/data/alarmRecordList?deviceAddr={}&nodeId={}&startTime={}&endTime={}", host, devSn, nodeId, startTime, endTime);
|
||
log.info("获取报警数据列表url:{},authorization:{}", url, token);
|
||
String rsp = HttpRequest.get(url)
|
||
.header("authorization", token)
|
||
.timeout(5000)//超时,毫秒
|
||
.execute().body();
|
||
JSONObject rspJo = JSONObject.parseObject(rsp);
|
||
log.info("获取报警数据列表rs:{}", rspJo.toJSONString());
|
||
try {
|
||
return rspJo.getJSONArray("data");
|
||
} catch (Exception e) {
|
||
throw new RuntimeException("获取报警数据列表失败:", e);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 根据用户名和密码获取 token
|
||
*
|
||
* @param jnrzckAccount
|
||
* @param jnrzckPw
|
||
* @return
|
||
*/
|
||
public static String getToken(String jnrzckAccount, String jnrzckPw) {
|
||
String url = StrUtil.format("{}/api/getToken?loginName={}&password={}", host, jnrzckAccount, jnrzckPw);
|
||
log.info("url:{}", url);
|
||
String rsp = HttpUtil.get(url);
|
||
JSONObject rspJo = JSONObject.parseObject(rsp);
|
||
log.info("rs:{}", rspJo.toJSONString());
|
||
try {
|
||
return rspJo.getJSONObject("data").getString("token");
|
||
} catch (Exception e) {
|
||
throw new RuntimeException("获取token失败:", e);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 继电器操作(喷淋)
|
||
*
|
||
* @param deviceId
|
||
* @param opt 设备操作 0:闭合 1:断开
|
||
* @param token
|
||
* @return
|
||
*/
|
||
public static JSONObject setRelay(String deviceId, Integer opt, String token) {
|
||
Map<String, Object> paramMap = new HashMap<>();
|
||
paramMap.put("deviceAddr", deviceId);
|
||
paramMap.put("opt", opt);
|
||
paramMap.put("relayNo", "1");//继电器编号
|
||
String url = "http://www.0531yun.com/api/device/setRelay";
|
||
log.info("继电器操作(喷淋),url:{},body:{}", url, JSON.toJSONString(paramMap));
|
||
String result = HttpRequest.post(url).form(paramMap).header("authorization", token).execute().body();
|
||
log.info("继电器操作(喷淋),rs:{}", result);
|
||
return JSONObject.parseObject(result);
|
||
}
|
||
|
||
/**
|
||
* http操作喷淋
|
||
*
|
||
* @param deviceId
|
||
* @param sprayStatus 喷淋状态(1投运2未投运)
|
||
* @param jnrzckAccount
|
||
* @param jnrzckPw
|
||
*/
|
||
public static void httpOptSpray(String deviceId, Integer sprayStatus, String jnrzckAccount, String jnrzckPw) {
|
||
String token = RenZhiUtil.getToken(jnrzckAccount, jnrzckPw);
|
||
if (StrUtil.isBlank(token)) {
|
||
throw new OpenAlertException("token获取失败");
|
||
}
|
||
Integer opt = Objects.equals(sprayStatus, 1) ? 0 : 1;
|
||
JSONObject jsonObject = RenZhiUtil.setRelay(deviceId, opt, token);
|
||
if (!Objects.equals(jsonObject.getInteger("code"), 1000)) {
|
||
throw new OpenAlertException("喷淋失败:" + jsonObject.getString("message"));
|
||
}
|
||
}
|
||
}
|