package nc.bs.uapbd.bip.workplugin;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.yonyou.cloud.utils.StringUtils;
import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException;
import nc.bs.logging.Log;
import nc.bs.pub.pa.PreAlertObject;
import nc.bs.pub.taskcenter.BgWorkingContext;
import nc.bs.pub.taskcenter.IBackgroundWorkPlugin;
import nc.bs.trade.business.HYSuperDMO;
import nc.jdbc.framework.processor.MapListProcessor;
import nc.util.mmf.framework.base.MMValueCheck;
import nc.vo.bd.defdoc.DefdocVO;
import nc.vo.pub.BusinessException;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.zip.GZIPInputStream;

/**
 * 定时任务-回写bip合同销售订单字段
 * 2005适配2312
 *
 * @author mzr
 * @date 2025/3/26
 */
public class ErpSaleOrderToBIPBackgroupWorkPlugin implements IBackgroundWorkPlugin {
    private static final Log logger = Log.getInstance("syscron");

    private HYSuperDMO superDMO = null;
    private String baseUrl = "https://www.tkkfbip.com";


    public HYSuperDMO getSuperDMO() {

        if (superDMO == null) {
            superDMO = new HYSuperDMO();
        }

        return superDMO;
    }

    /**
     * 检查bip参数是否完整
     *
     * @return
     */
    private Map<String, String> checkBipParam() {

        Map<String, String> map = new HashMap<String, String>();

        String strWhere = " pk_defdoclist in (select pk_defdoclist from bd_defdoclist where code='BIP-sq' and dr=0 )  and dr=0";

        try {
            DefdocVO[] defdocVOs = (DefdocVO[]) getSuperDMO().queryByWhereClause(DefdocVO.class, strWhere);
            if (defdocVOs != null && defdocVOs.length > 0) {
                for (DefdocVO defdocVO : defdocVOs) {

                    map.put(defdocVO.getCode().trim(), defdocVO.getName());

                }
            }
        } catch (DAOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return map;

    }

    @Override
    public PreAlertObject executeTask(BgWorkingContext arg0) throws BusinessException {
        // TODO Auto-generated method stub

        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateTime = dateFormat.format(date);

        Map<String, String> bipParamMap = checkBipParam();
        if (bipParamMap.isEmpty()) {
            return null;
        }

        baseUrl = bipParamMap.get("baseUrl");
        Map<String, Object> userMap = arg0.getKeyMap();
        String usercustcode = "";

        if (!userMap.isEmpty()) {
            if (userMap.get("code") != null) {
                usercustcode = userMap.get("code").toString();
            }

        }

        String invoiceReceiveUrl = bipParamMap.get("contractSaleOrder");// 开票申请单回传
        if (StringUtils.isEmpty(invoiceReceiveUrl)) {
            return null;
        }


        Gson gson = new Gson();


        // 获取未推送合同销售订单更新的销售发票信息；
        String sql = " select * from v_bip_so_cron";

        List<Map<String, String>> l_pk = (List<Map<String, String>>) new BaseDAO().executeQuery(sql.toString(), new MapListProcessor());
        if (l_pk.isEmpty()) {
            return null;
        }

        for (Map<String, String> map : l_pk) {
            // 用标志位flag判断来源（1：销售发票，2：出库单）
            String flag = map.get("flag");
            StringBuffer sb = new StringBuffer();
            if ("2".equals(flag)) {
                sb.append(" select ic_saleout_b.cgeneralbid as csaleinvoicebid,so_saleorder.vdef9,so_saleorder_b.vbdef11, so_saleorder_b.fretexchange,   so_saleorder_b.cexchangesrcretid,    so_saleorder_exe.narrangemonum,    so_saleorder_exe.ntotalreturnnum,   so_saleorder_exe.ntotalrednum," +
                        "  so_saleorder_exe.ntotalarmny as totalaccrued ,so_saleorder_exe.ntotalinvoicenum as billqty, NVL(so_saleorder_exe.ntotaloutnum, 0) as totaloutqty ");
                sb.append(" from so_saleorder_exe,ic_saleout_b,ic_saleout_h,so_saleorder_b,so_saleorder ");
                sb.append(" where so_saleorder_exe.csaleorderbid=ic_saleout_b.cfirstbillbid ");
                sb.append(" and ic_saleout_h.cgeneralhid = ic_saleout_b.cgeneralhid ");
                sb.append(" and so_saleorder_exe.csaleorderbid=so_saleorder_b.csaleorderbid ");
                sb.append(" and so_saleorder.csaleorderid=so_saleorder_b.csaleorderid ");
                sb.append(" and so_saleorder_exe.dr=0 and so_saleorder.dr=0 and so_saleorder_b.dr=0 ");
                sb.append(" and nvl(so_saleorder.vdef9,'~') not in ('~') ");
                sb.append(" and so_saleorder_exe.csaleorderbid='").append(map.get("cfirstbid")).append("'");
            } else {
                sb.append(" select so_saleinvoice_b.csaleinvoicebid,so_saleorder.vdef9,so_saleorder_b.vbdef11,so_saleorder_b.fretexchange,   so_saleorder_b.cexchangesrcretid,    so_saleorder_exe.narrangemonum,    so_saleorder_exe.ntotalreturnnum,   so_saleorder_exe.ntotalrednum,   so_saleorder_exe.ntotalarmny as totalaccrued ,so_saleorder_exe.ntotalinvoicenum as billqty, NVL(so_saleorder_exe.ntotaloutnum, 0) as totaloutqty ");
                sb.append(" from so_saleorder_exe,so_saleinvoice_b,so_saleinvoice,so_saleorder_b,so_saleorder ");
                sb.append(" where so_saleorder_exe.csaleorderbid=so_saleinvoice_b.csrcbid ");
                sb.append(" and so_saleinvoice.csaleinvoiceid=so_saleinvoice_b.csaleinvoiceid and so_saleinvoice.fstatusflag=2 ");
                sb.append(" and so_saleorder_exe.csaleorderbid=so_saleorder_b.csaleorderbid ");
                sb.append(" and so_saleorder.csaleorderid=so_saleorder_b.csaleorderid ");
                sb.append(" and so_saleorder_exe.dr=0 and so_saleorder.dr=0 and so_saleorder_b.dr=0 ");
                sb.append(" and nvl(so_saleorder.vdef9,'~') not in ('~') ");
                sb.append(" and so_saleorder_exe.csaleorderbid='").append(map.get("cfirstbid")).append("'");
            }

            List<Map<String, String>> ll_saleorder = (List<Map<String, String>>) new BaseDAO().executeQuery(sb.toString(), new MapListProcessor());

            if (ll_saleorder.isEmpty()) {
                continue;
            }


            try {
                String accessToken = getAccessToken(baseUrl, bipParamMap);
                Map<String, String> tokenParam = new HashMap<>();
                tokenParam.put("access_token", accessToken);
                Map<String, String> headers = new HashMap<String, String>();
                headers.put("Content-Type", "application/json");
                String custUpdateUrl = baseUrl + invoiceReceiveUrl;
                if (accessToken != "") {
                    JSONObject js_apct_detail = new JSONObject();
                    JSONObject js_apct = new JSONObject();
                    String hid = ll_saleorder.get(0).get("vdef9");// BIP合同销售订单更新 主表id
                    List<Map<String, Object>> l_map_f = new ArrayList<Map<String, Object>>();
                    for (Map<String, String> custpkmap : ll_saleorder) {

                        Map<String, Object> b_map = new HashMap<String, Object>();

                        b_map.put("id", custpkmap.get("vbdef11"));// BIP合同销售订单更新 子表id
                        b_map.put("billQty", custpkmap.get("billqty"));// 累计开票主数量
                        b_map.put("totalAccrued", custpkmap.get("totalaccrued"));// 累计确认应收金额
                        b_map.put("totalOutQty", custpkmap.get("totaloutqty"));// 累计出库主数量

                        b_map.put("fretexchange", custpkmap.get("fretexchange")); // 退换货标记
                        b_map.put("cexchangesrcretid", custpkmap.get("cexchangesrcretid")); // 换货行对应退货行
                        b_map.put("narrangemonum", custpkmap.get("narrangemonum")); // 累计安排生产订单主数量
                        b_map.put("ntotalreturnnum", custpkmap.get("ntotalreturnnum")); // 累计退货主数量
                        b_map.put("ntotalrednum", custpkmap.get("ntotalrednum")); // 累计回冲主数量


                        l_map_f.add(b_map);

                        js_apct.put("contractOrdersList", l_map_f);
                        js_apct.put("id", hid);

                        js_apct_detail.put("HTXSDD", js_apct);
                        logger.error("ErpSaleOrderToBIPBackgroupWorkPlugin-param = " + js_apct_detail.toJSONString());
                        String resultString = doSendHttp(custUpdateUrl, "POST", tokenParam, "", headers, js_apct_detail.toJSONString());
                        logger.error("ErpSaleOrderToBIPBackgroupWorkPlugin-res = " + resultString);
                        Map updateMap = gson.fromJson(resultString, Map.class);
                        String updateSql = "";
                        if (StringUtils.equals("200", updateMap.get("code").toString())) {// 保存更新成功后需要更新日志表
                            if ("1".equals(flag)) {
                                updateSql = "update so_saleinvoice_b set vbdef10='Y' where csaleinvoicebid='" + map.get("csaleinvoicebid") + "'";
                            } else {
                                updateSql = "update ic_saleout_b set vbdef4='Y' where cgeneralbid='" + map.get("csaleinvoicebid") + "'";
                            }
                        } else {
                            if ("1".equals(flag)) {
                                updateSql = "update so_saleinvoice_b set vbdef10='N' where csaleinvoicebid='" + map.get("csaleinvoicebid") + "'";
                            } else {
                                updateSql = "update ic_saleout_b set vbdef4='N' where cgeneralbid='" + map.get("csaleinvoicebid") + "'";
                            }
                        }
                        getSuperDMO().executeUpdateSQL(updateSql);

                    }
                }

            } catch (Exception e) {
                logger.error("ErpSaleOrderToBIPBackgroupWorkPlugin-exp: " + e.getMessage(), e);
            }


        }


        return null;
    }


    /**
     * 查询bip 中开户行及银行类型id
     *
     * @param map
     * @param bipUrl
     * @return
     */
    private static Map<String, String> getBIPBankID(HashMap<String, String> map, String bipUrl, String accessToken, String bankdocname) {

        Gson gson = new Gson();

        Map<String, String> tokenParam = new HashMap<>();
        tokenParam.put("access_token", accessToken);
        String jsonData = JSON.toJSONString(map);
        String resultString = doSendHttp(bipUrl, "POST", tokenParam, "", new HashMap<>(), jsonData);
//			Map custDetailresult = gson.fromJson(resultString, Map.class);
        JSONObject custDetailresult = JSON.parseObject(resultString);
        if (StringUtils.equals("200", custDetailresult.get("code").toString())) {// 数据存在
            Map<String, Object> dataInfo = (Map<String, Object>) custDetailresult.get("data");
            if (!MMValueCheck.isEmpty(dataInfo.get("recordList"))) {
                List<Map<String, String>> l_record = (List<Map<String, String>>) dataInfo.get("recordList");
                return l_record.get(0);
            } else {
                map.remove("linenumber");
                map.put("name", bankdocname);
                jsonData = JSON.toJSONString(map);
                resultString = doSendHttp(bipUrl, "POST", tokenParam, "", new HashMap<>(), jsonData);
//					 custDetailresult = gson.fromJson(resultString, Map.class);
                custDetailresult = JSON.parseObject(resultString);
                if (StringUtils.equals("200", custDetailresult.get("code").toString())) {// 数据存在
                    dataInfo = (Map<String, Object>) custDetailresult.get("data");
                    if (!MMValueCheck.isEmpty(dataInfo.get("recordList"))) {
                        List<Map<String, String>> l_record = (List<Map<String, String>>) dataInfo.get("recordList");
                        return l_record.get(0);
                    }
                }
            }
        }
        return null;
    }


    public static String doSendHttp(String baseUrl, String method, Map<String, String> paramMap, String mediaType, Map<String, String> headers, String json) {
        HttpURLConnection urlConnection = null;
        InputStream in = null;
        OutputStream out = null;
        BufferedReader bufferedReader = null;
        String result = null;
        try {
            StringBuffer sb = new StringBuffer();
            sb.append(baseUrl);
            if (paramMap != null) {
                sb.append("?");
                for (Map.Entry<String, String> entry : paramMap.entrySet()) {
                    String key = entry.getKey();
                    String value = entry.getValue();
                    sb.append(key + "=" + value).append("&");
                    baseUrl = sb.toString().substring(0, sb.toString().length() - 1);
                }
            }
//            log.error("uRL:" + baseUrl);
//            // 打印请求URL和方法
//            log.error("Request URL: " + baseUrl);
//            log.error("Request Method: " + method);
            URL urlobj = new URL(baseUrl);
            if ("https".equalsIgnoreCase(urlobj.getProtocol())) {// 判定网址是否信任，不信任则调用忽略信任工具类SslUtil
                IgnoreSslUtil.ignoreSsl();
            }
            urlConnection = (HttpURLConnection) urlobj.openConnection();
            urlConnection.setConnectTimeout(50000);
            urlConnection.setRequestMethod(method);
            urlConnection.setDoInput(true);
            urlConnection.setUseCaches(false);
            // 如果设置了自定义头，则打印它们
            if (headers != null && !headers.isEmpty()) {
                for (Map.Entry<String, String> entry : headers.entrySet()) {
                    urlConnection.addRequestProperty(entry.getKey(), entry.getValue());
//                    log.error("Request Header: " + entry.getKey() + ": " + entry.getValue());
                }
            }
            if (json != null && json.length() > 0) {
//                log.error("Request Body: " + json);
                urlConnection.setDoInput(true);
                urlConnection.setDoOutput(true);
                out = urlConnection.getOutputStream();
                out.write(json.getBytes("utf-8"));
                out.flush();
            }
            int resCode = urlConnection.getResponseCode();
            String ecod = urlConnection.getContentEncoding();
            if (resCode == HttpURLConnection.HTTP_OK || resCode == HttpURLConnection.HTTP_CREATED
                    || resCode == HttpURLConnection.HTTP_ACCEPTED) {
                if (StringUtils.isNotEmpty(ecod) && ecod.equals("gzip")) {
                    in = new GZIPInputStream(urlConnection.getInputStream());
                } else {
                    in = urlConnection.getInputStream();
                }
            } else {
                in = urlConnection.getErrorStream();
            }
            bufferedReader = new BufferedReader(new InputStreamReader(in, "utf-8"));
            StringBuffer temp = new StringBuffer();
            String line = bufferedReader.readLine();
            while (line != null) {
                temp.append(line).append("\r\n");
                line = bufferedReader.readLine();
            }
            if (ecod == null || ecod.equals("gzip")) {
                ecod = Charset.forName("utf-8").name();
            }
            result = new String(temp.toString().getBytes("utf-8"), ecod);
        } catch (Exception e) {
            JSONObject js = new JSONObject();
            js.put("", -1);
            js.put("message", "调用外系统接口失败：" + e.getMessage());
            result = js.toString();
            e.printStackTrace();
        } finally {
            if (null != bufferedReader) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != out) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != in) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            urlConnection.disconnect();
        }
        return result;
    }


//	private String createCustBankMap(Map<String,String> map,String access_token) {
//		Gson gson = new Gson();
//		//获取BIP中的客户详情
//		String custcode=map.get("custcode");
//		String custurl=baseUrl+"/yonbip/digitalModel/merchant/detail?access_token="+access_token;
//		HashMap<String, String> custMap = new HashMap<String, String>();
//		custMap.put("code", custcode);
//		try {
//			String custdetailString=doGet(custurl,custMap);
//
//			Map custDetailresult = gson.fromJson(custdetailString, Map.class);
//			if (StringUtils.equals("200", custDetailresult.get("code").toString())) {//客户存在
//
//				Map<String, Object> dataInfo = (Map<String, Object>) custDetailresult.get("data");
//
//				if (!MMValueCheck.isEmpty(dataInfo.get("merchantAgentFinancialInfos"))){//客户中已经存在银行账户
//
//				}else {
//
//				}
//
//			}
//
//
//			//开户行
//			String bankdoccode=map.get("bankdoccode");
//			HashMap<String, Object> paramap  = new HashMap<String, Object>();
//			paramap.put("pageIndex", 0);
//			paramap.put("pageSize", 10);
//			paramap.put("linenumber", bankdoccode);
//			String url=baseUrl+"/yonbip/digitalModel/bankdot/list?access_token="+access_token;
//
//			String responseString=doPost(url,paramap);
//
//			Map result = gson.fromJson(responseString, Map.class);
//
//		} catch (IOException e1) {
//			// TODO Auto-generated catch block
//			e1.printStackTrace();
//		}
//
//	}


    private String getAccessToken(String baseUrl, Map<String, String> bipParamMap) throws NoSuchAlgorithmException, InvalidKeyException, IOException {
        String tokenUrl = baseUrl + "/iuap-api-auth/open-auth/selfAppAuth/getAccessToken";
//		String appKey = "f10c4bf17b1d4e1fb08eb82bf8540eab";
        String appKey = bipParamMap.get("appKey");

//		String appSecret = "71dc2a58ca378c1a1143231a62e73e75a60e9236";
        String appSecret = bipParamMap.get("appSecret");
        String accessToken = "";
        Map<String, String> params = new HashMap<>();


        params.put("appKey", appKey);
        String timestamp = String.valueOf(System.currentTimeMillis());
        params.put("timestamp", timestamp);
        // 计算签名
        Map<String, String> treeMap;
        if (params instanceof TreeMap) {
            treeMap = params;
        } else {
            treeMap = new TreeMap<>(params);
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (Map.Entry<String, String> entry : treeMap.entrySet()) {
            stringBuilder.append(entry.getKey()).append(entry.getValue());
        }
        Mac mac = Mac.getInstance("HmacSHA256");

        mac.init(new SecretKeySpec(appSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
        byte[] signData = mac.doFinal(stringBuilder.toString().getBytes(StandardCharsets.UTF_8));
        String base64String = Base64.getEncoder().encodeToString(signData);
        String signature = URLEncoder.encode(base64String, "UTF-8");
        params.put("signature", signature);

        String responseString = doGet(tokenUrl, params);

        Gson gson = new Gson();
        Map result = gson.fromJson(responseString, Map.class);
        if (StringUtils.equals("00000", result.get("code").toString())) {
            Map<String, Object> tokenInfo = (Map<String, Object>) result.get("data");
            accessToken = (String) tokenInfo.get("access_token");

        }


        return accessToken;
    }


    private String doPost(String requestUrl, JSONObject jsonObject) throws IOException {
        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        cm.setMaxTotal(500);
        cm.setDefaultMaxPerRoute(50);

        RequestConfig globalConfig = RequestConfig.custom().setConnectionRequestTimeout(5000) // 连接池获取连接超时
                .setConnectTimeout(5000) // 连接建立超时
                .setSocketTimeout(20000) // 等待响应超时
                .setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();

        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm)
                .setDefaultRequestConfig(globalConfig).build();
        HttpPost post = new HttpPost(requestUrl);
        post.setHeader("Content-Type", "application/json;charset=UTF-8");
        post.setEntity(new StringEntity(JSONObject.toJSONString(jsonObject), "utf-8"));
        String responseString = httpClient.execute(post, response -> EntityUtils.toString(response.getEntity()));
        return responseString;

    }


    private String doPost(String requestUrl, Map<String, Object> param) throws IOException {
        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        cm.setMaxTotal(500);
        cm.setDefaultMaxPerRoute(50);

        RequestConfig globalConfig = RequestConfig.custom().setConnectionRequestTimeout(5000) // 连接池获取连接超时
                .setConnectTimeout(5000) // 连接建立超时
                .setSocketTimeout(20000) // 等待响应超时
                .setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();

        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm)
                .setDefaultRequestConfig(globalConfig).build();
        HttpPost post = new HttpPost(requestUrl);
        post.setHeader("Content-Type", "application/json;charset=UTF-8");
        post.setEntity(new StringEntity(JSONObject.toJSONString(param), "utf-8"));
        String responseString = httpClient.execute(post, response -> EntityUtils.toString(response.getEntity()));
        return responseString;

    }


    private static String doGet(String path, Map<String, String> params) throws IOException {
        HttpURLConnection conn = null;
        InputStream is = null;
        BufferedReader br = null;
        StringBuilder result = new StringBuilder();
        try {
            if (params != null) {
                String paramStr = "";
                for (String key : params.keySet()) {
                    if (!paramStr.isEmpty()) {
                        paramStr += '&';
                    }
                    paramStr += key + '=' + params.get(key);
                }

                if (path.indexOf('?') > 0) {
                    path += '&' + paramStr;
                } else {
                    path += '?' + paramStr;
                }
            }
            // 创建远程url连接对象
            URL url = new URL(path);
            if ("https".equalsIgnoreCase(url.getProtocol())) {// 判定网址是否信任，不信任则调用忽略信任工具类SslUtil
                IgnoreSslUtil.ignoreSsl();
            }
            // 通过远程url连接对象打开一个连接，强转成HTTPURLConnection类
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            // 设置连接超时时间和读取超时时间
            conn.setConnectTimeout(120000);
            conn.setReadTimeout(120000);
            conn.setRequestProperty("Accept", "application/json");
            // 发送请求
            conn.connect();
            // 通过conn取得输入流，并使用Reader读取
            if (200 == conn.getResponseCode()) {
                is = conn.getInputStream();
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                String line;
                while ((line = br.readLine()) != null) {
                    result.append(line);
                    System.out.println(line);
                }
            } else {
                System.out.println("ResponseCode is an error code:" + conn.getResponseCode());
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
//        finally {
//            try {
//                if (br != null) {
//                    br.close();
//                }
//                if (is != null) {
//                    is.close();
//                }
//            } catch (IOException ioe) {
//                ioe.printStackTrace();
//            }
//            conn.disconnect();
//        }
        return result.toString();
    }


//    private String doGet(String requestUrl, Map<String, String> paramMap) throws IOException {
//		PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
//		cm.setMaxTotal(500);
//		cm.setDefaultMaxPerRoute(50);
//
//		RequestConfig globalConfig = RequestConfig.custom().setConnectionRequestTimeout(5000) // 连接池获取连接超时
//				.setConnectTimeout(5000) // 连接建立超时
//				.setSocketTimeout(20000) // 等待响应超时
//				.setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
//
//		CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm)
//				.setDefaultRequestConfig(globalConfig).build();
//		StringBuilder param = new StringBuilder("?");
//		if (paramMap != null) {
//			for (Map.Entry<String, String> entry : paramMap.entrySet()) {
//				param.append(entry.getKey());
//				param.append("=");
//				param.append(entry.getValue());
//				param.append("&");
//			}
//			param.deleteCharAt(param.length() - 1);
//		}
//		String url = requestUrl + param;
//		HttpGet get = new HttpGet(url);
//		String responseString = httpClient.execute(get, response -> EntityUtils.toString(response.getEntity()));
//		get.releaseConnection();
//		return responseString;
//	}

}
