public with sharing class NFM511FutureController implements Queueable {

    //先定义
    // public  String txId;
    
    public String rowData_id;
    public NFM511FutureController(String rowData_id) {
        this.rowData_id = rowData_id;
    }

    public static Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);

    public void execute(QueueableContext context /*, String iflog_Id*/ ) {
        //需加一数字变量（如果获取到 html附件，其他附件，在日志中显示数量）
        BatchIF_Log__c rowData = [Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c,
                                         MessageGroupNumber__c, retry_cnt__c
                                  From BatchIF_Log__c 
                                  Where RowDataFlg__c = true 
                                  And Id = : rowData_id
        ];
        //存放报错信息
        BatchIF_Log__c iflog511Future = new BatchIF_Log__c();
        iflog511Future.Type__c = 'NFM511Future';
        iflog511Future.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
        iflog511Future.Log__c = ' ';
        iflog511Future.ErrorLog__c = ' ';
        iflog511Future.RowDataFlg__c = false;
        // iflog511Future.AWS_Transaction_Id__c=rowData.AWS_Transaction_Id__c;
        insert iflog511Future;
        NFM511FutureController.main(rowData.Id, iflog511Future.Id, false);
    }

    @future(callout = true)
    public static void callout(String rowData_id, String iflog_id, boolean Manual_execution511future) {
        NFM511FutureController.main(rowData_id, iflog_id, false);
    }
    
    // @future(callout = true)
    //重发（把从接口获取到的数据存入日志中，再把日志中存入的数据重新JOSN解析一遍）
    public static void main(String rowData_id, String iflog_id, boolean Manual_execution511future) {
        BatchIF_Log__c rowData = [Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c,
                                         Log4__c, Log5__c, Log6__c, Log7__c, Log8__c,
                                         MessageGroupNumber__c, retry_cnt__c
                                  From BatchIF_Log__c
                                  Where Id = : rowData_id
                                ];
        BatchIF_Log__c iflog511Future = [select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, 
                                                Log4__c,Log5__c, Log6__c, Log7__c, Log8__c, 
                                                MessageGroupNumber__c, retry_cnt__c
                                         From BatchIF_Log__c 
                                         Where id = : iflog_id
                                ];
        // 由于检索出来的rowData和iflog为空，则进行一下判断
        iflog511Future.Log__c = iflog511Future.Log__c == null ? '' : iflog511Future.Log__c;
        iflog511Future.ErrorLog__c = iflog511Future.ErrorLog__c == null ? '' : iflog511Future.ErrorLog__c;
        rowData.Log__c = rowData.Log__c == null ? '' : rowData.Log__c;
        rowData.ErrorLog__c = rowData.ErrorLog__c == null ? '' : rowData.ErrorLog__c;
        //20230909
        iflog511Future.Type__c = 'NFM511Future';
        iflog511Future.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
        iflog511Future.RowDataFlg__c = false;
        //20230909
        System.debug('+++++++NFM511+++++++iflog511Future:'+iflog511Future);
        System.debug('+++++++NFM511+++++++rowData:'+rowData);
        // String QLMDataStr = NFMUtil.QLMgetRowDataStr(rowData);
        String QLMDataStr = rowData.Log__c;
        system.debug('+++++++NFM511+++++++QLMDataStr:'+QLMDataStr);
        NFM511controller.AllData getQLMData1 = (NFM511controller.AllData)
        JSON.deserialize(QLMDataStr, NFM511controller.AllData.class);
        system.debug('+++++++NFM511+++++++getQLMData1:'+json.serialize(getQLMData1));
        if (getQLMData1 == null) {
            return;
        }

        Savepoint sp = Database.setSavepoint();

        //覆盖之前的数据（更新成新数据--以下三步）
        //1、for 遍历接口数据，做一个infoId 的list
        
        //2、通过list查招标信息；做一个Map key infoid value 招标信息id
        try {
            // 招标信息
            // Map < string, List < bidInfoFile__c >> createbidInfoFileMap = new map < string, List < bidInfoFile__c >> ();
            // Map < String, List < Tender_information_details__c >> tempList1 = new Map < String, List < Tender_information_details__c >> ();
            // Map < string, Tender_information__c > updateTenderMap = new map < string, Tender_information__c > ();
            // Set < String > TarDetailSet = new Set < String > ();
            
            for (NFM511Controller.ListItem records: getQLMData1.data.records) {
                system.debug('+++++++NFM511+++++++records:'+json.serialize(records));
                // 項目転送のセット
                ZCData__c zc = new ZCData__c();
                // if (String.isBlank(records.bid)) {
                //     iflog511Future.ErrorLog__c += 'Error! [' + records.bid + ']NotExist. This information is skipped.\n';
                //     continue;
                // } else {
                //     zc.bid__c = records.bid;
                // }

                if (!String.isBlank(records.sfdcCode)){
                    zc.sfdcCode__c = records.sfdcCode;
                }

                if (!String.isBlank(records.bid)){
                    zc.bid__c = records.bid;
                }

                if (records.bidQuantity != null){
                    zc.bidQuantity__c = records.bidQuantity;
                }

                if (!String.isBlank(records.city)){
                    zc.city__c = records.city;
                }

                if (!String.isBlank(records.speci)){
                    zc.speci__c = records.speci;
                }

                if (!String.isBlank(records.contractObject)){
                    zc.contractObject__c = records.contractObject;
                }

                if (!String.isBlank(records.title)){
                    zc.title__c = records.title;
                }

                if (records.bidTotalPrice != null){
                    zc.bidTotalPrice__c = records.bidTotalPrice;
                }

                if (!String.isBlank(records.threeClass)){
                    zc.threeClass__c = records.threeClass;
                }

                if (!String.isBlank(records.projectNo)){
                    zc.projectNo__c = records.projectNo;
                }

                if (records.modifyTime != null){
                    zc.modifyTime__c = records.modifyTime;
                }

                if (!String.isBlank(records.province)){
                    zc.province__c = records.province;
                }

                if (!String.isBlank(records.twoClass)){
                    zc.twoClass__c = records.twoClass;
                }

                if (!String.isBlank(records.supplier)){
                    zc.supplier__c = records.supplier;
                }

                if (!String.isBlank(records.brand)){
                    zc.brand__c = records.brand;
                }

                if (records.bidUnitPrice != null){
                    zc.bidUnitPrice__c = records.bidUnitPrice;
                }

                if (records.winningDetailId != null){
                    zc.winningDetailId__c = records.winningDetailId;
                }

                if (records.publishTime != null){
                    zc.publishTime__c = records.publishTime;
                }

                if (records.projectTotalPrice != null){
                    zc.projectTotalPrice__c = records.projectTotalPrice;
                }

                if (!String.isBlank(records.noticeType)){
                    zc.noticeType__c = records.noticeType;
                }

                if (!String.isBlank(records.originalUrl)){
                    zc.originalUrl__c = records.originalUrl;
                }

                if (!String.isBlank(records.url)){
                    zc.url__c = records.url;
                }

                if (!String.isBlank(records.hostIf)){
                    zc.hostIf__c = records.hostIf;
                }

                if (!String.isBlank(records.brandType)){
                    zc.brandType__c = records.brandType;
                }

                if (records.createTime != null){
                    zc.createTime__c = records.createTime;
                }

                if (!String.isBlank(records.tenderee)){
                    zc.tenderee__c = records.tenderee;
                }

                if (!String.isBlank(records.district)){
                    zc.district__c = records.district;
                }

                if (!String.isBlank(records.progress)){
                    zc.progress__c = records.progress;
                }

                if (!String.isBlank(records.fundingSource)){
                    zc.fundingSource__c = records.fundingSource;
                }

                if (!String.isBlank(records.oneClass)){
                    zc.oneClass__c = records.oneClass;
                }
//20240105 lt start 
                if (!String.isBlank(records.projectJudgeId)){
                    zc.project_judge_id__c = records.projectJudgeId;
                }
                //20240105 lt end

                insert zc;
                
                if (System.Test.isRunningTest()) {
                    throw new ControllerUtil.myException('aaa');
                }
            } 
        }catch (Exception ex) {
            // 如果数据获取过程中，有错误（同一游标，如果报错，是他重新获取一遍，如果三次都没能获取到，就发送邮件报错信息，然后手动进行获取）
            Database.rollback(sp);
            System.debug('ex.getlinenumber()------'+ex.getlinenumber());
            System.debug(Logginglevel.ERROR, 'QLMData_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage());
            System.debug(Logginglevel.ERROR, 'QLMData_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString());
            // logstr += '\n' + ex.getMessage();
            iflog511Future.ErrorLog__c ='发生错误行数'+ ex.getlinenumber() + ':' + '511Future抛出异常：' + ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + iflog511Future.ErrorLog__c;
            if (!Manual_execution511future) {
                // NFM511Controller.againSendExceptionRequest(iflog511Future, 'NFM511Future_Count__c', rowData, '511Future抛出异常：' + ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowData.ErrorLog__c + '错误次数已经超过自动收信设定的最大次数，请手动收信');
            }
            //System.debug(ANY o);
        }
        // update rowData;
        System.debug('+++++++5+++++++' + rowData);
        System.debug('+++++++3+++++++' + iflog511Future.Log__c);
        System.debug('+++++++2+++++++' + iflog511Future.ErrorLog__c);
        //如果存入信息超出限制，用省略号代替
        if (iflog511Future.Log__c.length() > 131072) {
            iflog511Future.Log__c = iflog511Future.Log__c.subString(0, 131065) + ' ...';
        }
        if (iflog511Future.ErrorLog__c.length() > 32768) {
            iflog511Future.ErrorLog__c = iflog511Future.ErrorLog__c.subString(0, 32760) + ' ...';
        }
        upsert iflog511Future;
    }
    //add by allen 拆分部署ali生产
    public void testMock(){
        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++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }

}