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 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")); } } }