package shkd.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.bes.enterprise.hc.core.http.message.BasicNameValuePair;
import com.bes.mq.org.apache.http.HttpEntity;
import com.bes.mq.org.apache.http.HttpResponse;
import com.bes.mq.org.apache.http.NameValuePair;
import com.bes.mq.org.apache.http.client.ClientProtocolException;
import com.bes.mq.org.apache.http.client.methods.HttpGet;
import com.bes.mq.org.apache.http.client.utils.URLEncodedUtils;
import com.bes.mq.org.apache.http.impl.client.DefaultHttpClient;
import com.bes.mq.org.apache.http.params.BasicHttpParams;
import com.bes.mq.org.apache.http.params.HttpConnectionParams;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.entity.OrmLocaleValue;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.bos.util.HttpClientUtils;
import kd.bos.util.StringUtils;
import okhttp3.OkHttpClient;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.*;
import java.net.URI;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 天眼查集成工具类
 */
public class TycUtils {

    //天眼查接口正式_token
    public static final String tyc_Token = "29493db8-db63-4efe-8530-7b87e0b4b87a";//24000元
//    public static final String tyc_Token = "6d62098a-b59a-43a0-8dd6-ec24a647efc5";//500次
    //天眼查API_企业基本信息(含主要人员)_819
    public static final String tyc_Baseinfo = "http://open.api.tianyancha.com/services/open/ic/baseinfoV3/2.0";
    //天眼查API_疑似实际控制人_1123
    public static final String tyc_ActualControl = "http://open.api.tianyancha.com/services/open/ic/actualControl/3.0";
    //天眼查API_实际控制权_747
    public static final String tyc_Companyholding = "http://open.api.tianyancha.com/services/v4/open/companyholding";
    //天眼查API_总公司_963
    public static final String tyc_ParentCompany = "http://open.api.tianyancha.com/services/open/ic/parentCompany/2.0";
    //天眼查API_工商信息_1001
    public static final String tyc_Ic = "http://open.api.tianyancha.com/services/open/cb/ic/2.0";
    //天眼查API_建筑资质-注册人员_1009
    public static final String tyc_RegHuman = "http://open.api.tianyancha.com/services/open/bq/regHuman/2.0";
    //天眼查API_建筑资质-工程项目_1011
    public static final String tyc_Project = "http://open.api.tianyancha.com/services/open/bq/project/2.0";
    //天眼查API_失信被执行人(人员)_1076
    public static final String tyc_Human_Dishonest = "http://open.api.tianyancha.com/services/v4/open/human/dishonest";
    //天眼查API_被执行(人员)_1077
    public static final String tyc_ZhiXingInfo = "http://open.api.tianyancha.com/services/v4/open/human/zhixinginfo";
    //苍穹系统预置👇
    //天眼查API_资质证书_880
    public static final String tyc_Certificate = "http://open.api.tianyancha.com/services/open/m/certificate/2.0";
    //天眼查API_建筑资质-资质资格_1007
    public static final String tyc_Qualification = "http://open.api.tianyancha.com/services/open/bq/qualification/2.0";
    //天眼查API_变更记录_822
    public static final String tyc_Changeinfo = "http://open.api.tianyancha.com/services/open/ic/changeinfo/2.0";
    //天眼查API_经营异常_848
    public static final String tyc_Abnormal = "http://open.api.tianyancha.com/services/open/mr/abnormal/2.0";
    //天眼查API_企业股东_821
    public static final String tyc_Holder = "http://open.api.tianyancha.com/services/open/ic/holder/2.0";
    //天眼查API_建筑资质-不良行为_1030
    public static final String tyc_BadConduct = "http://open.api.tianyancha.com/services/open/bq/badConduct/2.0";
    //天眼查API_企业三要素验证_1074
    public static final String tyc_Verify = "http://open.api.tianyancha.com/services/open/ic/verify/2.0";
    //天眼查API_行政处罚_1124
    public static final String tyc_PunishmentInfo = "http://open.api.tianyancha.com/services/open/mr/punishmentInfo/3.0";
    //天眼查API_严重违法_846
    public static final String tyc_Illegalinfo = "http://open.api.tianyancha.com/services/open/mr/illegalinfo/2.0";
    //天眼查API_法律诉讼_1114
    public static final String tyc_LawSuit = "http://open.api.tianyancha.com/services/open/jr/lawSuit/3.0";
    //天眼查API_失信人_843
    public static final String tyc_Jr_Dishonest = "http://open.api.tianyancha.com/services/open/jr/dishonest/2.0";

    private static final Log logger = LogFactory.getLog(TycUtils.class);

    /**
     * http get请求
     * @param url 接口url
     * @param token token
     * @param supname 供应商name
     * @param apiname 接口name
     * @param type 0:潜在/1:正式/2:变更
     * @return  返回接口数据
     */
    public static String executeGet(String token,String url,String supname,String apiname,Integer type) {

        // 创建 OkHttpClient 对象
        OkHttpClient client = new OkHttpClient();

        // 创建请求对象,设置请求地址
        Request request = new Request.Builder()
                .url(url)
                .header("Content-Type", "application/json")
                .header("Authorization", token)
                .build();

        String resultData = null;
        try {
            Response response = client.newCall(request).execute();
            resultData = response.body().string();
            JSONObject resultData1 = JSONObject.parseObject(resultData);
            if (null != resultData1) {
                JSONObject result = (JSONObject) resultData1.get("result");
                String logType = "";

                // 根据type的值设置logType
                switch (type) {
                    case 0:
                        logType = "潜在";
                        break;
                    case 1:
                        logType = "正式";
                        break;
                    case 2:
                        logType = "变更";
                        break;
                    default:
                        logType = "未定义";  // 可选的默认值
                        break;
                }

                DobeDWUtils.saveLog(supname + "_" + logType,
                        "天眼查", apiname + "\n" + request.toString(), resultData.toString(),
                        null != result, "query_tyc");
            }

        } catch (Exception e) {
            String logType = "";

            // 根据type的值设置logType
            switch (type) {
                case 0:
                    logType = "潜在";
                    break;
                case 1:
                    logType = "正式";
                    break;
                case 2:
                    logType = "变更";
                    break;
                default:
                    logType = "未定义";  // 可选的默认值
                    break;
            }

            DobeDWUtils.saveLog(supname + "_" + logType,
                    "天眼查", apiname + "\n" + request.toString(), e.getMessage(),
                    false, "query_tyc");
        }
        return resultData;

    }

    /**
     * 天眼查查询
     * @param supplier 供应商实体
     * @param type 0:潜在/1:正式
     */
    public static void queryTyc(DynamicObject supplier, Integer type) {
        String tyc_Test_keyword = supplier.getString("name");//供应商名称
        try {

            /**
             * 1.企业基本信息(含主要人员)_819  ?keyword=中航重机股份有限公司
             */
            String tyc_Baseinfo = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Baseinfo
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "企业基本信息(含主要人员)_819",type);
            JSONObject tyc_Baseinfo_results = JSONObject.parseObject(tyc_Baseinfo);
            if (null != tyc_Baseinfo_results) {
                JSONObject tyc_Baseinfo_result = (JSONObject) tyc_Baseinfo_results.get("result");
                if (null != tyc_Baseinfo_result) {
                    //法人
                    String legalPersonName = (String) tyc_Baseinfo_result.get("legalPersonName");
                    //注册号
                    String regNumber = (String) tyc_Baseinfo_result.get("regNumber");
                    //组织机构代码
                    String orgNumber = (String) tyc_Baseinfo_result.get("orgNumber");
                    //营业期限(逻辑待定)--经营开始时间-经营结束时间
                    String businessduration = "";
                    Long fromTime = (Long) tyc_Baseinfo_result.get("fromTime");//开始时间
                    Long toTime = (Long) tyc_Baseinfo_result.get("toTime");//结束时间
                    if (null != fromTime && null != toTime) {
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        businessduration = sdf.format(new Date(fromTime)) + "至" + sdf.format(new Date(toTime));//营业期限
                    }
                    //注册地址
                    String regLocation = (String) tyc_Baseinfo_result.get("regLocation");
                    //登记机关
                    String regInstitute = (String) tyc_Baseinfo_result.get("regInstitute");
                    //经营范围(2000 文本)
                    String businessScope = (String) tyc_Baseinfo_result.get("businessScope");
                    //企业状态(经营状态)
                    String regStatus = (String) tyc_Baseinfo_result.get("regStatus");
                    //网址
                    String websiteList = (String) tyc_Baseinfo_result.get("websiteList");
                    //todo 发照日期
                    //统一社会信用代码
                    String creditCode = (String) tyc_Baseinfo_result.get("creditCode");
                    //行业
                    String industry = (String) tyc_Baseinfo_result.get("industry");
                    //省份简称
                    String base = (String) tyc_Baseinfo_result.get("base");
                    String provinceName = getProvinceName(base);
                    //注册资本
                    String regCapital = (String) tyc_Baseinfo_result.get("regCapital");
                    //企业联系电话
                    //企业联系方式
                    String phoneNumber = (String) tyc_Baseinfo_result.get("phoneNumber");
                    //企业类型
                    String companyOrgType = (String) tyc_Baseinfo_result.get("companyOrgType");
                    //成立日期
                    String estiblishtime = "";
                    Long estiblishTime = (Long) tyc_Baseinfo_result.get("estiblishTime");
                    if (null != estiblishTime) {
                        estiblishtime = convertTimestampToDate(estiblishTime);
                    }
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    //注销日期
                    String canceldate = "";
                    Long cancelDate = (Long) tyc_Baseinfo_result.get("cancelDate");
                    if (null != cancelDate) {
                        canceldate = convertTimestampToDate(cancelDate);
                    }
                    //市
                    String city = (String) tyc_Baseinfo_result.get("city");
                    //曾用名
                    String historyNames = (String) tyc_Baseinfo_result.get("historyNames");
                    //参保人数
                    Integer socialStaffNum = (Integer) tyc_Baseinfo_result.get("socialStaffNum");
                    //主要人员列表
                    DynamicObjectCollection qeugEntryentity = supplier.getDynamicObjectCollection("qeug_entryentity");
                    qeugEntryentity.clear();
                    JSONObject staffListS = tyc_Baseinfo_result.getJSONObject("staffList");
                    if (null != staffListS) {
                        JSONArray staffLists = staffListS.getJSONArray("result");
                        if (null != staffLists) {
                            for (int i = 0; i < staffLists.size(); i++) {
                                DynamicObject add = qeugEntryentity.addNew();
                                JSONObject staffList = (JSONObject) staffLists.get(i);
                                String name = staffList.getString("name");//主要人员姓名
                                String typeJoin = "";//主要人员职位
                                JSONArray typeJoins = staffList.getJSONArray("typeJoin");
                                if (null != typeJoins) {
                                    StringBuilder sb = new StringBuilder();
                                    for (int j = 0; j < typeJoins.size(); j++) {
                                        sb.append((String) typeJoins.get(j));
                                        if (j < typeJoins.size() - 1) {
                                            sb.append(",");
                                        }
                                    }
                                    typeJoin = sb.toString();
                                }
                                add.set("seq", i);
                                add.set("qeug_personnelname", name);//主要人员姓名
                                add.set("qeug_position", typeJoin);//主要人员职位
                            }
                        }
                    }

                    //设置到供应商中
                    supplier.set("qeug_legalpersonn", legalPersonName);//法人代表
                    supplier.set("qeug_regnumber", regNumber);//企业注册号
                    supplier.set("qeug_orgnumber", orgNumber);//组织机构代码
                    supplier.set("qeug_businessduration", businessduration);//营业期限
                    supplier.set("qeug_reglocation", regLocation);//公司地址
                    supplier.set("qeug_reginstitute", regInstitute);//登记机关
                    supplier.set("qeug_regstatus", regStatus);//经营状态
                    supplier.set("qeug_websitelist", websiteList);//企业网站
                    try {
                        Date parse = sdf.parse(estiblishtime);
                        supplier.set("qeug_photodate", parse);//发照日期
                        supplier.set("qeug_estiblishtime", parse);//成立日期
                    } catch (ParseException ex) {
                        throw new RuntimeException(ex);
                    }
                    supplier.set("qeug_creditcode", creditCode);//统一社会信用代码
                    supplier.set("qeug_industry", industry);//所属行业
                    supplier.set("qeug_bases", provinceName);//省
                    supplier.set("qeug_regcapital", regCapital);//注册资本
                    supplier.set("qeug_companyorgtype", companyOrgType);//企业类型
                    supplier.set("qeug_canceldate", canceldate);//注销日期
                    supplier.set("qeug_city", city);//城市
                    supplier.set("qeug_phonenumber", phoneNumber);//联系电话
                    supplier.set("qeug_historynames", historyNames);//曾用名
                    supplier.set("qeug_socialstaffnum", socialStaffNum);//参保人数
                    supplier.set("qeug_businessscopes", businessScope);//经营范围
                    SaveServiceHelper.save(new DynamicObject[]{supplier});

                }
            }

            /**
             * 20.疑似实际控制人_1123  ?keyword=北京百度网讯科技有限公司
             */
            String tyc_ActualControl = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_ActualControl
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "疑似实际控制人_1123",type);
            JSONObject tyc_ActualControl_results = JSONObject.parseObject(tyc_ActualControl);
            if (null != tyc_ActualControl_results) {
                JSONObject tyc_ActualControl_result = (JSONObject) tyc_ActualControl_results.get("result");
                if (null != tyc_ActualControl_result) {
                    JSONArray actualControllerLists = tyc_ActualControl_result.getJSONArray("actualControllerList");
                    String name = "";
                    if (null != actualControllerLists) {
                        StringBuilder sb = new StringBuilder();
                        for (int i = 0; i < actualControllerLists.size(); i++) {
                            JSONObject actualControllerList = (JSONObject) actualControllerLists.get(i);
                            sb.append((String) actualControllerList.get("name"));//控制人姓名
                            if (i < actualControllerLists.size() - 1) {
                                sb.append(",");
                            }
                        }
                        name = sb.toString();
                    }
                    supplier.set("qeug_controllingperson", name);//控制人姓名
                    SaveServiceHelper.save(new DynamicObject[]{supplier});
                }
            }

            /**
             * todo 2.实际控制权_747  ?pageSize=20&keyword=北京百度网讯科技有限公司&pageNum=1
             */
            String tyc_Companyholding = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Companyholding
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "实际控制权_747",type);

            /**
             * 3.总公司_963  ?keyword=139573097
             */
            String tyc_ParentCompany = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_ParentCompany
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "总公司_963",type);
            JSONObject tyc_ParentCompany_results = JSONObject.parseObject(tyc_ParentCompany);
            if (null != tyc_ParentCompany_results) {
                JSONObject tyc_ParentCompany_result = (JSONObject) tyc_ParentCompany_results.get("result");
                if (null != tyc_ParentCompany_result) {
                    //总公司名
                    String name = (String) tyc_ParentCompany_result.get("name");
                    supplier.set("qeug_headoffice", name);//总公司名
                    SaveServiceHelper.save(new DynamicObject[]{supplier});
                }
            }


            /**
             * 4.工商信息_1001  ?keyword=9519792
             */
            DynamicObjectCollection qeugIcentry = supplier.getDynamicObjectCollection("qeug_icentry");
            qeugIcentry.clear();
            String tyc_Ic = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Ic
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "工商信息_1001",type);
            JSONObject tyc_Ic_results = JSONObject.parseObject(tyc_Ic);
            if (null != tyc_Ic_results) {
                JSONObject tyc_Ic_result = (JSONObject) tyc_Ic_results.get("result");
                if (null != tyc_Ic_result) {
                    JSONArray branchLists = tyc_Ic_result.getJSONArray("branchList");
                    if (null != branchLists) {
                        for (int i = 0; i < branchLists.size(); i++) {
                            DynamicObject add = qeugIcentry.addNew();
                            JSONObject branchList = (JSONObject) branchLists.get(i);
                            String branchListname = (String) branchList.get("name");//分支机构名称
                            String regStatus = (String) branchList.get("regStatus");//经营状态
                            add.set("seq", i);
                            add.set("qeug_branchlistname", branchListname);//分支机构名称
                            add.set("qeug_regstatusic", regStatus);//经营状态
                            SaveServiceHelper.save(new DynamicObject[]{supplier});
                        }
                    }
                }
            }


            /**
             * 5.建筑资质-注册人员_1009   ?pageSize=20&keyword=中煤科工集团北京华宇工程有限公司&pageNum=1
             */
            DynamicObjectCollection qeugReghumanentry = supplier.getDynamicObjectCollection("qeug_reghumanentry");
            qeugReghumanentry.clear();
            String tyc_RegHuman = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_RegHuman
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "建筑资质-注册人员_1009",type);
            JSONObject tyc_RegHuman_results = JSONObject.parseObject(tyc_RegHuman);
            if (null != tyc_RegHuman_results) {
                JSONObject tyc_RegHuman_result = (JSONObject) tyc_RegHuman_results.get("result");
                if (null != tyc_RegHuman_result) {
                    JSONArray items = tyc_RegHuman_result.getJSONArray("items");
                    if (null != items) {
                        for (int i = 0; i < items.size(); i++) {
                            DynamicObject add = qeugReghumanentry.addNew();
                            JSONObject branchList = (JSONObject) items.get(i);
                            String humanName = (String) branchList.get("humanName");//注册人员名字
                            String registerType = (String) branchList.get("registerType");//注册类别
                            add.set("seq", i);
                            add.set("qeug_humanname", humanName);//注册人员名字
                            add.set("qeug_registertype", registerType);//注册类别
                            SaveServiceHelper.save(new DynamicObject[]{supplier});

                        }
                    }
                }
            }


            /**
             * 6.建筑资质-工程项目_1011  ?pageSize=20&keyword=中煤科工集团北京华宇工程有限公司&pageNum=1
             */
            DynamicObjectCollection qeug_projectentry = supplier.getDynamicObjectCollection("qeug_projectentry");
            qeug_projectentry.clear();
            String tyc_Project = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Project
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "建筑资质-工程项目_1011",type);
            JSONObject tyc_Project_results = JSONObject.parseObject(tyc_Project);
            if (null != tyc_Project_results) {
                JSONObject tyc_Project_result = (JSONObject) tyc_Project_results.get("result");
                if (null != tyc_Project_result) {
                    JSONArray items = tyc_Project_result.getJSONArray("items");
                    for (int i = 0; i < items.size(); i++) {
                        DynamicObject add = qeug_projectentry.addNew();
                        JSONObject o = (JSONObject) items.get(i);
                        String proName = (String) o.get("proName");//项目名称
                        String base = (String) o.get("base");//项目属地
                        String proType = (String) o.get("proType");//项目类别
                        String buildCompany = (String) o.get("buildCompany");//建设单位
                        add.set("seq", i);
                        add.set("qeug_proname", proName);//项目名称
                        add.set("qeug_base", base);//项目属地
                        add.set("qeug_protype", proType);//项目类别
                        add.set("qeug_buildcompanys", buildCompany);//建设单位
                        SaveServiceHelper.save(new DynamicObject[]{supplier});
                    }
                }
            }


            /**
             * 7.失信被执行人(人员)_1076  ?hid=2187083120&name=北京百乐文化传媒有限公司&humanName=贾跃亭&cid=34630712&pageSize=20&pageNum=1
             */
            String tyc_Human_Dishonest = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Human_Dishonest
                    + "?name=" + tyc_Test_keyword, tyc_Test_keyword, "被执行人_1077",type);
            JSONObject tyc_Human_Dishonest_results = JSONObject.parseObject(tyc_Human_Dishonest);
            if (null != tyc_Human_Dishonest_results) {
                JSONObject tyc_Human_Dishonest_result = (JSONObject) tyc_Human_Dishonest_results.get("result");
                if (null != tyc_Human_Dishonest_result) {
                    JSONArray items = tyc_Human_Dishonest_result.getJSONArray("items");
                    for (int i = 0; i < items.size(); i++) {
                        JSONObject o = (JSONObject) items.get(i);
                        String courtname = (String) o.get("courtname");//法院
                        String iname = (String) o.get("iname");//失信人名称
                        String disrupttypename = (String) o.get("disrupttypename");//失信被执行人行为具体情形
                        String performance = (String) o.get("performance");//履行情况
                        String gistunit = (String) o.get("gistunit");//做出执行的依据单位
                        String duty = (String) o.get("duty");//生效法律文书确定的义务
                    }
                }
            }


            /**
             * todo 8.被执行(人员)_1077  ?name=宁夏泰华实业集团有限公司&humanName=禹学峰&cid=185429210&hid=2095668600&pageNum=1&pageSize=20
             */
//                String tyc_ZhiXingInfo = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_ZhiXingInfo
//                        + "?name=" + tyc_Test_keyword);

            /**
             * 9.资质证书_880   ?name=北京百度网讯科技有限公司&certificateName=中国质量认证中心_CCC证书&pageSize=20&id=22822&pageNum=1
             */
            DynamicObjectCollection qeugCertificateentry = supplier.getDynamicObjectCollection("qeug_certificateentry");
            qeugCertificateentry.clear();
            String tyc_Certificate = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Certificate
                    + "?name=" + tyc_Test_keyword, tyc_Test_keyword, "证照_1081",type);
            JSONObject tyc_Certificate_results = JSONObject.parseObject(tyc_Certificate);
            if (null != tyc_Certificate_results) {
                JSONObject tyc_Certificate_result = (JSONObject) tyc_Certificate_results.get("result");
                if (null != tyc_Certificate_result) {
                    JSONArray items = tyc_Certificate_result.getJSONArray("items");
                    for (int i = 0; i < items.size(); i++) {
                        JSONObject o = (JSONObject) items.get(i);
                        DynamicObject add = qeugCertificateentry.addNew();
                        String certNo = (String) o.get("certNo");//证书编号
                        String certificateName = (String) o.get("certificateName");//证书类型
                        String startDate = (String) o.get("startDate");//发证日期
                        String endDate = (String) o.get("endDate");//截止日期
                        add.set("seq", i);
                        add.set("qeug_certno", certNo);
                        add.set("qeug_certificatename", certificateName);
                        add.set("qeug_startdate", startDate);
                        add.set("qeug_enddate", endDate);
                        SaveServiceHelper.save(new DynamicObject[]{supplier});
                    }
                }
            }


            /**
             * 10.建筑资质-资质资格_1007  ?pageSize=20&keyword=河南省建筑设计研究院有限公司&pageNum=1
             */
            DynamicObjectCollection qeug_qualificationentry = supplier.getDynamicObjectCollection("qeug_qualificationentry");
            qeug_qualificationentry.clear();
            String tyc_Qualification = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Qualification
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "建筑资质-资质资格_1007",type);
            JSONObject tyc_Qualification_results = JSONObject.parseObject(tyc_Qualification);
            if (null != tyc_Qualification_results) {
                JSONObject tyc_Qualification_result = (JSONObject) tyc_Qualification_results.get("result");
                if (null != tyc_Qualification_result) {
                    JSONArray items = tyc_Qualification_result.getJSONArray("items");
                    for (int i = 0; i < items.size(); i++) {
                        DynamicObject add = qeug_qualificationentry.addNew();
                        JSONObject o = (JSONObject) items.get(i);
                        String certificateNum = (String) o.get("certificateNum");//资质证书号
                        String qualificationName = (String) o.get("qualificationName");//资质名称
                        String issuingCertificateTime = (String) o.get("issuingCertificateTime");//发证日期
                        String effectiveTime = (String) o.get("effectiveTime");//证书有效期
                        String organ = (String) o.get("organ");//发证机关
                        add.set("seq", i);
                        add.set("qeug_certificatenum", certificateNum);
                        add.set("qeug_qualificationname", qualificationName);
                        add.set("qeug_issuingcertificateti", issuingCertificateTime);
                        add.set("qeug_effectivetime", effectiveTime);
                        add.set("qeug_organ", organ);
                        SaveServiceHelper.save(new DynamicObject[]{supplier});

                    }
                }
            }


            /**
             * 11.变更记录_822  ?keyword=北京百度网讯科技有限公司&pageNum=1&pageSize=20
             */
            DynamicObjectCollection qeugChangeinfo = supplier.getDynamicObjectCollection("qeug_changeinfo");
            qeugChangeinfo.clear();
            String tyc_Changeinfo = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Changeinfo
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "变更记录_822",type);
            JSONObject tyc_Changeinfo_results = JSONObject.parseObject(tyc_Changeinfo);
            if (null != tyc_Changeinfo_results) {
                JSONObject tyc_Changeinfo_result = (JSONObject) tyc_Changeinfo_results.get("result");
                if (null != tyc_Changeinfo_result) {
                    JSONArray items = tyc_Changeinfo_result.getJSONArray("items");
                    for (int i = 0; i < items.size(); i++) {
                        JSONObject o = (JSONObject) items.get(i);
                        DynamicObject add = qeugChangeinfo.addNew();
                        String changeItem = (String) o.get("changeItem");//变更事项
                        String changeTime = (String) o.get("changeTime");//变更时间
                        String contentBefore = (String) o.get("contentBefore");//变更前
                        String contentAfter = (String) o.get("contentAfter");//变更后
                        add.set("seq", i);
                        add.set("qeug_changeitem", changeItem);
                        add.set("qeug_changetime", changeTime);
                        add.set("qeug_contentbefore", contentBefore);
                        add.set("qeug_contentafter", contentAfter);
                        SaveServiceHelper.save(new DynamicObject[]{supplier});
                    }
                }
            }


            /**
             * 12.经营异常_848  ?pageSize=20&keyword=宁夏凯捷建设工程有限公司&pageNum=1
             */
            DynamicObjectCollection qeugAbnormal = supplier.getDynamicObjectCollection("qeug_abnormal");
            qeugAbnormal.clear();
            String tyc_Abnormal = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Abnormal
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "经营异常_848",type);
            JSONObject tyc_Abnormal_results = JSONObject.parseObject(tyc_Abnormal);
            if (null != tyc_Abnormal_results) {
                JSONObject tyc_Abnormal_result = (JSONObject) tyc_Abnormal_results.get("result");
                if (null != tyc_Abnormal_result) {
                    JSONArray items = tyc_Abnormal_result.getJSONArray("items");
                    for (int i = 0; i < items.size(); i++) {
                        JSONObject o = (JSONObject) items.get(i);
                        DynamicObject add = qeugAbnormal.addNew();
                        String putReason = (String) o.get("putReason");//列入异常名录原因
                        String putDate = (String) o.get("putDate");//列入日期
                        String removeReason = (String) o.get("removeReason");//移除异常名录原因
                        String removeDate = (String) o.get("removeDate");//移出日期
                        add.set("seq", i);
                        add.set("qeug_putreason", putReason);
                        add.set("qeug_putdate", putDate);
                        add.set("qeug_removereason", removeReason);
                        add.set("qeug_removedate", removeDate);
                        SaveServiceHelper.save(new DynamicObject[]{supplier});
                    }
                }
            }


            /**
             * 13.企业股东_821  ?pageSize=20&keyword=北京百度网讯科技有限公司&pageNum=1
             */
            DynamicObjectCollection qeugShareholderentry = supplier.getDynamicObjectCollection("qeug_shareholderentry");
            qeugShareholderentry.clear();
            String tyc_Holder = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Holder
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "企业股东_821",type);
            JSONObject tyc_Holder_results = JSONObject.parseObject(tyc_Holder);
            if (null != tyc_Holder_results) {
                JSONObject tyc_Holder_result = (JSONObject) tyc_Holder_results.get("result");
                if (null != tyc_Holder_result) {
                    JSONArray items = tyc_Holder_result.getJSONArray("items");
                    for (Object item : items) {
                        DynamicObject add = qeugShareholderentry.addNew();
                        JSONObject o = (JSONObject) item;
                        String name = (String) o.get("name");//股东名
                        String typeName = "";//股东类型
                        Integer types = (Integer) o.get("type");//股东类型 1-公司 2-人 3-其它
                        switch (types) {
                            case 1:
                                typeName = "公司";
                                break;
                            case 2:
                                typeName = "人";
                                break;
                            case 3:
                                typeName = "其它";
                                break;
                            default:
                                break;
                        }
                        add.set("qeug_name", name);//股东名
                        add.set("qeug_typename", typeName);//股东类型 1-公司 2-人 3-其它
                        SaveServiceHelper.save(new DynamicObject[]{supplier});
                    }
                }
            }


            /**
             * 14.建筑资质-不良行为_1030  ?pageSize=20&keyword=湖北正大建设工程有限公司&pageNum=1
             */
            DynamicObjectCollection qeug_badconductentry = supplier.getDynamicObjectCollection("qeug_badconductentry");
            qeug_badconductentry.clear();
            String tyc_BadConduct = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_BadConduct
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "建筑资质-不良行为_1030",type);
            JSONObject tyc_BadConduct_results = JSONObject.parseObject(tyc_BadConduct);
            if (null != tyc_BadConduct_results) {
                JSONObject tyc_BadConduct_result = (JSONObject) tyc_BadConduct_results.get("result");
                if (null != tyc_BadConduct_result) {
                    JSONArray items = tyc_BadConduct_result.getJSONArray("items");
                    for (int i = 0; i < items.size(); i++) {
                        DynamicObject add = qeug_badconductentry.addNew();
                        JSONObject o = (JSONObject) items.get(i);
                        String integritySubject = (String) o.get("integritySubject");//诚信记录主体
                        String creditIcon = (String) o.get("creditIcon");//标签
                        String decisionContent = (String) o.get("decisionContent");//决定内容
                        String decisionContent2 = (String) o.get("decisionContent2");//决定内容2
                        String reasons = (String) o.get("reasons");//查看事由
                        String decisionDate = (String) o.get("decisionDate");//决定日期
                        String publishValidityPeriod = (String) o.get("publishValidityPeriod");//发布有效期
                        add.set("seq", i);
                        add.set("qeug_integritysubject", integritySubject);
                        add.set("qeug_crediticon", creditIcon);
                        add.set("qeug_decisioncontent", decisionContent);
                        add.set("qeug_decisioncontent2", decisionContent2);
                        add.set("qeug_reasons", reasons);
                        add.set("qeug_decisiondate", decisionDate);
                        add.set("qeug_publishvalidityperio", publishValidityPeriod);
                        SaveServiceHelper.save(new DynamicObject[]{supplier});
                    }
                }
            }


            /**
             * 15.企业三要素验证_1074  ?code=91110000802100433B&name=北京百度网讯科技有限公司&legalPersonName=梁志祥
             */
            String code = supplier.getString("societycreditcode");//统一社会信用代码
            String name = supplier.getString("name");//供应商名字
            String legalPersonName = supplier.getString("artificialperson");//法人
            String tyc_Verify = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Verify
                    + "?code=" + code + "&name=" + name + "&legalPersonName=" + legalPersonName, tyc_Test_keyword, "企业三要素验证_1074",type);
            JSONObject tyc_Verify_results = JSONObject.parseObject(tyc_Verify);
            if (null != tyc_Verify_results) {
                JSONObject tyc_Verify_result = (JSONObject) tyc_Verify_results.get("result");
                String result = "";//三要素验证结果
                if (null != tyc_Verify_result) {
                    Integer o = (Integer) tyc_Verify_result.get("result");//验证结果,0-验证失败,1-验证成功,2-输入企业名疑似曾用名,其他两要素一致
                    switch (o) {
                        case 0:
                            result = "验证失败";
                            break;
                        case 1:
                            result = "验证成功";
                            break;
                        case 2:
                            result = "输入企业名疑似曾用名,其他两要素一致";
                            break;
                        default:
                            break;
                    }
                }
                supplier.set("qeug_verify", result);
                SaveServiceHelper.save(new DynamicObject[]{supplier});
            }


            /**
             * 16.行政处罚_1124  ?pageSize=20&keyword=北京百度网讯科技有限公司&pageNum=1  qeug_punishmentinfoentry
             */
            DynamicObjectCollection qeugPunishmentinfoentry = supplier.getDynamicObjectCollection("qeug_punishmentinfoentry");
            qeugPunishmentinfoentry.clear();
            String tyc_PunishmentInfo = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_PunishmentInfo
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "行政处罚_1124",type);
            JSONObject tyc_PunishmentInfo_results = JSONObject.parseObject(tyc_PunishmentInfo);
            if (null != tyc_PunishmentInfo_results) {
                JSONObject tyc_PunishmentInfo_result = (JSONObject) tyc_PunishmentInfo_results.get("result");
                if (null != tyc_PunishmentInfo_result) {
                    JSONArray items = tyc_PunishmentInfo_result.getJSONArray("items");
                    for (int i = 0; i < items.size(); i++) {
                        DynamicObject add = qeugPunishmentinfoentry.addNew();
                        JSONObject o = (JSONObject) items.get(i);
                        String decisionDate = (String) o.get("decisionDate");//处罚日期
                        String punishNumber = (String) o.get("punishNumber");//决定文书号
                        String reason = (String) o.get("punishNumber");//处罚事由/违法行为类型
                        String content = (String) o.get("content");//处罚结果/内容
                        String departmentName = (String) o.get("departmentName");//处罚单位
                        String legalPersonName1 = (String) o.get("legalPersonName");//法定代表人
                        String punishStatus = (String) o.get("punishStatus");//处罚状态
                        String punishName = (String) o.get("punishName");//处罚名称
                        add.set("seq", i);
                        add.set("qeug_decisiondatepun", decisionDate);
                        add.set("qeug_punishnumber", punishNumber);
                        add.set("qeug_punishnumberpun", reason);
                        add.set("qeug_content", content);
                        add.set("qeug_departmentname", departmentName);
                        add.set("qeug_legalpersonname", legalPersonName1);
                        add.set("qeug_punishstatus", punishStatus);
                        add.set("qeug_punishname", punishName);
                        SaveServiceHelper.save(new DynamicObject[]{supplier});
                    }
                }
            }


            /**
             * 17.严重违法_846  ?pageSize=20&keyword=武陟县佳翔汽车服务有限公司&pageNum=1
             */
            DynamicObjectCollection qeugIllegalinfoentry = supplier.getDynamicObjectCollection("qeug_illegalinfoentry");
            qeugIllegalinfoentry.clear();
            String tyc_Illegalinfo = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Illegalinfo
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "严重违法_846",type);
            JSONObject tyc_Illegalinfo_results = JSONObject.parseObject(tyc_Illegalinfo);
            if (null != tyc_Illegalinfo_results) {
                JSONObject tyc_Illegalinfo_result = (JSONObject) tyc_Illegalinfo_results.get("result");
                if (null != tyc_Illegalinfo_result) {
                    JSONArray items = tyc_Illegalinfo_result.getJSONArray("items");
                    for (int i = 0; i < items.size(); i++) {
                        DynamicObject add = qeugIllegalinfoentry.addNew();
                        JSONObject o = (JSONObject) items.get(i);
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        String removedate = "";//移除日期
                        Long removeDate = (Long) o.get("removeDate");//移除日期
                        if (null != removeDate) {
                            removedate = sdf.format(new Date(removeDate));
                        }
                        String putReason = (String) o.get("putReason");//列入原因
                        String putDepartment = (String) o.get("putDepartment");//决定列入部门(作出决定机关)
                        String removeDepartment = (String) o.get("removeDepartment");//决定移除部门
                        String removeReason = (String) o.get("removeReason");//移除原因
                        String putDate = (String) o.get("putDate");//列入日期
                        add.set("seq", i);
                        add.set("qeug_removedateil", removedate);
                        add.set("qeug_putreasonil", putReason);
                        add.set("qeug_putdepartment", putDepartment);
                        add.set("qeug_removedepartment", removeDepartment);
                        add.set("qeug_removereasonil", removeReason);
                        add.set("qeug_putdateil", sdf.format(new Date(putDate)));
                        SaveServiceHelper.save(new DynamicObject[]{supplier});
                    }
                }
            }


            /**
             * 18.法律诉讼_1114  ?keyword=北京百度网讯科技有限公司&pageNum=1&pageSize=20
             */
            DynamicObjectCollection qeugLawsuitentry = supplier.getDynamicObjectCollection("qeug_lawsuitentry");
            qeugLawsuitentry.clear();
            String tyc_LawSuit = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_LawSuit
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "法律诉讼_1114",type);
            JSONObject tyc_LawSuit_results = JSONObject.parseObject(tyc_LawSuit);
            if (null != tyc_LawSuit_results) {
                JSONObject tyc_LawSuit_result = (JSONObject) tyc_LawSuit_results.get("result");
                if (null != tyc_LawSuit_result) {
                    JSONArray items = tyc_LawSuit_result.getJSONArray("items");
                    for (int i = 0; i < items.size(); i++) {
                        DynamicObject add = qeugLawsuitentry.addNew();
                        JSONObject o = (JSONObject) items.get(i);
                        String docType = (String) o.get("docType");//文书类型
                        String title = (String) o.get("title");//案件名称
                        String court = (String) o.get("court");//审理法院
                        String judgeTime = (String) o.get("judgeTime");//裁判日期
                        String caseNo = (String) o.get("caseNo");//案号
                        String caseType = (String) o.get("caseType");//案件类型
                        String caseReason = (String) o.get("caseReason");//案由
                        add.set("seq", i);
                        add.set("qeug_doctype", docType);
                        add.set("qeug_title", title);
                        add.set("qeug_court", court);
                        add.set("qeug_judgetime", judgeTime);
                        add.set("qeug_caseno", caseNo);
                        add.set("qeug_casetype", caseType);
                        add.set("qeug_casereason", caseReason);
                        SaveServiceHelper.save(new DynamicObject[]{supplier});
                    }
                }
            }


            /**
             * 19.失信人_843  ?keyword=恩施鑫地源农业开发有限公司&pageNum=1&pageSize=1
             */
            DynamicObjectCollection qeugJrDishonestentry = supplier.getDynamicObjectCollection("qeug_jr_dishonestentry");
            qeugJrDishonestentry.clear();
            String tyc_Jr_Dishonest = TycUtils.executeGet(TycUtils.tyc_Token, TycUtils.tyc_Jr_Dishonest
                    + "?keyword=" + tyc_Test_keyword, tyc_Test_keyword, "失信人_843",type);
            JSONObject tyc_Jr_Dishonest_results = JSONObject.parseObject(tyc_Jr_Dishonest);
            if (null != tyc_Jr_Dishonest_results) {
                JSONObject tyc_Jr_Dishonest_result = (JSONObject) tyc_Jr_Dishonest_results.get("result");
                if (null != tyc_Jr_Dishonest_result) {
                    JSONArray items = tyc_Jr_Dishonest_result.getJSONArray("items");
                    for (int i = 0; i < items.size(); i++) {
                        DynamicObject add = qeugJrDishonestentry.addNew();
                        JSONObject o = (JSONObject) items.get(i);
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        String iname = (String) o.get("iname");//失信人名称
                        String disrupttypename = (String) o.get("disrupttypename");//失信被执行人行为具体情形
                        String casecode = (String) o.get("casecode");//案号
                        String performance = (String) o.get("performance");//履行情况
                        String regDate = "";//立案日期
                        Long regdate = (Long) o.get("regdate");//立案时间
                        if (null != regdate) {
                            regDate = sdf.format(new Date(regdate));
                        }
                        String publishDate = "";//发布日期
                        Long publishdate = (Long) o.get("publishdate");//发布时间
                        if (null != publishdate) {
                            publishDate = sdf.format(new Date(publishdate));
                        }
                        String gistunit = (String) o.get("gistunit");//做出执行的依据单位

                        add.set("seq", i);
                        add.set("qeug_iname", iname);
                        add.set("qeug_disrupttypename", disrupttypename);
                        add.set("qeug_casecode", casecode);
                        add.set("qeug_performance", performance);
                        add.set("qeug_regdate", regDate);
                        add.set("qeug_publishdate", publishDate);
                        add.set("qeug_gistunit", gistunit);
                        SaveServiceHelper.save(new DynamicObject[]{supplier});
                    }
                }
            }
            //todo 判断是潜在还是正式
            if (type == 1) {
                supplier.set("qeug_istyccheck",true);//是否查询天眼查(正式供应商)
                SaveServiceHelper.save(new DynamicObject[]{supplier});
            }
        } catch (Exception ex) {
            String logType = (type == 1) ? "正式" : "潜在";
            DobeDWUtils.saveLog(tyc_Test_keyword + "_" + logType,
                    "天眼查", tyc_Test_keyword, ex.getMessage() + "\n" +
                            ex.getStackTrace()[0].getClassName() + "\n" +
                            ex.getStackTrace()[0].getMethodName() + "\n" +
                            ex.getStackTrace()[0].getLineNumber(),
                    false, "query_tyc");
        }
    }

    /**
     * 比对天眼查数据
     * @param supplier 潜在供应商/正式供应商
     */
    public static void showPreaudits(DynamicObject supplier) {

//        DynamicObject resm_regsupplier = BusinessDataServiceHelper.loadSingle(pkValue, "resm_regsupplier");

        if (supplier != null) {
            DynamicObjectCollection qeug_infocheckentry = supplier.getDynamicObjectCollection("qeug_infocheckentry");
            qeug_infocheckentry.clear();

            DynamicObject[] qeugTycInfochecks = BusinessDataServiceHelper.load("qeug_tyc_infocheck", "number,name,qeug_apifields", null);

            SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");

            for (int i = 0; i < qeugTycInfochecks.length; i++) {
                DynamicObject qeugTycInfocheck = qeugTycInfochecks[i];
                DynamicObject add = qeug_infocheckentry.addNew();
                add.set("seq", i);
                add.set("qeug_bsfield", qeugTycInfocheck.getString("number")); // 核对字段标识
                add.set("qeug_bsfieldname", qeugTycInfocheck.getString("name")); // 核对项目名称
                add.set("qeug_bsinput", getBsInput(supplier, qeugTycInfocheck.getString("number"), sd)); // 录入内容
                String qeugApifields = qeugTycInfocheck.getString("qeug_apifields"); // 接口字段标识
                add.set("qeug_apifield", qeugApifields); // 接口字段标识
                add.set("qeug_queryresult", getQueryResult(supplier, qeugApifields, sd)); // 接口查询结果

                // 判断是否匹配
                String bsinput = add.getString("qeug_bsinput");
                String queryresult = add.getString("qeug_queryresult");
                add.set("qeug_issame", bsinput.equals(queryresult) ? "1" : "0"); // 0: 不匹配 1: 匹配
            }

            SaveServiceHelper.save(new DynamicObject[]{supplier});
        }
    }

    // 获取录入内容
    public static String getBsInput(DynamicObject resm_regsupplier, String number, SimpleDateFormat sd) {
        Object obj = resm_regsupplier.get(number);
        return formatFieldValue(obj, sd);
    }

    // 获取查询结果
    public static String getQueryResult(DynamicObject resm_regsupplier, String qeugApifields, SimpleDateFormat sd) {
        Object obj = resm_regsupplier.get(qeugApifields);
        return formatFieldValue(obj, sd);
    }

    // 格式化字段值
    public static String formatFieldValue(Object obj, SimpleDateFormat sd) {
        if (obj instanceof Date) {
            return sd.format((Date) obj);
        } else if (obj instanceof String) {
            return (String) obj;
        } else if (obj instanceof Long) {
            return sd.format(new Date((Long) obj));
        }else if(obj instanceof OrmLocaleValue) {
            OrmLocaleValue o = (OrmLocaleValue) obj;
            return (String)o.get("zh_CN");
        }
        return ""; // 返回空字符串表示无效值
    }

    public static String convertTimestampToDate(long timestamp) {
        Date date = new Date(timestamp);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }

    public static Map<String, String> getProvinceMap() {
        // 省份代码
        Map<String, String> map = new HashMap<>();
        map.put("gj","国家");map.put("sh", "上海");map.put("bj", "北京");map.put("tj", "天津");map.put("gd", "广东");
        map.put("zj", "浙江");map.put("fj", "福建");map.put("han", "海南");map.put("cq", "重庆");map.put("js", "江苏");
        map.put("heb", "河北");map.put("sc", "四川");map.put("hen", "河南");map.put("ah", "安徽");map.put("snx", "陕西");
        map.put("sd", "山东");map.put("nx", "宁夏");map.put("gz", "贵州");map.put("jx", "江西");map.put("gx", "广西");
        map.put("sx", "山西");map.put("xj", "新疆");map.put("hub", "湖北");map.put("ln", "辽宁");map.put("nmg", "内蒙古");
        map.put("jl", "吉林");map.put("qh", "青海");map.put("xz", "西藏");map.put("yn", "云南");map.put("gs", "甘肃");
        map.put("hlj", "黑龙江");map.put("hun", "湖南");map.put("hk", "香港");
        return map;
    }

    public static String getProvinceName(String code) {
        Map<String, String> map = getProvinceMap();
        if (map.containsKey(code)) {
            return map.get(code);
        }

        return null;
    }
}