buli
2022-05-13 2f4492ee18f90274582fcc2bb06f5e9bf64136e8
force-app/main/default/classes/NFMUtil.cls
@@ -7,183 +7,46 @@
    public static Integer MaxLogColumnLength = 131072;
    public static String DummyAssetProfix = '不可用:';
    public static String Authorization = 'Basic T0NNX1NGX1VTRVI6b2Ntc2ZkYzg0MDI=';
    public static final String CBPR_Auth_AWS = 'APPCODE60144b374d314ec2984182046e4ad5fb';
    public static final String APP_KEY = '47b829e07dc9512b871a677b383fb716';
    // public static final String AWS_DOMAIN = 'http://jzbase.bqbot.com:29990';
    public static String AWS_DOMAIN = '';
    public static String CLIENT_CERT_NAME = null;
    public static String NFM001_ENDPOINT = null;
    public static String NFM007_ENDPOINT = null;
    public static String NFM008_ENDPOINT = null;
    public static String NFM103_ENDPOINT = null;
    public static String NFM106_ENDPOINT = null;
    //update NFMUtil的NFM401的网站地址修改为使用FQDN。不是IP地址。
    // public static String NFM401_ENDPOINT = 'http://161.189.3.104:8088/dojtest/dojInfo/recevie';
    public static String NFM401_ENDPOINT = null;
    // public static String NFM401_ENDPOINT = 'http://192.168.0.173:8088/dojtest/dojInfo/recevie';
    //---------- insert by rentongxiao 2020-08-19
    public static String NFM402_ENDPOINT = null;
    //---------- insert by rentongxiao 2020-08-19
    public static String NFM501_ENDPOINT = null;
    public static String NFM502_ENDPOINT = null;
    //fxk 2021/9/6 Satr
    public static String NFM504_ENDPOINT = null;
    //fxk 2021/9/6 end
    // public static String NFM401_ENDPOINT = 'http://161.189.87.140:8082/doj/dojInfo/recevie';
    // LHJ 20180824 CBPR Start
    //public static String CBPR_Auth_Sap = 'Basic U0ZEQ19XU1VTRVI6cG9kMTIzNDU=';
    public static String SBG001_ENDPOINT = null;
    public static String SBG007_ENDPOINT = null;
    public static String SBG027_ENDPOINT = null;
    public static String CBPR_Auth_Sap = null;
    public static String CBPR_Auth_Spo = null;
    public static String QLM_NFM501_Point = 'application/x-www-form-urlencoded';
    public static String QLM_Token = null;
    //public static String CBPR_Auth_Spo = 'http://cbpr.chinacloudsites.cn/sfdc/token';
    //public static String CBPR_Auth_Spo = 'http://cbprproduct.chinacloudsites.cn/sfdc/token1';
    public static String CBPR_UserName_Spo = 'int1@olympus.partner.onmschina.cn';
    public static String CBPR_Password_Spo = 'Rog618571108';
    public static String appKey = '070f00bf-64f1-4720-a8d8-bbe1aa976d22';
    public static String appSecret = '67BB2BAFC8AA0BA0CABB37CBF50EC292';
    public static String NFM009_ENDPOINT = null;
    public static String NFM201_ENDPOINT = null;
    public static String NFM202_ENDPOINT = null;
    public static String NFM207_ENDPOINT = null;
    // LHJ 20180824 CBPR End
    // 智慧医疗&服务新系统通信 LY 20210916 Star
    public static String NFM621_ENDPOINT = null;
    // 智慧医疗&服务新系统通信 LY 20210916 End
    // 智慧医疗&服务新系统通信 客户接口
    public static String NFM601_ENDPOINT = null;
    // 智慧医疗&服务新系统通信 联系人接口
    public static String NFM606_ENDPOINT = null;
    // 智慧医疗&服务新系统通信 学会・活动接口
    public static String NFM622_ENDPOINT = null;
    public static String NFM701_ENDPOINT = null;
    public static String NFM702_ENDPOINT = null;
    public static String NFM703_ENDPOINT = null;
    public static String NFM115_ENDPOINT = null;
    public static String NFM112_ENDPOINT = null;
    public static String requestURILMS = null;
    public static String appSecretLMS = null;
    public static String appKeyLMS = null;
    static {
        if (isSandbox()) {
            CLIENT_CERT_NAME = 'owdc_test';
            NFM001_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM001';
            // NFM007_ENDPOINT = 'https://owdc-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_T&receiverParty=&receiverService=&interface=NFM007_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM007';
            //NFM007_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/NFM007';
            NFM007_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM007';
            NFM008_ENDPOINT = 'https://owdc-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_T&receiverParty=&receiverService=&interface=NFM008_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM008';
            NFM103_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/NFM103';
            // NFM106_ENDPOINT = 'https://owdc-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_T&receiverParty=&receiverService=&interface=NFM106_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM106';
            NFM106_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/NFM106';
            //NFM106_ENDPOINT = 'https://sfdc-ocm-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_T&receiverParty=&receiverService=&interface=NFM106_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM106';
            // LHJ 20180824 CBPR Start
            //NFM009_ENDPOINT = 'http://58.246.66.49:8088/RESTAdapter/SFDC002/';
            //NFM009_ENDPOINT = 'https://wstest.olympus.com.cn/RESTAdapter/SFDC002/';
            //NFM009_ENDPOINT = 'https://wdp.olympus.com.cn/RESTAdapter/SFDC002/';
            NFM009_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/SFDC002/';
            //NFM201_ENDPOINT = 'http://cbpr.chinacloudsites.cn/sfdc/Hospital';
            //NFM202_ENDPOINT = 'http://cbpr.chinacloudsites.cn/sfdc/Inquiry';
            //NFM207_ENDPOINT = 'http://cbpr.chinacloudsites.cn/sfdc/QIS';
            //NFM201_ENDPOINT = 'http://cbprproduct.chinacloudsites.cn/sfdc/Hospital';
            //NFM202_ENDPOINT = 'http://cbprproduct.chinacloudsites.cn/sfdc/Inquiry';
            //NFM207_ENDPOINT = 'http://cbprproduct.chinacloudsites.cn/sfdc/QIS';
            NFM201_ENDPOINT = 'http://cbpr.olympuschina.com/sfdc/Hospital';
            NFM202_ENDPOINT = 'http://cbpr.olympuschina.com/sfdc/Inquiry';
            NFM207_ENDPOINT = 'http://cbpr.olympuschina.com/sfdc/QIS';
            NFM401_ENDPOINT = 'http://ec2-161-189-3-104.cn-northwest-1.compute.amazonaws.com.cn:8088/dojtest/dojInfo/recevie';
            NFM402_ENDPOINT = 'http://ec2-161-189-3-104.cn-northwest-1.compute.amazonaws.com.cn:8088/dojtest/dojInfo/getDojInfoByRefNo';
            NFM501_ENDPOINT = 'http://cusdata.qianlima.com/v1/info/page/';
            NFM502_ENDPOINT = 'http://cusdata.qianlima.com/v1/info/detailHtml?url=';
            NFM504_ENDPOINT = 'http://cusdata.qianlima.com/v1/customer/albs/feedback';
            System.debug('sandbox');
            CBPR_Auth_Sap = 'Basic U0ZEQ19XU1VTRVI6cG9xMTIzNDU=';
            // LHJ 20180824 CBPR End
            //CBPR_Auth_Spo = 'http://cbpr.chinacloudsites.cn/sfdc/token';
            CBPR_Auth_Spo = 'http://cbpr.olympuschina.com/sfdc/token';
            QLM_Token = 'http://cusdata.qianlima.com/v1/token';
            CLIENT_CERT_NAME = 'owdc_test';
            // SBG001_ENDPOINT = 'https://owdc-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCN_SFDC_T&receiverParty=&receiverService=&interface=SBG001_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FSBG001';
            //SBG007_ENDPOINT = 'https://owdc-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCN_SFDC_T&receiverParty=&receiverService=&interface=SBG007_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FSBG007';
            //SBG027_ENDPOINT = 'https://owdc-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCN_SFDC_T&receiverParty=&receiverService=&interface=SBG027_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FSBG027';
            //SBG027_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/SBG027';
            // SBG027_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/SBG027';
            // SBG001_ENDPOINT = 'http://wdp.olympus.com.cn:44301/RESTAdapter/SBG001';
            //SBG001_ENDPOINT = 'https://owdc-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCN_SFDC_T&receiverParty=&receiverService=&interface=SBG001_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FSBG001';
            SBG001_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/SBG001';
            //SBG007_ENDPOINT = 'https://owdc-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCN_SFDC_T&receiverParty=&receiverService=&interface=SBG007_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FSBG007';
            SBG007_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/SBG007';
            //SBG027_ENDPOINT = 'https://owdc-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCN_SFDC_T&receiverParty=&receiverService=&interface=SBG027_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FSBG027';
            //SBG027_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/SBG027';
            SBG027_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/SBG027';
            
            // 智慧医疗&服务新系统通信 客户接口
            NFM601_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM601';
            // 智慧医疗&服务新系统通信 联系人接口
            NFM606_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM606';
            // 智慧医疗&服务新系统通信 用户接口
            NFM621_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM621';
            NFM622_ENDPOINT = 'http://test-platform.olympuschina.com/prod-api/api/sso/sfdc_activitydata';
            NFM701_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM701';
            NFM702_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM702';
            NFM703_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM703';
            NFM112_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/NFM112';
            NFM115_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM115';
            // 新服务系统 测试环境
            AWS_DOMAIN = 'https://olympus.bqbot.com';
            // 新服务系统 本地环境(临时)
            // AWS_DOMAIN = 'http://114.249.236.98:29990';
            // AWS_DOMAIN = 'http://jzbase.bqbot.com:29990';
            // AWS_DOMAIN = 'http://114.249.238.243:29990';
            requestURILMS = '/v1/uc/user/syncOlympusUnit';
            appSecretLMS = 'CAE1D68BE3EB4F7AB5FE97EBDD11B83E';
            appKeyLMS = '39111FC57691491190C1D137A1EE3962';
        } else {
            CLIENT_CERT_NAME = 'sfdc_ocm';
            NFM001_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM001';
            //NFM007_ENDPOINT = 'https://owdc.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_P&receiverParty=&receiverService=&interface=NFM007_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM007';
            NFM007_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM007';
            NFM008_ENDPOINT = 'https://owdc.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_P&receiverParty=&receiverService=&interface=NFM008_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM008';
            //NFM103_ENDPOINT = 'https://owdc.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_P&receiverParty=&receiverService=&interface=NFM103_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM103';
            NFM103_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM103';
            //NFM106_ENDPOINT = 'https://owdc.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_P&receiverParty=&receiverService=&interface=NFM106_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM106';
            NFM106_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM106';
            // LHJ 20180824 CBPR Start
            NFM009_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/SFDC002/';
            //NFM201_ENDPOINT = 'http://cbprproduct.chinacloudsites.cn/sfdc/Hospital';
            //NFM202_ENDPOINT = 'http://cbprproduct.chinacloudsites.cn/sfdc/Inquiry';
            //NFM207_ENDPOINT = 'http://cbprproduct.chinacloudsites.cn/sfdc/QIS';
            NFM201_ENDPOINT = 'http://cbprproduct.olympuschina.com/sfdc/Hospital';
            NFM202_ENDPOINT = 'http://cbprproduct.olympuschina.com/sfdc/Inquiry';
            NFM207_ENDPOINT = 'http://cbprproduct.olympuschina.com/sfdc/QIS';
            NFM401_ENDPOINT = 'http://ec2-161-189-3-104.cn-northwest-1.compute.amazonaws.com.cn:8082/doj/dojInfo/recevie';
            NFM402_ENDPOINT = 'http://ec2-161-189-3-104.cn-northwest-1.compute.amazonaws.com.cn:8082/doj/dojInfo/getDojInfoByRefNo';
            NFM501_ENDPOINT = 'http://cusdata.qianlima.com/v1/info/page/';
            NFM502_ENDPOINT = 'http://cusdata.qianlima.com/v1/info/detailHtml?url=';
            NFM504_ENDPOINT = 'http://cusdata.qianlima.com/v1/customer/albs/feedback';
            CBPR_Auth_Sap = 'Basic U0ZEQ19XU1VTRVI6cG9wMTIzNDU=';
            //CBPR_Auth_Spo = 'http://cbprproduct.chinacloudsites.cn/sfdc/token';
            CBPR_Auth_Spo = 'http://cbprproduct.olympuschina.com/sfdc/token';
            // LHJ 20180824 CBPR End
            QLM_Token = 'http://cusdata.qianlima.com/v1/token';
            // 智慧医疗&服务新系统通信 客户接口
            NFM601_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM601';
            // 智慧医疗&服务新系统通信 联系人接口
            NFM606_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM606';
            // 智慧医疗&服务新系统通信 用户接口
            NFM621_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM621';
            NFM622_ENDPOINT = 'https://api-platform.olympuschina.com/prod-api/api/sso/sfdc_activitydata';
            // 新服务系统
            AWS_DOMAIN = 'https://svc-elb.olympuschina.com';
            requestURILMS = '/v1/uc/user/syncOlympusUnit';
            appSecretLMS = '569117ED8E574BF3A6E4247C1AF8118A';
            appKeyLMS = 'B70889DEF6E647EC8A542E3C46925F93';
            System.debug('production');
            CLIENT_CERT_NAME = 'sfdc_ocn';
            //SBG001_ENDPOINT = 'https://owdc.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCN_SFDC_P&receiverParty=&receiverService=&interface=SBG001_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FSBG001';
            SBG001_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/SBG001';
            //SBG007_ENDPOINT = 'https://owdc.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCN_SFDC_P&receiverParty=&receiverService=&interface=SBG007_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FSBG007';
            SBG007_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/SBG007';
            //SBG027_ENDPOINT = 'https://owdc.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCN_SFDC_P&receiverParty=&receiverService=&interface=SBG027_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FSBG027';
            SBG027_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/SBG027';
        }
    }
    // 受信用
    global class Monitoring {
        webservice String Tag;
@@ -194,36 +57,6 @@
        webservice String NumberOfRecord;
        webservice String TransmissionDateTime;
        webservice String Text;
    }
    // NFM622使用
    global class MonitoringToOnline {
        webservice String Tag;
        webservice String Sender;
        webservice String Receiver;
        webservice String MessageType;
        webservice String MessageGroupNumber;
        webservice String NumberOfRecord;
        webservice String TransmissionDateTime;
        webservice String Text;
        webservice String username;
        webservice String password;
    }
    // NFM601、NFM606、NFM621使用
    global class MonitoringToComPlat {
        webservice String Tag;
        webservice String Sender;
        webservice String Receiver;
        webservice String MessageType;
        webservice String MessageGroupNumber;
        webservice String NumberOfRecord;
        webservice String TransmissionDateTime;
        webservice String Text;
        webservice String API_RANDOM_STR;
        webservice String API_TIME;
        webservice String API_TOKEN;
        webservice String sign;
        webservice String timestamp;
        webservice String appKey;
    }
    /**
@@ -244,161 +77,18 @@
        return rtn;
    }
    /**
     * @return yyyyMMdd の日付文字列
     */
    public static String formatDate2StrDateTime(Date dt) {
        String rtn = null;
        if (dt == null) {
            return rtn;
        }
        rtn = String.valueOf(dt);
        rtn = rtn.replaceAll('-', '');
        if (rtn >= '40001231') {
            rtn = '99991231';
        } else if (rtn < '19000101') {
            rtn = '19000101';
        }
        return rtn + '000000';
    }
    /**
     * [formatDate2StrDateNewTime description]
     * @param  dt [日期]
     * @return    [description]
     * 拼接日期/时间,参数日期(年月日)+ 当前时间(时分秒)
     */
    public static String formatDate2StrDateNewTime(Date dt) {
        String rtn = null;
        if (dt == null) {
            return rtn;
        }
        rtn = String.valueOf(dt);
        rtn = rtn.replaceAll('-', '');
        if (rtn >= '40001231') {
            rtn = '99991231';
        } else if (rtn < '19000101') {
            rtn = '19000101';
        }
        String phourMinuteSecond = String.valueOf(DateTime.now());
        if(phourMinuteSecond.length() >= 19){
            phourMinuteSecond = phourMinuteSecond.subString(10,19).replaceall(':', '');
        }
        return rtn + phourMinuteSecond;
    }
    /**
     * @return yyyyMMddHHmmss の日付文字列
     */
    public static String formatDateTime2Str(Datetime dt) {
        String rtn = null;
        if (dt == null) {
            return rtn;
        }
        rtn = String.valueOf(dt);
        rtn = rtn.replaceAll('-', '').replaceall(' ', '').replaceall(':', '');
        if (rtn >= '40001231000000') {
            rtn = '99991231000000';
        } else if (rtn < '19000101000000') {
            rtn = '19000101000000';
        }
        return rtn;
    }
    // LHJ Start
    /**
     * @return yyyyMMdd の日付文字列
     */
    public static String formatDate2StrSpo(Date dt) {
        String rtn = null;
        if (dt == null) {
            rtn = '2999-12-31';
        } else {
            rtn = String.valueOf(dt);
        }
        return rtn;
    }
    // LHJ Start
    /**
     * @return yyyy/MM/dd の日付文字列
     */
    public static String formatDateTime2StrSprit(DateTime dt) {
        String rtn = null;
        if (dt == null) {
            rtn = '';
        } else {
            String pDate = formatDateTime2Str(dt);
            rtn = Integer.valueOf(pDate.substring(0, 4)) + '/' +
                Integer.valueOf(pDate.substring(4, 6)) + '/' +
                Integer.valueOf(pDate.substring(6, 8));
        }
        return rtn;
    }
    /**
     * add       wangweipeng       2022/02/11
     * [formatDateTime2StrDateTime description]
     * @param  dt [日期/时间]
     * @return    [字符串]
     *
     * 此方法用于新建数据时,把 日期/时间 转换成字符串类型,并把 秒 去掉
     */
    public static String formatDateTime2StrDateTime(DateTime dt){
        String rtn = null;
        if (dt == null) {
            return rtn;
        }
        rtn = String.valueOf(dt);
        rtn = rtn.replaceAll('-', '/');
        if (rtn >= '40001231000000') {
            rtn = '99991231000000';
        } else if (rtn < '19000101000000') {
            rtn = '19000101000000';
        }
        //去掉 秒
        rtn = rtn.substring(0,rtn.length()-3);
        return rtn;
    }
    // LHJ End
    public static Date parseStr2DateTimeDate(String pDateTime) {
        if (pDateTime == null || pDateTime.length() != 14) {
            return null;
        }
        return parseStr2Date(pDateTime.substring(0, 8));
    }
    /**
     * add    wangweipeng           2022/02/15
     * [parseStr2DateTime description]
     * @param  pDate [日期(不包括时间)]
     * @return           [description]
     *
     * 拼接日期/时间,其中日期为真实日期,时间为当前时间
     */
    public static Datetime parseStr3DateTime(String pDate) {
        if (String.isBlank(pDate)) {
            return null;
        }
        String phourMinuteSecond = String.valueOf(DateTime.now());
        if(phourMinuteSecond.length() >= 19){
            phourMinuteSecond = phourMinuteSecond.subString(10,19).replaceall(':', '');
        }
        return parseStr2DateTime(pDate.substring(0, 8), phourMinuteSecond);
    }
    public static Datetime parseStr2DateTime(String pDateTime) {
        if (pDateTime == null || pDateTime.length() != 14) {
            return null;
        }
        return parseStr2DateTime(pDateTime.substring(0, 8), pDateTime.substring(8, 14));
    }
    public static Datetime parseStr2DateTime(String pDate, String pTime) {
        Datetime rtn = null;
        try {
@@ -413,12 +103,12 @@
                return null;
            }
            rtn = Datetime.newinstance(
                Integer.valueOf(pDate.substring(0, 4)),
                Integer.valueOf(pDate.substring(4, 6)),
                Integer.valueOf(pDate.substring(6, 8)),
                Integer.valueOf(pTime.substring(0, 2)),
                Integer.valueOf(pTime.substring(2, 4)),
                Integer.valueOf(pTime.substring(4, 6))
                    Integer.valueOf(pDate.substring(0, 4)),
                    Integer.valueOf(pDate.substring(4, 6)),
                    Integer.valueOf(pDate.substring(6, 8)),
                    Integer.valueOf(pTime.substring(0, 2)),
                    Integer.valueOf(pTime.substring(2, 4)),
                    Integer.valueOf(pTime.substring(4, 6))
            );
        } catch (Exception ex) {
            System.debug(Logginglevel.ERROR, 'NFMUtil#parseStr2DateTime(' + pDate + ', ' + pTime + ')' + ex.getMessage());
@@ -438,7 +128,7 @@
    public static Date parseStr2Date(String pStr, boolean changeToNull) {
        Date rtn = null;
        try {
            if (pStr == null || pStr.length() != 8 || pStr == '00000000') {
            if (pStr == null || pStr.length() != 8) {
                return rtn;
            } else if (pStr > '40001231') {
                pStr = '40001231';
@@ -449,36 +139,20 @@
                return null;
            }
            rtn = Date.newinstance(
                Integer.valueOf(pStr.substring(0, 4)),
                Integer.valueOf(pStr.substring(4, 6)),
                Integer.valueOf(pStr.substring(6, 8))
                    Integer.valueOf(pStr.substring(0, 4)),
                    Integer.valueOf(pStr.substring(4, 6)),
                    Integer.valueOf(pStr.substring(6, 8))
            );
        } catch (Exception ex) {
            System.debug(Logginglevel.ERROR, 'NFMUtil#parseStr2Date(' + pStr + ')' + ex.getMessage());
        }
        return rtn;
    }
    /**
     * @param pStr         yyyyMMdd の日付文字列
     * @param changeToNull 19000101以下の場合 null に変換するかどうか
     */
    public static Date parseDateTimeStr2Date(String pStr) {
        if (pStr == null || pStr.length() < 8) {
            return null;
        } else {
            pStr = pStr.replace('-', '').replace('/', '');
            String dateStr = pStr.substring(0, 8);
            return parseStr2Date(dateStr, true);
        }
    }
    /**
     * もしkeyがmapに存在しない場合、keyをそのまま戻る
     */
    public static String getMapValue(Map < String, String > transferMap, String col, String key, BatchIF_Log__c iflog) {
    public static String getMapValue(Map<String, String> transferMap, String col, String key, BatchIF_Log__c iflog) {
        String rtn = key;
        if (transferMap == null) {
            return rtn;
@@ -495,58 +169,6 @@
            rtn = key;
        }
        return rtn;
    }
    /**
     * LMS使用(NFM601使用)
     * @return [description]
     */
    public static String getSignMD5(){
        String signText = appSecretLMS + '|' + requestURILMS + '|' + appSecretLMS;
        String signMD5 = EncodingUtil.convertToHex(Crypto.generateDigest('MD5', Blob.valueOf(signText))).toUpperCase();
        String result = signMD5;
        return signMD5;
    }
    public static String randomUUID(Integer length) {
        String result = '';
        for (Integer i = 0; i < length; i++) {
            Integer ran = (Math.random() * 16).intValue();
            if (ran == 10) {
                result += 'A';
            } else if (ran == 11) {
                result += 'B';
            } else if (ran == 12) {
                result += 'C';
            } else if (ran == 13) {
                result += 'D';
            } else if (ran == 14) {
                result += 'E';
            } else if (ran == 15) {
                result += 'F';
            } else {
                result += ran.format();
            }
        }
        return result;
    }
    public static String getToken(String randomstr, long timestamp) {
        if (randomstr == null) {
            randomstr = randomUUID(16);
        }
        System.debug('-------------------randomstr:' + randomstr);
        System.debug('-------------------timestamp:' + timestamp);
        String str = 'appkey=' + APP_KEY + '&timestamp=' + timestamp + '&random_str=' + randomstr + '&key=' + APP_KEY;
        String result = EncodingUtil.convertToHex(Crypto.generateDigest('MD5', Blob.valueOf(str)));
        System.debug('-------------------result:' + result);
        return result;
    }
    /**
@@ -567,10 +189,45 @@
    }
    public static Boolean isSandbox() {
        //return URL.getSalesforceBaseUrl().getHost().left(2).equalsignorecase('cs') || URL.getSalesforceBaseUrl().toExternalForm().CONTAINS('.cs');
        //System.debug(URL.getSalesforceBaseUrl().getHost());
        //return URL.getSalesforceBaseUrl().getHost().left(2).equalsignorecase('cs');
        return [SELECT IsSandbox FROM Organization LIMIT 1].IsSandbox;
    }
     public static void sendToSap(String rowDataStr, String endpoint) {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        HTTPResponse res;
        String resb;
        req.setTimeout(120000);
        req.setEndpoint(endpoint);
        req.setMethod('POST');
        req.setHeader('Authorization', CBPR_Auth_Sap);
        req.setBody(rowDataStr);
        res = http.send(req);
        resb = res.getBody();
    }
    public static String sendToSapRet(String rowDataStr, String endpoint) {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        HTTPResponse res;
        String resb;
        req.setTimeout(120000);
        req.setEndpoint(endpoint);
        req.setMethod('POST');
        req.setHeader('Authorization', CBPR_Auth_Sap);
        req.setBody(rowDataStr);
        res = http.send(req);
        resb = res.getStatus();
        return resb;
    }
    public static BatchIF_Log__c makeRowData(NFMUtil.Monitoring Monitoring, String NFMType, Object NFMData) {
        BatchIF_Log__c rowData = new BatchIF_Log__c();
        rowData.Type__c = NFMType;
@@ -597,44 +254,15 @@
        }
        return rowData;
    }
    // public static BatchIF_Log__c makeRowDataToOnline(NFMUtil.MonitoringToOnline Monitoring, String NFMType, Object NFMData) {
    //     BatchIF_Log__c rowData = new BatchIF_Log__c();
    //     rowData.Type__c = NFMType;
    //     rowData.MessageGroupNumber__c = Monitoring.MessageGroupNumber;
    //     rowData.TransmissionDateTime__c = Monitoring.TransmissionDateTime;
    //     rowData.RowDataFlg__c = true;
    //     rowData.Log__c = '';
    //     rowData.ErrorLog__c = '';
    //     String rowDataStr = JSON.serialize(NFMData);
    //     if (rowDataStr.length() > 0) {
    //         Integer splitIdx = 1;
    //         while (rowDataStr.length() > 0) {
    //             if (splitIdx == 1) {
    //                 rowData.put('Log__c', rowDataStr.substring(0, (rowDataStr.length() > MaxLogColumnLength ? MaxLogColumnLength : rowDataStr.length())));
    //             } else if (splitIdx == 13) {
    //                 rowData.ErrorLog__c = rowDataStr;
    //                 break;
    //             } else {
    //                 rowData.put('Log' + splitIdx + '__c', rowDataStr.substring(0, (rowDataStr.length() > MaxLogColumnLength ? MaxLogColumnLength : rowDataStr.length())));
    //             }
    //             splitIdx++;
    //             rowDataStr = rowDataStr.substring((rowDataStr.length() > MaxLogColumnLength ? MaxLogColumnLength : rowDataStr.length()));
    //         }
    //     }
    //     return rowData;
    // }
    public static BatchIF_Log__c makeRowData(BatchIF_Log__c iflog, String NFMType, Object NFMData) {
        // TransmissionDateTimeの設定
        Datetime nowDT = Datetime.now();
        String nowStr = nowDT.format('yyyyMMddHHmm');
    public static BatchIF_Log__c saveRowData(NFMUtil.Monitoring Monitoring, String NFMType, Object NFMData) {
        BatchIF_Log__c rowData = new BatchIF_Log__c();
        rowData.Type__c = NFMType;
        rowData.MessageGroupNumber__c = iflog.Name;
        rowData.TransmissionDateTime__c = nowStr;
        rowData.MessageGroupNumber__c = Monitoring.MessageGroupNumber;
        rowData.TransmissionDateTime__c = Monitoring.TransmissionDateTime;
        rowData.RowDataFlg__c = true;
        rowData.Log__c = '';
        rowData.ErrorLog__c = '';
        insert rowData;
        String rowDataStr = JSON.serialize(NFMData);
        if (rowDataStr.length() > 0) {
            Integer splitIdx = 1;
@@ -650,15 +278,12 @@
                splitIdx++;
                rowDataStr = rowDataStr.substring((rowDataStr.length() > MaxLogColumnLength ? MaxLogColumnLength : rowDataStr.length()));
            }
            update rowData;
        }
        return rowData;
    }
    public static BatchIF_Log__c saveRowData(NFMUtil.Monitoring Monitoring, String NFMType, Object NFMData) {
        BatchIF_Log__c rowData = makeRowData(Monitoring, NFMType, NFMData);
        insert rowData;
        return rowData;
    }
    public static String getRowDataStr(BatchIF_Log__c rowData) {
        String rowDataStr = rowData.Log__c;
        Integer splitIdx = 2;
@@ -672,853 +297,23 @@
        }
        return rowDataStr;
    }
    //转换表转换后的数据
    public static Map<String,String> BatchIF_Transfer(String object_API_Name) {
    // 20180823 LHJ C-BPR Spo接口认证 Start
    public class Token_Response {
        public String expires_in;
        public String access_token;
    }
    public class AWS_Response {
        public Integer code;
        public String msg;
        public String data;
    }
    public static String sendToSpoRet(String rowDataStr, String endpoint) {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        HTTPResponse res;
        String resb;
        // 获取token
        req.setEndpoint(CBPR_Auth_Spo);
        req.setMethod('POST');
        req.setHeader('grant_type', 'password');
        req.setHeader('username', CBPR_UserName_Spo);
        req.setHeader('password', CBPR_Password_Spo);
        req.setBody('');
        res = http.send(req);
        resb = res.getBody();
        Token_Response tr = (Token_Response) JSON.deserialize(resb, Token_Response.class);
        // 发送接口
        Http http2 = new Http();
        HttpRequest req2 = new HttpRequest();
        HTTPResponse res2;
        String resb2;
        req2.setTimeout(110000);
        req2.setEndpoint(endpoint);
        req2.setMethod('POST');
        req2.setHeader('access_token', tr.access_token);
        req2.setHeader('Content-Type', 'application/json');
        req2.setBody(rowDataStr);
        res2 = http2.send(req2);
        resb2 = res2.getStatus();
        return resb2;
    }
    /*
        send to AWS
    */
    public static String sendToAWS(String rowDataStr, String endpoint) {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        HTTPResponse res;
        String resb;
        system.debug('sendToAWS--->rowDataStr----->'+rowDataStr);
        // List<GeDatas> GeDataList = (List<GeDatas>) JSON.deserialize(rowDataStr, List<GeData>.class);
        req.setTimeout(120000);
        req.setEndpoint(AWS_DOMAIN + endpoint);
        req.setMethod('POST');
        //req.setHeader('Authorization', CBPR_Auth_AWS);
        String randomstr = randomUUID(16);
        long timestamp = DateTime.now().getTime();
        req.setHeader('Content-Type', 'application/json');
        req.setHeader('API-RANDOM-STR', randomstr);
        req.setHeader('API-TIME', timestamp + '');
        req.setHeader('API-TOKEN', getToken(randomstr, timestamp));
        req.setBody(rowDataStr);
        system.debug('req--->'+req);
        //return '';
        res = http.send(req);
        // resb = res.getBody();
        resb = res.getStatus();
        //AWS_Response tr = (AWS_Response) JSON.deserialize(resb, AWS_Response.class);
        return resb;
    }
    public static void sendToSpo(String rowDataStr, String endpoint) {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        HTTPResponse res;
        String resb;
        // 获取token
        req.setEndpoint(CBPR_Auth_Spo);
        req.setMethod('POST');
        req.setHeader('grant_type', 'password');
        req.setHeader('username', CBPR_UserName_Spo);
        req.setHeader('password', CBPR_Password_Spo);
        req.setBody('');
        res = http.send(req);
        resb = res.getBody();
        Token_Response tr = (Token_Response) JSON.deserialize(resb, Token_Response.class);
        // 发送接口
        Http http2 = new Http();
        HttpRequest req2 = new HttpRequest();
        HTTPResponse res2;
        String resb2;
        req2.setTimeout(120000);
        req2.setEndpoint(endpoint);
        req2.setMethod('POST');
        req2.setHeader('access_token', tr.access_token);
        req2.setHeader('Content-Type', 'application/json');
        req2.setBody(rowDataStr);
        res2 = http2.send(req2);
        resb2 = res2.getStatus();
    }
    // 20180823 LHJ C-BPR Sap接口认证 Start
    public static void sendToSap(String rowDataStr, String endpoint) {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        HTTPResponse res;
        String resb;
        req.setTimeout(120000);
        req.setEndpoint(endpoint);
        req.setMethod('POST');
        req.setHeader('Authorization', CBPR_Auth_Sap);
        req.setBody(rowDataStr);
        res = http.send(req);
        resb = res.getBody();
    }
    // 20180823 LHJ C-BPR Sap接口认证 Start
    public static String sendToETQ(String rowDataStr, String endpoint) {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        HTTPResponse res;
        String resb;
        req.setTimeout(120000);
        req.setEndpoint(endpoint);
        req.setMethod('POST');
        req.setHeader('Content-Type', 'application/json');
        req.setBody(rowDataStr);
        res = http.send(req);
        resb = res.getStatus();
        system.debug('resb:' + resb);
        return resb;
    }
    public static String sendToSapRet(String rowDataStr, String endpoint) {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        HTTPResponse res;
        String resb;
        req.setTimeout(120000);
        req.setEndpoint(endpoint);
        req.setMethod('POST');
        req.setHeader('Authorization', CBPR_Auth_Sap);
        req.setBody(rowDataStr);
        res = http.send(req);
        resb = res.getStatus();
        system.debug('resb:' + resb);
        return resb;
    }
    // WLIG-BXQBH6 额外接收reponse 的body start
    public static response sendToSapStatusAndBody(String rowDataStr, String endpoint) {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        HTTPResponse res;
        String resb;
        req.setTimeout(120000);
        req.setEndpoint(endpoint);
        req.setMethod('POST');
        req.setHeader('Authorization', CBPR_Auth_Sap);
        req.setBody(rowDataStr);
        res = http.send(req);
        string ress = res.getStatus();
        resb = res.getBody();
        system.debug('ress:' + ress);
        return new response(ress, resb);
    }
    public class response {
        public string status;
        public string responseBody;
        public response(string status, string responseBody) {
            this.status = status;
            this.responseBody = responseBody;
        Map<String, String> result = new Map<String, String>();
        List<BatchIF_Transfer__c> transferList = [select Table__c,
                                                        Column__c,
                                                        External_value__c,
                                                        Internal_value__c
                                                from BatchIF_Transfer__c
                                                where Dropped_Flag__c = false
                                                and Table__c = :object_API_Name];
        for (BatchIF_Transfer__c t : transferList) {
            result.put(t.Column__c + t.External_value__c, t.Internal_value__c);
        }
    }
    // WLIG-BXQBH6 end
    //---------- insert by rentongxaio   2020-08-19 Start
    public static String getETQData(String rowDataStr, String endpoint) {
        HttpRequest req = new HttpRequest();
        //endPoint 就是请求路径
        req.setEndpoint(endpoint);
        req.setMethod('POST');
        req.setHeader('Content-Type', 'application/json');
        //请求参数
        req.setBody(rowDataStr);
        Http http = new Http();
        HTTPResponse res = http.send(req);
        String responseBody = res.getBody();
        return responseBody;
        return result;
    }
    //---------- insert by rentongxiao 2020-08-19 End
    public static Boolean EscapeSBG001TriggerHandler = false;
    //返回格式: hh:ss:mm
    //insert by rentongxiao 2020-10-12 start
    public static Time parseStr2Time(String timeStr) {
        if (timeStr.length() != 6) {
            return null;
        }
        return Time.newInstance(
            Integer.valueOf(timeStr.substring(0, 2)),
            Integer.valueOf(timeStr.substring(2, 4)),
            Integer.valueOf(timeStr.substring(4, 6)),
            0);
    }
    //insert by rentongxiao 2020-10-12 end
    //千里马
    //接口1,获取token
    public class Body {
        public String msg;
        public String access_token;
        public String code;
    }
    public class Body502 {
        public String msg;
        public String data1;
        public String code;
    }
    public static response receiveToken() {
        //1、 获取token:
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        String content = 'appKey=' + EncodingUtil.urlEncode(appKey, 'UTF-8') +
            '&appSecret=' + EncodingUtil.urlEncode(appSecret, 'UTF-8');
        //请求路径
        req.setEndpoint(QLM_Token);
        req.setHeader('Content-Type', QLM_NFM501_Point);
        req.setMethod('POST');
        //请求参数
        req.setBody(content);
        //两个code分别为:
        //1.http:code和状态
        //2.
        HTTPResponse response = http.send(req);
        string ress = response.getStatus();
        System.debug('response:' + response);
        System.debug('Status:' + ress);
        //`1.http:code和状态
        //如果状态不通过,则为他其状态及token = null返回
        if (string.isBlank(ress) || !ress.replace('o', 'O').replace('k', 'K').equals('OK')) {
            return new response(ress, null);
        }
        String responseBodyToken = response.getBody();
        System.debug('Body:' + responseBodyToken);
        Body BodyToken = (Body) JSON.deserializeStrict(responseBodyToken, Body.class);
        System.debug('======1=====' + BodyToken.code);
        //如果解析时code不为0,则将其错误信息及token = null返回
        if (String.isBlank(BodyToken.code) || !BodyToken.code.equals('0')) {
            System.debug('======12=====' + BodyToken.code);
            return new response(BodyToken.msg, null);
        }
        //正常执行
        String token = BodyToken.access_token;
        return new response(ress, token);
    }
    //接口2,获取接口中的数据   和  接口3,获取页面
    public static response getQLMData(String endpoint, String token) {
        //2、获取招标信息:记得使用1中获取的token
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        req.setHeader('Content-Type', QLM_NFM501_Point);
        req.setHeader('open-authorization', 'Bearer' + token);
        req.setTimeout(120000);
        req.setEndpoint(endpoint);
        req.setMethod('GET');
        HTTPResponse response = http.send(req);
        String ress = response.getStatus();
        System.debug('response:' + response);
        //http:状态和code
        //如果状态不通过 , 则将状态及空的的数据 , 返回
        if (string.isBlank(ress) || !ress.replace('o', 'O').replace('k', 'K').equals('OK')) {
            return new response(ress, null);
        }
        System.debug('=====2======' + response.getBody());
        //正常执行
        return new response(ress, response.getBody());
    }
    //接口3,获取其他附件
    public static response503 getFileData(String token503, String endpoint) {
        //4、获取网页:记得使用1中获取的token,记得EndPoint 使用2中获取的网页
        try {
            Http http503 = new Http();
            HttpRequest req503 = new HttpRequest();
            req503.setHeader('open-authorization', 'Bearer' + token503);
            req503.setTimeout(120000);
            req503.setEndpoint(endpoint);
            req503.setMethod('GET');
            HTTPResponse NFM503response = http503.send(req503);
            System.debug('NFM503response:' + NFM503response);
            System.debug('12345678' + NFM503response.getHeader('Content-Disposition'));
            String ress503 = NFM503response.getStatus();
            if (string.isBlank(ress503) || !ress503.replace('o', 'O').replace('k', 'K').equals('OK')) {
                return new response503(ress503, null, null);
            }
            string str = NFM503response.getHeader('Content-Disposition');
            string fileName = str.replaceall('filename=', '').replaceall('attachment;', '');
            fileName = EncodingUtil.urlDecode(fileName, 'utf-8');
            Blob responseBody503 = NFM503response.getBodyAsBlob();
            System.debug('=====2======' + NFM503response.getBodyAsBlob());
            return new response503(ress503, responseBody503, fileName);
        } catch (Exception ex) {
            return new response503('', Blob.valueOf('文件大小超过12M'), '文件大小超过12M');
        }
    }
    public class response503 {
        public string status;
        public Blob responseBody;
        public String Name;
        public response503(string status, Blob responseBody, String Name) {
            this.status = status;
            this.responseBody = responseBody;
            this.Name = Name;
        }
    }
    //接口4,发送要删除项目的信息Id。。。2021/9/2,逻辑删除新加接口 fxk
    public static String sendTenInfo(String token504, String jsonStr, String endpoint) {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        req.setEndpoint('http://cusdata.qianlima.com/test/v1/customer/albs/feedback');
        req.setHeader('open-authorization', 'Bearer' + token504);
        req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
        req.setMethod('POST');
        req.setBody(jsonStr);
        HTTPResponse response = http.send(req);
        string ress = response.getStatus();
        // if (string.isBlank(ress) || !ress.replace('o', 'O').replace('k', 'K').equals('OK')) {
        //     return new response(ress, null);
        // }
        System.debug('Body ' + response.getBody());
        System.debug('Status ' + response.getStatus());
        System.debug('Status code ' + response.getStatusCode());
        return ress;
    }
    // 最大值为3,用来作为判断错误的条件(重发三次)
    public static Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
    public static void againSendRequest(BatchIF_Log__c iflog, String count, BatchIF_Log__c rowData, String errorStr) {
        //判断rowdata中数据获取成功与否,如果失败重发三次,如果大于三次则手动操作
        System.debug('----====---9-------');
        Integer rowDataStr = Integer.valueOf(rowData.get(count));
        if (rowDataStr == null) {
            rowDataStr = 0;
        }
        if (rowDataStr < batch_retry_max_cnt) {
            rowDataStr++;
            LogAutoSendSchedule.assignOneMinute();
        }
        if (rowDataStr >= batch_retry_max_cnt) {
            iflog.ErrorLog__c += errorStr;
            rowData.ErrorLog__c += errorStr;
        }
        upsert rowData;
        upsert iflog;
        rowData.put(count, rowDataStr);
    }
    //因log存入数据有限,所以防止数据太多
    public static String QLMgetRowDataStr(BatchIF_Log__c rowData) {
        String QLMDataStr = rowData.Log__c;
        Integer splitIdx = 2;
        while (rowData.get('Log' + splitIdx + '__c') != null && String.isBlank('' + rowData.get('Log' + splitIdx + '__c')) == false) {
            QLMDataStr += rowData.get('Log' + splitIdx + '__c');
            splitIdx++;
            if (splitIdx == 13) break;
        }
        return QLMDataStr;
    }
    //创建RowDataFlg类型的日志
    // public static BatchIF_Log__c QLMsaveRowData( String NFMType, Object NFMData) {
    //     BatchIF_Log__c rowData = QLMmakeRowData( NFMType, NFMData);
    //     insert rowData;
    //     return  rowData;
    // }
    public static BatchIF_Log__c QLMmakeRowData(String response, BatchIF_Log__c rowData) {
        rowData.Log__c = '';
        rowData.ErrorLog__c = '';
        String rowDataStr = response;
        Integer MaxLogColumnLength = 131072;
        if (rowDataStr.length() > 0) {
            Integer splitIdx = 1;
            while (rowDataStr.length() > 0) {
                if (splitIdx == 1) {
                    rowData.put('Log__c', rowDataStr.substring(0, (rowDataStr.length() > MaxLogColumnLength ? MaxLogColumnLength : rowDataStr.length())));
                } else if (splitIdx == 13) {
                    rowData.ErrorLog__c = rowDataStr;
                    break;
                } else {
                    rowData.put('Log' + splitIdx + '__c', rowDataStr.substring(0, (rowDataStr.length() > MaxLogColumnLength ? MaxLogColumnLength : rowDataStr.length())));
                }
                splitIdx++;
                rowDataStr = rowDataStr.substring((rowDataStr.length() > MaxLogColumnLength ? MaxLogColumnLength : rowDataStr.length()));
            }
        }
        return rowData;
    }
    public static BatchIF_Log__c LogAutoSend(BatchIF_Log__c rowDataSFDC, Exception ex, String status) {
        Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
        if (rowDataSFDC.retry_cnt__c == null) rowDataSFDC.retry_cnt__c = 0;
        if (rowDataSFDC.retry_cnt__c < batch_retry_max_cnt) {
            rowDataSFDC.retry_cnt__c++;
            LogAutoSendSchedule.assignOneMinute();
        }
        if (rowDataSFDC.retry_cnt__c >= batch_retry_max_cnt) {
            if (ex == null) {
                rowDataSFDC.ErrorLog__c = status + '\n错误次数已经超过自动送信设定的最大次数,请手动送信';
            } else {
                rowDataSFDC.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowDataSFDC.ErrorLog__c + '错误次数已经超过自动送信设定的最大次数,请手动送信';
            }
        }
        return rowDataSFDC;
    }
    // https://oly.ngrok.kunchuangtech.net/api/sso/sfdc_activitydata
    //发送给共通平台 精琢技术 thh 2021-09-22 start
    public static String sendToComPlat(String rowDataStr, String endpoint) {
        Http http = new Http();
        HttpRequest req = new HttpRequest();
        HTTPResponse res;
        String resb;
        req.setTimeout(120000);
        req.setEndpoint(endpoint);
        req.setMethod('POST');
        req.setHeader('Content-Type', 'application/json');
        req.setBody(rowDataStr);
        res = http.send(req);
        resb = res.getStatus();
        system.debug('resb:' + resb);
        return resb;
    }
    //发送给共通平台 精琢技术 thh 2021-09-22 end
    public static Integer ControllerUtil() {
        Integer i = 0;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        return i;
    }
}