package com.zhgd.xmgl.util; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.hikvision.artemis.sdk.Client; import com.hikvision.artemis.sdk.Request; import com.hikvision.artemis.sdk.Response; import com.hikvision.artemis.sdk.constant.Constants; import com.hikvision.artemis.sdk.enums.Method; import com.zhgd.xmgl.modules.basicdata.entity.HikvisionRequestRetry; import com.zhgd.xmgl.modules.basicdata.mapper.HikvisionRequestRetryMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.Map; import java.util.Objects; /** * 海康接口 */ @Slf4j @Component public class HikvisionUtil { private static HikvisionRequestRetryMapper hikvisionRequestRetryMapper; @Autowired public void setHikvisionRequestRetryMapper(HikvisionRequestRetryMapper hikvisionRequestRetryMapper) { HikvisionUtil.hikvisionRequestRetryMapper = hikvisionRequestRetryMapper; } public static String doPost(String host, String path, String body, Map querys, String appKey, String appSecret) { return doPost(host, path, body, querys, appKey, appSecret, null); } public static String doPost(String host, String path, String body, Map querys, String appKey, String appSecret, Long hikvisionRequestRetryId) { log.info("HikvisionUtil#doPost.url:{}", host + path); log.info("HikvisionUtil#doPost.body:{}", body); String responseStr = null; boolean isException = false; try { Map headers = new HashMap(); headers.put("Accept", "*/*"); headers.put("Content-Type", "application/json"); Request request = new Request(Method.POST_STRING, host, path, appKey, appSecret, Constants.DEFAULT_TIMEOUT); request.setHeaders(headers); request.setQuerys(querys); request.setStringBody(body); Response response = Client.execute(request); responseStr = getResponseResult(response); log.info("HikvisionUtil#doPost.getResponseResult:{}", responseStr); } catch (Exception var10) { isException = true; log.error("HikvisionUtil#doPost.error:{}", var10.getMessage(), var10); if (hikvisionRequestRetryId == null) { HikvisionRequestRetry entity = new HikvisionRequestRetry(); entity.setUrl(host + path); entity.setHost(host); entity.setPath(path); entity.setMethod(2); entity.setParam(JSON.toJSONString(querys)); entity.setBody(body); entity.setLastResult(null); entity.setRequestNum(1); entity.setAppKey(appKey); entity.setAppSecret(appSecret); hikvisionRequestRetryMapper.insert(entity); } else { HikvisionRequestRetry entity = new HikvisionRequestRetry(); entity.setId(hikvisionRequestRetryId); hikvisionRequestRetryMapper.addOne(entity); } } if (!isException && hikvisionRequestRetryId != null) { hikvisionRequestRetryMapper.deleteById(hikvisionRequestRetryId); } return responseStr; } private static String getResponseResult(Response response) { String responseStr = null; int statusCode = response.getStatusCode(); if (!String.valueOf(statusCode).startsWith("2") && !String.valueOf(statusCode).startsWith("3")) { //String msg = response.getErrorMessage(); responseStr = response.getBody(); } else { responseStr = response.getBody(); } return responseStr; } /** * 获取data结果 * * @param rs * @return */ public static JSONObject getJSONObjectData(String rs) { if (StrUtil.isBlank(rs)) { return null; } JSONObject rsJo = JSONObject.parseObject(rs); String code = rsJo.getString("code"); if (Objects.equals(code, "0")) { return rsJo.getJSONObject("data"); } else { log.error("海康解析结果失败:{}", rs); return null; } } public static JSONArray getJSONArrayData(String rs) { if (StrUtil.isBlank(rs)) { return null; } JSONObject rsJo = JSONArray.parseObject(rs); String code = rsJo.getString("code"); if (Objects.equals(code, "0")) { return rsJo.getJSONArray("data"); } else { log.error("海康解析结果失败:{}", rs); return null; } } /** * 是否请求成功 * * @param rs * @return */ public static boolean isSuccess(String rs) { JSONObject rsJo = JSONObject.parseObject(rs); String code = rsJo.getString("code"); if (Objects.equals(code, "0")) { return true; } else { return false; } } }