package com.ycl.feign; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; import com.hikvision.artemis.sdk.ArtemisHttpUtil; import com.hikvision.artemis.sdk.config.ArtemisConfig; import com.ycl.platform.domain.param.HK.BaseParam; import com.ycl.platform.domain.param.HK.FaceDetectParam; import com.ycl.utils.DateUtils; import com.ycl.utils.bean.BeanUtils; import constant.ApiConstants; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.jar.JarEntry; /** * @author:xp * @date:2024/8/12 11:47 */ @Slf4j public class HkApiUtil { /** * 调用海康接口 基础数据平台 Post请求 * * @param apiUrl 接口地址:/api/dqd/service/rs/v2/data/faceDetect/query * @param params 请求参数 * @param resultType 响应结果接收类 * @return 调用结果 */ public static List sendAPI(String host,String appKey,String appSecret,String apiUrl, BaseParam params, Class resultType) { // STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数. ArtemisConfig.host = host; // 平台的ip端口 ArtemisConfig.appKey = appKey; // 密钥appkey ArtemisConfig.appSecret = appSecret;// 密钥appSecret // STEP2:设置OpenAPI接口的上下文 final String ARTEMIS_PATH = "/artemis"; // STEP3:设置接口的URI地址 final String previewURLsApi = ARTEMIS_PATH + apiUrl; Map path = new HashMap(2) { { put("https://", previewURLsApi); } }; // STEP4:设置参数提交方式 String contentType = "application/json"; // STEP5:组装请求参数 String body = JSON.toJSONString(params); // STEP6:调用接口 String result = null;// post请求application/json类型参数 List dataList = new ArrayList<>(); for (int i = 0; i < 10; i++) { result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType , null); JSONObject jsonObject = JSONObject.parseObject(result); if(jsonObject.getString("code") == null || !ApiConstants.HKSuccessCode.equals(jsonObject.getString("code"))){ log.error("请求失败{}",result); dataList = null; break; } List resultList = HkApiUtil.getDataList(JSONObject.parseObject(result), resultType); if(CollectionUtils.isEmpty(resultList) || resultList.size() List getDataList(JSONObject jsonObject, Class resultClass) { if (jsonObject != null && ApiConstants.HKSuccessCode.equals(jsonObject.getString("code"))) { JSONObject data = jsonObject.getJSONObject("data"); if (data == null) { return null; } List list = data.getList("list", resultClass); if (CollectionUtils.isEmpty(list)) { return null; } return list; } return null; } /** * 实体对象转成Map * @param obj 实体对象 * @return */ public static Map object2Map(Object obj) { Map map = new HashMap<>(); if (obj == null) { return map; } Class clazz = obj.getClass(); Field[] fields = clazz.getDeclaredFields(); try { for (Field field : fields) { field.setAccessible(true); map.put(field.getName(), field.get(obj).toString()); } } catch (Exception e) { e.printStackTrace(); } return map; } /** * Map转成实体对象 * @param map map实体对象包含属性 * @param clazz 实体对象类型 * @return */ public static Object map2Object(Map map, Class clazz) { if (map == null) { return null; } Object obj = null; try { obj = clazz.newInstance(); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { int mod = field.getModifiers(); if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) { continue; } field.setAccessible(true); field.set(obj, map.get(field.getName())); } } catch (Exception e) { e.printStackTrace(); } return obj; } }