MtPlanDataLoadThread.java 5.2 KB
package com.bsth.data.maintenance_plan;

import com.bsth.data.SystemParamCache;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.net.ssl.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.List;
import java.util.Map;

/**
 * 维修保养计划
 * @author Hill
 */
//@Component
public class MtPlanDataLoadThread extends Thread implements InitializingBean {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    private String url = SystemParamCache.getUrlHttpMaintenance();
    private CloseableHttpClient httpClient;
    private RequestConfig requestConfig;
    private CloseableHttpResponse response;
    private HttpEntity entity;
    private BufferedReader br;

    private final static String HTTPS = "https://";

    private SSLConnectionSocketFactory sslConnectionSocketFactory;

    @Autowired
    private ObjectMapper objectMapper;

    public CloseableHttpClient defaultHttpClient(String url) {
        if (url.startsWith(HTTPS)) {
            return HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();
        }
        return HttpClients.createDefault();
    }

    @Override
    public void run() {
        logger.warn("维修保养计划获取数据开始");
        List<MaintenancePlan> list;
        StringBuilder sb = new StringBuilder(url);
        try {
            HttpGet get = new HttpGet(sb.append("?date=").append(new DateTime().toString("yyyy-MM-dd")).toString());
            get.setConfig(requestConfig);
            response = httpClient.execute(get);

            int statusCode = response.getStatusLine().getStatusCode();
            if(statusCode != 200){
                logger.error("http client status code: " + statusCode);
            }

            entity = response.getEntity();
            if (null != entity) {
                br = new BufferedReader(new InputStreamReader(entity.getContent()));
                StringBuffer stringBuffer = new StringBuffer();
                String str = "";
                while ((str = br.readLine()) != null) {
                    stringBuffer.append(str);
                }

                //stringBuffer = new StringBuffer("{\"result\": [{\"gsmc\": \"杨高公司\", \"zbh\": \"S01-002\", \"bysj\": 1663171200000, \"bydj\": \"一级保养\", \"bydd\": \"成山路\"}], \"msg\": \"成功\", \"code\": \"200\", \"success\": true}");
                Map map = objectMapper.readValue(stringBuffer.toString(), Map.class);
                list = objectMapper.readValue(objectMapper.writeValueAsString(map.get("result")), objectMapper.getTypeFactory().constructParametricType(List.class, MaintenancePlan.class));

                for (MaintenancePlan sd : list) {
                    MtPlanCenter.put(sd);
                }
            }

            if (null != response)
                response.close();
        } catch (Exception e) {
            logger.error("维修保养计划接口报错了", e);
        }
        logger.warn("维修保养计划获取数据结束");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        try {
            SSLContext sslCtx = SSLContext.getInstance("TLSv1.2");
            sslCtx.init(null, new TrustManager[] {
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                        }

                        @Override
                        public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                        }

                        @Override
                        public X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }
                    }
            }, null);
            sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslCtx, new HostnameVerifier() {

                @Override
                public boolean verify(String hostname, SSLSession session) {
                    // TODO Auto-generated method stub
                    return true;
                }
            });
        } catch (Exception e) {
            logger.error("SSL context set fail: {}", e);
        }

        httpClient = defaultHttpClient(url);

        requestConfig = RequestConfig.custom()
                .setConnectTimeout(5500).setConnectionRequestTimeout(5000)
                .setSocketTimeout(5500).build();
    }
}