liuyaowen 1 год назад
Родитель
Сommit
153aafa648

+ 13 - 0
src/main/java/com/yunfeiyun/agmp/iots/common/annotate/HttpCore.java

@@ -0,0 +1,13 @@
+package com.yunfeiyun.agmp.iots.common.annotate;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * @author liuyaowen
+ */
+@Retention(RetentionPolicy.RUNTIME)
+public @interface HttpCore {
+    // httpClient对应的设备实现类,用于设备通过私有连接初始化连接信息
+    String serviceName() default "HttpClient";
+}

+ 4 - 1
src/main/java/com/yunfeiyun/agmp/iots/core/http/AdznHttpClient.java

@@ -9,11 +9,13 @@ import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
 import com.yunfeiyun.agmp.iot.common.constant.device.xmzn.XmznEnumCtrlCode;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.domain.reqvo.IotAdznReqVo;
 import com.yunfeiyun.agmp.iot.common.domain.reqvo.IotXmznCtrlReqVo;
 import com.yunfeiyun.agmp.iot.common.domain.reqvo.IotXmznReqVo;
 import com.yunfeiyun.agmp.iot.common.domain.resvo.IotAdznResVo;
 import com.yunfeiyun.agmp.iot.common.domain.resvo.IotXmznResVo;
+import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
 import com.yunfeiyun.agmp.iots.device.common.adzn.AdznApi;
 import com.yunfeiyun.agmp.iots.device.common.xmzn.XmznApi;
 import com.yunfeiyun.agmp.iots.device.common.xmzn.XmznEnumRetCode;
@@ -25,6 +27,7 @@ import springfox.documentation.builders.RequestParameterBuilder;
  * 爱迪智农 http client
  */
 @Slf4j
+@HttpCore(serviceName = ServiceNameConst.SERVICE_ADZN_GSSQ)
 public class AdznHttpClient extends HttpClient{
 
     public final static String TAG = "【爱迪智农】";
@@ -107,7 +110,7 @@ public class AdznHttpClient extends HttpClient{
 
     }
 
-    @Override
+
     public void login(){
 
         if (adznHttpConfig == null

+ 2 - 0
src/main/java/com/yunfeiyun/agmp/iots/core/http/DaHuaIccHttpClient.java

@@ -9,6 +9,7 @@ import com.yunfeiyun.agmp.common.exception.BizException;
 import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.domain.IotFirmdev;
+import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
 import com.yunfeiyun.agmp.iots.device.common.dh.DaHuaIccApi;
 import com.yunfeiyun.agmp.iots.service.IIotFirmdevService;
 import lombok.extern.slf4j.Slf4j;
@@ -43,6 +44,7 @@ import java.util.concurrent.TimeUnit;
  * 大华ICC平台HttpClient(对接设备:大华)
  */
 @Slf4j
+@HttpCore(serviceName = ServiceNameConst.SERVICE_DAHUA_ICC)
 @Component
 public class DaHuaIccHttpClient {
     private RestTemplate restTemplate;

+ 3 - 0
src/main/java/com/yunfeiyun/agmp/iots/core/http/EzvizHttpClient.java

@@ -9,8 +9,10 @@ import com.yunfeiyun.agmp.common.exception.BizException;
 import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.domain.IotEzvizuser;
 import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
+import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
 import com.yunfeiyun.agmp.iots.device.common.ezviz.EzvizApi;
 import com.yunfeiyun.agmp.iots.device.mapper.IotEzvizdevicebindMapper;
 import com.yunfeiyun.agmp.iots.device.mapper.IotEzvizuserMapper;
@@ -35,6 +37,7 @@ import java.util.concurrent.TimeUnit;
  * */
 @Slf4j
 @Component
+@HttpCore(serviceName = ServiceNameConst.SERVICE_EZVIZ_MINITOR)
 public class EzvizHttpClient {
     private RestTemplate restTemplate;
     @Resource

+ 0 - 146
src/main/java/com/yunfeiyun/agmp/iots/core/http/HikCloudHttpClient.java

@@ -1,146 +0,0 @@
-package com.yunfeiyun.agmp.iots.core.http;
-
-import com.alibaba.fastjson2.JSONObject;
-import com.yunfeiyun.agmp.common.constant.ErrorCode;
-import com.yunfeiyun.agmp.common.enums.RedisCacheKey;
-import com.yunfeiyun.agmp.common.exception.BizException;
-import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
-import com.yunfeiyun.agmp.common.utils.StringUtils;
-import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
-import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
-import com.yunfeiyun.agmp.iot.common.domain.IotFirmdev;
-import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
-import com.yunfeiyun.agmp.iots.device.common.hik.HikCloudApi;
-import com.yunfeiyun.agmp.iots.service.IIotFirmdevService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.*;
-import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
-import org.springframework.stereotype.Component;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.client.RestTemplate;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.concurrent.TimeUnit;
-
-/**海康云眸对接*/
-@Slf4j
-@Component
-public class HikCloudHttpClient {
-    private RestTemplate restTemplate;
-    @Resource
-    private RedisCacheManager redisCacheManager;
-    @Resource
-    private IIotFirmdevService iIotFirmdevService;
-
-    //@PostConstruct
-    public void init() {
-        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
-        factory.setConnectTimeout(1000 * 60 * 3);
-        factory.setReadTimeout(1000 * 60 * 3);
-        factory.setConnectionRequestTimeout(1000 * 60 * 3);
-        restTemplate = new RestTemplate(factory);
-    }
-
-    public String[] getConfig() {
-//        try {
-//            IotFirmdev iotFirmdev = redisCacheManager.getCacheObject(RedisCacheKey.IOT_HIK_CLOUD_API_CONFIG, ServiceNameConst.SERVICE_HIK_EZVIZ_MINITOR);
-//            if (null == iotFirmdev) {
-//                iotFirmdev = iIotFirmdevService.selectIotFirmdevByServiceName(ServiceNameConst.SERVICE_HIK_EZVIZ_MINITOR);
-//                redisCacheManager.setCacheObject(RedisCacheKey.IOT_HIK_CLOUD_API_CONFIG, ServiceNameConst.SERVICE_HIK_EZVIZ_MINITOR, iotFirmdev);
-//            }
-//            JSONObject config = JSONObject.parseObject(iotFirmdev.getFirmdevCfg());
-//            return new String[]{config.getString("hik_cloud_client_Id"), config.getString("hik_cloud_client_secret")};
-//        } catch (Exception e) {
-//            return new String[]{"null", "null"};
-//        }
-        return null;
-    }
-
-    public JSONObject getMessage(String consumerId) {
-
-        MultiValueMap<String, String> headers = new HttpHeaders();
-        headers.add("Content-Type", "application/x-www-form-urlencoded");
-        headers.add("Authorization", "bearer" + getAccessToken());
-        MultiValueMap<String, Object> paramsMap = new LinkedMultiValueMap<>();
-        paramsMap.add("autoCommit", true);
-        paramsMap.add("consumerId", consumerId);
-        HttpEntity<?> httpEntity = new HttpEntity<>(paramsMap, headers);
-        ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(HikCloudApi.GET_MESSAGE, HttpMethod.POST, httpEntity, JSONObject.class);
-        if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
-            log.info("海康多光谱相机获取光谱数据结果:{}",responseEntity);
-            return responseEntity.getBody();
-        }
-        throw new BizException(ErrorCode.API_DISABLED);
-    }
-
-    public String getAccessToken() {
-        String[] config = getConfig();
-        String accessToken = redisCacheManager.getCacheObject(RedisCacheKey.IOT_HIK_CLOUD_HTTP_TOKEN, config[0]);
-        if (StringUtils.isEmpty(accessToken)) {
-            accessToken = refreshAccessToken();
-        }
-        if (StringUtils.isEmpty(accessToken)) {
-            throw new IotBizException(IotErrorCode.GET_TOKEN_FAIL);
-        }
-        return accessToken;
-    }
-
-    public String getConsumerId() {
-        String[] config = getConfig();
-        String consumerId = redisCacheManager.getCacheObject(RedisCacheKey.IOT_HIK_CLOUD_MESSAGE_CHANNEL_CONSUMER_ID, config[0]);
-        if (StringUtils.isEmpty(consumerId)) {
-            consumerId = refreshConsumerId();
-        } else {
-            // 消费者标识同一时间每个账号下最多创建5个,5分钟内未使用的情况下平台上会将该标识废弃,防止多次创建消费着标识,重复使用缓存,未防止时间冲突,本地只保存4分30秒
-            redisCacheManager.setCacheObject(RedisCacheKey.IOT_HIK_CLOUD_MESSAGE_CHANNEL_CONSUMER_ID, config[0], consumerId, 270, TimeUnit.SECONDS);
-        }
-        if (StringUtils.isEmpty(consumerId)) {
-            throw new IotBizException(IotErrorCode.GET_TOKEN_FAIL);
-        }
-        return consumerId;
-    }
-
-    private String refreshAccessToken() {
-        String[] config = getConfig();
-        MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
-        paramsMap.set("client_id", config[0]);
-        paramsMap.set("client_secret", config[1]);
-        paramsMap.set("grant_type", "client_credentials");
-        MultiValueMap<String, String> headers = new HttpHeaders();
-        headers.add("Content-Type", "application/x-www-form-urlencoded");
-        HttpEntity<?> httpEntity = new HttpEntity<>(paramsMap, headers);
-        try {
-            ResponseEntity<String> responseEntity = restTemplate.exchange(HikCloudApi.GET_ACCESS_TOKEN, HttpMethod.POST, httpEntity, String.class, new ArrayList<>());
-            if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
-                JSONObject result = JSONObject.parseObject(responseEntity.getBody());
-                String accessToken = result.getString("access_token");
-                redisCacheManager.setCacheObject(RedisCacheKey.IOT_HIK_CLOUD_HTTP_TOKEN, config[0], accessToken, result.getLong("expires_in"), TimeUnit.SECONDS);
-                return accessToken;
-            }
-        } catch (Exception e) {
-            throw e;
-        }
-        throw new BizException(ErrorCode.API_DISABLED);
-    }
-
-    private String refreshConsumerId() {
-        String[] config = getConfig();
-        MultiValueMap<String, String> headers = new HttpHeaders();
-        headers.add("Content-Type", "application/x-www-form-urlencoded");
-        headers.add("Authorization", "bearer" + getAccessToken());
-        HttpEntity<?> httpEntity = new HttpEntity<>(null, headers);
-        ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(HikCloudApi.CREATE_CONSUMER, HttpMethod.POST, httpEntity, JSONObject.class);
-        if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
-            JSONObject result = responseEntity.getBody();
-            if (result.get("code").equals(HttpStatus.OK.value())) {
-                String consumerId = result.getJSONObject("data").getString("consumerId");
-                redisCacheManager.setCacheObject(RedisCacheKey.IOT_HIK_CLOUD_MESSAGE_CHANNEL_CONSUMER_ID, config[0], consumerId, 270, TimeUnit.SECONDS);
-                return consumerId;
-            }
-        }
-        return null;
-    }
-}

+ 2 - 0
src/main/java/com/yunfeiyun/agmp/iots/core/http/HikOpenHttpClient.java

@@ -8,6 +8,7 @@ import com.yunfeiyun.agmp.common.enums.RedisCacheKey;
 import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.domain.IotFirmdev;
+import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
 import com.yunfeiyun.agmp.iots.service.IIotFirmdevService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
@@ -19,6 +20,7 @@ import java.util.Map;
 /**海康安防管理平台http对接*/
 @Component
 @Slf4j
+@HttpCore(serviceName = ServiceNameConst.SERVICE_HIK_OPEN_MINITOR)
 public class HikOpenHttpClient {
 
     @Resource

+ 15 - 46
src/main/java/com/yunfeiyun/agmp/iots/core/http/HttpClient.java

@@ -2,6 +2,7 @@ package com.yunfeiyun.agmp.iots.core.http;
 
 import com.alibaba.fastjson2.JSONObject;
 import com.yunfeiyun.agmp.iot.common.domain.reqvo.IotXmznReqVo;
+import com.yunfeiyun.agmp.iots.common.modal.IotDeviceconnResVo;
 
 /**
  * 对接一个厂商http接口的客户端
@@ -46,62 +47,30 @@ public class HttpClient {
      * 唯一标识
      */
     private String clientID;
-
+    // 弃用,每个厂家的httpClient自己定义存储配置信息
+    @Deprecated
     HttpConfig httpConfig;
-
-    /**
-     * 存登录凭证
-     *  token处理:
-     *  token更新时,保存到文件;
-     *  系统启动时,首先从本地文件读取token;
-     *  判断到token失效时,调用【登录(获取token)接口】重新获取;
-     */
+    // 弃用,接口认证每个厂家的httpClient自己定义存储
+    @Deprecated
     private String token;
 
-
+    private IotDeviceconnResVo iotDeviceconnResVo;
+    private JSONObject clientConfig;
     /**
      * 初始化
-     * @param httpConfig
-     */
-    public void init(String firmBid, HttpConfig httpConfig, String devtypeBid){
-        this.httpConfig = httpConfig;
-    }
-
-
-    /**
-     * 登录(获取token)
+     * @param iotDeviceconnResVo 连接信息
+     * @param configJson 连接配置
      */
-    public void login(){
-
+    public void init(IotDeviceconnResVo iotDeviceconnResVo, JSONObject configJson){
+        this.iotDeviceconnResVo = iotDeviceconnResVo;
+        this.clientConfig = configJson;
     }
 
-
     /**
-     * 根据cookie恢复
+     * 弃用
      */
-    public void restore(){
-
-    }
-
-    /**
-     * 异步
-     * @param jsonObject
-     */
-    public void post(JSONObject jsonObject, OnResp onResp){
-
-    }
-
-    /**
-     * 同步
-     * @param jsonObject
-     */
-    public String post(JSONObject jsonObject){
-        String resp = "";
-        return resp;
-    }
+    @Deprecated
+    public void init(String firmBid, HttpConfig httpConfig, String devtypeBid) {
 
-    public String get(JSONObject jsonObject){
-        String resp = "";
-        return resp;
     }
 }

+ 2 - 0
src/main/java/com/yunfeiyun/agmp/iots/core/http/JsyStQfHttpClient.java

@@ -10,6 +10,7 @@ import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.domain.IotFirmdev;
 import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
+import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
 import com.yunfeiyun.agmp.iots.device.common.jsy.JsyStQfApi;
 import com.yunfeiyun.agmp.iots.service.IIotFirmdevService;
 import lombok.extern.slf4j.Slf4j;
@@ -37,6 +38,7 @@ import java.util.concurrent.TimeUnit;
  * */
 @Component
 @Slf4j
+@HttpCore(serviceName = ServiceNameConst.SERVICE_JSY_ST_QF)
 public class JsyStQfHttpClient {
 
     private RestTemplate restTemplate;

+ 3 - 1
src/main/java/com/yunfeiyun/agmp/iots/core/http/XmznHttpClient.java

@@ -6,9 +6,11 @@ import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.domain.reqvo.IotXmznCtrlReqVo;
 import com.yunfeiyun.agmp.iot.common.domain.reqvo.IotXmznReqVo;
 import com.yunfeiyun.agmp.iot.common.domain.resvo.IotXmznResVo;
+import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
 import com.yunfeiyun.agmp.iots.device.common.xmzn.XmznApi;
 import com.yunfeiyun.agmp.iot.common.constant.device.xmzn.XmznEnumCtrlCode;
 import com.yunfeiyun.agmp.iots.device.common.xmzn.XmznEnumRetCode;
@@ -22,6 +24,7 @@ import java.util.Objects;
 
 
 @Slf4j
+@HttpCore(serviceName = ServiceNameConst.SERVICE_XMZN_ZNDP)
 public class XmznHttpClient extends HttpClient{
 
 
@@ -120,7 +123,6 @@ public class XmznHttpClient extends HttpClient{
 
     }
 
-    @Override
     public void login(){
         String[] appidArr = httpConfig.getAppid().split(",");
         String[] secretArr = httpConfig.getSecret().split(",");

+ 3 - 0
src/main/java/com/yunfeiyun/agmp/iots/core/http/XphHttpClient.java

@@ -14,7 +14,9 @@ import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
 import com.yunfeiyun.agmp.iot.common.constant.device.xph.XphRedisUtil;
 import com.yunfeiyun.agmp.iot.common.constant.device.xph.XphRelayEnum;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
 import com.yunfeiyun.agmp.iot.common.exception.IotBizException;
+import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.TextUtils;
 
@@ -31,6 +33,7 @@ import java.util.concurrent.TimeUnit;
  * 新浦会HTTP协议设备
  */
 @Slf4j
+@HttpCore(serviceName = ServiceNameConst.SERVICE_XPH_HTTP)
 public class XphHttpClient extends HttpClient {
 
     /**

+ 3 - 0
src/main/java/com/yunfeiyun/agmp/iots/core/http/ZhaoHeSfHttpClient.java

@@ -3,6 +3,8 @@ package com.yunfeiyun.agmp.iots.core.http;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
+import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.TextUtils;
 
@@ -14,6 +16,7 @@ import java.util.List;
  * 兆赫水肥
  */
 @Slf4j
+@HttpCore(serviceName = ServiceNameConst.SERVICE_ZHAO_HE_SF)
 public class ZhaoHeSfHttpClient extends HttpClient {
 
     /**

+ 3 - 0
src/main/java/com/yunfeiyun/agmp/iots/core/http/ZjsfXycbHttpClient.java

@@ -3,6 +3,8 @@ package com.yunfeiyun.agmp.iots.core.http;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.yunfeiyun.agmp.common.utils.JSONUtils;
+import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
+import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.util.TextUtils;
 
@@ -30,6 +32,7 @@ import org.apache.commons.codec.binary.Base64;
  * 中捷四方性诱测报
  */
 @Slf4j
+@HttpCore(serviceName = ServiceNameConst.SERVICE_ZJSF_XYCB)
 public class ZjsfXycbHttpClient extends HttpClient {
     private static final String KEY_ALGORITHM = "RSA";
     public static final String SIGNATURE_ALGORITHM = "SHA256withRSA";

+ 64 - 21
src/main/java/com/yunfeiyun/agmp/iots/core/manager/HttpManager.java

@@ -1,18 +1,20 @@
 package com.yunfeiyun.agmp.iots.core.manager;
 
 import com.alibaba.fastjson2.JSONObject;
-import com.yunfeiyun.agmp.common.utils.JSONUtils;
-import com.yunfeiyun.agmp.iot.common.domain.resvo.IotFirmdevResVo;
-import com.yunfeiyun.agmp.iot.common.constant.devicetype.ServiceNameConst;
+import com.yunfeiyun.agmp.iot.common.service.TypeCacheService;
+import com.yunfeiyun.agmp.iots.common.annotate.HttpCore;
 import com.yunfeiyun.agmp.iots.common.modal.IotDeviceconnResVo;
-import com.yunfeiyun.agmp.iots.common.modal.TosDevicetypeResVo;
 import com.yunfeiyun.agmp.iots.core.http.*;
 
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.reflections.Reflections;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
 
 /**
  * http对接管理器
@@ -20,35 +22,76 @@ import java.util.HashMap;
 @Slf4j
 @Component
 public class HttpManager {
+    @Resource
+    private TypeCacheService typeCacheService;
 
+    private HashMap<String, HttpClient> privateHttpClientByConnBid = new HashMap<>();
+    private HashMap<String, HttpClient> commonHttpClientByTypeCode = new HashMap<>();
+    private HashMap<String,IotDeviceconnResVo> iotDeviceconnResVoHashMap = new HashMap<>();
+    private HashMap<String,Class<? extends HttpClient>> httpClinetClassMap = new HashMap<>();
 
-    /**
-     * key:厂商对接配置id
-     */
-    private HashMap<String, HttpClient> hmClients = new HashMap<>();
-
-    private HashMap<String, HttpClient> hmClientByServiceName = new HashMap<>();
+    @PostConstruct
+    public void init(){
+        //获取该路径下所有类
+        Reflections reflections = new Reflections("com.yunfeiyun.agmp.iots");
+        //获取继承了HttpClient的所有类
+        Set<Class<? extends HttpClient>> classSet = reflections.getSubTypesOf(HttpClient.class);
+        for (Class<? extends HttpClient> clazz : classSet){
+            HttpCore httpCore = clazz.getAnnotation(HttpCore.class);
+            httpClinetClassMap.put(httpCore.serviceName(),clazz);
+        }
+    }
 
     /**
      * 初始化
      * 注意:原来的getFirmDevBid(原来的配置id)暂时换成了getDevtypeBid,真正实现时候看是否正确
      */
-    public void buildHttpConnection(IotDeviceconnResVo iotDeviceconnResVo, JSONObject jsonConfig) {
+    public void buildHttpConnection(IotDeviceconnResVo iotDeviceconnResVo, JSONObject configJson) {
+        if("0".equals(iotDeviceconnResVo.getDevconnType())){
+            initCommonClient(iotDeviceconnResVo,configJson);
+            // 通用连接处理
+        }else {
+            // 私有连接处理
+            initPrivateClient(iotDeviceconnResVo,configJson);
+        }
 
-    }
 
-    public HttpClient getHttpClient(String firmdevBid) {
-        return hmClients.get(firmdevBid);
     }
-
-    public HttpClient getHttpClientByServiceName(String serviceName) {
-        return hmClientByServiceName.get(serviceName);
+    private void initCommonClient(IotDeviceconnResVo iotDeviceconnResVo ,JSONObject configJson){
+        if(null != commonHttpClientByTypeCode.get(iotDeviceconnResVo.getDevtypeCode())){
+            return;
+        }
+        HttpClient httpClient = initHttpClient(iotDeviceconnResVo,configJson);
+        if(null == httpClient){
+            return;
+        }
+        commonHttpClientByTypeCode.put(iotDeviceconnResVo.getDevtypeCode(),httpClient);
+        iotDeviceconnResVoHashMap.put(iotDeviceconnResVo.getDevconnBid(),iotDeviceconnResVo);
+    }
+    private void initPrivateClient(IotDeviceconnResVo iotDeviceconnResVo ,JSONObject configJson){
+        HttpClient httpClient = initHttpClient(iotDeviceconnResVo,configJson);
+        if(null == httpClient){
+           return;
+        }
+        privateHttpClientByConnBid.put(iotDeviceconnResVo.getDevconnBid(),httpClient);
+        iotDeviceconnResVoHashMap.put(iotDeviceconnResVo.getDevconnBid(),iotDeviceconnResVo);
     }
 
-    public HttpClient getDefaultHttpClient() {
-        if (hmClients.size() < 1) {
+    private HttpClient initHttpClient(IotDeviceconnResVo iotDeviceconnResVo ,JSONObject configJson){
+        //获取继承了HttpClient的所有类
+        Class<? extends HttpClient> httpClientClass = httpClinetClassMap.get(typeCacheService.getServiceNameByDevTypeBid(iotDeviceconnResVo.getDevtypeBid()));
+        if(null == httpClientClass){
+            log.error("【httpClient】初始化,未找到httpClient实现,连接信息:{}",iotDeviceconnResVo);
+            return null;
+        }
+        try {
+            HttpClient httpClient = httpClientClass.newInstance();
+            httpClient.init(iotDeviceconnResVo,configJson);
+            return httpClient;
+        } catch (Exception e) {
+            log.error("【httpClient】初始化失败",e);
             return null;
         }
-        return hmClients.values().stream().findFirst().orElse(null);
     }
+
 }